1{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./jslib/common/src/abstractions/i18n.service.ts","webpack:///./jslib/common/src/abstractions/log.service.ts","webpack:///./jslib/common/src/abstractions/platformUtils.service.ts","webpack:///./jslib/common/src/abstractions/api.service.ts","webpack:///./jslib/common/src/abstractions/user.service.ts","webpack:///./jslib/angular/src/pipes/i18n.pipe.ts","webpack:///./jslib/common/src/abstractions/messaging.service.ts","webpack:///./jslib/angular/src/directives/a11y-title.directive.ts","webpack:///./jslib/angular/src/directives/api-action.directive.ts","webpack:///./jslib/common/src/abstractions/crypto.service.ts","webpack:///./jslib/common/src/abstractions/cipher.service.ts","webpack:///./jslib/angular/src/components/callout.component.ts","webpack:///./jslib/angular/src/components/callout.component.html","webpack:///./jslib/common/src/models/response/baseResponse.ts","webpack:///./jslib/common/src/abstractions/policy.service.ts","webpack:///./jslib/angular/src/services/modal.service.ts","webpack:///./jslib/common/src/misc/utils.ts","webpack:///./jslib/common/src/importers/baseImporter.ts","webpack:///./jslib/common/src/models/domain/importResult.ts","webpack:///./jslib/common/src/abstractions/passwordGeneration.service.ts","webpack:///./jslib/common/src/abstractions/state.service.ts","webpack:///./jslib/angular/src/directives/stop-click.directive.ts","webpack:///./jslib/common/src/abstractions/storage.service.ts","webpack:///./jslib/common/src/enums/cipherType.ts","webpack:///./jslib/common/src/abstractions/sync.service.ts","webpack:///./jslib/common/src/abstractions/passwordReprompt.service.ts","webpack:///./jslib/common/src/abstractions/collection.service.ts","webpack:///./jslib/common/src/abstractions/environment.service.ts","webpack:///./jslib/common/src/abstractions/userVerification.service.ts","webpack:///./jslib/angular/src/directives/input-verbatim.directive.ts","webpack:///./jslib/common/src/abstractions/auth.service.ts","webpack:///./jslib/common/src/abstractions/folder.service.ts","webpack:///./jslib/angular/src/directives/stop-prop.directive.ts","webpack:///./jslib/common/src/abstractions/event.service.ts","webpack:///./jslib/common/src/enums/policyType.ts","webpack:///./jslib/common/src/services/constants.service.ts","webpack:///./jslib/common/src/abstractions/search.service.ts","webpack:///./jslib/angular/src/directives/autofocus.directive.ts","webpack:///./jslib/common/src/abstractions/keyConnector.service.ts","webpack:///./jslib/common/src/models/domain/domainBase.ts","webpack:///./jslib/common/src/models/view/cardView.ts","webpack:///./jslib/angular/src/pipes/user-name.pipe.ts","webpack:///./jslib/common/src/abstractions/vaultTimeout.service.ts","webpack:///./jslib/common/src/models/domain/encString.ts","webpack:///./jslib/common/src/abstractions/cryptoFunction.service.ts","webpack:///./jslib/common/src/abstractions/audit.service.ts","webpack:///./jslib/common/src/models/request/secretVerificationRequest.ts","webpack:///./jslib/common/src/models/view/secureNoteView.ts","webpack:///./jslib/common/src/enums/secureNoteType.ts","webpack:///./jslib/angular/src/components/icon.component.ts","webpack:///./jslib/angular/src/components/icon.component.html","webpack:///./jslib/angular/src/services/broadcaster.service.ts","webpack:///./jslib/common/src/abstractions/token.service.ts","webpack:///./jslib/angular/src/components/avatar.component.ts","webpack:///./jslib/common/src/enums/twoFactorProviderType.ts","webpack:///./jslib/common/src/abstractions/export.service.ts","webpack:///./jslib/common/src/abstractions/totp.service.ts","webpack:///./jslib/common/src/enums/fieldType.ts","webpack:///./jslib/common/src/abstractions/send.service.ts","webpack:///./src/app/organizations/policies/base-policy.component.ts","webpack:///./src/app/settings/payment.component.ts","webpack:///./src/app/settings/payment.component.html","webpack:///./jslib/common/src/models/view/cipherView.ts","webpack:///./jslib/common/src/models/view/identityView.ts","webpack:///./jslib/common/src/models/view/folderView.ts","webpack:///./jslib/angular/src/services/validation.service.ts","webpack:///./jslib/angular/src/components/verify-master-password.component.ts","webpack:///./jslib/angular/src/components/verify-master-password.component.html","webpack:///./src/app/settings/tax-info.component.ts","webpack:///./src/app/settings/tax-info.component.html","webpack:///./jslib/common/src/models/view/loginView.ts","webpack:///./jslib/common/src/models/domain/collection.ts","webpack:///./jslib/common/src/models/view/collectionView.ts","webpack:///./jslib/angular/src/pipes/search.pipe.ts","webpack:///./jslib/common/src/models/data/cipherData.ts","webpack:///./jslib/common/src/enums/cipherRepromptType.ts","webpack:///./jslib/common/src/enums/sendType.ts","webpack:///./jslib/common/src/models/response/errorResponse.ts","webpack:///./src/app/components/password-strength.component.ts","webpack:///./src/app/components/password-strength.component.html","webpack:///./jslib/common/src/models/data/collectionData.ts","webpack:///./jslib/common/src/enums/organizationUserStatusType.ts","webpack:///./src/app/services/event.service.ts","webpack:///./jslib/common/src/enums/eventType.ts","webpack:///./src/app/settings/two-factor-verify.component.ts","webpack:///./src/app/settings/two-factor-verify.component.html","webpack:///./jslib/common/src/models/domain/cipher.ts","webpack:///./jslib/common/src/enums/organizationUserType.ts","webpack:///./jslib/common/src/models/domain/symmetricCryptoKey.ts","webpack:///./src/app/settings/organization-plans.component.ts","webpack:///./src/app/settings/organization-plans.component.html","webpack:///./jslib/common/src/models/request/cipherRequest.ts","webpack:///./src/app/services/policy-list.service.ts","webpack:///./src/app/services/router.service.ts","webpack:///./jslib/common/src/enums/kdfType.ts","webpack:///./jslib/angular/src/components/modal/modal.ref.ts","webpack:///./jslib/common/src/models/api/permissionsApi.ts","webpack:///./jslib/common/src/enums/paymentMethodType.ts","webpack:///./jslib/common/src/enums/planType.ts","webpack:///./src/app/settings/two-factor-base.component.ts","webpack:///./src/app/tools/cipher-report.component.ts","webpack:///./jslib/common/src/models/view/fieldView.ts","webpack:///./src/app/vault/add-edit.component.ts","webpack:///./src/app/vault/add-edit.component.html","webpack:///./jslib/common/src/abstractions/import.service.ts","webpack:///./src/app/vault/ciphers.component.ts","webpack:///./src/app/vault/ciphers.component.html","webpack:///./jslib/common/src/models/domain/organization.ts","webpack:///./jslib/common/src/models/response/policyResponse.ts","webpack:///./src/app/layouts/navbar.component.ts","webpack:///./src/app/layouts/navbar.component.html","webpack:///./src/app/layouts/footer.component.ts","webpack:///./src/app/layouts/footer.component.html","webpack:///./jslib/common/src/models/request/organizationUserResetPasswordEnrollmentRequest.ts","webpack:///./jslib/common/src/enums/hashPurpose.ts","webpack:///./jslib/common/src/models/request/keysRequest.ts","webpack:///./jslib/common/src/models/data/policyData.ts","webpack:///./jslib/angular/src/components/change-password.component.ts","webpack:///./jslib/common/src/models/request/selectionReadOnlyRequest.ts","webpack:///./jslib/common/src/enums/themeType.ts","webpack:///./jslib/common/src/enums/productType.ts","webpack:///./jslib/common/src/models/view/itemView.ts","webpack:///./jslib/common/src/models/view/loginUriView.ts","webpack:///./jslib/common/src/enums/uriMatchType.ts","webpack:///./src/app/vault/add-edit-custom-fields.component.ts","webpack:///./src/app/vault/add-edit-custom-fields.component.html","webpack:///./src/app/vault/groupings.component.ts","webpack:///./src/app/vault/groupings.component.html","webpack:///./jslib/common/src/models/view/sendFileView.ts","webpack:///./jslib/common/src/models/view/sendTextView.ts","webpack:///./src/app/settings/organizations.component.ts","webpack:///./src/app/settings/organizations.component.html","webpack:///./jslib/common/src/models/response/cipherResponse.ts","webpack:///./jslib/common/src/models/response/selectionReadOnlyResponse.ts","webpack:///./jslib/common/src/abstractions/notifications.service.ts","webpack:///./jslib/common/src/abstractions/settings.service.ts","webpack:///./jslib/common/src/enums/encryptionType.ts","webpack:///./jslib/common/src/models/domain/policy.ts","webpack:///./jslib/common/src/services/auth.service.ts","webpack:///./src/app/organizations/manage/entity-users.component.ts","webpack:///./src/app/organizations/manage/entity-users.component.html","webpack:///./jslib/common/src/enums/deviceType.ts","webpack:///./jslib/common/src/models/request/organizationKeysRequest.ts","webpack:///./jslib/common/src/models/request/organizationUserBulkRequest.ts","webpack:///./src/app/organizations/manage/entity-events.component.ts","webpack:///./src/app/organizations/manage/entity-events.component.html","webpack:///./src/app/settings/api-key.component.ts","webpack:///./src/app/settings/api-key.component.html","webpack:///./jslib/common/src/enums/verificationType.ts","webpack:///./src/app/settings/purge-vault.component.ts","webpack:///./src/app/settings/purge-vault.component.html","webpack:///./src/app/organizations/settings/delete-organization.component.ts","webpack:///./src/app/organizations/settings/delete-organization.component.html","webpack:///./src/app/settings/user-billing.component.ts","webpack:///./src/app/settings/user-billing.component.html","webpack:///./src/app/settings/add-credit.component.ts","webpack:///./src/app/settings/add-credit.component.html","webpack:///./src/app/settings/adjust-payment.component.ts","webpack:///./src/app/settings/adjust-payment.component.html","webpack:///./src/app/settings/adjust-storage.component.ts","webpack:///./src/app/settings/adjust-storage.component.html","webpack:///./src/app/settings/update-license.component.ts","webpack:///./src/app/settings/update-license.component.html","webpack:///./src/app/settings/two-factor-duo.component.ts","webpack:///./src/app/settings/two-factor-duo.component.html","webpack:///./src/app/settings/two-factor-setup.component.ts","webpack:///./src/app/settings/two-factor-setup.component.html","webpack:///./src/app/tools/export.component.ts","webpack:///./src/app/tools/export.component.html","webpack:///./src/app/tools/exposed-passwords-report.component.ts","webpack:///./src/app/tools/exposed-passwords-report.component.html","webpack:///./src/app/organizations/vault/add-edit.component.ts","webpack:///./jslib/common/src/enums/linkedIdType.ts","webpack:///./jslib/common/src/misc/linkedFieldOption.decorator.ts","webpack:///./jslib/common/src/models/domain/card.ts","webpack:///./jslib/common/src/models/domain/field.ts","webpack:///./jslib/common/src/models/domain/identity.ts","webpack:///./jslib/common/src/models/domain/login.ts","webpack:///./jslib/common/src/models/domain/loginUri.ts","webpack:///./jslib/common/src/models/view/passwordHistoryView.ts","webpack:///./jslib/common/src/models/domain/secureNote.ts","webpack:///./src/app/tools/import.component.ts","webpack:///./src/app/tools/import.component.html","webpack:///./src/app/tools/inactive-two-factor-report.component.ts","webpack:///./src/app/tools/inactive-two-factor-report.component.html","webpack:///./src/app/tools/reused-passwords-report.component.ts","webpack:///./src/app/tools/reused-passwords-report.component.html","webpack:///./src/app/tools/unsecured-websites-report.component.ts","webpack:///./src/app/tools/unsecured-websites-report.component.html","webpack:///./src/app/tools/weak-passwords-report.component.ts","webpack:///./src/app/tools/weak-passwords-report.component.html","webpack:///./src/app/vault/attachments.component.ts","webpack:///./src/app/vault/attachments.component.html","webpack:///./src/app/organizations/vault/ciphers.component.ts","webpack:///./src/app/vault/collections.component.ts","webpack:///./src/app/vault/collections.component.html","webpack:///./src/app/organizations/vault/groupings.component.ts","webpack:///./src/app/vault/bulk-actions.component.ts","webpack:///./src/app/vault/bulk-actions.component.html","webpack:///./jslib/common/src/models/domain/sendFile.ts","webpack:///./jslib/common/src/models/domain/sendText.ts","webpack:///./jslib/common/src/models/request/cipherWithIdRequest.ts","webpack:///./jslib/common/src/models/request/folderRequest.ts","webpack:///./jslib/common/src/models/api/sendFileApi.ts","webpack:///./jslib/common/src/models/api/sendTextApi.ts","webpack:///./jslib/angular/src/directives/select-copy.directive.ts","webpack:///./jslib/angular/src/pipes/color-password.pipe.ts","webpack:///./jslib/common/src/models/response/profileResponse.ts","webpack:///./jslib/common/src/models/response/sendResponse.ts","webpack:///./$_lazy_route_resource lazy namespace object","webpack:///./src/app/organizations/policies/disable-send.component.ts","webpack:///./src/app/organizations/policies/disable-send.component.html","webpack:///./jslib/common/src/models/domain/masterPasswordPolicyOptions.ts","webpack:///./src/app/organizations/policies/master-password.component.ts","webpack:///./src/app/organizations/policies/master-password.component.html","webpack:///./src/app/organizations/policies/password-generator.component.ts","webpack:///./src/app/organizations/policies/password-generator.component.html","webpack:///./src/app/organizations/policies/personal-ownership.component.ts","webpack:///./src/app/organizations/policies/personal-ownership.component.html","webpack:///./src/app/organizations/policies/require-sso.component.ts","webpack:///./src/app/organizations/policies/require-sso.component.html","webpack:///./src/app/organizations/policies/reset-password.component.ts","webpack:///./src/app/organizations/policies/reset-password.component.html","webpack:///./src/app/organizations/policies/send-options.component.ts","webpack:///./src/app/organizations/policies/send-options.component.html","webpack:///./src/app/organizations/policies/single-org.component.ts","webpack:///./src/app/organizations/policies/single-org.component.html","webpack:///./src/app/organizations/policies/two-factor-authentication.component.ts","webpack:///./src/app/organizations/policies/two-factor-authentication.component.html","webpack:///./src/app/layouts/frontend-layout.component.ts","webpack:///./src/app/layouts/frontend-layout.component.html","webpack:///./src/app/layouts/organization-layout.component.ts","webpack:///./src/app/layouts/organization-layout.component.html","webpack:///./src/app/layouts/user-layout.component.ts","webpack:///./src/app/layouts/user-layout.component.html","webpack:///./src/app/accounts/accept-emergency.component.ts","webpack:///./src/app/accounts/accept-emergency.component.html","webpack:///./src/app/common/base.accept.component.ts","webpack:///./src/app/accounts/accept-organization.component.ts","webpack:///./src/app/accounts/accept-organization.component.html","webpack:///./src/app/accounts/hint.component.ts","webpack:///./src/app/accounts/hint.component.html","webpack:///./src/app/accounts/lock.component.ts","webpack:///./src/app/accounts/lock.component.html","webpack:///./src/app/accounts/login.component.ts","webpack:///./src/app/accounts/login.component.html","webpack:///./jslib/angular/src/components/captchaProtected.component.ts","webpack:///./src/app/accounts/recover-delete.component.ts","webpack:///./src/app/accounts/recover-delete.component.html","webpack:///./src/app/accounts/recover-two-factor.component.ts","webpack:///./src/app/accounts/recover-two-factor.component.html","webpack:///./src/app/accounts/register.component.ts","webpack:///./src/app/accounts/register.component.html","webpack:///./src/app/accounts/remove-password.component.ts","webpack:///./src/app/accounts/remove-password.component.html","webpack:///./src/app/accounts/set-password.component.ts","webpack:///./src/app/accounts/set-password.component.html","webpack:///./src/app/accounts/sso.component.ts","webpack:///./src/app/accounts/sso.component.html","webpack:///./jslib/angular/src/components/sso.component.ts","webpack:///./src/app/accounts/two-factor.component.ts","webpack:///./src/app/accounts/two-factor.component.html","webpack:///./jslib/common/src/models/request/twoFactorEmailRequest.ts","webpack:///./jslib/common/src/models/request/keyConnectorUserKeyRequest.ts","webpack:///./src/app/accounts/two-factor-options.component.ts","webpack:///./src/app/accounts/two-factor-options.component.html","webpack:///./src/app/accounts/update-temp-password.component.ts","webpack:///./src/app/accounts/update-temp-password.component.html","webpack:///./jslib/common/src/models/request/organizationUserResetPasswordRequest.ts","webpack:///./src/app/accounts/verify-email-token.component.ts","webpack:///./src/app/accounts/verify-email-token.component.html","webpack:///./src/app/accounts/verify-recover-delete.component.ts","webpack:///./src/app/accounts/verify-recover-delete.component.html","webpack:///./src/app/organizations/manage/collections.component.ts","webpack:///./src/app/organizations/manage/collections.component.html","webpack:///./src/app/organizations/manage/collection-add-edit.component.ts","webpack:///./src/app/organizations/manage/collection-add-edit.component.html","webpack:///./jslib/common/src/models/request/collectionRequest.ts","webpack:///./src/app/organizations/manage/events.component.ts","webpack:///./src/app/organizations/manage/events.component.html","webpack:///./src/app/organizations/manage/groups.component.ts","webpack:///./src/app/organizations/manage/groups.component.html","webpack:///./src/app/organizations/manage/group-add-edit.component.ts","webpack:///./src/app/organizations/manage/group-add-edit.component.html","webpack:///./src/app/organizations/manage/manage.component.ts","webpack:///./src/app/organizations/manage/manage.component.html","webpack:///./src/app/organizations/manage/people.component.ts","webpack:///./src/app/organizations/manage/people.component.html","webpack:///./src/app/organizations/manage/user-confirm.component.ts","webpack:///./src/app/organizations/manage/user-confirm.component.html","webpack:///./src/app/organizations/manage/bulk/bulk-confirm.component.ts","webpack:///./src/app/organizations/manage/bulk/bulk-confirm.component.html","webpack:///./src/app/organizations/manage/bulk/bulk-remove.component.ts","webpack:///./src/app/organizations/manage/bulk/bulk-remove.component.html","webpack:///./src/app/organizations/manage/bulk/bulk-status.component.ts","webpack:///./src/app/organizations/manage/bulk/bulk-status.component.html","webpack:///./src/app/organizations/manage/reset-password.component.ts","webpack:///./src/app/organizations/manage/reset-password.component.html","webpack:///./src/app/organizations/manage/user-add-edit.component.ts","webpack:///./src/app/organizations/manage/user-add-edit.component.html","webpack:///./src/app/components/nested-checkbox.component.ts","webpack:///./src/app/components/nested-checkbox.component.html","webpack:///./src/app/organizations/manage/user-groups.component.ts","webpack:///./src/app/organizations/manage/user-groups.component.html","webpack:///./src/app/organizations/manage/policies.component.ts","webpack:///./src/app/organizations/manage/policies.component.html","webpack:///./src/app/organizations/manage/policy-edit.component.ts","webpack:///./src/app/organizations/manage/policy-edit.component.html","webpack:///./src/app/organizations/settings/account.component.ts","webpack:///./src/app/organizations/settings/account.component.html","webpack:///./jslib/common/src/models/request/organizationTaxInfoUpdateRequest.ts","webpack:///./jslib/common/src/models/request/taxInfoUpdateRequest.ts","webpack:///./src/app/organizations/settings/organization-billing.component.ts","webpack:///./src/app/organizations/settings/organization-subscription.component.ts","webpack:///./src/app/organizations/settings/organization-subscription.component.html","webpack:///./src/app/organizations/settings/change-plan.component.ts","webpack:///./src/app/organizations/settings/change-plan.component.html","webpack:///./src/app/organizations/settings/adjust-subscription.component.ts","webpack:///./src/app/organizations/settings/adjust-subscription.component.html","webpack:///./src/app/organizations/settings/download-license.component.ts","webpack:///./src/app/organizations/settings/download-license.component.html","webpack:///./src/app/organizations/settings/settings.component.ts","webpack:///./src/app/organizations/settings/settings.component.html","webpack:///./src/app/organizations/settings/two-factor-setup.component.ts","webpack:///./src/app/settings/two-factor-authenticator.component.ts","webpack:///./src/app/settings/two-factor-authenticator.component.html","webpack:///./src/app/settings/two-factor-email.component.ts","webpack:///./src/app/settings/two-factor-email.component.html","webpack:///./src/app/settings/two-factor-recovery.component.ts","webpack:///./src/app/settings/two-factor-recovery.component.html","webpack:///./src/app/settings/two-factor-webauthn.component.ts","webpack:///./src/app/settings/two-factor-webauthn.component.html","webpack:///./src/app/settings/two-factor-yubikey.component.ts","webpack:///./src/app/settings/two-factor-yubikey.component.html","webpack:///./src/app/organizations/sponsorships/families-for-enterprise-setup.component.ts","webpack:///./src/app/organizations/sponsorships/families-for-enterprise-setup.component.html","webpack:///./jslib/common/src/enums/planSponsorshipType.ts","webpack:///./src/app/organizations/tools/export.component.ts","webpack:///./src/app/organizations/tools/exposed-passwords-report.component.ts","webpack:///./jslib/common/src/models/data/attachmentData.ts","webpack:///./jslib/common/src/models/data/cardData.ts","webpack:///./jslib/common/src/models/data/fieldData.ts","webpack:///./jslib/common/src/models/data/identityData.ts","webpack:///./jslib/common/src/models/data/loginData.ts","webpack:///./jslib/common/src/models/data/loginUriData.ts","webpack:///./jslib/common/src/models/data/passwordHistoryData.ts","webpack:///./jslib/common/src/models/data/secureNoteData.ts","webpack:///./jslib/common/src/models/domain/attachment.ts","webpack:///./jslib/common/src/models/domain/password.ts","webpack:///./jslib/common/src/models/request/cipherCreateRequest.ts","webpack:///./jslib/common/src/models/api/cardApi.ts","webpack:///./jslib/common/src/models/api/fieldApi.ts","webpack:///./jslib/common/src/models/api/identityApi.ts","webpack:///./jslib/common/src/models/api/loginApi.ts","webpack:///./jslib/common/src/models/api/loginUriApi.ts","webpack:///./jslib/common/src/models/api/secureNoteApi.ts","webpack:///./jslib/angular/src/directives/true-false-value.directive.ts","webpack:///./jslib/angular/src/directives/fallback-src.directive.ts","webpack:///./src/app/organizations/tools/import.component.ts","webpack:///./src/app/organizations/tools/inactive-two-factor-report.component.ts","webpack:///./src/app/organizations/tools/reused-passwords-report.component.ts","webpack:///./src/app/organizations/tools/tools.component.ts","webpack:///./src/app/organizations/tools/tools.component.html","webpack:///./src/app/organizations/tools/unsecured-websites-report.component.ts","webpack:///./src/app/organizations/tools/weak-passwords-report.component.ts","webpack:///./src/app/organizations/vault/vault.component.ts","webpack:///./src/app/organizations/vault/vault.component.html","webpack:///./src/app/organizations/vault/attachments.component.ts","webpack:///./jslib/angular/src/components/attachments.component.ts","webpack:///./src/app/organizations/vault/collections.component.ts","webpack:///./jslib/common/src/models/request/cipherCollectionsRequest.ts","webpack:///./src/app/vault/bulk-delete.component.ts","webpack:///./src/app/vault/bulk-delete.component.html","webpack:///./jslib/common/src/models/request/cipherBulkDeleteRequest.ts","webpack:///./src/app/vault/bulk-move.component.ts","webpack:///./src/app/vault/bulk-move.component.html","webpack:///./src/app/vault/bulk-restore.component.ts","webpack:///./src/app/vault/bulk-restore.component.html","webpack:///./src/app/vault/bulk-share.component.ts","webpack:///./src/app/vault/bulk-share.component.html","webpack:///./src/app/send/access.component.ts","webpack:///./src/app/send/access.component.html","webpack:///./src/app/send/send.component.ts","webpack:///./src/app/send/send.component.html","webpack:///./src/app/send/add-edit.component.ts","webpack:///./src/app/send/add-edit.component.html","webpack:///./jslib/common/src/models/view/sendView.ts","webpack:///./src/app/send/efflux-dates.component.ts","webpack:///./src/app/send/efflux-dates.component.html","webpack:///./src/app/settings/account.component.ts","webpack:///./src/app/settings/account.component.html","webpack:///./src/app/settings/deauthorize-sessions.component.ts","webpack:///./src/app/settings/deauthorize-sessions.component.html","webpack:///./src/app/settings/delete-account.component.ts","webpack:///./src/app/settings/delete-account.component.html","webpack:///./src/app/settings/profile.component.ts","webpack:///./src/app/settings/profile.component.html","webpack:///./src/app/settings/change-email.component.ts","webpack:///./src/app/settings/change-email.component.html","webpack:///./jslib/common/src/models/request/emailTokenRequest.ts","webpack:///./src/app/settings/change-password.component.ts","webpack:///./src/app/settings/change-password.component.html","webpack:///./jslib/common/src/enums/emergencyAccessStatusType.ts","webpack:///./jslib/common/src/models/request/emergencyAccessUpdateRequest.ts","webpack:///./jslib/common/src/models/request/folderWithIdRequest.ts","webpack:///./jslib/common/src/models/request/passwordRequest.ts","webpack:///./jslib/common/src/models/request/sendRequest.ts","webpack:///./jslib/common/src/models/request/updateKeyRequest.ts","webpack:///./src/app/settings/change-kdf.component.ts","webpack:///./src/app/settings/change-kdf.component.html","webpack:///./src/app/settings/create-organization.component.ts","webpack:///./src/app/settings/create-organization.component.html","webpack:///./src/app/settings/domain-rules.component.ts","webpack:///./src/app/settings/domain-rules.component.html","webpack:///./src/app/settings/options.component.ts","webpack:///./src/app/settings/options.component.html","webpack:///./src/app/settings/vault-timeout-input.component.ts","webpack:///./src/app/settings/vault-timeout-input.component.html","webpack:///./src/app/settings/link-sso.component.ts","webpack:///./src/app/settings/link-sso.component.html","webpack:///./src/app/settings/premium.component.ts","webpack:///./src/app/settings/premium.component.html","webpack:///./src/app/settings/settings.component.ts","webpack:///./src/app/settings/settings.component.html","webpack:///./src/app/settings/user-subscription.component.ts","webpack:///./src/app/settings/user-subscription.component.html","webpack:///./src/app/tools/breach-report.component.ts","webpack:///./src/app/tools/breach-report.component.html","webpack:///./src/app/tools/password-generator.component.ts","webpack:///./src/app/tools/password-generator.component.html","webpack:///./src/app/tools/password-generator-history.component.ts","webpack:///./src/app/tools/password-generator-history.component.html","webpack:///./src/app/tools/tools.component.ts","webpack:///./src/app/tools/tools.component.html","webpack:///./src/app/vault/vault.component.ts","webpack:///./src/app/vault/vault.component.html","webpack:///./src/app/settings/update-key.component.ts","webpack:///./src/app/settings/update-key.component.html","webpack:///./src/app/vault/folder-add-edit.component.ts","webpack:///./src/app/vault/folder-add-edit.component.html","webpack:///./src/app/vault/share.component.ts","webpack:///./src/app/vault/share.component.html","webpack:///./src/app/settings/verify-email.component.ts","webpack:///./src/app/settings/verify-email.component.html","webpack:///./src/app/providers/providers.component.ts","webpack:///./src/app/providers/providers.component.html","webpack:///./src/app/services/organization-guard.service.ts","webpack:///./src/app/services/organization-type-guard.service.ts","webpack:///./jslib/common/src/enums/permissions.ts","webpack:///./jslib/angular/src/services/auth-guard.service.ts","webpack:///./jslib/angular/src/services/lock-guard.service.ts","webpack:///./jslib/angular/src/services/unauth-guard.service.ts","webpack:///./src/app/settings/emergency-access-view.component.ts","webpack:///./src/app/settings/emergency-access-view.component.html","webpack:///./src/app/settings/emergency-access-attachments.component.ts","webpack:///./src/app/settings/emergency-add-edit.component.ts","webpack:///./src/app/settings/emergency-access.component.ts","webpack:///./src/app/settings/emergency-access.component.html","webpack:///./jslib/common/src/enums/emergencyAccessType.ts","webpack:///./jslib/common/src/models/response/emergencyAccessResponse.ts","webpack:///./jslib/common/src/models/response/attachmentResponse.ts","webpack:///./src/app/settings/emergency-access-add-edit.component.ts","webpack:///./src/app/settings/emergency-access-add-edit.component.html","webpack:///./src/app/settings/emergency-access-confirm.component.ts","webpack:///./src/app/settings/emergency-access-confirm.component.html","webpack:///./src/app/settings/emergency-access-takeover.component.ts","webpack:///./src/app/settings/emergency-access-takeover.component.html","webpack:///./src/app/settings/sponsored-families.component.ts","webpack:///./src/app/settings/sponsored-families.component.html","webpack:///./src/app/settings/sponsoring-org-row.component.ts","webpack:///./src/app/settings/sponsoring-org-row.component.html","webpack:///./src/app/components/password-reprompt.component.ts","webpack:///./src/app/components/password-reprompt.component.html","webpack:///./jslib/angular/src/components/password-reprompt.component.ts","webpack:///./jslib/angular/src/directives/blur-click.directive.ts","webpack:///./jslib/common/src/models/response/collectionResponse.ts","webpack:///./jslib/common/src/models/response/domainsResponse.ts","webpack:///./jslib/common/src/models/response/folderResponse.ts","webpack:///./jslib/common/src/models/response/organizationResponse.ts","webpack:///./jslib/common/src/models/response/planResponse.ts","webpack:///./jslib/common/src/models/response/subscriptionResponse.ts","webpack:///./jslib/common/src/models/response/organizationUserBulkPublicKeyResponse.ts","webpack:///./jslib/common/src/models/response/profileOrganizationResponse.ts","webpack:///./jslib/common/src/models/response/twoFactorWebAuthnResponse.ts","webpack:///./jslib/common/src/misc/sequentialize.ts","webpack:///./jslib/common/src/misc/serviceUtils.ts","webpack:///./jslib/common/src/services/consoleLog.service.ts","webpack:///./jslib/common/src/misc/wordlist.ts","webpack:///./jslib/common/src/models/export/cipherWithIds.ts","webpack:///./jslib/common/src/models/export/collectionWithId.ts","webpack:///./jslib/common/src/models/export/folderWithId.ts","webpack:///./jslib/common/src/models/domain/folder.ts","webpack:///./jslib/common/src/models/data/folderData.ts","webpack:///./jslib/common/src/importers/onepasswordImporters/onepasswordCsvImporter.ts","webpack:///./jslib/common/src/enums/notificationType.ts","webpack:///./jslib/common/src/models/data/sendData.ts","webpack:///./src/app/main.ts","webpack:///./src/scss/styles.scss?580e","webpack:///./src/app/app.module.ts","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.component.html","webpack:///./jslib/common/src/services/broadcaster.service.ts","webpack:///./jslib/common/src/models/request/policyRequest.ts","webpack:///./jslib/common/src/misc/tldjs.noop.ts","webpack:///./src/app/oss-routing.module.ts","webpack:///./jslib/common/src/models/request/emergencyAccessAcceptRequest.ts","webpack:///./jslib/common/src/models/request/organizationUserAcceptRequest.ts","webpack:///./jslib/angular/src/components/hint.component.ts","webpack:///./jslib/common/src/models/request/passwordHintRequest.ts","webpack:///./jslib/angular/src/components/lock.component.ts","webpack:///./jslib/angular/src/components/login.component.ts","webpack:///./jslib/common/src/misc/captcha_iframe.ts","webpack:///./jslib/common/src/misc/iframe_component.ts","webpack:///./jslib/common/src/models/request/deleteRecoverRequest.ts","webpack:///./jslib/common/src/models/request/twoFactorRecoveryRequest.ts","webpack:///./jslib/angular/src/components/register.component.ts","webpack:///./jslib/common/src/models/request/registerRequest.ts","webpack:///./jslib/common/src/models/request/referenceEventRequest.ts","webpack:///./jslib/angular/src/components/remove-password.component.ts","webpack:///./jslib/angular/src/components/set-password.component.ts","webpack:///./jslib/common/src/models/request/setPasswordRequest.ts","webpack:///./jslib/angular/src/components/modal/dynamic-modal.component.ts","webpack:///./jslib/angular/src/components/modal/modal-injector.ts","webpack:///./jslib/angular/src/components/two-factor.component.ts","webpack:///./jslib/common/src/models/domain/authResult.ts","webpack:///./jslib/common/src/models/request/account/setKeyConnectorKeyRequest.ts","webpack:///./jslib/common/src/models/request/deviceRequest.ts","webpack:///./jslib/common/src/models/request/preloginRequest.ts","webpack:///./jslib/common/src/models/request/tokenRequest.ts","webpack:///./jslib/common/src/misc/webauthn_iframe.ts","webpack:///./jslib/angular/src/components/two-factor-options.component.ts","webpack:///./jslib/angular/src/components/update-temp-password.component.ts","webpack:///./jslib/common/src/models/request/updateTempPasswordRequest.ts","webpack:///./jslib/common/src/models/request/verifyEmailRequest.ts","webpack:///./jslib/common/src/models/request/verifyDeleteRecoverRequest.ts","webpack:///./src/app/common/base.events.component.ts","webpack:///./jslib/common/src/models/view/eventView.ts","webpack:///./jslib/common/src/models/request/groupRequest.ts","webpack:///./jslib/common/src/models/request/organizationUserConfirmRequest.ts","webpack:///./src/app/common/base.people.component.ts","webpack:///./jslib/common/src/models/request/organizationUserBulkConfirmRequest.ts","webpack:///./jslib/common/src/models/request/organizationUserInviteRequest.ts","webpack:///./jslib/common/src/models/request/organizationUserUpdateRequest.ts","webpack:///./jslib/common/src/models/request/organizationUserUpdateGroupsRequest.ts","webpack:///./jslib/common/src/models/request/organizationUpdateRequest.ts","webpack:///./jslib/common/src/enums/transactionType.ts","webpack:///./jslib/common/src/models/request/verifyBankRequest.ts","webpack:///./jslib/common/src/models/request/bitPayInvoiceRequest.ts","webpack:///./jslib/common/src/models/request/paymentRequest.ts","webpack:///./src/scss/export.module.scss","webpack:///./jslib/common/src/models/request/organizationCreateRequest.ts","webpack:///./jslib/common/src/models/request/organizationUpgradeRequest.ts","webpack:///./jslib/common/src/models/request/provider/providerOrganizationCreateRequest.ts","webpack:///./jslib/common/src/models/request/organizationSubscriptionUpdateRequest.ts","webpack:///./jslib/common/src/models/request/storageRequest.ts","webpack:///./jslib/common/src/models/request/updateTwoFactorDuoRequest.ts","webpack:///./jslib/common/src/models/request/twoFactorProviderRequest.ts","webpack:///./jslib/common/src/models/request/updateTwoFactorAuthenticatorRequest.ts","webpack:///./jslib/common/src/models/request/updateTwoFactorEmailRequest.ts","webpack:///./jslib/common/src/models/request/updateTwoFactorWebAuthnDeleteRequest.ts","webpack:///./jslib/common/src/models/request/updateTwoFactorWebAuthnRequest.ts","webpack:///./jslib/common/src/models/request/updateTwoFactorYubioOtpRequest.ts","webpack:///./jslib/common/src/models/request/organization/organizationSponsorshipRedeemRequest.ts","webpack:///./jslib/angular/src/components/export.component.ts","webpack:///./jslib/common/src/models/view/attachmentView.ts","webpack:///./jslib/common/src/models/request/attachmentRequest.ts","webpack:///./jslib/angular/src/components/add-edit.component.ts","webpack:///./jslib/angular/src/components/add-edit-custom-fields.component.ts","webpack:///./jslib/angular/src/components/ciphers.component.ts","webpack:///./jslib/angular/src/components/collections.component.ts","webpack:///./jslib/angular/src/components/groupings.component.ts","webpack:///./jslib/common/src/models/domain/sendAccess.ts","webpack:///./jslib/common/src/models/view/sendAccessView.ts","webpack:///./jslib/common/src/models/request/sendAccessRequest.ts","webpack:///./jslib/angular/src/components/send/send.component.ts","webpack:///./jslib/angular/src/components/send/add-edit.component.ts","webpack:///./jslib/angular/src/components/send/efflux-dates.component.ts","webpack:///./jslib/common/src/models/request/updateProfileRequest.ts","webpack:///./jslib/common/src/models/request/emailRequest.ts","webpack:///./jslib/common/src/models/request/sendWithIdRequest.ts","webpack:///./jslib/common/src/models/request/kdfRequest.ts","webpack:///./jslib/common/src/models/request/updateDomainsRequest.ts","webpack:///./jslib/angular/src/components/settings/vault-timeout-input.component.ts","webpack:///./jslib/angular/src/components/password-generator.component.ts","webpack:///./jslib/angular/src/components/password-generator-history.component.ts","webpack:///./jslib/angular/src/components/folder-add-edit.component.ts","webpack:///./jslib/angular/src/components/share.component.ts","webpack:///./jslib/common/src/models/request/emergencyAccessConfirmRequest.ts","webpack:///./jslib/common/src/models/response/passwordHistoryResponse.ts","webpack:///./jslib/common/src/models/request/emergencyAccessInviteRequest.ts","webpack:///./jslib/common/src/models/request/emergencyAccessPasswordRequest.ts","webpack:///./src/app/oss.module.ts","webpack:///./jslib/angular/src/directives/box-row.directive.ts","webpack:///./jslib/angular/src/pipes/search-ciphers.pipe.ts","webpack:///./src/app/services/services.module.ts","webpack:///./src/services/broadcasterMessaging.service.ts","webpack:///./src/services/htmlStorage.service.ts","webpack:///./src/services/i18n.service.ts","webpack:///./jslib/common/src/services/i18n.service.ts","webpack:///./src/services/memoryStorage.service.ts","webpack:///./src/services/passwordReprompt.service.ts","webpack:///./jslib/angular/src/services/passwordReprompt.service.ts","webpack:///./src/services/webPlatformUtils.service.ts","webpack:///./jslib/common/src/services/api.service.ts","webpack:///./jslib/common/src/models/response/apiKeyResponse.ts","webpack:///./jslib/common/src/models/response/attachmentUploadDataResponse.ts","webpack:///./jslib/common/src/models/response/billingResponse.ts","webpack:///./jslib/common/src/models/response/breachAccountResponse.ts","webpack:///./jslib/common/src/models/response/globalDomainResponse.ts","webpack:///./jslib/common/src/models/response/eventResponse.ts","webpack:///./jslib/common/src/models/response/groupResponse.ts","webpack:///./jslib/common/src/models/response/identityCaptchaResponse.ts","webpack:///./jslib/common/src/models/response/identityTokenResponse.ts","webpack:///./jslib/common/src/models/response/identityTwoFactorResponse.ts","webpack:///./jslib/common/src/models/response/listResponse.ts","webpack:///./jslib/common/src/models/response/organization/organizationSsoResponse.ts","webpack:///./jslib/common/src/models/api/ssoConfigApi.ts","webpack:///./jslib/common/src/models/response/organizationAutoEnrollStatusResponse.ts","webpack:///./jslib/common/src/models/response/organizationKeysResponse.ts","webpack:///./jslib/common/src/models/response/keysResponse.ts","webpack:///./jslib/common/src/models/response/organizationSubscriptionResponse.ts","webpack:///./jslib/common/src/models/response/organizationUserBulkResponse.ts","webpack:///./jslib/common/src/models/response/organizationUserResponse.ts","webpack:///./jslib/common/src/models/response/paymentResponse.ts","webpack:///./jslib/common/src/models/response/profileProviderOrganizationResponse.ts","webpack:///./jslib/common/src/models/response/profileProviderResponse.ts","webpack:///./jslib/common/src/models/response/preloginResponse.ts","webpack:///./jslib/common/src/models/response/provider/providerOrganizationResponse.ts","webpack:///./jslib/common/src/models/response/provider/providerResponse.ts","webpack:///./jslib/common/src/models/response/provider/providerUserBulkPublicKeyResponse.ts","webpack:///./jslib/common/src/models/response/provider/providerUserBulkResponse.ts","webpack:///./jslib/common/src/models/response/provider/providerUserResponse.ts","webpack:///./jslib/common/src/models/response/sendAccessResponse.ts","webpack:///./jslib/common/src/models/response/sendFileDownloadDataResponse.ts","webpack:///./jslib/common/src/models/response/sendFileUploadDataResponse.ts","webpack:///./jslib/common/src/models/response/syncResponse.ts","webpack:///./jslib/common/src/models/response/taxInfoResponse.ts","webpack:///./jslib/common/src/models/response/taxRateResponse.ts","webpack:///./jslib/common/src/models/response/twoFactorAuthenticatorResponse.ts","webpack:///./jslib/common/src/models/response/twoFactorDuoResponse.ts","webpack:///./jslib/common/src/models/response/twoFactorEmailResponse.ts","webpack:///./jslib/common/src/models/response/twoFactorProviderResponse.ts","webpack:///./jslib/common/src/models/response/twoFactorRescoverResponse.ts","webpack:///./jslib/common/src/models/response/twoFactorYubiKeyResponse.ts","webpack:///./jslib/common/src/models/response/userKeyResponse.ts","webpack:///./jslib/common/src/models/response/keyConnectorUserKeyResponse.ts","webpack:///./jslib/common/src/services/appId.service.ts","webpack:///./jslib/common/src/services/audit.service.ts","webpack:///./jslib/common/src/misc/throttle.ts","webpack:///./jslib/common/src/services/cipher.service.ts","webpack:///./jslib/common/src/models/request/cipherBulkMoveRequest.ts","webpack:///./jslib/common/src/models/request/cipherBulkRestoreRequest.ts","webpack:///./jslib/common/src/models/request/cipherBulkShareRequest.ts","webpack:///./jslib/common/src/models/request/cipherShareRequest.ts","webpack:///./jslib/common/src/models/domain/sortedCiphersCache.ts","webpack:///./jslib/common/src/services/collection.service.ts","webpack:///./jslib/common/src/models/domain/treeNode.ts","webpack:///./jslib/common/src/enums/logLevelType.ts","webpack:///./jslib/common/src/services/container.service.ts","webpack:///./jslib/common/src/services/crypto.service.ts","webpack:///./jslib/common/src/models/domain/encArrayBuffer.ts","webpack:///./jslib/common/src/models/domain/encryptedObject.ts","webpack:///./jslib/common/src/services/environment.service.ts","webpack:///./jslib/common/src/models/domain/environmentUrls.ts","webpack:///./jslib/common/src/services/event.service.ts","webpack:///./jslib/common/src/models/data/eventData.ts","webpack:///./jslib/common/src/models/request/eventRequest.ts","webpack:///./jslib/common/src/services/export.service.ts","webpack:///./jslib/common/src/models/export/cipher.ts","webpack:///./jslib/common/src/models/export/card.ts","webpack:///./jslib/common/src/models/export/field.ts","webpack:///./jslib/common/src/models/export/identity.ts","webpack:///./jslib/common/src/models/export/login.ts","webpack:///./jslib/common/src/models/export/loginUri.ts","webpack:///./jslib/common/src/models/export/secureNote.ts","webpack:///./jslib/common/src/models/export/collection.ts","webpack:///./jslib/common/src/models/export/event.ts","webpack:///./jslib/common/src/models/export/folder.ts","webpack:///./jslib/common/src/services/fileUpload.service.ts","webpack:///./jslib/common/src/enums/fileUploadType.ts","webpack:///./jslib/common/src/services/azureFileUpload.service.ts","webpack:///./jslib/common/src/services/bitwardenFileUpload.service.ts","webpack:///./jslib/common/src/services/folder.service.ts","webpack:///./jslib/common/src/services/import.service.ts","webpack:///./jslib/common/src/models/request/importCiphersRequest.ts","webpack:///./jslib/common/src/models/request/importOrganizationCiphersRequest.ts","webpack:///./jslib/common/src/models/request/kvpRequest.ts","webpack:///./jslib/common/src/importers/ascendoCsvImporter.ts","webpack:///./jslib/common/src/importers/avastCsvImporter.ts","webpack:///./jslib/common/src/importers/avastJsonImporter.ts","webpack:///./jslib/common/src/importers/aviraCsvImporter.ts","webpack:///./jslib/common/src/importers/bitwardenCsvImporter.ts","webpack:///./jslib/common/src/importers/bitwardenJsonImporter.ts","webpack:///./jslib/common/src/importers/blackBerryCsvImporter.ts","webpack:///./jslib/common/src/importers/blurCsvImporter.ts","webpack:///./jslib/common/src/importers/buttercupCsvImporter.ts","webpack:///./jslib/common/src/importers/chromeCsvImporter.ts","webpack:///./jslib/common/src/importers/clipperzHtmlImporter.ts","webpack:///./jslib/common/src/importers/codebookCsvImporter.ts","webpack:///./jslib/common/src/importers/dashlaneJsonImporter.ts","webpack:///./jslib/common/src/importers/encryptrCsvImporter.ts","webpack:///./jslib/common/src/importers/enpassCsvImporter.ts","webpack:///./jslib/common/src/importers/enpassJsonImporter.ts","webpack:///./jslib/common/src/importers/firefoxCsvImporter.ts","webpack:///./jslib/common/src/importers/fsecureFskImporter.ts","webpack:///./jslib/common/src/importers/gnomeJsonImporter.ts","webpack:///./jslib/common/src/importers/kasperskyTxtImporter.ts","webpack:///./jslib/common/src/importers/keepass2XmlImporter.ts","webpack:///./jslib/common/src/importers/keepassxCsvImporter.ts","webpack:///./jslib/common/src/importers/keeperCsvImporter.ts","webpack:///./jslib/common/src/importers/lastpassCsvImporter.ts","webpack:///./jslib/common/src/importers/logMeOnceCsvImporter.ts","webpack:///./jslib/common/src/importers/meldiumCsvImporter.ts","webpack:///./jslib/common/src/importers/msecureCsvImporter.ts","webpack:///./jslib/common/src/importers/mykiCsvImporter.ts","webpack:///./jslib/common/src/importers/nordpassCsvImporter.ts","webpack:///./jslib/common/src/importers/onepasswordImporters/onepassword1PifImporter.ts","webpack:///./jslib/common/src/importers/onepasswordImporters/onepasswordMacCsvImporter.ts","webpack:///./jslib/common/src/importers/onepasswordImporters/cipherImportContext.ts","webpack:///./jslib/common/src/importers/onepasswordImporters/onepasswordWinCsvImporter.ts","webpack:///./jslib/common/src/importers/padlockCsvImporter.ts","webpack:///./jslib/common/src/importers/passkeepCsvImporter.ts","webpack:///./jslib/common/src/importers/passmanJsonImporter.ts","webpack:///./jslib/common/src/importers/passpackCsvImporter.ts","webpack:///./jslib/common/src/importers/passwordAgentCsvImporter.ts","webpack:///./jslib/common/src/importers/passwordBossJsonImporter.ts","webpack:///./jslib/common/src/importers/passwordDragonXmlImporter.ts","webpack:///./jslib/common/src/importers/passwordSafeXmlImporter.ts","webpack:///./jslib/common/src/importers/passwordWalletTxtImporter.ts","webpack:///./jslib/common/src/importers/rememBearCsvImporter.ts","webpack:///./jslib/common/src/importers/roboformCsvImporter.ts","webpack:///./jslib/common/src/importers/safariCsvImporter.ts","webpack:///./jslib/common/src/importers/safeInCloudXmlImporter.ts","webpack:///./jslib/common/src/importers/saferpassCsvImport.ts","webpack:///./jslib/common/src/importers/secureSafeCsvImporter.ts","webpack:///./jslib/common/src/importers/splashIdCsvImporter.ts","webpack:///./jslib/common/src/importers/stickyPasswordXmlImporter.ts","webpack:///./jslib/common/src/importers/truekeyCsvImporter.ts","webpack:///./jslib/common/src/importers/upmCsvImporter.ts","webpack:///./jslib/common/src/importers/yotiCsvImporter.ts","webpack:///./jslib/common/src/importers/zohoVaultCsvImporter.ts","webpack:///./jslib/common/src/services/keyConnector.service.ts","webpack:///./jslib/common/src/services/notifications.service.ts","webpack:///./jslib/common/src/models/response/notificationResponse.ts","webpack:///./jslib/common/src/services/passwordGeneration.service.ts","webpack:///./jslib/common/src/models/domain/generatedPasswordHistory.ts","webpack:///./jslib/common/src/models/domain/passwordGeneratorPolicyOptions.ts","webpack:///./jslib/common/src/services/policy.service.ts","webpack:///./jslib/common/src/models/domain/resetPasswordPolicyOptions.ts","webpack:///./jslib/common/src/services/search.service.ts","webpack:///./jslib/common/src/services/send.service.ts","webpack:///./jslib/common/src/models/data/sendFileData.ts","webpack:///./jslib/common/src/models/data/sendTextData.ts","webpack:///./jslib/common/src/models/domain/send.ts","webpack:///./jslib/common/src/services/settings.service.ts","webpack:///./jslib/common/src/services/state.service.ts","webpack:///./jslib/common/src/services/sync.service.ts","webpack:///./jslib/common/src/models/data/organizationData.ts","webpack:///./jslib/common/src/models/data/providerData.ts","webpack:///./jslib/common/src/services/token.service.ts","webpack:///./jslib/common/src/services/totp.service.ts","webpack:///./jslib/common/src/services/user.service.ts","webpack:///./jslib/common/src/models/domain/provider.ts","webpack:///./jslib/common/src/enums/providerUserStatusType.ts","webpack:///./jslib/common/src/enums/providerUserType.ts","webpack:///./jslib/common/src/services/userVerification.service.ts","webpack:///./jslib/common/src/models/request/account/verifyOTPRequest.ts","webpack:///./jslib/common/src/services/vaultTimeout.service.ts","webpack:///./jslib/common/src/services/webCryptoFunction.service.ts","webpack:///./jslib/common/src/models/domain/decryptParameters.ts","webpack:///./jslib/common/src/abstractions/fileUpload.service.ts","webpack:///./src/app/services/modal.service.ts","webpack:///./src/app/wildcard-routing.module.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","I18nService","LogService","PlatformUtilsService","ApiService","UserService","i18nService","transform","id","p1","p2","p3","this","I18nPipe","Pipe","MessagingService","el","renderer","title","ngOnInit","nativeElement","hasAttribute","setAttribute","A11yTitleDirective","Directive","selector","appA11yTitle","Input","validationService","logService","ngOnChanges","changes","appApiAction","then","loading","response","e","ErrorResponse","constructor","captchaRequired","error","getSingleMessage","showError","ApiActionDirective","CryptoService","CipherService","type","useAlertRole","calloutStyle","undefined","enforcedPolicyMessage","icon","getPasswordScoreAlertDisplay","enforcedPolicyOptions","str","minComplexity","CalloutComponent","Component","templateUrl","clickable","getResponseProperty","propertyName","exactName","Error","otherCasePropertyName","charAt","toUpperCase","toLowerCase","BaseResponse","PolicyService","allowMultipleModals","ModalConfig","componentFactoryResolver","applicationRef","injector","modalList","factoryResolvers","Map","document","addEventListener","event","modalCount","topModal","instance","close","openViewRef","componentType","viewContainerRef","setComponentParameters","openInternal","modalRef","modalComponentRef","insert","hostView","onCreated","pipe","first","toPromise","componentRef","open","config","registerComponentFactoryResolver","set","resolveComponentFactory","has","attachToDom","createModalComponent","childComponentType","attachView","domElem","rootNodes","body","appendChild","onClosed","subscribe","detachView","destroy","pop","getFocus","setupHandlers","backdrop","classList","add","modalEl","querySelector","dialogEl","createElement","className","style","zIndex","prepend","stopPropagation","Array","from","querySelectorAll","onClose","closed","remove","ModalRef","map","WeakMap","DynamicModalComponent","ModalInjector","ModalService","Injectable","nodeURL","init","Utils","inited","isNode","process","release","isBrowser","isNativeScript","isMobileBrowser","isMobile","isAppleMobileBrowser","isAppleMobile","global","fromB64ToArray","Uint8Array","Buffer","binaryString","atob","bytes","charCodeAt","fromUrlB64ToArray","fromUrlB64ToB64","fromHexToArray","parseInt","substr","fromUtf8ToArray","strUtf8","unescape","encodeURIComponent","arr","fromByteStringToArray","fromBufferToB64","buffer","toString","binary","byteLength","String","fromCharCode","btoa","fromBufferToUrlB64","fromB64toUrlB64","b64Str","replace","fromBufferToUtf8","encodedString","decodeURIComponent","escape","fromBufferToByteString","fromBufferToHex","x","join","urlB64Str","output","fromUrlB64ToUtf8","fromB64ToUtf8","fromUtf8ToB64","utfStr","fromUtf8ToUrlB64","newGuid","Math","random","isGuid","RegExp","test","getHostname","uriString","url","getUrl","hostname","getHost","host","getDomain","trim","startsWith","httpUrl","indexOf","tldEndingRegex","getUrlObject","tldjs","isValid","validIpAddress","urlDomain","domain","getQueryParams","search","split","forEach","pair","parts","getSortFunction","prop","a","b","collator","compare","localeCompare","isNullOrWhitespace","nameOf","assign","target","source","iterateEnum","obj","keys","filter","k","Number","isNaN","camelToPascalCase","ipString","win","mobile","navigator","userAgent","vendor","opera","match","URL","parse","hasProtocol","anchor","href","regexpEmojiPresentation","organizationId","ConsoleLogService","newLineRegex","passwordFieldNames","usernameFieldNames","notesFieldNames","uriFieldNames","parseCsvOptions","encoding","skipEmptyLines","parseXml","doc","DOMParser","parseFromString","parseCsv","header","options","parseOptions","splitNewLine","papa","errors","row","warning","message","parseSingleRowCsv","rowData","parsedRow","makeUriArray","uri","loginUri","LoginUriView","fixUri","u","substring","nameFromUrl","getValueOrDefault","defaultValue","getCardBrand","cardNum","re","setCardExpiration","cipher","expiration","month","year","card","expMonth","expYear","moveFoldersToCollections","folderRelationships","collectionRelationships","collections","folders","f","collection","CollectionView","querySelectorDirectChild","parentEl","query","els","querySelectorAllDirectChild","parentNode","initLoginCipher","CipherView","favorite","notes","fields","login","LoginView","CipherType","Login","cleanupCipher","processKvp","FieldType","Text","field","FieldView","processFolder","folderName","folderIndex","hasFolder","addFolder","FolderView","ciphers","convertToNoteIfNeeded","username","password","uris","SecureNote","secureNote","SecureNoteView","SecureNoteType","Generic","BaseImporter","success","ImportResult","PasswordGenerationService","StateService","onClick","$event","preventDefault","StopClickDirective","HostListener","StorageService","SyncService","PasswordRepromptService","CollectionService","EnvironmentService","UserVerificationService","condition","disableComplete","InputVerbatimDirective","appInputVerbatim","AuthService","FolderService","StopPropDirective","EventService","PolicyType","environmentUrlsKey","ConstantsService","disableGaKey","disableAddLoginNotificationKey","disableContextMenuItemKey","disableFaviconKey","disableBadgeCounterKey","disableAutoTotpCopyKey","disableAutoBiometricsPromptKey","enableAutoFillOnPageLoadKey","autoFillOnPageLoadDefaultKey","vaultTimeoutKey","vaultTimeoutActionKey","lastActiveKey","neverDomainsKey","installedVersionKey","localeKey","themeKey","collapsedGroupingsKey","autoConfirmFingerprints","dontShowCardsCurrentTab","dontShowIdentitiesCurrentTab","defaultUriMatch","pinProtectedKey","protectedPin","clearClipboardKey","eventCollectionKey","ssoCodeVerifierKey","ssoStateKey","biometricUnlockKey","biometricText","biometricAwaitingAcceptance","biometricFingerprintValidated","disableChangedPasswordNotificationKey","indexedEntityId","SearchService","ngZone","autofocus","isStable","focus","onStable","take","AutofocusDirective","appAutofocus","KeyConnectorService","buildDomainModel","dataObj","alreadyEncrypted","notEncList","objProp","EncString","buildDataModel","notEncStringList","encryptedString","decryptObj","viewModel","orgId","promises","self","theProp","Promise","resolve","mapProp","decrypt","val","all","cardholderName","code","_brand","_number","_subTitle","repeat","number","brand","count","exp","formatYear","linkedFieldOption","CardholderName","ExpMonth","ExpYear","Code","Brand","ItemView","CardView","user","email","UserNamePipe","VaultTimeoutService","encryptedStringOrType","iv","mac","encType","encryptionType","headerPieces","encPieces","EncryptionType","AesCbc128_HmacSha256_B64","AesCbc256_B64","AesCbc256_HmacSha256_B64","Rsa2048_OaepSha256_B64","Rsa2048_OaepSha1_B64","decryptedValue","containerService","bitwardenContainerService","cryptoService","getCryptoService","getOrgKey","decryptToUtf8","CryptoFunctionService","AuditService","SecretVerificationRequest","IconMap","environmentService","stateService","iconsUrl","getIconsUrl","image","fallbackImage","imageEnabled","load","setLoginIcon","Card","Identity","hostnameUri","isWebsite","IconComponent","BroadcasterService","TokenService","TwoFactorProviderType","ExportService","TotpService","SendService","display","organization","BasePolicy","enabled","FormControl","setValue","policyResponse","loadData","patchValue","buildRequestData","buildRequest","policiesEnabledMap","request","PolicyRequest","policy","BasePolicyComponent","lightInputColor","lightInputPlaceholderColor","darkInputColor","darkInputPlaceholderColor","platformUtilsService","apiService","showMethods","showOptions","method","PaymentMethodType","hideBank","hidePaypal","hideCredit","bank","routing_number","account_number","account_holder_name","account_holder_type","currency","country","paymentMethodType","btInstance","stripe","stripeElements","stripeCardNumberElement","stripeCardExpiryElement","stripeCardCvcElement","stripeScript","src","async","onload","Stripe","elements","setStripeElement","btScript","StripeElementStyle","base","color","fontFamily","fontSize","fontSmoothing","invalid","StripeElementClasses","empty","PayPal","BankAccount","Credit","setTheme","head","ngOnDestroy","removeChild","setTimeout","btStylesheet","changeMethod","braintree","dropin","authorization","container","paymentOptionPriority","paypal","flow","buttonStyle","label","size","shape","tagline","createErr","console","createPaymentToken","reject","requestPaymentMethod","payload","nonce","catch","err","postSetupPayment","clientSecret","handleCardSetup","setupIntent","status","payment_method","createToken","token","handleStripeCardPayment","successCallback","paymentIntent","classes","placeholder","mount","getEffectiveTheme","ThemeType","Dark","PaymentComponent","folderId","organizationUseTotp","edit","viewPassword","identity","IdentityView","attachments","passwordHistory","collectionIds","revisionDate","deletedDate","reprompt","CipherRepromptType","None","localData","item","subTitle","hasAttachments","passwordRevisionDate","linkedFieldOptions","linkedFieldValue","propertyKey","linkedFieldI18nKey","i18nKey","middleName","address1","address2","address3","city","state","postalCode","company","phone","ssn","passportNumber","licenseNumber","_firstName","_lastName","firstName","lastName","address","addressPart2","Title","MiddleName","Address1","Address2","Address3","City","State","PostalCode","Country","Company","Email","Phone","Ssn","Username","PassportNumber","LicenseNumber","FirstName","LastName","FullName","defaultErrorMessage","validationErrors","concat","getAllMessages","showToast","timeout","ValidationService","keyConnectorService","userVerificationService","usesKeyConnector","disableRequestOTP","sentCode","secret","getUsesKeyConnector","processChanges","valueChanges","requestOTP","writeValue","registerOnChange","fn","onChange","registerOnTouched","setDisabledState","isDisabled","disable","enable","VerificationType","OTP","MasterPassword","VerifyMasterPasswordComponent","provide","NG_VALUE_ACCESSOR","multi","useExisting","trigger","transition","opacity","animate","providers","animations","route","onCountryChanged","EventEmitter","taxInfo","taxId","line1","line2","includeTaxId","pristine","parent","params","getOrganizationTaxInfo","getTaxInfo","emit","getTaxRates","taxRates","localTaxRate","find","rate","getTaxInfoRequest","OrganizationTaxInfoUpdateRequest","TaxInfoUpdateRequest","submitTaxInfo","hasChanged","putOrganizationTaxInfo","putTaxInfo","changeCountry","TaxInfoComponent","Output","totp","autofillOnPageLoad","hasUris","some","canLaunch","launchUri","Password","externalId","readOnly","hidePasswords","Collection","items","searchText","prop1","prop2","prop3","SearchPipe","userId","LoginData","SecureNoteData","CardData","IdentityData","FieldData","AttachmentData","ph","PasswordHistoryData","CipherData","SendType","identityResponse","errorModel","responseErrorModel","captchaSiteKey","HCaptcha_SiteKey","statusCode","messages","prefix","lastSep","lastIndexOf","showText","scoreWidth","score","text","PasswordStrengthComponent","CollectionData","OrganizationUserStatusType","policyService","getDefaultDateFilters","Date","end","getFullYear","getMonth","getDate","setDate","start","toDateTimeLocalString","formatDateFilters","filterStart","filterEnd","getTime","toISOString","getEventInfo","ev","EventOptions","appInfo","getAppInfo","deviceType","getEventMessage","humanReadableMessage","appIcon","appName","msg","humanReadableMsg","EventType","User_LoggedIn","User_ChangedPassword","User_Updated2fa","User_Disabled2fa","User_Recovered2fa","User_FailedLogIn","User_FailedLogIn2fa","User_ClientExportedVault","User_UpdatedTempPassword","User_MigratedKeyToKeyConnector","Cipher_Created","Cipher_Updated","Cipher_Deleted","Cipher_SoftDeleted","Cipher_Restored","Cipher_AttachmentCreated","Cipher_AttachmentDeleted","Cipher_Shared","Cipher_ClientViewed","Cipher_ClientToggledPasswordVisible","Cipher_ClientToggledHiddenFieldVisible","Cipher_ClientToggledCardCodeVisible","Cipher_ClientCopiedHiddenField","Cipher_ClientCopiedPassword","Cipher_ClientCopiedCardCode","Cipher_ClientAutofilled","Cipher_UpdatedCollections","Collection_Created","Collection_Updated","Collection_Deleted","Group_Created","Group_Updated","Group_Deleted","OrganizationUser_Invited","OrganizationUser_Confirmed","OrganizationUser_Updated","OrganizationUser_Removed","OrganizationUser_UpdatedGroups","OrganizationUser_UnlinkedSso","OrganizationUser_ResetPassword_Enroll","OrganizationUser_ResetPassword_Withdraw","OrganizationUser_AdminResetPassword","OrganizationUser_ResetSsoLink","OrganizationUser_FirstSsoLogin","Organization_Updated","Organization_PurgedVault","Organization_VaultAccessed","Organization_EnabledSso","Organization_DisabledSso","Organization_EnabledKeyConnector","Organization_DisabledKeyConnector","Policy_Updated","ProviderUser_Invited","ProviderUser_Confirmed","ProviderUser_Updated","ProviderUser_Removed","ProviderOrganization_Created","ProviderOrganization_Added","ProviderOrganization_Removed","ProviderOrganization_VaultAccessed","formatCipherId","getShortId","cipherId","formatCollectionId","collectionId","formatGroupId","groupId","formatOrgUserId","organizationUserId","formatPolicyId","getAll","policies","policyId","formatProviderUserId","providerUserId","formatProviderOrganizationId","providerOrganizationId","DeviceType","Android","iOS","UWP","ChromeExtension","FirefoxExtension","OperaExtension","EdgeExtension","VivaldiExtension","SafariExtension","WindowsDesktop","MacOsDesktop","LinuxDesktop","ChromeBrowser","FirefoxBrowser","OperaBrowser","SafariBrowser","VivaldiBrowser","EdgeBrowser","IEBrowser","UnknownBrowser","shortId","cipherInfo","makeAnchor","outerHTML","providerId","innerHTML","date","pad","getHours","getMinutes","num","norm","floor","abs","EventInfo","onAuthed","submit","formPromise","hashedSecret","masterPasswordHash","otp","apiCall","verificationType","getTwoFactorRecover","Duo","OrganizationDuo","getTwoFactorOrganizationDuo","getTwoFactorDuo","getTwoFactorEmail","WebAuthn","getTwoFactorWebAuthn","Authenticator","getTwoFactorAuthenticator","Yubikey","getTwoFactorYubiKey","TwoFactorVerifyComponent","Attachment","Field","encKey","model","reduce","promise","attachment","decAttachment","decField","decPh","toCipherData","toLoginData","toSecureNoteData","toCardData","toIdentityData","toFieldData","toAttachmentData","toPasswordHistoryData","Cipher","OrganizationUserType","macKey","keyB64","encKeyB64","macKeyB64","SymmetricCryptoKey","toasterService","router","syncService","userService","showFree","showCancel","acceptingSponsorship","product","ProductType","Free","plan","PlanType","onSuccess","onCanceled","selfHosted","ownedBusiness","premiumAccessAddon","additionalStorage","additionalSeats","productTypes","singleOrgPolicyBlock","discount","isSelfHost","getPlans","plans","Enterprise","Teams","changedOwnedBusiness","selectedPlan","isAnnual","validPlans","Custom","canBeUsedByBusiness","legacyYear","disabled","familyPlan","FamiliesAnnually","basePrice","additionalStoragePriceMonthly","additionalStoragePricePerGb","seatPriceMonthly","seatPrice","additionalStorageTotal","hasAdditionalStorageOption","seatTotal","hasAdditionalSeatsOption","subTotal","hasPremiumAccessOption","premiumAccessOptionPrice","trialPeriodDays","taxComponent","taxRate","subtotal","taxCharges","freeTrial","createOrganization","selectedPlanInterval","changedProduct","selectablePlans","baseSeats","TeamsAnnually","changedCountry","paymentComponent","cancel","userHasBlockingSingleOrgPolicy","doSubmit","makeShareKey","shareKey","encrypt","collectionCt","makeKeyPair","orgKeys","createSelfHosted","createCloudHosted","popAsync","updateOrganization","refreshIdentityToken","fullSync","navigate","policyAppliesToUser","SingleOrg","OrganizationUpgradeRequest","businessName","additionalStorageGb","planType","billingAddressCountry","billingAddressPostalCode","getOrganization","hasPublicAndPrivateKeys","orgShareKey","OrganizationKeysRequest","postOrganizationUpgrade","paymentIntentClientSecret","orgKey","OrganizationCreateRequest","collectionName","billingEmail","tokenResult","paymentToken","taxIdNumber","billingAddressLine1","billingAddressLine2","billingAddressCity","billingAddressState","providerRequest","ProviderOrganizationCreateRequest","clientOwnerEmail","getProviderKey","providerKey","organizationCreateRequest","postProviderCreateOrganization","postOrganization","fileEl","getElementById","files","fd","FormData","append","postOrganizationLicense","postOrganizationKeys","OrganizationPlansComponent","ViewChild","lastKnownRevisionDate","LoginApi","LoginUriApi","SecureNoteApi","CardApi","IdentityApi","FieldApi","linkedId","lastUsedDate","attachments2","fileName","attachmentRequest","AttachmentRequest","CipherRequest","addPolicies","getPolicies","PolicyListService","activatedRoute","titleService","previousUrl","currentUrl","events","NavigationEnd","titleId","rawTitle","child","firstChild","snapshot","newTitle","setTitle","getPreviousUrl","setPreviousUrl","RouterService","KdfType","_onCreated","Subject","_onClose","_onClosed","_onShow","_onShown","asObservable","onShow","onShown","show","next","shown","lastResult","created","onClosedPromise","accessEventLogs","accessImportExport","accessReports","manageAllCollections","manageAssignedCollections","createNewCollections","editAnyCollection","deleteAnyCollection","editAssignedCollections","deleteAssignedCollections","manageCiphers","manageGroups","manageSso","managePolicies","manageUsers","manageResetPassword","PermissionsApi","onUpdated","twoFactorProviderType","authed","auth","authResponse","enableFunction","showDialog","buildRequestModel","TwoFactorProviderRequest","putTwoFactorOrganizationDisable","putTwoFactorDisable","requestClass","TwoFactorBaseComponent","modalService","messagingService","passwordRepromptService","requiresPaid","hasLoaded","setCiphers","selectCipher","repromptCipher","AddEditComponent","cipherAddEditModalRef","comp","onSavedCipher","modal","onDeletedCipher","onRestoredCipher","checkAccess","useTotp","send","canAccessPremium","accessPremium","showPasswordPrompt","CipherReportComponent","ViewContainerRef","read","static","newField","showValue","cipherService","folderService","auditService","collectionService","totpService","passwordGenerationService","eventService","showRevisionDate","hasPasswordHistory","viewingPasswordHistory","viewOnly","passwordRevisionDisplayDate","cleanUp","totpUpdateCode","getTimeInterval","totpTick","totpInterval","setInterval","toggleFavorite","launch","copy","typeI18nKey","aType","copyToClipboard","editMode","collect","generatePassword","confirmed","getOptions","premiumRequired","upgradeOrganization","viewHistory","clearInterval","getCode","totpCode","half","totpCodeFormatted","allowOwnershipAssignment","cloneMode","ownershipOptions","allowPersonal","intervalSeconds","epoch","round","mod","totpSec","totpDash","totpLow","ImportService","searchService","showAddNew","onAttachmentsClicked","onShareClicked","onCollectionsClicked","onCloneClicked","pagedCiphers","pageSize","cipherType","userHasPremiumAccess","didScroll","pagedCiphersCount","refreshing","selectAll","loadMore","pagedLength","pagedSize","refresh","reload","deleted","isPaging","searching","isSearching","resetPaging","doSearch","indexedCiphers","searchCiphers","deletedFilter","share","clone","delete","actionPromise","permanent","isDeleted","deleteCipher","restore","restoreWithServer","protectedFields","includes","displayTotpCopyButton","select","selectCount","checkCipher","checked","getSelected","getSelectedIds","hasTotp","deleteWithServer","softDeleteWithServer","showFixOldAttachments","hasOldAttachments","CiphersComponent","usePolicies","useGroups","useDirectory","useEvents","use2fa","useApi","useSso","useKeyConnector","useResetPassword","selfHost","usersGetPremium","seats","maxCollections","maxStorageGb","ssoBound","identifier","permissions","resetPasswordEnrolled","providerName","isProviderUser","familySponsorshipFriendlyName","familySponsorshipAvailable","planProductType","keyConnectorEnabled","keyConnectorUrl","Owner","Confirmed","Manager","Admin","isAdmin","isManager","canCreateNewCollections","canEditAnyCollection","canDeleteAnyCollection","canDeleteAssignedCollections","canEditAssignedCollections","canManagePolicies","Organization","PolicyResponse","tokenService","getName","getEmail","getLastSync","getAllProviders","lock","logOut","NavbarComponent","getApplicationVersion","version","FooterComponent","OrganizationUserResetPasswordEnrollmentRequest","HashPurpose","publicKey","encryptedPrivateKey","KeysRequest","PolicyData","getMasterPasswordPolicyOptions","strongPassword","setupSubmitActions","kdf","getKdf","kdfIterations","getKdfIterations","makeKey","masterPassword","hashPassword","getEncKey","makeEncKey","remakeEncKey","performSubmitActions","masterPasswordRetype","strengthResult","passwordStrength","getPasswordStrengthUserInput","evaluateMasterPassword","updatePasswordStrength","masterPasswordStrengthTimeout","clearTimeout","masterPasswordScore","userInput","atPosition","ChangePasswordComponent","SelectionReadOnlyRequest","CanLaunchWhitelist","_uri","_domain","_hostname","_host","_canLaunch","UriMatchType","RegularExpression","AddEditCustomFieldsComponent","storageService","onSearchTextChanged","searchPlaceholder","searchTextChanged","GroupingsComponent","selectType","sizeName","SendFileView","hidden","SendTextView","vault","loaded","getAllOrganizations","orgs","sort","organizations","ResetPassword","allowEnrollmentChanges","org","autoEnrollEnabled","showEnrolledStatus","unlinkSso","deleteSsoUser","leave","postLeaveOrganization","toggleResetPasswordEnrollment","keyString","toastStringRef","getOrganizationKeys","rsaEncrypt","encryptedKey","resetPasswordKey","putOrganizationUserResetPasswordEnrollment","OrganizationsComponent","AttachmentResponse","h","PasswordHistoryResponse","CipherResponse","SelectionReadOnlyResponse","NotificationsService","SettingsService","Policy","TwoFactorProviders","description","priority","premium","appIdService","vaultTimeoutService","cryptoFunctionService","setCryptoKeys","selectedTwoFactorProviderType","logIn","captchaToken","makePreloginKey","hashedPassword","LocalAuthorization","localHashedPassword","logInHelper","logInSso","codeVerifier","redirectUrl","logInApiKey","clientId","logInTwoFactor","twoFactorProvider","twoFactorToken","remember","localMasterPasswordHash","ssoRedirectUrl","logInComplete","logInSsoComplete","logInApiKeyComplete","callback","getSupportedTwoFactorProviders","twoFactorProvidersData","supportsDuo","supportsWebAuthn","getDefaultTwoFactorProvider","webAuthnSupported","providerType","providerPriority","provider","postPrelogin","PreloginRequest","preloginResponse","authingWithApiKey","authingWithSso","authingWithPassword","getTwoFactorToken","storedTwoFactorToken","getAppId","appId","deviceRequest","DeviceRequest","emailPassword","codeCodeVerifier","clientIdClientSecret","TokenRequest","Remember","postIdentityToken","clearState","AuthResult","siteKey","twoFactor","twoFactorProviders2","twoFactorResponse","twoFactorProviders","tokenResponse","resetMasterPassword","forcePasswordReset","setTwoFactorToken","setTokens","accessToken","refreshToken","setInformation","getUserId","setKey","setKeyHash","getAndSetKey","apiUseKeyConnector","getKeyConnectorUrl","setEncKey","privateKey","keyPair","postAccountKeys","setEncPrivateKey","randomBytes","keyConnectorRequest","KeyConnectorUserKeyRequest","pubKey","privKey","postUserKeyToKeyConnector","setPasswordRequest","SetKeyConnectorKeyRequest","postSetKeyConnectorKey","biometricLocked","onEditedUsers","organizationUserType","organizationUserStatusType","showSelected","selectedCount","allUsers","loadUsers","getOrganizationUsers","users","entity","getGroupUsers","entityId","getCollectionUsers","accessAll","check","selectedChanged","filterSelected","selections","putGroupUsers","putCollectionUsers","EntityUsersComponent","entityName","ids","OrganizationUserBulkRequest","userNamePipe","showUser","orgUsersUserIdMap","orgUsersIdMap","defaultDates","loadEvents","clearExisting","refreshPromise","morePromise","dates","getEventsProviderUser","continuationToken","getEventsOrganizationUser","getEventsCipher","actingUserId","eventInfo","userName","userEmail","ip","ipAddress","EntityEventsComponent","postKey","apiKey","keyType","ApiKeyComponent","postPurgeCiphers","PurgeVaultComponent","descriptionKey","deleteOrganization","DeleteOrganizationComponent","firstLoaded","showAdjustPayment","showAddCredit","transactionType","TransactionType","getOrganizationBilling","billing","getUserBilling","verifyBank","VerifyBankRequest","amount1","verifyAmount1","amount2","verifyAmount2","verifyBankPromise","postOrganizationVerifyBank","addCredit","paymentSourceInApp","closeAddCredit","changePayment","closePayment","balance","paymentSource","AppleInApp","GoogleInApp","invoices","transactions","UserBillingComponent","onAdded","ppLoading","payPalConfig","ppButtonFormAction","ppButtonBusinessId","creditAmount","ppButtonCustomField","subject","returnUrl","location","ppButtonFormRef","BitPay","req","BitPayInvoiceRequest","credit","amount","creditAmountNumber","postBitPayInvoice","bitPayUrl","formatAmount","floatAmount","parseFloat","toFixed","AddCreditComponent","ElementRef","onAdjusted","PaymentRequest","taxInfoComponent","postAccountPayment","postOrganizationPayment","AdjustPaymentComponent","currentType","storageGbPrice","interval","storageAdjustment","StorageRequest","storageGbAdjustment","action","postAccountStorage","postOrganizationStorage","relativeTo","AdjustStorageComponent","updatePromise","postAccountLicense","postOrganizationLicenseUpdate","UpdateLicenseComponent","processResponse","UpdateTwoFactorDuoRequest","integrationKey","ikey","secretKey","skey","putTwoFactorOrganizationDuo","putTwoFactorDuo","TwoFactorDuoComponent","showPolicyWarning","filterProvider","getTwoFactorProviders","evaluatePolicies","manage","openModal","authenticatorModalRef","TwoFactorAuthenticatorComponent","updateStatus","yubikeyModalRef","TwoFactorYubiKeyComponent","duoModalRef","emailModalRef","TwoFactorEmailComponent","webAuthnModalRef","TwoFactorWebAuthnComponent","recoveryCode","recoveryModalRef","TwoFactorRecoveryComponent","ref","childComponent","TwoFactorAuthentication","TwoFactorSetupComponent","exportService","fb","saved","ExportComponent","exposedPasswordMap","getAllCiphers","allCiphers","exposedPasswordCiphers","passwordLeaked","exposedCount","getAllDecrypted","canManageCipher","ExposedPasswordsReportComponent","originalCipher","loadCollections","loadCipher","getCipherAdmin","encryptCipher","saveCipher","putCipherAdmin","CipherCreateRequest","postCipherAdmin","deleteCipherAdmin","putDeleteCipherAdmin","LoginLinkedId","CardLinkedId","IdentityLinkedId","_i18nKey","LinkedMetadata","LoginUri","view","toLoginUriData","LoginUriData","PasswordHistoryView","importService","format","importBlockedByPolicy","successNavigate","setImportOptions","importOptions","PersonalOwnership","importer","getImporter","fileContents","getFileContents","content","import","getFormatInstructionTitle","results","featuredImportOptions","regularImportOptions","fire","heightAuto","buttonsStyling","iconHtml","input","inputValue","inputAttributes","titleText","showConfirmButton","confirmButtonText","onOpen","popupEl","scrollTo","file","reader","FileReader","readAsText","evt","pre","textContent","onerror","ImportComponent","services","cipherDocs","load2fa","fetch","Request","json","categoryName","responseJson","serviceName","category","service","InactiveTwoFactorReportComponent","ciphersWithPasswords","passwordUseMap","reusedPasswordCiphers","ReusedPasswordsReportComponent","unsecuredCiphers","UnsecuredWebsitesReportComponent","passwordStrengthMap","passwordStrengthCache","weakPasswordCiphers","isUserNameNotEmpty","getCacheKey","hasUserName","cacheKey","scoreKey","WeakPasswordsReportComponent","reupload","reuploadCipherAttachment","AttachmentsComponent","onEventsClicked","accessEvents","getAllFromApiForOrganization","indexCiphers","applyFilter","canViewAllCollections","CollectionsComponent","getCollections","collectionDomains","decryptMany","unassignedCollection","getAllNested","nestedCollections","collapse","grouping","isCollapsed","bulkDelete","promptPassword","selectedIds","ciphersComponent","BulkDeleteComponent","bulkDeleteModalRef","cipherIds","onDeleted","bulkRestore","BulkRestoreComponent","bulkRestoreModalRef","onRestored","bulkShare","selectedCiphers","BulkShareComponent","bulkShareModalRef","onShared","bulkMove","BulkMoveComponent","bulkMoveModalRef","onMoved","notProtected","BulkActionsComponent","SendFile","SendText","CipherWithIdRequest","folder","FolderRequest","SendFileApi","SendTextApi","onCopy","copyText","selection","getSelection","rangeCount","getRangeAt","stringEndPos","newLinePos","SelectCopyDirective","passwordArray","colorizedPassword","character","isSpecial","ColorPasswordPipe","providerOrganizations","emailVerified","masterPasswordHint","culture","twoFactorEnabled","securityStamp","ProfileOrganizationResponse","ProfileProviderResponse","ProfileProviderOrganizationResponse","ProfileResponse","accessId","maxAccessCount","accessCount","expirationDate","deletionDate","hideEmail","SendResponse","webpackEmptyAsyncContext","DisableSend","component","DisableSendPolicyComponent","DisableSendPolicy","minLength","requireUpper","requireLower","requireNumbers","requireSpecial","MasterPasswordPolicyOptions","MasterPasswordPolicyComponent","MasterPasswordPolicy","group","showKeyConnectorInfo","passwordScores","PasswordGenerator","PasswordGeneratorPolicyComponent","PasswordGeneratorPolicy","defaultType","useUpper","useLower","useNumbers","useSpecial","minNumbers","minSpecial","minNumberWords","capitalize","includeNumber","defaultTypes","PersonalOwnershipPolicyComponent","PersonalOwnershipPolicy","RequireSso","RequireSsoPolicyComponent","RequireSsoPolicy","singleOrgEnabled","ResetPasswordPolicyComponent","ResetPasswordPolicy","SendOptions","SendOptionsPolicyComponent","SendOptionsPolicy","disableHideEmail","SingleOrgPolicyComponent","SingleOrgPolicy","MaximumVaultTimeout","TwoFactorAuthenticationPolicyComponent","TwoFactorAuthenticationPolicy","FrontendLayoutComponent","BroadcasterSubscriptionId","broadcasterService","run","command","unsubscribe","showManageTab","showToolsTab","isOwner","canManageUsers","canViewAssignedCollections","canManageGroups","canAccessEventLogs","canAccessImportExport","canAccessReports","OrganizationLayoutComponent","UserLayoutComponent","requiredParameters","failedShortMessage","failedMessage","authedHandler","qParams","EmergencyAccessAcceptRequest","postEmergencyAccessAccept","toast","unauthedHandler","AcceptEmergencyComponent","BaseAcceptComponent","queryParams","errorMessage","isAuthenticated","save","getRedirectRoute","urlTree","parseUrl","OrganizationUserAcceptRequest","performResetPasswordAutoEnroll","postOrganizationUserAccept","resetRequest","orgName","organizationName","policyList","getPoliciesByToken","mapPoliciesFromToken","getResetPasswordPolicyOptions","AcceptOrganizationComponent","HintComponent","routerService","onSuccessfulSubmit","successRoute","LockComponent","togglePassword","authService","showResetPasswordAutoEnrollWarning","onSuccessfulLoginNavigate","goAfterLogIn","sponsorshipToken","invite","loginRedirect","LoginComponent","setupCaptcha","webVaultUrl","getWebVaultUrl","captcha","CaptchaIFrame","info","showCaptcha","handleCaptchaRequired","CaptchaProtectedComponent","DeleteRecoverRequest","postAccountRecoverDelete","RecoverDeleteComponent","TwoFactorRecoveryRequest","postTwoFactorRecover","RecoverTwoFactorComponent","showCreateOrgMessage","layout","referenceData","ReferenceEventRequest","reference","cookie","policiesData","RegisterComponent","RemovePasswordComponent","SetPasswordComponent","IdentifierStorageKey","redirectUri","origin","storedIdentifier","SsoComponent","loggingIn","twoFactorRoute","changePasswordRoute","forcePasswordResetRoute","checkState","getOrgIdentifierFromState","codeChallenge","returnUri","includeUserIdentifier","initiateSsoFormPromise","preValidate","buildAuthorizeUrl","authorizeUrl","sameWindow","preValidateSso","passwordOptions","uppercase","lowercase","numbers","special","hash","codeVerifierHash","getIdentityUrl","getSsoUserIdentifier","userIdentifier","orgIdFromState","onSuccessfulLoginTwoFactorNavigate","sso","onSuccessfulLoginChangePasswordNavigate","onSuccessfulLoginForceResetNavigate","disableFavicon","onSuccessfulLogin","stateSplit","checkStateSplit","anotherMethod","TwoFactorOptionsComponent","twoFactorOptionsModal","onProviderSelected","selectedProviderType","onRecoverSelected","TwoFactorComponent","TwoFactorEmailRequest","recover","UpdateTempPasswordComponent","OrganizationUserResetPasswordRequest","postAccountVerifyEmailToken","VerifyEmailRequest","VerifyEmailTokenComponent","VerifyDeleteRecoverRequest","postAccountRecoverDeleteToken","VerifyRecoverDeleteComponent","canCreate","pagedCollectionsCount","decryptCollections","getUserCollections","assignedCollections","pagedCollections","canEdit","canDelete","CollectionAddEditComponent","addEditModalRef","canSave","onSavedCollection","onDeletedCollection","removeCollection","deleteCollection","usersModalRef","isSearchable","index","accessGroups","groups","getGroups","groupsResponse","getCollectionDetails","g","CollectionRequest","putCollection","postCollection","deletePromise","exportFileName","getProvider","getProviderUsers","requestEvents","startDate","endDate","getEventsOrganization","getUserName","EventsComponent","exportEvents","BaseEventsComponent","pagedGroupsCount","pagedGroups","GroupAddEditComponent","onSavedGroup","onDeletedGroup","removeGroup","deleteGroup","GroupsComponent","access","getGroupDetails","GroupRequest","putGroup","postGroup","accessPolicies","accessSso","ManageComponent","searchPipe","userType","userStatusType","canResetPassword","orgUseResetPassword","orgHasKeys","orgResetPasswordPolicyEnabled","callingUserType","canManageUsersPassword","viewEvents","getPolicyForOrganization","resetPasswordPolicy","getUsers","deleteUser","deleteOrganizationUser","reinviteUser","postOrganizationUserReinvite","confirmUser","OrganizationUserConfirmRequest","postOrganizationUserConfirm","allowResetPassword","orgUser","callingUserHasPermission","UserAddEditComponent","onSavedUser","onDeletedUser","removeUser","UserGroupsComponent","groupsModalRef","bulkRemove","BulkRemoveComponent","bulkRemoveModalRef","getCheckedUsers","bulkReinvite","filteredUsers","Invited","postManyOrganizationUserReinvite","showBulkStatus","bulkConfirm","BulkConfirmComponent","bulkConfirmModalRef","eventsModalRef","resetPassword","ResetPasswordComponent","resetPasswordModalRef","onPasswordReset","deleteWarningMessage","successfullMessage","BulkStatusComponent","bulkStatusModalRef","PeopleComponent","BasePeopleComponent","confirmModalRef","onConfirmedUser","dontAskAgain","getFingerprint","fingerprint","UserConfirmComponent","publicKeys","fingerprints","statuses","done","excludedUsers","isAccepted","getPublicKeys","entry","getCryptoKey","userIdsWithKeys","postConfirmRequest","Accepted","postOrganizationUsersPublicKey","OrganizationUserBulkConfirmRequest","postOrganizationUserBulkConfirm","deleteUsers","deleteManyOrganizationUsers","newPassword","showPassword","getOrganizationUserResetPasswordDetails","kdfType","orgSymKey","decryptToBytes","decPrivateKey","rsaDecrypt","decValue","userEncKey","newKey","newPasswordHash","newEncKey","newMasterPasswordHash","putOrganizationUserResetPassword","newPasswordStrengthTimeout","User","showCustom","manageAllCollectionsCheckboxes","v","manageAssignedCollectionsCheckboxes","getOrganizationUser","setRequestPermissions","clearPermissions","handleDependentPermissions","OrganizationUserUpdateRequest","putOrganizationUser","OrganizationUserInviteRequest","emails","postOrganizationUserInvite","parentChecked","checkboxes","every","pascalize","NestedCheckboxComponent","parentId","getOrganizationUserGroups","userGroups","ug","OrganizationUserUpdateGroupsRequest","groupIds","putOrganizationUserGroups","policyListService","policyIdFromEvents","orgPolicies","orgPolicy","op","PolicyEditComponent","editModalRef","onSavedPolicy","PoliciesComponent","cdr","policyType","ngAfterViewInit","factory","policyComponent","policyFormRef","createComponent","detectChanges","getPolicy","Enabled","putPolicy","canUseApi","OrganizationUpdateRequest","putOrganization","taxFormPromise","deleteModalRef","purgeVault","purgeModalRef","viewApiKey","apiKeyModalRef","postOrganizationApiKey","scope","grantType","apiKeyTitle","apiKeyWarning","apiKeyDescription","rotateApiKey","rotateApiKeyModalRef","isRotation","postOrganizationRotateApiKey","AccountComponent","OrganizationBillingComponent","adjustSeatsAdd","showAdjustSeats","showAdjustSeatAutoscale","adjustStorageAdd","showAdjustStorage","showUpdateLicense","showDownloadLicense","showChangePlan","userOrg","getOrganizationSubscription","sub","reinstate","reinstatePromise","postOrganizationReinstate","cancelPromise","postOrganizationCancel","changePlan","closeChangePlan","changed","downloadLicense","closeDownloadLicense","updateLicense","closeUpdateLicense","updated","subscriptionAdjusted","adjustStorage","closeStorage","removeSponsorship","removeSponsorshipPromise","deleteRemoveSponsorship","subscription","cancelled","cancelAtEndDate","upcomingInvoice","storageGb","storagePercentage","maxAutoscaleSeats","sponsoredSubscriptionItem","FamiliesAnnually2019","isSponsoredSubscription","OrganizationSubscriptionComponent","onChanged","defaultUpgradePlan","defaultUpgradeProduct","Families","ChangePlanComponent","limitSubscription","newSeatCount","currentSeatCount","newMaxSeats","seatAdjustment","OrganizationSubscriptionUpdateRequest","postOrganizationUpdateSubscription","limitSubscriptionChanged","AdjustSubscription","onDownloaded","installationId","getOrganizationLicense","license","licenseString","JSON","stringify","saveFile","DownloadLicenseComponent","access2fa","SettingsComponent","duoComp","getTwoFactorOrganizationProviders","qrScript","UpdateTwoFactorAuthenticatorRequest","putTwoFactorAuthenticator","QRious","element","sendEmail","emailPromise","postTwoFactorEmailSetup","sentEmail","UpdateTwoFactorEmailRequest","putTwoFactorEmail","print","w","write","onafterprint","formatString","keyIdAvailable","keysConfiguredCount","webAuthnResponse","UpdateTwoFactorWebAuthnRequest","deviceResponse","putTwoFactorWebAuthn","removePromise","UpdateTwoFactorWebAuthnDeleteRequest","deleteTwoFactorWebAuthn","readKey","challengePromise","getTwoFactorWebAuthnChallenge","challenge","readDevice","webAuthnChallenge","log","resetWebAuthn","credentials","webAuthnListening","webAuthnError","listening","configured","migrated","nfc","UpdateTwoFactorYubioOtpRequest","key1","key2","key3","key4","key5","putTwoFactorYubiKey","disablePromise","existingKey","padRight","max","badToken","showNewOrganization","_selectedFamilyOrganizationId","onOrganizationCreateSuccess","postPreValidateSponsorshipToken","existingFamilyOrganizations","selectedFamilyOrganizationId","OrganizationSponsorshipRedeemRequest","planSponsorshipType","PlanSponsorshipType","FamiliesForEnterprise","sponsoredOrganizationId","postRedeemSponsorship","FamiliesForEnterpriseSetupComponent","organizationPlansComponent","checkExportDisabled","getExportData","getOrganizationExport","getFileName","collectEvent","manageableCiphers","AttachmentView","elementRef","trueValue","falseValue","propagateChange","_","onHostChange","setProperty","TrueFalseValueDirective","forwardRef","onError","appFallbackSrc","FallbackSrcDirective","ToolsComponent","changeDetectorRef","trashCleanupWarning","groupingsComponent","successfully","selectedAll","selectedTrash","filterDeleted","selectedType","filterCipherType","selectedCollectionId","filterCollection","clearGroupingFilters","clearFilters","go","filterSearchText","editCipherAttachments","madeAttachmentChanges","attachmentsModalRef","onUploadedAttachment","onDeletedAttachment","editCipherCollections","collectionsModalRef","onSavedCollections","addCipher","editCipher","cloneCipher","replaceUrl","VaultComponent","saveCipherAttachment","saveAttachmentWithServer","cipherDomain","deleteCipherAttachment","attachmentId","deleteCipherAttachmentAdmin","onReuploadedAttachment","deletePromises","reuploadPromises","emergencyAccessId","hasUpdatedKey","download","downloading","canAccessAttachments","getAttachmentData","attachmentDownloadResponse","cache","arrayBuffer","buf","decryptFromBytes","decBuf","hasEncKey","admin","saveAttachmentRawWithServer","foundAttachment","a2","deleteAttachmentWithServer","Window","allowSelectNone","loadCipherCollections","saveCollections","CipherCollectionsRequest","putCipherCollectionsAdmin","deleteCiphers","deleteCiphersAdmin","deleteManyWithServer","softDeleteManyWithServer","deleteRequest","CipherBulkDeleteRequest","deleteManyCiphersAdmin","putDeleteManyCiphersAdmin","moveManyWithServer","restoreManyWithServer","nonShareableCount","shareableCiphers","writeableCollections","allCollections","filterCollections","checkedCollectionIds","shareManyWithServer","sendType","passwordRequired","unavailable","maskedText","creatorIdentifier","sendId","decKey","getSendFileDownloadData","accessRequest","downloadData","toggleText","keyArray","SendAccessRequest","pbkdf2","passwordHash","sendResponse","postSendAccess","sendAccess","SendAccess","makeSendKey","AccessComponent","sendService","addSend","disableSend","editSend","sendAddEditModalRef","onSavedSend","onDeletedSend","SendComponent","datePipe","copyLinkToClipboard","link","SendView","EffluxDatesComponent","ControlContainer","NgForm","viewProviders","showChangePassword","showChangeKdf","showChangeEmail","deauthorizeSessions","DeauthorizeSessionsComponent","deauthModalRef","deleteAccount","DeleteAccountComponent","viewUserApiKey","viewUserApiKeyModalRef","postUserApiKey","rotateUserApiKey","rotateUserApiKeyModalRef","postUserRotateApiKey","postSecurityStamp","hidePasswordHint","getProfile","profile","UpdateProfileRequest","putProfile","ProfileComponent","tokenSent","showTwoFactorEmailWarning","newEmail","EmailTokenRequest","postEmailToken","EmailRequest","postEmail","reset","ChangeEmailComponent","rotateEncKey","rotateEncKeyClicked","currentMasterPassword","PasswordRequest","postPassword","updateKey","getPrivateKey","encPrivateKey","UpdateKeyRequest","FolderWithIdRequest","sends","cryptoKey","SendWithIdRequest","postAccountKey","updateEmergencyAccesses","updateAllResetPasswordKeys","getEmergencyAccessTrusted","emergencyAccess","allowedStatuses","EmergencyAccessStatusType","RecoveryInitiated","RecoveryApproved","filteredAccesses","details","getUserPublicKey","granteeId","publicKeyResponse","updateRequest","EmergencyAccessUpdateRequest","waitTimeDays","keyEncrypted","putEmergencyAccess","fileLength","File","SendRequest","PBKDF2_SHA256","kdfOptions","KdfRequest","postAccountKdf","ChangeKdfComponent","orgPlansComponent","EnterpriseAnnually","CreateOrganizationComponent","custom","getSettingsDomains","equivalentDomains","globalEquivalentDomains","domains","excluded","toggleExcluded","globalDomain","customize","UpdateDomainsRequest","excludedGlobalEquivalentDomains","d2","putSettingsDomains","indexTrackBy","DomainRulesComponent","vaultTimeoutAction","theme","vaultTimeout","vaultTimeouts","isDev","localeOptions","supportedTranslationLocales","locale","localeNames","themeOptions","System","getVaultTimeout","disableIcons","enableGravatars","enableFullWidth","startingLocale","startingTheme","valid","setVaultTimeoutOptions","effectiveTheme","htmlEl","documentElement","Light","vaultTimeoutActionChanged","newValue","OptionsComponent","VaultTimeoutInputComponent","NG_VALIDATORS","ngAfterContentInit","LinkSsoComponent","premiumPrice","getPremium","getEmailVerified","finalizePremium","postPremium","paymentResponse","PremiumComponent","canManageSponsorships","hasFamilySponsorshipAvailable","getUserSubscription","usingInAppPurchase","postReinstatePremium","postCancelPremium","UserSubscriptionComponent","breachedAccounts","checkedUsername","BreachReportComponent","history","PasswordGeneratorHistoryComponent","historyModalRef","lengthChanged","minNumberChanged","minSpecialChanged","PasswordGeneratorComponent","regenerate","clear","favorites","showVerifyEmail","showBrowserOutdated","showUpdateKey","showPremiumCallout","showRedeemSponsorship","showProviders","allOrgs","organizationsComponent","selectedFavorites","filterFavorites","selectedFolder","selectedFolderId","filterFolder","shareCipher","ShareComponent","shareModalRef","onSharedCipher","FolderAddEditComponent","folderAddEditModalRef","onSavedFolder","loadFolders","editFolder","onDeletedFolder","UpdateKeyComponent","updateKeyModalRef","makeRequest","getKey","postAccountVerifyEmail","VerifyEmailComponent","ProvidersComponent","canActivate","OrganizationGuardService","Permissions","AccessEventLogs","AccessImportExport","AccessReports","CreateNewCollections","EditAnyCollection","DeleteAnyCollection","EditAssignedCollections","DeleteAssignedCollections","ManageGroups","ManageOrganization","ManagePolicies","ManageUsers","ManageUsersPassword","ManageSso","canManageSso","OrganizationTypeGuardService","routerState","isLocked","promptBiometric","getConvertAccountRequired","AuthGuardService","homepage","LockGuardService","UnauthGuardService","EmergencyAddEditComponent","postEmergencyAccessView","viewAttachments","EmergencyAccessAttachmentsComponent","decCiphers","oldKeyBuffer","oldEncKey","cipherResponse","cipherData","getLocaleSortingFunction","EmergencyAccessViewComponent","emergencyAccessType","EmergencyAccessType","emergencyAccessStatusType","isOrganizationOwner","trustedContacts","getEmergencyAccessGranted","grantedContacts","EmergencyAccessAddEditComponent","onSaved","reinvite","contact","postEmergencyAccessReinvite","confirm","updateUser","autoConfirm","EmergencyAccessConfirmComponent","onConfirmed","doConfirmation","deleteEmergencyAccess","EmergencyAccessGranteeDetailsResponse","removeGrantee","removeGrantor","requestAccess","postEmergencyAccessInitiate","approve","View","postEmergencyAccessApprove","postEmergencyAccessReject","takeover","EmergencyAccessTakeoverComponent","takeoverModalRef","onDone","debug","EmergencyAccessConfirmRequest","postEmergencyAccessConfirm","EmergencyAccessComponent","creationDate","grantorId","EmergencyAccessGrantorDetailsResponse","EmergencyAccessTakeoverResponse","EmergencyAccessViewResponse","waitTimes","getEmergencyAccess","waitTime","EmergencyAccessInviteRequest","postEmergencyAccessInvite","getEmergencyGrantorPolicies","postEmergencyAccessTakeover","takeoverResponse","EmergencyAccessPasswordRequest","postEmergencyAccessPassword","availableSponsorshipOrgs","activeSponsorshipOrgs","selectedSponsorshipOrgId","sponsorshipEmail","postCreateSponsorship","sponsoredEmail","friendlyName","resetForm","forceReload","SponsoredFamiliesComponent","sponsoringOrg","sponsorshipRemoved","revokeSponsorship","revokeSponsorshipPromise","doRevokeSponsorship","resendEmail","resendEmailPromise","postResendSponsorshipOffer","deleteRevokeSponsorship","SponsoringOrgRowComponent","PasswordRepromptComponent","compareAndUpdateKeyHash","blur","BlurClickDirective","CollectionResponse","CollectionDetailsResponse","CollectionGroupDetailsResponse","GlobalDomainResponse","DomainsResponse","FolderResponse","businessAddress1","businessAddress2","businessAddress3","businessCountry","businessTaxNumber","PlanResponse","OrganizationResponse","nameLocalizationKey","descriptionLocalizationKey","baseStorageGb","maxUsers","maxAdditionalSeats","maxAdditionalStorage","hasSelfHost","hasPolicies","hasGroups","hasDirectory","hasEvents","has2fa","hasApi","hasSso","hasResetPassword","upgradeSortOrder","displaySortOrder","stripePlanId","stripeSeatPlanId","stripeStoragePlanId","stripePremiumAccessPlanId","storageName","BillingSubscriptionResponse","BillingSubscriptionUpcomingInvoiceResponse","SubscriptionResponse","trialEndDate","periodStartDate","periodEndDate","cancelledDate","BillingSubscriptionItemResponse","quantity","OrganizationUserBulkPublicKeyResponse","KeyResponse","TwoFactorWebAuthnResponse","attestation","authenticatorSelection","excludeCredentials","extensions","pubKeyCredParams","rp","ChallengeResponse","descriptor","originalMethod","caches","getCache","argsCacheKey","args","onFinally","nestedTraverse","nodeTree","partIndex","delimiter","partName","node","TreeNode","ServiceUtils","children","newPartName","getTreeNodeObject","timersMap","LogLevelType","Debug","Info","Warning","level","warn","time","hrtime","timeEnd","elapsed","EEFLongWordList","build","CipherWithIds","CollectionWithId","Folder","FolderWithId","FolderData","IgnoredProperties","loginPropertyParsers","setLoginUsername","setLoginPassword","setLoginUris","creditCardPropertyParsers","setCreditCardNumber","setCreditCardVerification","setCreditCardCardholderName","setCreditCardExpiry","identityPropertyParsers","setIdentityFirstName","setIdentityInitial","setIdentityLastName","setIdentityUserName","setIdentityEmail","setIdentityPhone","setIdentityCompany","quoteChar","escapeChar","getProp","setNotes","setCipherType","altUsername","context","CipherImportContext","setKnownLoginValue","setKnownCreditCardValue","setKnownIdentityValue","setUnknownValue","entries","agg","getPropByRegexp","regexp","matchingKeys","getPropIncluding","includesMap","importRecord","func","lowerProperty","readableDate","toUTCString","Hidden","urls","OnePasswordCsvImporter","NotificationType","SendTextData","SendFileData","SendData","enableProdMode","platformBrowser","bootstrapModule","preserveWhitespaces","AppModule","AppComponent","OssModule","BrowserAnimationsModule","FormsModule","ServicesModule","ToasterModule","forRoot","InfiniteScrollModule","DragDropModule","OssRoutingModule","WildcardRoutingModule","NgModule","imports","declarations","bootstrap","settingsService","sanitizer","notificationsService","toasterConfig","ToasterConfig","showCloseButton","mouseoverTimerStop","animation","limit","lastActivity","idleTimer","isIdle","runOutsideAngular","onmousemove","recordActivity","onmousedown","ontouchstart","onclick","onscroll","onkeypress","updateConnection","expired","crypto","subtle","setFullWidth","setConvertAccountRequired","jq","uploadEvents","clearEvents","setLastSync","clearToken","clearKeys","purge","clearIndex","now","idleStateChanged","sanitize","SecurityContext","HTML","bodyOutputType","BodyOutputType","TrustedHtml","trustedHtml","disconnectFromInactivity","reconnectFromActivity","subscribers","messageCallback","routes","path","pathMatch","redirectTo","RouterModule","useHash","paramsInheritanceStrategy","postPasswordHint","PasswordHintRequest","pin","pinLock","webVaultHostname","invalidPinAttempts","isPinLockSet","pinSet","supportsBiometric","isBiometricLockSet","hasKeyStored","supportsSecureStorage","biometricLock","hideInput","vaultUrl","failed","makeKeyFromPin","decPin","setKeyAndContinue","getKeyHash","storedKeyHash","passwordValid","ServerAuthorization","serverKeyHash","postAccountVerifyPassword","localKeyHash","makePinKey","pinKey","unlockBiometric","doContinue","everBeenUnlocked","Keys","rememberEmail","focusInput","launchSsoBrowser","ssoRedirectUri","ssoCodeVerifier","webUrl","errorCallback","infoCallback","parsedMessage","iframe","height","width","initComponent","createParams","translationLocale","IFrameComponent","iframeId","parseFunction","parseMessage","connectorLink","stop","sendMessage","contentWindow","postMessage","base64Encode","cleanup","removeEventListener","URLSearchParams","validMessage","confirmMasterPassword","hint","showTerms","acceptPolicies","useLowerKdf","isIE","RegisterRequest","orgInvite","postRegister","confirmField","captchaResponse","continuing","leaving","getManagingOrganization","convert","migrateUser","removeConvertAccountRequired","syncLoading","resetPasswordAutoEnroll","getOrganizationAutoEnrollStatus","resetPasswordEnabled","SetPasswordRequest","setPassword","onSetPasswordSuccess","onSuccessfulChangePassword","orgIdentifier","cd","focusTrapFactory","loadChildComponent","focusTrap","focusFirstTabbableElementWhenReady","componentFactory","modalContentRef","autoFocusEl","template","_parentInjector","_additionalTokens","notFoundValue","flags","webAuthnReady","webAuthnNewTab","webAuthn","twoFactorEmail","loginRoute","authing","needsLock","WebAuthnIFrame","cleanupWebAuthn","providerData","authWebAuthn","DuoWebSDK","Host","sig_request","Signature","submit_callback","sig","doToast","postTwoFactorEmail","getDevice","getDeviceString","pushToken","codes","device","toIdentityToken","client_id","grant_type","client_secret","code_verifier","redirect_uri","deviceIdentifier","deviceName","twoFactorRemember","alterIdentityTokenHeaders","headers","btnText","allow","choose","UpdateTempPasswordRequest","putUpdateTempPassword","dirtyDates","appApiPromiseUnfulfilled","parseDates","exportPromise","export","loadAndParseEvents","EventView","getEventExport","statusMap","pagedUsers","pagedUsersCount","confirmedCount","acceptedCount","checkUser","mapIndex","disabledByPolicy","exportForm","formatOptions","DisablePersonalVaultExport","warningDialog","verifyUser","downloadFile","encryptedFormat","getExport","extension","csv","onCancelled","onEditAttachments","onShareCipher","onEditCollections","onGeneratePassword","showCardNumber","showCardCode","currentDate","canUseReprompt","typeOptions","cardBrandOptions","cardExpMonthOptions","identityTitleOptions","uriMatchOptions","Domain","StartsWith","Exact","Never","autofillOnPageLoadOptions","myEmail","addEditCipherInfo","organizationChanged","previousCipherId","addUri","removeUri","trackByFunction","editCollections","restorePromise","restoreCipher","toggleCardNumber","Cipher_ClientToggledCardNumberVisible","toggleCardCode","toggleUriOptions","loginUriMatchChanged","checkPassword","checkPasswordPromise","matches","repromptChanged","saveWithServer","addFieldType","fieldType","eventType","addFieldTypeOptions","Boolean","addFieldLinkedTypeOption","Linked","thisCipherType","setLinkedFieldOptions","firstChange","resetCipherLinkedFields","addField","removeField","toggleFieldValue","drop","moveItemInArray","previousIndex","currentIndex","activeCipherId","onCipherClicked","onCipherRightClicked","onAddCipher","onAddCipherOptions","searchPending","searchTimeout","rightClickCipher","addCipherOptions","selectedCollectionIds","saveCollectionsWithServer","showFolders","showCollections","showFavorites","showTrash","onAllClicked","onFavoritesClicked","onTrashClicked","onCipherTypeClicked","onFolderClicked","onAddFolder","onEditFolder","onCollectionClicked","setLoaded","collapsedGroupings","Set","nestedFolders","clearSelections","selectFavorites","selectTrash","selectFolder","selectCollection","idPrefix","SendAccessView","filteredSends","hasSearched","onSuccessfulLoad","applyTextSearch","removePassword","removePasswordWithServer","onSuccessfulRemovePassword","onSuccessfulDelete","getSendUrl","urlB64Key","searchSends","copyLink","alertShown","sendLinkBaseUrl","isSafari","isFirefox","setDates","loadSend","hasPassword","encryptSend","encSend","copySuccess","typeChanged","toggleOptions","sendData","togglePasswordVisible","BrowserPath","DateField","DatePreset","datesChanged","datesForm","FormGroup","selectedDeletionDatePreset","selectedExpirationDatePreset","defaultDeletionDateTime","defaultExpirationDateTime","fallbackDeletionDate","fallbackDeletionTime","fallbackExpirationDate","fallbackExpirationTime","deletionDatePresets","OneHour","OneDay","TwoDays","ThreeDays","SevenDays","ThirtyDays","expirationDatePresets","Firefox","Safari","Default","formattedDeletionDate","browserPath","miliseconds","setTime","safariTimePresetOptions","DeletionDate","ExpriationDate","nextWeek","setInitialFormValues","emitDates","onDeletionDatePresetSelect","clearExpiration","formattedExpirationDate","initialDeletionDate","toTimeString","initialExpirationDate","twentyFourHour","noon","midnight","ams","pms","hour","minutes","midnightOption","twelveHour","noonOption","amOption","pmOption","validTimes","previousValue","form","hours","CUSTOM_VALUE","vaultTimeoutPolicy","vaultTimeoutPolicyHours","vaultTimeoutPolicyMinutes","validatorChange","current","onTouched","validate","control","policyError","registerOnValidatorChange","showSelect","onSelected","avoidAmbiguous","passTypeOptions","optionsResponse","ambiguous","addHistory","sliderChanged","saveOptions","sliderInput","normalizeOptions","copyOptions","getHistory","cipherView","shareWithServer","registerLocaleData","DatePipe","CommonModule","forChild","ReactiveFormsModule","AvatarComponent","BoxRowDirective","SearchCiphersPipe","elRef","formEls","formEl","contains","tagName","inputEl","click","language","BroadcasterMessagingService","consoleLogService","WebPlatformUtilsService","HtmlStorageService","secureStorageService","MemoryStorageService","WebCryptoFunctionService","AppIdService","fileUploadService","FileUploadService","ContainerService","eventLoggingService","initFactory","setUrls","baseUrl","onDefaultSystemThemeChange","sysTheme","attachToWindow","useClass","useValue","APP_INITIALIZER","useFactory","deps","LOCALE_ID","subscriber","arg","localStorageKeys","localStorageStartsWithKeys","memoryStorageStartsWithKeys","memoryStorage","isLocalStorage","localStorage","getItem","isMemoryStorage","sessionStorage","setItem","removeItem","swKey","systemLanguage","localesDirectory","formattedLocale","filePath","getLocalesJson","defaultMessages","localeMessages","Intl","Collator","numeric","sensitivity","loadMessages","translate","messagesObj","locales","placeholders","placeProp","replaceToken","replaceContent","store","identityClientId","browserCache","prefersColorSchemeDark","matchMedia","chrome","isChrome","isEdge","isOpera","isVivaldi","isMacAppStore","isViewOpen","rel","blobData","blobOptions","blob","fileNameLower","doDownload","endsWith","Blob","msSaveOrOpenBlob","msSaveBlob","createObjectURL","position","confirmText","cancelText","bodyIsHtml","iconClasses","bootstrapModal","removeAttribute","iconHtmlStr","html","showCancelButton","cancelButtonText","clipboardData","setData","queryCommandSupported","textarea","copyEl","execCommand","readFromClipboard","authenticateBiometric","getDefaultSystemTheme","addListener","logoutCallback","customUserAgent","isWebClient","isDesktopClient","Headers","qsStringify","getCredentials","isJsonResponse","IdentityTokenResponse","TwoFactorProviders2","clearTwoFactorToken","IdentityTwoFactorResponse","IdentityCaptchaResponse","doAuthRefresh","BillingResponse","TaxInfoResponse","PreloginResponse","getAccountRevisionDate","PaymentResponse","postIapCheck","ApiKeyResponse","postAccountRequestOTP","postAccountVerifyOTP","postConvertToKeyConnector","getFolder","postFolder","putFolder","deleteFolder","getSend","apiUrl","addSendIdHeader","SendAccessResponse","SendFileDownloadDataResponse","getSends","ListResponse","postSend","postFileTypeSend","SendFileUploadDataResponse","renewSendFileUploadUrl","fileId","postSendFile","postSendFileLegacy","putSend","putSendRemovePassword","deleteSend","getCipher","getCiphersOrganization","postCipher","postCipherCreate","putCipher","deleteManyCiphers","putMoveCiphers","putShareCipher","putShareCiphers","putCipherCollections","postImportCiphers","postImportOrganizationCiphers","putDeleteCipher","putDeleteManyCiphers","putRestoreCipher","putRestoreCipherAdmin","putRestoreManyCiphers","postCipherAttachment","AttachmentUploadDataResponse","postCipherAttachmentLegacy","postCipherAttachmentAdminLegacy","postShareCipherAttachment","renewAttachmentUploadUrl","postAttachmentFile","dr","deleteCollectionUser","GroupDetailsResponse","GroupResponse","deleteGroupUser","OrganizationUserDetailsResponse","OrganizationUserUserDetailsResponse","OrganizationUserResetPasswordDetailsReponse","OrganizationAutoEnrollStatusResponse","OrganizationUserBulkResponse","postImportDirectory","postPublicImportDirectory","TaxRateResponse","getSync","SyncResponse","TwoFactorProviderResponse","TwoFactorAuthenticatorResponse","TwoFactorEmailResponse","TwoFactorDuoResponse","TwoFactorYubiKeyResponse","TwoFactorRecoverResponse","rawId","getClientExtensionResults","AttestationObject","attestationObject","clientDataJson","clientDataJSON","OrganizationSubscriptionResponse","getOrganizationSso","OrganizationSsoResponse","postOrganizationSso","postOrganizationSeat","OrganizationKeysResponse","postProviderSetup","ProviderResponse","putProvider","ProviderUserUserDetailsResponse","getProviderUser","ProviderUserResponse","postProviderUserInvite","postProviderUserReinvite","postManyProviderUserReinvite","ProviderUserBulkResponse","postProviderUserBulkConfirm","deleteManyProviderUsers","postProviderUserAccept","postProviderUserConfirm","postProviderUsersPublicKey","ProviderUserBulkPublicKeyResponse","putProviderUser","deleteProviderUser","getProviderClients","ProviderOrganizationOrganizationDetailsResponse","postProviderAddOrganization","ProviderOrganizationResponse","deleteProviderOrganization","getEvents","addEventParameters","EventResponse","getEventsProvider","postEventsCollect","getActiveBearerToken","authHeader","getEventsUrl","UserKeyResponse","getHibpBreach","BreachAccountResponse","getUserKeyFromKeyConnector","handleError","KeyConnectorUserKeyResponse","getKeyConnectorAlive","getToken","tokenNeedsRefresh","nativeFetch","sponsoredOrgId","sponsoringOrganizationId","sponsoringOrgId","getRefreshToken","doRefreshToken","getClientId","getClientSecret","doApiTokenRefresh","apiKeyRefresh","decodedToken","decodeToken","refresh_token","hasResponse","alterHeaders","getApiUrl","requestUrl","requestInit","tokenError","isTextResponse","Message","hasBaseUrl","typeHeader","fileUploadType","cipherMiniResponse","BillingSourceResponse","BillingTransactionResponse","BillingInvoiceResponse","cardBrand","needsVerification","pdfUrl","paid","createdDate","refunded","partiallyRefunded","refundedAmount","addedDate","breachDate","dataClasses","isActive","isVerified","logoPath","modifiedDate","pwnCount","access_token","expiresIn","expires_in","tokenType","token_type","SsoConfigApi","SsoUrls","callbackPath","signedOutCallbackPath","spEntityId","spMetadataUrl","spAcsUrl","SsoType","OpenIdConnectRedirectBehavior","Saml2BindingType","Saml2NameIdFormat","Saml2SigningBehavior","configType","authority","metadataAddress","redirectBehavior","getClaimsFromUserInfoEndpoint","additionalScopes","additionalUserIdClaimTypes","additionalEmailClaimTypes","additionalNameClaimTypes","acrValues","expectedReturnAcrValue","spNameIdFormat","spOutboundSigningAlgorithm","spSigningBehavior","spMinIncomingSigningAlgorithm","spWantAssertionsSigned","spValidateCertificates","idpEntityId","idpBindingType","idpSingleSignOnServiceUrl","idpSingleLogoutServiceUrl","idpArtifactResolutionServiceUrl","idpX509PublicCert","idpOutboundSigningAlgorithm","idpAllowUnsolicitedAuthnResponse","idpDisableOutboundLogoutRequests","idpWantAuthnRequestsSigned","KeysResponse","OrganizationUserResponse","userProfile","settings","taxIdType","makeAndGetAppId","getAnonymousAppId","existingId","guid","hashBytes","hashStart","hashEnding","leakedHashes","throttle","throttleKey","allThrottles","getThrottles","throttles","argsThrottleKey","queue","exec","DomainMatchBlacklist","sortedCiphersCache","SortedCiphersCache","sortCiphersByLastUsed","_decryptedCipherCache","clearCache","decryptedCipherCache","existingCipher","hasFields","existingHiddenFields","ef","matchedField","encryptObjProperty","encryptCipherData","encryptFields","encryptPasswordHistories","encryptAttachments","attachmentsModel","encAttachments","fieldsModel","encFields","encryptField","encField","fieldModel","phModels","encPhs","encryptPasswordHistory","encPh","phModel","hasKey","getAllDecryptedForGrouping","groupingId","getAllDecryptedForUrl","includeOtherTypes","defaultMatch","eqDomainsPromise","getEquivalentDomains","eqDomains","eqDomain","matchingDomains","domainUrlHost","urlHost","getLastUsedForUrl","getCipherForUrl","getLastLaunchedForUrl","getNextCipherForUrl","updateLastUsedIndexForUrl","updateLastUsedIndex","updateLastUsedDate","ciphersLocalData","cached","updateLastLaunchedDate","lastLaunched","saveNeverDomain","upsert","attachmentPromises","shareAttachmentWithServer","encCipher","CipherShareRequest","encCiphers","CipherBulkShareRequest","unencryptedFile","readAsArrayBuffer","cData","filename","encFileName","dataEncKey","encryptToBytes","encData","fileSize","adminRequest","uploadDataResponse","uploadCipherAttachment","legacyServerAttachmentFileUpload","filepath","contentType","CipherBulkMoveRequest","deleteAttachment","aLastUsed","bLastUsed","bothNotNull","sortCiphersByLastUsedThenName","aName","bName","softDelete","setDeletedDate","clearDeletedDate","CipherBulkRestoreRequest","restores","attachmentView","attachmentResponse","theObj","modelProp","lastUsed","isCached","addCiphers","getLastLaunched","getLastUsed","getNext","sequentialize","comparator","sortedCiphersByUrl","timeouts","Ciphers","resetTimer","lastUsedIndex","y","valueOf","getNextIndex","decryptedCollectionCache","decCollections","nodes","collectionCopy","getNested","attachToGlobal","encOrgKeys","encProviderKeys","keyHash","platformUtilService","storeKey","setOrgKeys","providerOrgs","providerOrg","setProviderKeys","providerKeys","keySuffix","getKeyFromStorage","symmetricKey","retrieveKeyFromStorage","validateKey","encKeyCipher","decEncKey","stretchKey","getPublicKey","rsaExtractPublicKey","keyFingerprint","hkdfExpand","userFingerprint","hashPhrase","getOrgKeys","getProviderKeys","hasKeyInMemory","clearKey","clearSecretStorage","legacyEtmKey","clearStoredKey","clearKeyHash","clearEncKey","memoryOnly","clearKeyPair","clearOrgKeys","clearProviderKeys","clearPinProtectedKey","toggleKey","salt","protectedKeyCs","rsaGenerateKeyPair","publicB64","privateEnc","keyMaterial","hkdf","sendKey","hashPurpose","iterations","getKeyForEncryption","theKey","buildEncKey","plainValue","plainBuf","aesEncrypt","encObj","encValue","macLen","encBytes","EncArrayBuffer","privateKeyValue","Rsa2048_OaepSha256_HmacSha256_B64","Rsa2048_OaepSha1_HmacSha256_B64","alg","encString","aesDecryptToBytes","decipher","aesDecryptToUtf8","encBuf","ctBytes","ivBytes","macBytes","randomNumber","min","rval","range","bitsNeeded","ceil","log2","bytesNeeded","mask","pow","byteArray","shouldStoreKey","biometricUnlock","EncryptedObject","macData","hmac","keyForEnc","resolveLegacyKey","fastParams","aesDecryptFastParameters","hmacFast","computedMac","compareFast","aesDecryptFast","aesDecrypt","minimumEntropy","entropyPerWord","numWords","hashArr","entropyAvailable","phrase","hashNumber","bigInt","fromArray","remainder","divide","encKeyEnc","urlsSubject","getNotificationsUrl","notificationsUrl","identityUrl","eventsUrl","setUrlsFromStorage","urlsObj","api","icons","notifications","webVault","keyConnector","envUrls","EnvironmentUrls","saveSettings","formatUrl","getUrls","checkOnInterval","uploadImmediately","orgIds","eventCollection","EventData","EventRequest","getEncryptedExport","getDecryptedExport","getOrganizationEncryptedExport","getOrganizationDecryptedExport","unparse","Event","padNumber","getSeconds","decFolders","buildCommonCipher","encrypted","encKeyValidation","jsonDoc","encKeyValidation_DO_NOT_EDIT","collectionPromises","decCol","cipherPromises","decCipher","padCharacter","numString","login_uri","login_username","login_password","login_totp","toView","values","toDomain","azureFileUploadService","AzureFileUploadService","bitwardenFileUploadService","BitwardenFileUploadService","uploadSendFile","uploadData","encryptedFileData","FileUploadType","Direct","Azure","upload","renewalCallback","encryptedFileName","azureUploadBlob","azureUploadBlocks","urlObject","searchParams","blobResponse","blockSize","getMaxBlockSize","blockIndex","numBlocks","blocksStaged","renewUrlIfNecessary","blockUrl","blockId","encodedBlockId","blockData","blockHeaders","blockRequest","blockResponse","blockListUrl","blockListXml","expiry","utfBlockId","blockIdList","xml","Version","day","compareTo","decryptedFolderCache","noneFolder","folderCopy","cId","updates","getImportOptions","importResult","halfway","last","badData","postImport","errorResponse","handleServerError","getImporterInstance","BitwardenCsvImporter","BitwardenJsonImporter","LastPassCsvImporter","KeePassXCsvImporter","AviraCsvImporter","BlurCsvImporter","SafeInCloudXmlImporter","PadlockCsvImporter","KeePass2XmlImporter","ChromeCsvImporter","FirefoxCsvImporter","UpmCsvImporter","SaferPassCsvImporter","SafariCsvImporter","MeldiumCsvImporter","OnePassword1PifImporter","OnePasswordWinCsvImporter","OnePasswordMacCsvImporter","KeeperCsvImporter","PasswordDragonXmlImporter","EnpassCsvImporter","EnpassJsonImporter","PasswordSafeXmlImporter","DashlaneJsonImporter","MSecureCsvImporter","StickyPasswordXmlImporter","TrueKeyCsvImporter","ClipperzHtmlImporter","RoboFormCsvImporter","AscendoCsvImporter","PasswordBossJsonImporter","ZohoVaultCsvImporter","SplashIdCsvImporter","PassKeepCsvImporter","GnomeJsonImporter","PasswordAgentCsvImporter","PasspackCsvImporter","PassmanJsonImporter","AvastCsvImporter","AvastJsonImporter","FSecureFskImporter","KasperskyTxtImporter","RememBearCsvImporter","PasswordWalletTxtImporter","MykiCsvImporter","SecureSafeCsvImporter","LogMeOnceCsvImporter","BlackBerryCsvImporter","ButtercupCsvImporter","CodebookCsvImporter","EncryptrCsvImporter","YotiCsvImporter","NordPassCsvImporter","ImportCiphersRequest","KvpRequest","ImportOrganizationCiphersRequest","itemType","fieldLower","web","logins","custName","note","pwd","loginName","cards","holderName","cardNumber","cvv","website","secondary_username","col","addCollection","collectionIndex","delimPosition","parseEncrypted","parseDecrypted","groupingsMap","fav","extra","OfficialProps","processingCustomFields","currentVersion","actionType","labelLower","Category","Favorite","Entry","Note","TOTP","Website","PIN","Account","HandledResults","ADDRESS","processAddress","AUTHENTIFIANT","processAuth","BANKSTATEMENT","processNote","IDCARD","PAYMENTMEANS_CREDITCARD","processCard","IDENTITY","processIdentity","credential","secondaryLogin","fullName","nameParts","pseudo","addressName","addressFull","zipcode","owner","nameProperty","Label","Notes","CVV","Expiry","expParts","firstRow","containsField","fieldValue","fieldName","fieldNameLower","foldersMap","foldersIndexMap","folderTree","buildFolderTree","flattenFolderTree","template_type","processLogin","sensitive","uuid","parent_uuid","titlePrefix","tree","creditNumber","creditCvv","creditExpiry","keyRing","display_name","attributes","attr","username_value","NotesHeader","ApplicationsHeader","WebsitesHeader","Delimiter","notesData","applicationsData","websitesData","workingData","parseDataCategory","applications","websites","nameKey","itemComment","itemCommentKey","colonIndex","rootGroup","traverse","isRootNode","groupPrefixName","groupName","nameEl","cipherIndex","entryString","valueEl","keyEl","attrs","ProtectInMemory","Group","buildBaseCipher","parseSecureNote","parseCard","parseIdentity","ccnum","cardCipher","profilename","firstname","lastname","ccname","cccsc","ccexp","ccexpParts","middlename","zip","extraParts","processedNote","typeParts","mappedData","parseSecureNoteMapping","monthString","processingNotes","extraPart","DisplayName","UserName","Url","nickname","additionalInfo","twoFactAuthToken","cardName","exp_month","exp_year","firstAddressLine","secondAddressLine","zipCode","record","recordType","evaluateType","cardholdername","cardnumber","cvc","expirydate","processName","full_name","phone_number","line","trashed","processStandardItem","processWinOpVaultItem","overview","URLs","parsePasswordHistory","notesPlain","parseFields","sections","section","openContents","faveIndex","typeName","secureContents","maxSize","designationKey","valueKey","fieldDesignation","street","setIdentityAddress","expSplit","tags","tag","getValue","custom_fields","customField","field_type","tagsJson","Tags","tagJson","__parsed_extra","fieldsJson","extraFields","fieldJson","newVersion","altFormat","login_url","identifiers","valObj","expDate","cf","records","categoryText","accountName","passwordSafe","notesDelimiter","getAttribute","groupText","trash","cardholder","verification","expiryMonth","expMonthNumber","expiryYear","expYearNumber","Name","Pwd","Rf_fields","OTPAuth","labelEl","cardEl","labelIdEl","labelId","fieldEl","notesEl","candidates","choice","Comment","parseFieldsToNotes","startIndex","loginNodes","loginNode","accountId","usernameText","passwordText","linkText","notesText","accountLogin","account","parentElement","buildGroupText","PropertiesToIgnore","memo","kind","expiryDate","document_content","ChamberName","parseData","SecretData","CustomData","setUsesKeyConnector","userNeedsMigration","loggedInUsingSso","getIsExternal","requiredByOrganization","userIsNotUsingKeyConnector","userKeyResponse","keyArr","connected","inactive","reconnectTimer","signalrConnection","off","signalR","HubConnectionBuilder","withUrl","accessTokenFactory","skipNegotiation","transport","HttpTransportType","WebSockets","withHubProtocol","signalRMsgPack","MessagePackHubProtocol","on","processNotification","NotificationResponse","onclose","reconnect","isAuthedAndUnlocked","sync","notification","contextId","payloadUserId","UserId","myUserId","SyncCipherCreate","SyncCipherUpdate","SyncCipherDelete","SyncLoginDelete","SyncFolderCreate","SyncFolderUpdate","SyncFolderDelete","SyncVault","SyncCiphers","SyncSettings","SyncOrgKeys","LogOut","SyncSendCreate","SyncSendUpdate","SyncSendDelete","syncUpsertCipher","syncDeleteCipher","syncUpsertFolder","syncDeleteFolder","syncUpsertSend","syncDeleteSend","SyncCipherNotification","SyncFolderNotification","UserNotification","SyncSendNotification","DefaultOptions","minNumber","minUppercase","minLowercase","wordSeparator","generatePassphrase","sanitizePasswordLength","positions","shuffleArray","allCharSet","lowercaseCharSet","uppercaseCharSet","numberCharSet","specialCharSet","positionChars","randomCharIndex","listLength","wordList","wordIndex","appendRandomNumberToRandomWord","optionsCache","enforcePasswordGeneratorPoliciesOnOptions","enforcedOptions","getPasswordGeneratorPolicyOptions","useUppercase","useLowercase","numberCount","specialCount","PasswordGeneratorPolicyOptions","currentPolicy","decryptHistory","currentHistory","matchesPrevious","unshift","GeneratedPasswordHistory","encryptHistory","newHistory","userInputs","globalUserInputs","finalUserInputs","zxcvbn","decrypted","array","forGeneration","minUppercaseCalc","minLowercaseCalc","minNumberCalc","minSpecialCalc","inEffect","policyCache","toLocaleLowerCase","toLocaleUpperCase","resetPasswordPolicyOptions","ResetPasswordPolicyOptions","policiesResponse","policyFilter","filteredPolicies","policySet","isExcemptFromPolicies","isExemptFromPolicies","indexing","searchableMinLength","builder","lunr","Builder","boost","extractor","uriExtractor","fieldExtractor","attachmentExtractor","isArray","getIndexForSearch","searchCiphersBasic","ciphersMap","searchResults","Query","wildcard","LEADING","TRAILING","q","tokenizer","term","joined","protocolIndex","queryIndex","decryptedSendCache","fileData","Send","ArrayBuffer","encryptFileData","parseFile","decSends","legacyServerSendFileUpload","encFileData","settingsCache","getSettingsKey","setEquivalentDomains","setSettingsKey","getSettings","syncInProgress","lastSync","toJSON","forceSync","allowThrowOnError","syncStarted","syncCompleted","needsSync","needsSyncing","syncProfile","syncFolders","syncCollections","syncCiphers","syncSends","syncSettings","syncPolicies","isEdit","localFolder","remoteFolder","shouldUpdate","localCipher","checkCollections","remoteCipher","localSend","remoteSend","getSecurityStamp","stamp","setSecurityStamp","setEmailVerified","setForcePasswordReset","OrganizationData","ProviderData","replaceOrganizations","replaceProviders","setToken","setRefreshToken","setClientId","setClientSecret","storeTokenValue","toggleTokens","decoded","getTokenExpirationDate","setUTCSeconds","tokenSecondsRemaining","offsetSeconds","msRemaining","email_verified","getIssuer","iss","amr","skipTokenStorage","B32Chars","SteamChars","period","digits","keyB32","isOtpAuth","isSteamAuth","digitParams","periodParam","algParam","timeHex","leftPad","decToHex","timeBytes","keyBytes","b32ToBytes","sign","offset","fullCode","trunc","isAutoCopyEnabled","b32ToHex","cleanedInput","bits","hex","byteIndex","chunk","signature","getForcePasswordReset","clearOrganizations","clearProviders","getOrganizationByIdentifier","Provider","isProviderAdmin","ProviderUserStatusType","ProviderUserType","ProviderAdmin","alreadyHashed","validateInput","VerifyOTPRequest","lockedCallback","loggedOutCallback","startCheck","checkVaultTimeout","lastActive","vaultTimeoutSeconds","allowSoftLock","ua","isOldSafari","algorithm","forgeLen","passwordBytes","toByteString","saltBytes","derivedKeyBytes","forge","wcLen","passwordBuf","toBuf","saltBuf","pbkdf2Params","toWebCryptoAlgorithm","importKey","impKey","deriveBits","ikm","outputByteSize","infoBuf","hkdfParams","prk","hashLen","infoArr","runningOkmLength","previousT","okm","md","md5","sha1","valueBytes","update","digest","valueBuf","signingAlgorithm","mac1","mac2","arr1","arr2","getBytes","rand","Uint32Array","util","createBuffer","putInt32","DecryptParameters","meta","encKeyByteString","macKeyByteString","decode64","parameters","dataBuffer","createDecipher","finish","rsaParams","impPrivateKey","exportKey","jwkPrivateKey","jwkPublicKeyParams","kty","ext","impPublicKey","modulusLength","publicExponent","generateKey","getRandomValues","encodeUtf8","modalOpen","modals"],"mappings":"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UACA,WACA,SACA,OACA,QACA,WACA,UACA,OACA,UACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,OACA,UACA,YACA,WACA,WACA,UACA,YACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,SACA,QACA,YACA,WACA,SACA,UACA,SACA,SACA,WACA,QACA,SACA,YACA,YACA,YACA,YACA,YACA,OACA,UACA,SACA,SACA,QACA,YACA,SACA,QACA,UACA,QACA,WACA,UACA,YACA,QACA,YACA,YACA,SACA,WACA,YACA,UACA,QACA,OACA,OACA,OACA,MACA,OACA,YACA,QACA,YACA,QACA,UACA,UACA,YACA,QACA,QACA,YACA,WACA,SACA,QACA,QACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,QACA,QACA,YACA,QACA,WACA,UACA,WACA,WACA,OACA,WACA,SACA,SACA,WACA,QACA,YACA,QACA,WACA,YACA,YACA,WACA,YACA,YACA,SACA,YACA,YACA,SACA,UACA,UACA,WACA,OACA,QACA,QACA,QACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,SACA,WACA,SACA,YACA,SACA,UACA,WACA,YACA,UACA,YACA,UACA,SACA,UACA,UACA,UACA,SACA,SACA,WACA,OACA,YACA,UACA,QACA,SACA,SACA,SACA,UACA,UACA,YACA,YACA,UACA,SACA,UACA,YACA,YACA,WACA,QACA,YACA,QACA,QACA,WACA,YACA,WACA,WACA,UACA,WACA,UACA,YACA,UACA,YACA,WACA,WACA,WACA,SACA,UACA,YACA,WACA,SACA,WACA,WACA,YACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,SACA,UACA,QACA,QACA,UACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,WACA,QACA,SACA,UACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,QACA,YACA,YACA,UACA,QACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,WACA,QACA,OACA,WACA,YACA,YACA,WACA,OACA,QACA,WACA,WACA,QACA,QACA,YACA,UACA,WACA,QACA,SACA,UACA,SACA,UACA,UACA,UACA,SACA,UACA,OACA,QACA,QACA,SACA,UACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,QACA,MACA,SACA,YACA,SACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,YACA,SACA,WACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,YACA,SACA,WACA,QACA,OACA,WACA,OACA,SACA,YACA,UACA,SACA,SACA,UACA,YACA,WACA,YACA,YACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,UACA,WACA,QACA,WACA,YACA,SACA,YACA,SACA,SACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,UACA,WACA,QACA,WACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,UACA,SACA,QACA,OACA,OACA,SACA,WACA,SACA,SACA,WACA,YACA,YACA,WACA,SACA,SACA,YACA,WACA,WACA,UACA,YACA,WACA,WACA,YACA,UACA,UACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,YACA,SACA,WACA,WACA,YACA,WACA,QACA,WACA,YACA,SACA,QACA,UACA,QACA,UACA,SACA,WACA,QACA,SACA,UACA,SACA,SACA,YACA,UACA,QACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,SACA,YACA,UACA,SACA,WACA,SACA,UACA,SACA,UACA,QACA,WACA,UACA,WACA,SACA,UACA,SACA,OACA,YACA,UACA,YACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,OACA,YACA,SACA,QACA,QACA,QACA,SACA,SACA,QACA,OACA,QACA,OACA,YACA,WACA,YACA,UACA,UACA,SACA,SACA,UACA,UACA,UACA,QACA,OACA,QACA,UACA,YACA,YACA,QACA,YACA,YACA,QACA,WACA,YACA,SACA,UACA,SACA,QACA,QACA,UACA,QACA,QACA,WACA,QACA,QACA,UACA,UACA,WACA,SACA,OACA,WACA,QACA,WACA,UACA,WACA,OACA,OACA,WACA,WACA,UACA,OACA,SACA,UACA,QACA,SACA,YACA,QACA,QACA,UACA,SACA,QACA,QACA,WACA,UACA,WACA,WACA,OACA,SACA,UACA,SACA,SACA,UACA,UACA,YACA,OACA,SACA,SACA,QACA,OACA,MACA,UACA,OACA,UACA,SACA,UACA,WACA,QACA,WACA,WACA,WACA,QACA,UACA,SACA,SACA,QACA,OACA,YACA,YACA,OACA,YACA,SACA,QACA,SACA,UACA,WACA,UACA,QACA,QACA,QACA,SACA,UACA,WACA,YACA,OACA,YACA,WACA,SACA,QACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,YACA,YACA,SACA,SACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,YACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,QACA,QACA,QACA,QACA,UACA,UACA,SACA,YACA,OACA,QACA,QACA,UACA,UACA,YACA,UACA,UACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,WACA,QACA,QACA,UACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,QACA,QACA,WACA,QACA,YACA,SACA,WACA,SACA,YACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,UACA,UACA,QACA,OACA,QACA,YACA,SACA,OACA,UACA,YACA,YACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,WACA,QACA,QACA,SACA,SACA,SACA,UACA,YACA,WACA,QACA,OACA,SACA,OACA,SACA,UACA,OACA,WACA,OACA,SACA,UACA,SACA,YACA,QACA,UACA,QACA,SACA,QACA,SACA,SACA,QACA,QACA,WACA,UACA,OACA,UACA,OACA,WACA,WACA,UACA,YACA,WACA,UACA,YACA,OACA,UACA,UACA,UACA,YACA,QACA,SACA,WACA,SACA,WACA,UACA,WACA,SACA,QACA,SACA,SACA,UACA,SACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,SACA,SACA,QACA,YACA,SACA,UACA,SACA,UACA,UACA,WACA,OACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,UACA,YACA,UACA,YACA,UACA,UACA,QACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,YACA,YACA,YACA,WACA,SACA,YACA,QACA,SACA,UACA,UACA,WACA,UACA,YACA,WACA,YACA,QACA,YACA,YACA,UACA,UACA,UACA,SACA,YACA,QACA,SACA,WACA,SACA,UACA,YACA,YACA,QACA,UACA,UACA,UACA,OACA,OACA,SACA,SACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,WACA,SACA,UACA,WACA,WACA,UACA,YACA,WACA,UACA,SACA,SACA,SACA,UACA,YACA,SACA,QACA,UACA,YACA,SACA,SACA,YACA,QACA,UACA,YACA,UACA,WACA,WACA,UACA,SACA,SACA,QACA,SACA,YACA,WACA,WACA,SACA,SACA,SACA,WACA,WACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,WACA,QACA,QACA,UACA,YACA,UACA,YACA,WACA,SACA,SACA,UACA,QACA,QACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,WACA,UACA,WACA,UACA,UACA,QACA,UACA,UACA,WACA,QACA,UACA,SACA,WACA,WACA,WACA,UACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,SACA,OACA,YACA,UACA,QACA,YACA,SACA,QACA,QACA,UACA,QACA,WACA,SACA,UACA,QACA,QACA,YACA,YACA,YACA,WACA,YACA,YACA,QACA,QACA,QACA,OACA,WACA,SACA,WACA,WACA,QACA,WACA,WACA,SACA,YACA,UACA,QACA,UACA,WACA,SACA,OACA,SACA,UACA,WACA,SACA,SACA,QACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,UACA,SACA,SACA,OACA,QACA,QACA,OACA,QACA,WACA,SACA,SACA,QACA,YACA,QACA,WACA,UACA,UACA,WACA,UACA,WACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,OACA,OACA,QACA,QACA,QACA,UACA,QACA,SACA,YACA,WACA,QACA,SACA,UACA,SACA,UACA,WACA,QACA,SACA,WACA,OACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,UACA,UACA,WACA,QACA,SACA,UACA,WACA,YACA,QACA,WACA,SACA,SACA,YACA,SACA,UACA,QACA,YACA,UACA,UACA,WACA,YACA,YACA,OACA,WACA,SACA,UACA,SACA,QACA,UACA,MACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,OACA,OACA,OACA,OACA,WACA,WACA,UACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,SACA,WACA,OACA,OACA,OACA,UACA,QACA,QACA,SACA,QACA,WACA,UACA,UACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,YACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,QACA,YACA,UACA,WACA,WACA,SACA,WACA,YACA,YACA,UACA,YACA,YACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,UACA,YACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,UACA,UACA,YACA,OACA,SACA,SACA,UACA,SACA,UACA,SACA,OACA,QACA,OACA,WACA,YACA,UACA,SACA,SACA,SACA,YACA,YACA,WACA,WACA,YACA,QACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,OACA,UACA,SACA,QACA,QACA,QACA,YACA,YACA,WACA,YACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,SACA,WACA,OACA,WACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,YACA,SACA,QACA,YACA,QACA,UACA,UACA,QACA,QACA,QACA,UACA,WACA,WACA,WACA,WACA,SACA,SACA,UACA,YACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,SACA,WACA,WACA,WACA,WACA,WACA,SACA,QACA,QACA,SACA,QACA,QACA,WACA,UACA,WACA,YACA,UACA,WACA,UACA,WACA,OACA,UACA,QACA,QACA,QACA,UACA,SACA,WACA,UACA,UACA,UACA,WACA,UACA,YACA,SACA,WACA,UACA,QACA,QACA,QACA,QACA,OACA,QACA,SACA,UACA,UACA,QACA,QACA,UACA,UACA,YACA,UACA,YACA,UACA,QACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,UACA,UACA,WACA,QACA,OACA,SACA,UACA,UACA,YACA,OACA,UACA,UACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,YACA,WACA,UACA,YACA,UACA,QACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,SACA,SACA,SACA,YACA,UACA,QACA,QACA,QACA,UACA,SACA,UACA,SACA,SACA,YACA,QACA,QACA,QACA,OACA,SACA,UACA,YACA,UACA,YACA,WACA,YACA,UACA,MACA,QACA,SACA,UACA,UACA,WACA,SACA,YACA,YACA,MACA,MACA,WACA,SACA,QACA,WACA,SACA,QACA,QACA,WACA,QACA,UACA,YACA,SACA,WACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,WACA,YACA,UACA,WACA,WACA,UACA,OACA,OACA,YACA,OACA,YACA,OACA,WACA,SACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,WACA,SACA,YACA,WACA,SACA,UACA,YACA,QACA,OACA,YACA,SACA,WACA,QACA,UACA,WACA,SACA,QACA,SACA,SACA,QACA,QACA,YACA,QACA,WACA,SACA,WACA,YACA,WACA,UACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,WACA,OACA,WACA,UACA,SACA,YACA,YACA,YACA,QACA,WACA,SACA,WACA,YACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,SACA,WACA,SACA,UACA,SACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,SACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,QACA,WACA,UACA,UACA,SACA,SACA,OACA,WACA,YACA,WACA,SACA,YACA,QACA,WACA,QACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,QACA,SACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,SACA,QACA,SACA,QACA,UACA,SACA,UACA,UACA,OACA,YACA,YACA,WACA,YACA,SACA,UACA,YACA,WACA,SACA,SACA,SACA,WACA,YACA,YACA,UACA,UACA,QACA,WACA,SACA,SACA,WACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,WACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,QACA,UACA,WACA,UACA,UACA,YACA,WACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,OACA,WACA,SACA,YACA,QACA,OACA,SACA,UACA,YACA,WACA,YACA,WACA,WACA,YACA,YACA,MACA,WACA,YACA,WACA,OACA,SACA,OACA,WACA,QACA,SACA,SACA,UACA,SACA,QACA,UACA,SACA,YACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,SACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,SACA,WACA,WACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,WACA,OACA,YACA,UACA,OACA,UACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,YACA,WACA,UACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,WACA,WACA,WACA,QACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,WACA,SACA,WACA,YACA,YACA,WACA,WACA,WACA,YACA,QACA,SACA,SACA,OACA,WACA,WACA,QACA,QACA,QACA,QACA,OACA,SACA,YACA,SACA,QACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,QACA,QACA,SACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,UACA,QACA,OACA,YACA,SACA,SACA,OACA,SACA,WACA,SACA,OACA,OACA,QACA,OACA,OACA,WACA,YACA,YACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,YACA,QACA,UACA,UACA,OACA,UACA,WACA,YACA,YACA,WACA,YACA,YACA,YACA,SACA,SACA,WACA,SACA,SACA,QACA,OACA,UACA,QACA,QACA,QACA,UACA,WACA,YACA,WACA,WACA,SACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,QACA,QACA,QACA,YACA,UACA,WACA,UACA,UACA,UACA,QACA,QACA,WACA,SACA,OACA,MACA,SACA,YACA,UACA,WACA,UACA,WACA,WACA,QACA,OACA,OACA,SACA,SACA,MACA,OACA,SACA,WACA,OACA,UACA,WACA,WACA,MACA,OACA,SACA,YACA,YACA,UACA,UACA,WACA,SACA,SACA,OACA,OACA,UACA,OACA,QACA,QACA,QACA,UACA,UACA,WACA,UACA,YACA,UACA,WACA,UACA,WACA,WACA,OACA,QACA,UACA,UACA,UACA,SACA,UACA,QACA,UACA,UACA,WACA,WACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,SACA,UACA,QACA,UACA,SACA,WACA,SACA,YACA,YACA,SACA,WACA,UACA,QACA,SACA,SACA,OACA,OACA,QACA,QACA,QACA,YACA,OACA,SACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,YACA,OACA,WACA,SACA,OACA,UACA,SACA,WACA,YACA,WACA,MACA,YACA,UACA,YACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,UACA,SACA,QACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,SACA,MACA,WACA,WACA,YACA,QACA,UACA,SACA,MACA,UACA,WACA,MACA,YACA,QACA,YACA,WACA,YACA,QACA,UACA,QACA,QACA,UACA,SACA,UACA,YACA,YACA,QACA,WACA,UACA,SACA,SACA,WACA,SACA,YACA,QACA,UACA,YACA,WACA,OACA,QACA,WACA,UACA,WACA,UACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,UACA,UACA,YACA,QACA,MACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,SACA,SACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,YACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,UACA,SACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,SACA,SACA,SACA,UACA,UACA,SACA,SACA,YACA,WACA,YACA,WACA,SACA,UACA,SACA,SACA,YACA,SACA,SACA,WACA,UACA,WACA,UACA,YACA,WACA,WACA,WACA,UACA,WACA,QACA,OACA,SACA,OACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,WACA,UACA,QACA,SACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,WACA,SACA,SACA,UACA,YACA,SACA,SACA,UACA,QACA,QACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,QACA,UACA,YACA,YACA,SACA,WACA,WACA,YACA,YACA,WACA,UACA,UACA,WACA,UACA,QACA,YACA,SACA,YACA,WACA,UACA,QACA,WACA,YACA,YACA,UACA,UACA,OACA,YACA,YACA,YACA,WACA,WACA,QACA,WACA,UACA,OACA,QACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,SACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,SACA,UACA,SACA,QACA,WACA,OACA,SACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,YACA,YACA,YACA,QACA,SACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,YACA,SACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,SACA,WACA,SACA,YACA,UACA,UACA,SACA,YACA,UACA,UACA,OACA,SACA,UACA,SACA,OACA,QACA,UACA,OACA,WACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,UACA,OACA,UACA,YACA,YACA,UACA,UACA,WACA,SACA,UACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,MACA,QACA,UACA,SACA,SACA,OACA,OACA,SACA,SACA,WACA,WACA,WACA,WACA,WACA,QACA,QACA,UACA,SACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,SACA,SACA,WACA,UACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,WACA,YACA,UACA,UACA,QACA,WACA,QACA,UACA,SACA,WACA,SACA,SACA,SACA,UACA,OACA,SACA,QACA,WACA,SACA,WACA,WACA,UACA,UACA,YACA,QACA,WACA,QACA,UACA,WACA,WACA,YACA,SACA,UACA,UACA,WACA,MACA,OACA,UACA,UACA,WACA,WACA,YACA,YACA,QACA,UACA,QACA,QACA,YACA,UACA,WACA,WACA,OACA,UACA,YACA,YACA,YACA,WACA,WACA,SACA,QACA,UACA,WACA,SACA,WACA,UACA,YACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,OACA,UACA,SACA,QACA,QACA,SACA,SACA,QACA,QACA,OACA,QACA,QACA,QACA,WACA,OACA,SACA,UACA,QACA,WACA,UACA,UACA,QACA,SACA,UACA,WACA,OACA,MACA,MACA,OACA,QACA,OACA,WACA,SACA,WACA,SACA,WACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,YACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,UACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,WACA,WACA,UACA,YACA,WACA,YACA,WACA,QACA,QACA,UACA,UACA,YACA,SACA,UACA,QACA,WACA,WACA,WACA,UACA,UACA,UACA,WACA,WACA,UACA,WACA,SACA,YACA,WACA,YACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,WACA,SACA,YACA,WACA,QACA,UACA,UACA,WACA,SACA,SACA,QACA,SACA,WACA,YACA,YACA,WACA,QACA,SACA,UACA,QACA,UACA,YACA,SACA,OACA,QACA,YACA,UACA,WACA,WACA,YACA,SACA,QACA,QACA,SACA,WACA,YACA,WACA,QACA,YACA,SACA,MACA,QACA,MACA,YACA,UACA,QACA,OACA,YACA,WACA,UACA,SACA,SACA,UACA,YACA,SACA,YACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,MACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,MACA,WACA,YACA,SACA,UACA,WACA,QACA,OACA,OACA,SACA,OACA,QACA,OACA,SACA,MACA,SACA,UACA,WACA,WACA,QACA,UACA,YACA,SACA,QACA,YACA,WACA,YACA,UACA,YACA,WACA,WACA,SACA,YACA,YACA,YACA,WACA,YACA,UACA,YACA,UACA,UACA,UACA,QACA,QACA,YACA,SACA,UACA,YACA,QACA,OACA,WACA,YACA,WACA,SACA,WACA,SACA,SACA,SACA,QACA,UACA,SACA,WACA,QACA,QACA,SACA,QACA,UACA,UACA,UACA,QACA,YACA,SACA,YACA,UACA,SACA,WACA,YACA,QACA,UACA,QACA,WACA,UACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,QACA,QACA,QACA,UACA,WACA,UACA,OACA,SACA,YACA,UACA,SACA,OACA,OACA,WACA,OACA,UACA,QACA,WACA,WACA,YACA,OACA,UACA,QACA,UACA,OACA,OACA,OACA,QACA,WACA,YACA,QACA,SACA,OACA,SACA,OACA,SACA,WACA,OACA,UACA,SACA,SACA,SACA,OACA,OACA,OACA,WACA,YACA,WACA,YACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,UACA,WACA,QACA,WACA,WACA,UACA,UACA,UACA,WACA,UACA,SACA,UACA,QACA,WACA,QACA,QACA,UACA,YACA,QACA,QACA,YACA,UACA,UACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,QACA,OACA,UACA,WACA,WACA,YACA,SACA,QACA,UACA,WACA,OACA,YACA,OACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,OACA,UACA,OACA,WACA,SACA,QACA,QACA,SACA,WACA,SACA,QACA,SACA,UACA,QACA,QACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,UACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,WACA,WACA,QACA,UACA,YACA,QACA,OACA,WACA,QACA,OACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,OACA,OACA,QACA,QACA,UACA,OACA,SACA,MACA,UACA,WACA,YACA,WACA,UACA,WACA,SACA,SACA,UACA,UACA,MACA,UACA,QACA,OACA,UACA,OACA,SACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,YACA,SACA,QACA,YACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,WACA,WACA,YACA,WACA,QACA,UACA,WACA,YACA,YACA,YACA,UACA,UACA,UACA,QACA,UACA,OACA,SACA,QACA,UACA,YACA,QACA,SACA,YACA,WACA,UACA,WACA,YACA,OACA,UACA,SACA,QACA,QACA,SACA,WACA,SACA,WACA,SACA,OACA,WACA,WACA,YACA,YACA,YACA,SACA,SACA,YACA,WACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,UACA,WACA,OACA,OACA,QACA,UACA,YACA,UACA,QACA,UACA,YACA,QACA,SACA,SACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,QACA,WACA,QACA,SACA,SACA,YACA,QACA,WACA,SACA,UACA,UACA,UACA,UACA,QACA,YACA,WACA,WACA,UACA,WACA,SACA,SACA,WACA,OACA,MACA,OACA,OACA,OACA,QACA,SACA,WACA,SACA,QACA,YACA,WACA,UACA,SACA,YACA,WACA,YACA,WACA,WACA,SACA,SACA,YACA,YACA,SACA,WACA,SACA,OACA,SACA,UACA,WACA,WACA,SACA,SACA,SACA,UACA,SACA,YACA,UACA,QACA,OACA,UACA,OACA,SACA,YACA,MACA,SACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,MACA,UACA,QACA,OACA,OACA,MACA,WACA,WACA,WACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,QACA,OACA,QACA,WACA,SACA,SACA,YACA,WACA,WACA,QACA,YACA,WACA,UACA,WACA,UACA,YACA,WACA,UACA,YACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,SACA,SACA,YACA,UACA,WACA,YACA,YACA,WACA,SACA,UACA,YACA,YACA,WACA,UACA,YACA,YACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,SACA,SACA,MACA,OACA,SACA,OACA,QACA,MACA,OACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,WACA,YACA,YACA,UACA,QACA,UACA,YACA,UACA,OACA,YACA,SACA,QACA,MACA,MACA,SACA,SACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,MACA,UACA,UACA,SACA,UACA,UACA,WACA,QACA,OACA,QACA,UACA,UACA,OACA,UACA,YACA,OACA,OACA,YACA,UACA,QACA,SACA,SACA,MACA,QACA,SACA,QACA,SACA,WACA,OACA,UACA,UACA,MACA,SACA,YACA,SACA,UACA,OACA,UACA,WACA,WACA,YACA,QACA,OACA,MACA,SACA,WACA,YACA,SACA,UACA,WACA,YACA,WACA,QACA,YACA,WACA,YACA,OACA,SACA,WACA,UACA,QACA,YACA,QACA,UACA,UACA,OACA,SACA,QACA,OACA,WACA,WACA,OACA,SACA,UACA,SACA,UACA,WACA,SACA,QACA,OACA,UACA,YACA,UACA,SACA,WACA,WACA,QACA,WACA,UACA,SACA,QACA,QACA,SACA,WACA,OACA,MACA,OACA,SACA,OACA,WACA,WACA,SACA,OACA,OACA,WACA,WACA,YACA,WACA,OACA,SACA,SACA,WACA,SACA,WACA,UACA,UACA,UACA,OACA,UACA,UACA,YACA,WACA,SACA,UACA,UACA,OACA,SACA,QACA,OACA,UACA,WACA,OACA,QACA,WACA,QACA,QACA,QACA,SACA,UACA,QACA,OACA,UACA,UACA,WACA,YACA,WACA,SACA,SACA,QACA,UACA,WACA,SACA,UACA,SACA,OACA,OACA,QACA,SACA,WACA,WACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,YACA,QACA,UACA,SACA,QACA,SACA,UACA,SACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,SACA,WACA,UACA,SACA,WACA,SACA,UACA,UACA,SACA,WACA,SACA,WACA,SACA,WACA,OACA,WACA,OACA,SACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,OACA,UACA,SACA,YACA,UACA,QACA,OACA,SACA,OACA,OACA,UACA,SACA,UACA,YACA,WACA,SACA,UACA,QACA,WACA,SACA,WACA,YACA,YACA,SACA,UACA,YACA,UACA,UACA,WACA,MACA,OACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,SACA,QACA,QACA,OACA,OACA,UACA,YACA,QACA,QACA,UACA,WACA,OACA,QACA,WACA,WACA,SACA,SACA,WACA,UACA,OACA,OACA,MACA,UACA,UACA,SACA,OACA,OACA,WACA,YACA,SACA,SACA,SACA,UACA,QACA,SACA,QACA,YACA,UACA,SACA,SACA,YACA,YACA,QACA,UACA,YACA,WACA,YACA,YACA,SACA,WACA,UACA,SACA,YACA,WACA,YACA,UACA,UACA,SACA,QACA,WACA,WACA,YACA,YACA,OACA,QACA,OACA,YACA,OACA,SACA,WACA,SACA,YACA,UACA,YACA,WACA,QACA,YACA,SACA,QACA,YACA,WACA,WACA,SACA,WACA,WACA,QACA,OACA,UACA,YACA,WACA,UACA,SACA,UACA,WACA,QACA,YACA,WACA,YACA,YACA,YACA,UACA,YACA,WACA,WACA,SACA,WACA,UACA,YACA,WACA,WACA,QACA,YACA,SACA,YACA,OACA,OACA,SACA,UACA,YACA,UACA,WACA,UACA,WACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,YACA,UACA,UACA,UACA,YACA,WACA,YACA,SACA,UACA,UACA,YACA,QACA,UACA,SACA,UACA,QACA,WACA,SACA,SACA,SACA,OACA,MACA,WACA,YACA,UACA,UACA,WACA,QACA,QACA,YACA,YACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,YACA,SACA,UACA,SACA,QACA,YACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,UACA,WACA,SACA,UACA,UACA,UACA,YACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,OACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,WACA,WACA,WACA,QACA,WACA,WACA,UACA,QACA,SACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,QACA,SACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,YACA,WACA,QACA,WACA,OACA,YACA,WACA,WACA,UACA,MACA,YACA,SACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,YACA,UACA,WACA,UACA,YACA,QACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,YACA,YACA,YACA,WACA,MACA,SACA,WACA,UACA,YACA,WACA,WACA,WACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,OACA,WACA,YACA,SACA,WACA,YACA,SACA,YACA,QACA,QACA,YACA,WACA,UACA,WACA,UACA,WACA,QACA,YACA,YACA,QACA,QACA,UACA,OACA,QACA,SACA,QACA,SACA,OACA,OACA,MACA,MACA,WACA,QACA,OACA,SACA,UACA,WACA,WACA,YACA,YACA,SACA,WACA,QACA,YACA,UACA,QACA,QACA,WACA,UACA,YACA,SACA,QACA,YACA,QACA,YACA,WACA,SACA,UACA,YACA,WACA,QACA,QACA,SACA,YACA,QACA,UACA,UACA,SACA,YACA,QACA,UACA,SACA,WACA,OACA,YACA,YACA,SACA,OACA,SACA,SACA,SACA,UACA,YACA,UACA,OACA,QACA,MACA,OACA,OACA,SACA,QACA,YACA,OACA,SACA,SACA,UACA,QACA,SACA,UACA,YACA,WACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,WACA,SACA,WACA,SACA,YACA,SACA,SACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,UACA,OACA,SACA,OACA,UACA,QACA,OACA,MACA,YACA,SACA,WACA,WACA,SACA,UACA,QACA,OACA,SACA,WACA,WACA,QACA,QACA,SACA,SACA,WACA,YACA,QACA,WACA,QACA,UACA,SACA,UACA,SACA,UACA,SACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,WACA,YACA,QACA,SACA,QACA,MACA,MACA,QACA,MACA,YACA,WACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,YACA,OACA,UACA,YACA,YACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,SACA,YACA,SACA,UACA,YACA,YACA,WACA,WACA,SACA,QACA,SACA,UACA,SACA,UACA,UACA,OACA,MACA,OACA,WACA,OACA,MACA,QACA,WACA,QACA,OACA,UACA,WACA,OACA,WACA,UACA,WACA,UACA,QACA,SACA,WACA,OACA,WACA,QACA,UACA,YACA,UACA,OACA,SACA,OACA,OACA,OACA,OACA,UACA,OACA,OACA,WACA,UACA,YACA,YACA,YACA,WACA,QACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,MACA,YACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,UACA,WACA,UACA,WACA,WACA,QACA,WACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,UACA,YACA,YACA,UACA,UACA,SACA,UACA,UACA,WACA,WACA,WACA,UACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,WACA,WACA,UACA,WACA,SACA,OACA,QACA,OACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,WACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,UACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YACA,WACA,YACA,WACA,UACA,UACA,WACA,WACA,WACA,YACA,YACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,UACA,WACA,WACA,WACA,UACA,YACA,WACA,YACA,MACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,SACA,QACA,QACA,YACA,UACA,WACA,WACA,WACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,SACA,YACA,OACA,WACA,YACA,SACA,WACA,WACA,UACA,WACA,SACA,UACA,WACA,QACA,WACA,OACA,YACA,QACA,UACA,WACA,YACA,UACA,YACA,SACA,QACA,YACA,YACA,SACA,QACA,UACA,UACA,WACA,YACA,SACA,UACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,WACA,WACA,YACA,SACA,UACA,YACA,SACA,SACA,QACA,UACA,UACA,SACA,WACA,SACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,WACA,WACA,WACA,QACA,SACA,SACA,UACA,SACA,WACA,UACA,QACA,YACA,SACA,WACA,YACA,OACA,WACA,UACA,QACA,YACA,UACA,SACA,YACA,YACA,SACA,WACA,QACA,YACA,WACA,SACA,SACA,UACA,UACA,WACA,SACA,QACA,QACA,SACA,UACA,WACA,UACA,SACA,SACA,QACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,WACA,UACA,SACA,OACA,SACA,WACA,UACA,SACA,UACA,UACA,YACA,WACA,UACA,YACA,QACA,SACA,UACA,WACA,YACA,MACA,WACA,UACA,QACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,QACA,OACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,QACA,OACA,YACA,YACA,SACA,YACA,QACA,SACA,WACA,QACA,YACA,SACA,YACA,YACA,QACA,UACA,UACA,SACA,UACA,YACA,SACA,UACA,YACA,QACA,YACA,QACA,SACA,WACA,UACA,UACA,WACA,QACA,UACA,QACA,SACA,UACA,UACA,SACA,WACA,UACA,WACA,WACA,UACA,WACA,YACA,YACA,WACA,WACA,SACA,UACA,YACA,YACA,UACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,YACA,WACA,QACA,WACA,QACA,SACA,YACA,SACA,WACA,YACA,UACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,UACA,WACA,SACA,OACA,YACA,UACA,QACA,MACA,OACA,OACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,SACA,QACA,SACA,QACA,SACA,SACA,QACA,SACA,WACA,QACA,OACA,YACA,UACA,YACA,UACA,SACA,OACA,OACA,UACA,OACA,SACA,SACA,QACA,WACA,WACA,UACA,WACA,YACA,OACA,SACA,WACA,WACA,SACA,YACA,WACA,UACA,SACA,WACA,QACA,OACA,SACA,WACA,WACA,SACA,UACA,SACA,UACA,WACA,SACA,SACA,UACA,YACA,UACA,UACA,QACA,SACA,WACA,QACA,UACA,OACA,WACA,YACA,UACA,QACA,SACA,MACA,WACA,SACA,WACA,UACA,WACA,YACA,SACA,UACA,WACA,YACA,UACA,WACA,WACA,UACA,YACA,UACA,SACA,WACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,YACA,WACA,YACA,YACA,SACA,UACA,WACA,WACA,UACA,WACA,YACA,WACA,UACA,SACA,UACA,SACA,YACA,YACA,YACA,SACA,UACA,YACA,UACA,QACA,UACA,YACA,UACA,YACA,YACA,WACA,UACA,SACA,UACA,UACA,YACA,UACA,UACA,WACA,SACA,YACA,WACA,QACA,SACA,YACA,UACA,UACA,SACA,QACA,WACA,QACA,QACA,QACA,SACA,SACA,WACA,UACA,UACA,YACA,QACA,YACA,WACA,WACA,YACA,QACA,UACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,WACA,UACA,UACA,UACA,UACA,YACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,UACA,WACA,YACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,QACA,QACA,YACA,SACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,UACA,YACA,WACA,SACA,YACA,YACA,WACA,WACA,QACA,WACA,SACA,SACA,WACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,QACA,YACA,QACA,UACA,MACA,UACA,SACA,YACA,SACA,SACA,MACA,OACA,YACA,OACA,UACA,QACA,YACA,OACA,SACA,SACA,QACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,SACA,QACA,WACA,YACA,WACA,SACA,WACA,YACA,QACA,UACA,WACA,SACA,SACA,UACA,SACA,SACA,WACA,YACA,OACA,QACA,YACA,WACA,UACA,WACA,WACA,YACA,SACA,YACA,UACA,WACA,UACA,SACA,QACA,UACA,OACA,SACA,WACA,UACA,YACA,SACA,QACA,WACA,QACA,WACA,QACA,UACA,YACA,YACA,UACA,UACA,QACA,UACA,UACA,SACA,YACA,YACA,WACA,UACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,QACA,QACA,QACA,UACA,YACA,QACA,OACA,SACA,YACA,WACA,YACA,QACA,QACA,OACA,SACA,SACA,OACA,SACA,QACA,SACA,WACA,YACA,WACA,YACA,WACA,QACA,SACA,SACA,OACA,OACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,UACA,SACA,OACA,SACA,QACA,SACA,WACA,OACA,SACA,QACA,YACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,OACA,SACA,SACA,OACA,UACA,SACA,QACA,SACA,SACA,UACA,YACA,WACA,QACA,YACA,WACA,WACA,UACA,WACA,OACA,YACA,WACA,UACA,YACA,YACA,YACA,WACA,SACA,WACA,WACA,WACA,UACA,YACA,SACA,QACA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,WACA,WACA,SACA,SACA,YACA,SACA,SACA,SACA,SACA,YACA,YACA,UACA,SACA,WACA,UACA,WACA,YACA,UACA,YACA,YACA,SACA,YACA,UACA,YACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,SACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,UACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,UACA,WACA,WACA,WACA,YACA,YACA,SACA,SACA,UACA,SACA,WACA,WACA,WACA,WACA,YACA,UACA,UACA,WACA,UACA,UACA,YACA,SACA,YACA,YACA,UACA,SACA,WACA,YACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,SACA,SACA,YACA,YACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,UACA,WACA,WACA,QACA,QACA,UACA,UACA,YACA,WACA,WACA,WACA,UACA,QACA,UACA,YACA,UACA,SACA,SACA,SACA,WACA,SACA,YACA,OACA,SACA,SACA,UACA,UACA,WACA,SACA,WACA,WACA,YACA,YACA,QACA,UACA,YACA,SACA,UACA,SACA,YACA,UACA,UACA,UACA,WACA,SACA,WACA,YACA,YACA,WACA,YACA,YACA,UACA,UACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,WACA,UACA,SACA,UACA,YACA,YACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,WACA,SACA,WACA,UACA,SACA,UACA,QACA,WACA,SACA,YACA,SACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,YACA,OACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,YACA,UACA,QACA,SACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,SACA,QACA,UACA,UACA,YACA,YACA,YACA,WACA,WACA,UACA,WACA,YACA,YACA,YACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,UACA,WACA,SACA,SACA,WACA,YACA,YACA,SACA,WACA,YACA,SACA,YACA,YACA,UACA,UACA,UACA,UACA,WACA,SACA,SACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,SACA,UACA,UACA,WACA,QACA,SACA,UACA,UACA,UACA,SACA,UACA,YACA,WACA,WACA,UACA,YACA,YACA,SACA,YACA,SACA,WACA,UACA,YACA,UACA,UACA,WACA,YACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,QACA,SACA,UACA,OACA,SACA,SACA,WACA,UACA,UACA,WACA,SACA,OACA,SACA,UACA,OACA,UACA,QACA,QACA,UACA,SACA,OACA,OACA,QACA,UACA,OACA,UACA,WACA,WACA,UACA,SACA,WACA,UACA,OACA,SACA,OACA,UACA,UACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,WACA,SACA,UACA,QACA,UACA,OACA,QACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,UACA,WACA,YACA,WACA,QACA,QACA,QACA,OACA,OACA,SACA,SACA,OACA,SACA,UACA,UACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,UACA,QACA,SACA,QACA,SACA,SACA,UACA,SACA,UACA,OACA,SACA,SACA,MACA,SACA,OACA,SACA,WACA,UACA,QACA,YACA,UACA,SACA,UACA,QACA,OACA,SACA,UACA,QACA,OACA,OACA,OACA,MACA,UACA,WACA,YACA,SACA,YACA,SACA,YACA,UACA,WACA,QACA,UACA,SACA,YACA,YACA,SACA,WACA,UACA,OACA,OACA,UACA,QACA,OACA,QACA,OACA,QACA,SACA,WACA,SACA,SACA,QACA,SACA,QACA,OACA,WACA,SACA,UACA,YACA,YACA,OACA,SACA,WACA,WACA,WACA,YACA,SACA,UACA,WACA,UACA,YACA,UACA,SACA,WACA,UACA,UACA,YACA,UACA,YACA,YACA,WACA,QACA,WACA,YACA,OACA,QACA,UACA,YACA,QACA,UACA,YACA,UACA,OACA,YACA,QACA,UACA,WACA,QACA,YACA,YACA,UACA,WACA,WACA,YACA,QACA,QACA,SACA,UACA,QACA,UACA,SACA,QACA,YACA,MACA,UACA,SACA,UACA,WACA,QACA,UACA,WACA,UACA,WACA,OACA,UACA,UACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,QACA,UACA,YACA,WACA,QACA,YACA,SACA,WACA,YACA,SACA,WACA,YACA,WACA,UACA,UACA,YACA,QACA,QACA,WACA,QACA,QACA,UACA,QACA,SACA,YACA,YACA,SACA,YACA,SACA,UACA,QACA,WACA,SACA,YACA,UACA,WACA,WACA,SACA,WACA,WACA,WACA,YACA,YACA,QACA,UACA,UACA,SACA,WACA,SACA,WACA,YACA,SACA,SACA,UACA,YACA,WACA,WACA,UACA,UACA,WACA,QACA,QACA,WACA,YACA,SACA,UACA,WACA,YACA,YACA,SACA,UACA,SACA,YACA,SACA,UACA,WACA,WACA,QACA,SACA,WACA,WACA,WACA,SACA,WACA,UACA,UACA,UACA,SACA,WACA,YACA,YACA,WACA,OACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,UACA,OACA,SACA,WACA,YACA,YACA,YACA,YACA,WACA,QACA,YACA,SACA,SACA,SACA,WACA,YACA,SACA,SACA,YACA,UACA,WACA,QACA,UACA,UACA,SACA,WACA,UACA,UACA,SACA,WACA,QACA,YACA,YACA,UACA,UACA,WACA,SACA,QACA,SACA,UACA,YACA,UACA,SACA,QACA,QACA,WACA,UACA,YACA,UACA,QACA,QACA,UACA,UACA,QACA,UACA,WACA,QACA,SACA,QACA,UACA,QACA,YACA,UACA,UACA,UACA,YACA,QACA,SACA,OACA,QACA,QACA,QACA,QACA,UACA,SACA,WACA,SACA,SACA,UACA,WACA,YACA,SACA,UACA,SACA,UACA,QACA,UACA,YACA,UACA,QACA,OACA,QACA,YACA,QACA,QACA,WACA,UACA,WACA,WACA,QACA,WACA,YACA,WACA,UACA,UACA,YACA,YACA,UACA,YACA,SACA,YACA,SACA,QACA,QACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,QACA,UACA,YACA,YACA,WACA,QACA,SACA,WACA,WACA,YACA,WACA,SACA,SACA,SACA,SACA,SACA,UACA,WACA,YACA,SACA,QACA,SACA,WACA,UACA,UACA,YACA,OACA,QACA,OACA,MACA,UACA,WACA,UACA,SACA,SACA,SACA,OACA,UACA,WACA,WACA,SACA,SACA,UACA,OACA,YACA,QACA,OACA,OACA,SACA,YACA,SACA,YACA,SACA,WACA,SACA,UACA,YACA,SACA,UACA,SACA,WACA,WACA,UACA,SACA,UACA,MACA,QACA,SACA,SACA,SACA,UACA,WACA,YACA,UACA,UACA,QACA,UACA,WACA,YACA,UACA,UACA,OACA,SACA,SACA,WACA,SACA,UACA,YACA,WACA,WACA,UACA,SACA,SACA,SACA,OACA,QACA,QACA,QACA,SACA,UACA,UACA,WACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,SACA,YACA,UACA,WACA,WACA,QACA,UACA,WACA,WACA,UACA,QACA,YACA,UACA,OACA,UACA,UACA,WACA,YACA,SACA,QACA,OACA,UACA,QACA,WACA,YACA,UACA,WACA,QACA,UACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,YACA,SACA,SACA,UACA,QACA,SACA,YACA,UACA,WACA,YACA,WACA,WACA,QACA,WACA,YACA,SACA,OACA,OACA,SACA,WACA,SACA,SACA,UACA,WACA,SACA,OACA,YACA,UACA,SACA,OACA,OACA,QACA,QACA,MACA,QACA,UACA,YACA,UACA,WACA,UACA,QACA,WACA,QACA,YACA,QACA,QACA,QACA,UACA,QACA,OACA,SACA,YACA,YACA,UACA,QACA,UACA,SACA,UACA,SACA,SACA,WACA,YACA,SACA,WACA,QACA,UACA,UACA,OACA,QACA,QACA,SACA,QACA,QACA,SACA,WACA,QACA,QACA,UACA,WACA,SACA,UACA,SACA,QACA,UACA,UACA,QACA,QACA,WACA,YACA,YACA,UACA,YACA,WACA,WACA,YACA,YACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,QACA,OACA,QACA,UACA,SACA,WACA,QACA,YACA,YACA,WACA,YACA,UACA,WACA,UACA,WACA,SACA,YACA,YACA,WACA,YACA,SACA,QACA,YACA,UACA,WACA,YACA,UACA,WACA,QACA,OACA,SACA,YACA,SACA,SACA,QACA,SACA,QACA,QACA,UACA,SACA,UACA,UACA,WACA,UACA,WACA,QACA,SACA,WACA,YACA,UACA,YACA,WACA,YACA,UACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,WACA,UACA,WACA,UACA,UACA,WACA,SACA,SACA,YACA,SACA,SACA,UACA,QACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,UACA,UACA,WACA,SACA,UACA,SACA,QACA,SACA,SACA,SACA,QACA,QACA,QACA,SACA,YACA,YACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,OACA,UACA,WACA,WACA,QACA,SACA,WACA,SACA,WACA,WACA,YACA,SACA,WACA,YACA,YACA,WACA,UACA,YACA,QACA,WACA,WACA,SACA,SACA,SACA,YACA,UACA,YACA,YACA,SACA,QACA,UACA,QACA,QACA,UACA,WACA,WACA,YACA,UACA,WACA,YACA,YACA,YACA,WACA,WACA,UACA,UACA,QACA,QACA,QACA,SACA,WACA,YACA,SACA,UACA,WACA,WACA,YACA,UACA,QACA,WACA,UACA,YACA,UACA,WACA,SACA,WACA,UACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,YACA,SACA,UACA,SACA,UACA,YACA,UACA,QACA,YACA,WACA,WACA,YACA,QACA,QACA,QACA,YACA,WACA,YACA,YACA,UACA,OACA,SACA,UACA,OACA,SACA,UACA,YACA,YACA,WACA,YACA,UACA,OACA,QACA,UACA,UACA,YACA,SACA,WACA,YACA,QACA,YACA,YACA,UACA,WACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,UACA,YACA,OACA,SACA,QACA,QACA,QACA,QACA,QACA,YACA,YACA,YACA,UACA,QACA,QACA,SACA,QACA,QACA,YACA,YACA,WACA,UACA,UACA,WACA,YACA,WACA,UACA,YACA,YACA,QACA,QACA,QACA,WACA,UACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,UACA,QACA,QACA,SACA,SACA,SACA,WACA,YACA,QACA,SACA,UACA,SACA,WACA,SACA,SACA,SACA,SACA,WACA,SACA,WACA,SACA,SACA,WACA,YACA,WACA,YACA,SACA,YACA,UACA,WACA,QACA,SACA,QACA,UACA,UACA,UACA,WACA,SACA,QACA,UACA,UACA,SACA,QACA,UACA,WACA,SACA,UACA,YACA,QACA,QACA,UACA,UACA,WACA,QACA,SACA,WACA,SACA,UACA,YACA,UACA,WACA,SACA,QACA,YACA,YACA,YACA,UACA,WACA,WACA,WACA,YACA,UACA,WACA,SACA,WACA,UACA,YACA,WACA,YACA,YACA,WACA,SACA,UACA,WACA,YACA,YACA,YACA,UACA,YACA,YACA,UACA,UACA,WACA,YACA,YACA,UACA,WACA,SACA,WACA,WACA,UACA,SACA,SACA,YACA,UACA,YACA,OACA,UACA,SACA,SACA,OACA,WACA,YACA,UACA,SACA,YACA,WACA,QACA,UACA,QACA,WACA,WACA,WACA,SACA,UACA,UACA,UACA,SACA,OACA,SACA,WACA,YACA,SACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,SACA,WACA,SACA,UACA,YACA,UACA,YACA,SACA,WACA,UACA,YACA,YACA,SACA,UACA,WACA,UACA,UACA,UACA,UACA,WACA,UACA,YACA,YACA,WACA,SACA,WACA,UACA,YACA,WACA,QACA,UACA,UACA,WACA,YACA,YACA,OACA,YACA,UACA,YACA,OACA,WACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,UACA,UACA,YACA,YACA,UACA,WACA,WACA,WACA,UACA,WACA,QACA,QACA,SACA,SACA,UACA,UACA,QACA,SACA,QACA,QACA,QACA,WACA,WACA,YACA,WACA,UACA,UACA,WACA,UACA,WACA,WACA,YACA,YACA,QACA,SACA,UACA,UACA,QACA,WACA,SACA,SACA,YACA,UACA,YACA,UACA,SACA,WACA,QACA,OACA,UACA,WACA,UACA,UACA,WACA,UACA,YACA,MACA,UACA,OACA,SACA,SACA,WACA,OACA,QACA,SACA,WACA,QACA,SACA,OACA,SACA,UACA,UACA,UACA,WACA,UACA,WACA,WACA,UACA,UACA,OACA,YACA,SACA,SACA,UACA,QACA,SACA,SACA,WACA,OACA,SACA,QACA,YACA,UACA,QACA,WACA,SACA,WACA,SACA,QACA,SACA,QACA,OACA,OACA,UACA,YACA,OACA,QACA,QACA,WACA,WACA,UACA,UACA,YACA,QACA,SACA,WACA,UACA,UACA,YACA,WACA,WACA,QACA,UACA,QACA,QACA,SACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,SACA,QACA,QACA,QACA,WACA,SACA,SACA,WACA,YACA,SACA,SACA,SACA,WACA,SACA,YACA,SACA,WACA,YACA,YACA,UACA,WACA,OACA,QACA,WACA,WACA,OACA,YACA,UACA,QACA,QACA,QACA,SACA,WACA,UACA,OACA,QACA,UACA,UACA,YACA,YACA,WACA,UACA,OACA,SACA,OACA,OACA,QACA,SACA,UACA,YACA,UACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,OACA,UACA,OACA,SACA,SACA,SACA,UACA,YACA,SACA,SACA,SACA,QACA,UACA,QACA,WACA,UACA,QACA,UACA,YACA,UACA,UACA,WACA,YACA,QACA,UACA,SACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,QACA,QACA,SACA,WACA,WACA,OACA,YACA,WACA,YACA,UACA,QACA,SACA,OACA,UACA,UACA,YACA,SACA,SACA,QACA,WACA,SACA,QACA,WACA,YACA,WACA,UACA,YACA,UACA,UACA,WACA,WACA,WACA,UACA,YACA,SACA,WACA,WACA,UACA,QACA,SACA,YACA,WACA,UACA,YACA,UACA,WACA,WACA,UACA,OACA,SACA,WACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,UACA,UACA,YACA,SACA,WACA,QACA,SACA,QACA,QACA,UACA,QACA,SACA,YACA,UACA,WACA,WACA,YACA,QACA,MACA,QACA,WACA,UACA,UACA,UACA,MACA,UACA,QACA,SACA,WACA,QACA,SACA,UACA,WACA,WACA,YACA,OACA,SACA,UACA,SACA,SACA,OACA,QACA,OACA,MACA,QACA,QACA,QACA,WACA,SACA,YACA,SACA,QACA,QACA,UACA,YACA,OACA,WACA,QACA,QACA,QACA,YACA,UACA,UACA,WACA,SACA,SACA,UACA,SACA,QACA,OACA,QACA,WACA,YACA,QACA,YACA,WACA,SACA,YACA,SACA,YACA,YACA,WACA,UACA,YACA,YACA,YACA,YACA,YACA,UACA,UACA,UACA,YACA,WACA,SACA,SACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,UACA,WACA,WACA,YACA,UACA,YACA,YACA,UACA,UACA,SACA,YACA,YACA,UACA,QACA,SACA,UACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,SACA,YACA,YACA,WACA,UACA,UACA,UACA,UACA,YACA,UACA,YACA,WACA,QACA,YACA,UACA,YACA,SACA,YACA,YACA,WACA,WACA,YACA,YACA,WACA,WACA,YACA,WACA,YACA,YACA,UACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,UACA,SACA,YACA,UACA,YACA,WACA,UACA,WACA,UACA,SACA,WACA,SACA,YACA,UACA,WACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,YACA,YACA,YACA,SACA,WACA,UACA,YACA,UACA,WACA,WACA,YACA,YACA,UACA,WACA,YACA,SACA,YACA,WACA,WACA,YACA,WACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,YACA,WACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,YACA,WACA,UACA,YACA,SACA,SACA,UACA,WACA,UACA,UACA,YACA,YACA,QACA,YACA,YACA,YACA,YACA,YACA,QACA,WACA,YACA,SACA,WACA,OACA,YACA,WACA,WACA,UACA,SACA,YACA,YACA,UACA,UACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,YACA,YACA,YACA,UACA,WACA,WACA,QACA,YACA,WACA,WACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,UACA,SACA,YACA,WACA,WACA,WACA,WACA,YACA,YACA,YACA,YACA,UACA,WACA,UACA,YACA,UACA,WACA,YACA,UACA,YACA,WACA,UACA,YACA,YACA,WACA,YACA,SACA,WACA,SACA,YACA,WACA,UACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,YACA,WACA,SACA,YACA,WACA,UACA,WACA,UACA,YACA,YACA,SACA,SACA,YACA,YACA,YACA,WACA,SACA,YACA,YACA,WACA,SACA,YACA,YACA,UACA,SACA,YACA,SACA,WACA,WACA,SACA,SACA,WACA,UACA,WACA,YACA,YACA,UACA,WACA,WACA,YACA,WACA,WACA,SACA,WACA,YACA,SACA,YACA,YACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,YACA,WACA,WACA,SACA,WACA,WACA,SACA,WACA,WACA,YACA,WACA,WACA,YACA,YACA,WACA,YACA,YACA,WACA,YACA,UACA,YACA,YACA,WACA,WACA,WACA,SACA,UACA,WACA,YACA,UACA,UACA,YACA,WACA,UACA,WACA,WACA,SACA,QACA,QACA,UACA,WACA,WACA,YACA,SACA,YACA,YACA,YACA,YACA,UACA,YACA,SACA,UACA,WACA,UACA,UACA,WACA,SACA,UACA,WACA,WACA,YACA,WACA,YACA,WACA,WACA,YACA,UACA,WACA,YACA,SACA,WACA,YACA,UACA,QACA,YACA,SACA,WACA,YACA,SACA,UACA,YACA,YACA,YACA,SACA,YACA,WACA,UACA,UACA,YACA,YACA,QACA,SACA,UACA,WACA,YACA,SACA,UACA,UACA,WACA,SACA,SACA,SACA,WACA,YACA,SACA,OACA,QACA,UACA,WACA,UACA,SACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,WACA,WACA,UACA,SACA,UACA,SACA,WACA,SACA,SACA,UACA,QACA,SACA,WACA,UACA,SACA,SACA,YACA,UACA,SACA,QACA,UACA,OACA,YACA,OACA,QACA,QACA,UACA,UACA,UACA,SACA,SACA,QACA,UACA,SACA,SACA,WACA,WACA,WACA,YACA,UACA,YACA,UACA,QACA,SACA,SACA,YACA,QACA,UACA,SACA,SACA,WACA,UACA,YACA,WACA,WACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,SACA,WACA,OACA,QACA,SACA,YACA,SACA,WACA,SACA,WACA,UACA,SACA,YACA,WACA,WACA,YACA,UACA,QACA,QACA,YACA,WACA,UACA,UACA,SACA,QACA,UACA,SACA,YACA,WACA,UACA,OACA,SACA,OACA,UACA,OACA,WACA,YACA,SACA,QACA,OACA,WACA,UACA,QACA,WACA,SACA,UACA,WACA,YACA,WACA,UACA,UACA,YACA,WACA,UACA,UACA,YACA,WACA,SACA,SACA,QACA,QACA,UACA,WACA,QACA,OACA,YACA,UACA,WACA,UACA,UACA,SACA,WACA,UACA,QACA,QACA,WACA,WACA,UACA,WACA,YACA,UACA,YACA,QACA,WACA,WACA,UACA,WACA,QACA,UACA,OACA,WACA,SACA,UACA,UACA,QACA,SACA,UACA,QACA,QACA,SACA,YACA,MACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,OACA,SACA,OACA,UACA,SACA,SACA,QACA,OACA,UACA,SACA,UACA,SACA,WACA,YACA,YACA,WACA,YACA,UACA,SACA,SACA,YACA,UACA,UACA,WACA,YACA,UACA,OACA,UACA,QACA,QACA,WACA,SACA,OACA,WACA,SACA,OACA,QACA,QACA,WACA,QACA,YACA,SACA,QACA,WACA,UACA,QACA,WACA,UACA,WACA,SACA,MACA,OACA,SACA,QACA,SACA,QACA,QACA,YACA,UACA,OACA,OACA,YACA,WACA,UACA,SACA,WACA,WACA,WACA,WACA,SACA,WACA,SACA,YACA,UACA,SACA,YACA,OACA,OACA,QACA,UACA,OACA,OACA,UACA,SACA,WACA,SACA,OACA,QACA,WACA,SACA,OACA,SACA,OACA,OACA,WACA,QACA,UACA,SACA,SACA,WACA,SACA,MACA,OACA,YACA,YACA,YACA,YACA,YACA,UACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,UACA,UACA,YACA,QACA,YACA,YACA,QACA,QACA,QACA,MACA,UACA,QACA,SACA,WACA,UACA,WACA,SACA,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MAApB5B,KAAKoT,YACL,IAAK,IAAItX,EAAI,EAAGA,EAAIkE,KAAKoT,YAAYpX,OAAQF,IACzC,GAAKkE,KAAKoT,YAAYtX,GAAWq1C,QAC7B,OAAO,EAInB,OAAO,G,iEAjFF83C,GAAc,oO,iCAAdA,EAAc,yG,EAD3B,GACa,EAAAA,kB,+DAAAA,EAAc,E,KAD1B,EAAAroF,a,oKAEYs2B,SAAU,CAAF,C,KAAhB,EAAAn2B,QACQkP,eAAgB,CAAF,C,KAAtB,EAAAlP,QACSooF,eAAc,E,KAAvB,EAAAz6D,Y,qHC3BL,mBAAa,EAAA8/D,iC,sdCAb,IAEA,cAII,WAAYjtF,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKgU,SAAW,EAAKvS,oBAAoB,YACzC,EAAKqiC,aAAe,EAAKriC,oBAAoB,gB,EAErD,OAT6C,OAS7C,EATA,CAFA,MAE6CQ,cAAhC,EAAAo2C,2B,oHCAb,mBAAa,EAAAu1C,gC,sHCFb,mBAAa,EAAAK,kC,iGCAb,aACA,OAIA,OACA,OACA,QACA,QAEA,QACA,SAEA,SACA,SACA,SAEA,SACA,SACA,SACA,SACA,SAEA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,SACA,SACA,SACA,SAGA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAIA,UACA,UAGA,UACA,UAGA,UAGA,UACA,UAGA,UAIA,UACA,UACA,UACA,UACA,UACA,UACA,UAEA,UACA,UACA,UACA,UAEA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAEA,UACA,UACA,UACA,UACA,UACA,UACA,UAC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nB,gBACA,EAAA02B,wBACA,GAAA+a,iBACA,mBACA,oBACA,GAAA/X,6BACA,GAAAzpC,2BACA,GAAAksC,kCACA,wBACA,sBACA,uBACA,sBACA,oBACA,6BACA,wBACA,wBACA,uBACA,kBACA,mBACA,mCACA,mBACA,oCACA,wBACA,sBACA,kBACA,uBACA,kBACA,kBACA,sBACA,oBACA,yBACA,kCACA,qBACA,kBACA,2BACA,uBACA,uBACA,sBACA,GAAAp3B,uBACA,EAAAyf,4BACA,oCACA,kBACA,gCACA,GAAA6uB,2BACA,GAAAL,kCACA,EAAAr2D,0BACA,EAAAy/D,0BACA,GAAAtqE,iBACA,GAAAsgE,iBACA,GAAAxG,iBACA,GAAAp9B,oBACA,EAAAwZ,uBACA,EAAAG,0BACA,EAAAQ,kBACA,GAAA7N,+BACA,GAAAomD,kBACA,GAAAjmF,WACA,GAAAkkC,oBACA,oBACA,wBACA,GAAA4qB,cACA,GAAAnM,kBACA,GAAA2W,eACA,GAAAkH,2BACA,GAAAU,0BACA,EAAAjzB,aACA,GAAAtnD,mBACA,GAAAc,kBACA,GAAAqX,iBACA,GAAAqpD,eACA,GAAAL,wBACA,GAAAzuB,gCACA,EAAAqX,mBACA,GAAA7X,sBACA,GAAAc,wBACA,EAAA0W,0BACA,GAAArW,2BACA,GAAAI,wBACA,GAAAtuB,yBACA,GAAA+tB,2BACA,GAAAL,0BACA,GAAAuG,iCACA,GAAAg6B,mBACA,GAAA3hC,uBACA,EAAAyY,4BACA,GAAAvb,qBACA,EAAAkU,oBACA,GAAAkuB,0BACA,GAAAvqE,aACA,GAAA48D,eACA,GAAAqQ,qBACA,EAAAnpB,0BACA,EAAAG,6BACA,GAAA5Q,6BACA,GAAA65B,mBACA,GAAA/xB,uCACA,GAAAlC,8BACA,GAAA+B,yBACA,GAAAzB,iCACA,GAAAgB,0BACA,GAAAH,iCACA,GAAA3B,2BACA,GAAAoC,2BACA,GAAAH,6BACA,GAAA4uB,2BACA,GAAA7uC,6BACA,GAAAprB,8BACA,EAAAmxC,yBAAuB,SAnLvB,EAAAi4C,aACA,EAAAlb,YACA,EAAAI,qBACA,EAAAC,eAAc,iBAEd,EAAA+a,oBACA,EAAArX,cAAY,SAgLZ,GAAAz9F,mBACA,GAAA+0G,gBACA,GAAA9yG,iBACA,GAAAb,mBACA,GAAAuU,mBACA,GAAAc,kBACA,GAAAnX,SACA,GAAA0vB,WACA,GAAA7S,aACA,EAAA43B,gBACA,EAAAG,gBACA,GAAAlQ,+B,gEAKKw1D,GAAS,E,KAxMrB,EAAAU,S,MAAS,CACNC,QAAS,CACL,EAAAya,aACA,EAAAlb,YACA,EAAAI,qBACA,EAAAC,eACA,EAAAH,cAAcib,WACd,EAAAC,oBACA,EAAArX,cAEJrD,aAAc,CACV,GAAAp6F,mBACA,EAAAk5D,yBACA,GAAAokB,gBACA,EAAAjjB,4BACA,GAAAmT,iBACA,EAAA5Q,qBACA,GAAA9W,mBACA,GAAArc,iBACA,GAAAmN,6BACA,GAAAyP,uBACA,GAAA2qB,mBACA,GAAAhqB,uBACA,GAAA5lD,mBACA,GAAAihD,gBACA,GAAAsN,qBACA,GAAAr2C,mBACA,GAAAy7F,gBACA,GAAAzkB,mBACA,GAAA0kB,gBACA,GAAAnuB,sBACA,GAAA30B,qBACA,GAAAlB,oBACA,GAAAc,kBACA,GAAAT,qBACA,GAAAK,mBACA,GAAAzvD,iBACA,GAAAm+E,qBACA,GAAAwC,mBACA,GAAA1sC,wBACA,GAAAq6B,oBACA,GAAAv/B,iBACA,GAAAkf,qBACA,GAAAqD,kBACA,GAAAwvB,4BACA,GAAApE,6BACA,GAAAG,uBACA,GAAAp8B,4BACA,GAAAohC,qBACA,GAAArS,yBACA,GAAA0a,gCACA,GAAAf,oCACA,GAAA2C,yBACA,GAAApB,gCACA,GAAAc,iCACA,GAAA9B,6BACA,GAAAV,0BACA,GAAAzhC,gBACA,GAAAS,gCACA,GAAAitB,qBACA,GAAApB,oCACA,GAAA2S,uBACA,EAAAv0C,gBACA,EAAAsjB,wBACA,GAAAvgB,mBACA,EAAAqjB,cACA,GAAAh7D,SACA,GAAAof,cACA,GAAAmvC,gBACA,GAAAY,iCACA,GAAAp4C,uBACA,GAAAuvE,iBACA,EAAAlrB,cACA,EAAAS,eACA,EAAApnB,gBACA,EAAA02B,wBACA,GAAA+a,iBACA,mBACA,oBACA,GAAA/X,6BACA,GAAAzpC,2BACA,GAAAksC,kCACA,wBACA,sBACA,uBACA,sBACA,oBACA,6BACA,wBACA,wBACA,uBACA,kBACA,mBACA,mCACA,mBACA,oCACA,wBACA,sBACA,kBACA,uBACA,kBACA,kBACA,sBACA,oBACA,yBACA,kCACA,qBACA,kBACA,2BACA,uBACA,uBACA,sBACA,GAAAp3B,uBACA,EAAAyf,4BACA,oCACA,kBACA,gCACA,GAAA6uB,2BACA,GAAAL,kCACA,EAAAr2D,0BACA,EAAAy/D,0BACA,GAAAtqE,iBACA,GAAAsgE,iBACA,GAAAxG,iBACA,GAAAp9B,oBACA,EAAAwZ,uBACA,EAAAG,0BACA,EAAAQ,kBACA,GAAA7N,+BACA,GAAAomD,kBACA,GAAAjmF,WACA,GAAAkkC,oBACA,oBACA,wBACA,GAAA4qB,cACA,GAAAnM,kBACA,GAAA2W,eACA,GAAAkH,2BACA,GAAAU,0BACA,EAAAjzB,aACA,GAAAtnD,mBACA,GAAAc,kBACA,GAAAqX,iBACA,GAAAqpD,eACA,GAAAL,wBACA,GAAAzuB,gCACA,EAAAqX,mBACA,GAAA7X,sBACA,GAAAc,wBACA,EAAA0W,0BACA,GAAArW,2BACA,GAAAI,wBACA,GAAAtuB,yBACA,GAAA+tB,2BACA,GAAAL,0BACA,GAAAuG,iCACA,GAAAg6B,mBACA,GAAA3hC,uBACA,EAAAyY,4BACA,GAAAvb,qBACA,EAAAkU,oBACA,GAAAkuB,0BACA,GAAAvqE,aACA,GAAA48D,eACA,GAAAqQ,qBACA,EAAAnpB,0BACA,EAAAG,6BACA,GAAA5Q,6BACA,GAAA65B,mBACA,GAAA/xB,uCACA,GAAAlC,8BACA,GAAA+B,yBACA,GAAAzB,iCACA,GAAAgB,0BACA,GAAAH,iCACA,GAAA3B,2BACA,GAAAoC,2BACA,GAAAH,6BACA,GAAA4uB,2BACA,GAAA7uC,6BACA,GAAAprB,8BACA,EAAAmxC,yBAEJhgE,QAAS,CACL,GAAAqD,mBACA,GAAA+0G,gBACA,GAAA9yG,iBACA,GAAAb,mBACA,GAAAuU,mBACA,GAAAc,kBACA,GAAAnX,SACA,GAAA0vB,WACA,GAAA7S,aACA,EAAA43B,gBACA,EAAAG,gBACA,GAAAlQ,4BAEJ/X,UAAW,CAAC,EAAA0oF,SAAU,GAAA3lF,WAAY,GAAA7S,cAClCk+E,UAAW,O,mHCzef,W,OAOA,aAOI,WAAoB6a,GAAA,KAAAA,QAHpB,KAAAz1G,GAAkB,KAIdJ,KAAKI,GAAKy1G,EAAMr1G,c,OAGpB,YAAAD,SAAA,sBACIP,KAAK81G,QAAUtuG,MAAMC,KAAKzH,KAAKI,GAAGsH,iBAAiB,iDACnD1H,KAAK81G,QAAQloG,SAAQ,SAAAmoG,GACjBA,EAAO5xG,iBAAiB,SAAS,SAACC,GAC9B,EAAKhE,GAAGyG,UAAUC,IAAI,aACvB,GAEHivG,EAAO5xG,iBAAiB,QAAQ,SAACC,GAC7B,EAAKhE,GAAGyG,UAAUgB,OAAO,aAC1B,OAIwB,YAAAsO,QAAnC,SAA2C/R,GACvC,IAAMqK,EAASrK,EAAMqK,OACrB,IAAIA,IAAWzO,KAAKI,IAAOqO,EAAO5H,UAAUmvG,SAAS,aAChDvnG,EAAO5H,UAAUmvG,SAAS,kBAI3Bh2G,KAAK81G,QAAQ95G,OAAS,EAAG,CACzB,IAAM+5G,EAAU/1G,KAAK81G,QAAQ,GAC7B,GAAqC,UAAjCC,EAAOE,QAAQ1yG,cAA2B,CAC1C,IAAM2yG,EAAWH,EACjB,GAAoB,MAAhBG,EAAQh0G,MAA+C,aAA/Bg0G,EAAQh0G,KAAKqB,cAErC,YADA2yG,EAAQC,QAIhBJ,EAAOj8F,U,iCArCN67F,GAAe,oC,iCAAfA,EAAe,gE,yCAAf,mB,EAHb,GAGa,EAAAA,mB,+DAAAA,EAAe,E,KAH3B,EAAA/0G,U,MAAU,CACPC,SAAU,mB,0CAuByBsV,QAAO,E,KAAzC,EAAAI,a,MAAa,QAAS,CAAC,gB,yGC/B5B,W,OAOA,2B,OAII,YAAA5W,UAAA,SAAUyV,EAAuBma,EAAoBogB,GACjD,YADiD,IAAAA,OAAA,GAClC,MAAXv6B,GAAsC,IAAnBA,EAAQpZ,OACpB,GAGO,MAAduzB,GAAsBA,EAAWvzB,OAAS,EACnCoZ,EAAQtG,QAAO,SAAApR,GAClB,OAAOiyC,IAAYjyC,EAAE+yC,cAI7BlhB,EAAaA,EAAWziB,OAAOvJ,cACxB6R,EAAQtG,QAAO,SAAApR,GAClB,OAAIiyC,IAAYjyC,EAAE+yC,YAGJ,MAAV/yC,EAAEE,MAAgBF,EAAEE,KAAK2F,cAAc0J,QAAQsiB,IAAe,OAG9DA,EAAWvzB,QAAU,GAAK0B,EAAEkC,GAAGmN,WAAWwiB,MAG5B,MAAd7xB,EAAE+pB,UAAoB/pB,EAAE+pB,SAASlkB,cAAc0J,QAAQsiB,IAAe,MAGtE7xB,EAAE0W,OAAwB,MAAf1W,EAAE0W,MAAMvC,KAAenU,EAAE0W,MAAMvC,IAAItO,cAAc0J,QAAQsiB,IAAe,W,iCA1BtFqmF,I,kDAAAA,EAAiB,U,EAH9B,GAGa,EAAAA,qB,+DAAAA,EAAiB,E,KAH7B,EAAA11G,K,MAAK,CACFtC,KAAM,oB,qjDCRV,WAMA,QAEA,UACA,UACA,UACA,UACA,UACA,UAEA,SACA,SACA,SACA,SACA,SAEA,SACA,SACA,SACA,QACA,SACA,SAEA,UACA,UACA,UACA,SACA,UACA,UACA,SACA,QACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEA,QACA,UACA,SACA,SACA,SACA,SACA,UACA,SACA,SACA,UACA,WACA,SACA,QACA,UACA,SACA,QACA,SACA,UACA,SAGA,SACA,QACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,UACA,UACA,QACA,SACA,SACA,WAEA,U,QAEM8B,GAAc,IAAI,EAAAL,YAAYH,OAAOoQ,UAAU8mG,SAAU,WACzD33F,GAAe,IAAI,EAAAvI,aACnBmiD,GAAqB,IAAI,EAAA/4C,mBACzBuqB,GAAmB,IAAI,EAAAwsE,4BAA4Bh+C,IACnDi+C,GAAoB,IAAI,EAAApmG,mBAAkB,GAC1C8Q,GAAuB,IAAI,EAAAu1F,wBAAwB72G,GAAamqC,GAAkBysE,IAAmB,WAAM,OAAA9+D,MAC3GA,GAA4C,IAAI,EAAAg/D,mBAAmBx1F,IACnEy1F,GAAkD,IAAI,EAAAC,qBACtDl8D,GAA0D,IAAI,GAAAm8D,yBAAyBz3G,OACzF8hB,IACEhD,GAAgB,IAAI,EAAAhc,cAAcw1C,GACpCx2B,GAAqB8jE,QAAUttC,GAAiBi/D,GAAsBj8D,GAAuBx5B,GAC7Fs1F,IACEniE,GAAe,IAAI,EAAA50B,aAAai4B,IAChC8C,GAAe,IAAI,EAAAs8D,aAAap/D,IAChCh5B,GAAqB,IAAI,EAAA5H,mBAAmB4gC,IAC5Cv2B,GAAa,IAAI,EAAAzhB,WAAW20C,GAAcnzB,GAAsBxC,IAClE,SAAO89E,GAAgB,qEAAK,SAAAzyD,GAAiBgB,KAAK,SAAU,CAAEyxD,QAASA,cACrEh/D,GAAc,IAAI,EAAA79B,YAAY00C,GAAcqD,IAC5CyjD,GAAkB,IAAI,EAAAjhD,gBAAgB1c,GAAaka,IAC9C,EAAAhJ,cAA+B,KAC1C,IAAMqoE,GAAoB,IAAI,EAAAC,kBAAkBR,GAAmBr1F,IAC7DsqB,GAAgB,IAAI,EAAAtpC,cAAc+b,GAAesf,GAAa29D,GAChEh6E,GAAY41F,GAAmBr/D,GAAgB93C,IAAa,WAAM,SAAA8uC,gBAAe8nE,IAC/E9qE,GAAgB,IAAI,EAAAr0B,cAAc6G,GAAesf,GAAarc,GAAYu2B,GAC5E93C,GAAa6rC,IACXG,GAAoB,IAAI,EAAA/0B,kBAAkBqH,GAAesf,GAAaka,GAAgB93C,IAC5F,EAAA8uC,cAAgB,IAAI,EAAA90B,cAAc6xB,GAAe+qE,GAAmB52G,IACpE,IAAM8xB,GAAgB,IAAI,EAAA/tB,cAAc65B,GAAaka,GAAgBv2B,IAC/Di9D,GAAc,IAAI,EAAAv+D,YAAY3B,GAAesf,GAAarc,GAAY41F,GAAmBr/D,GAC3F93C,GAAa86C,IACX3vB,GAAsB,IAAI,EAAA1Q,oBAAoBq9B,GAAgBla,GAAatf,GAAeiD,GAC5FkzB,GAAcmiE,IACZ/7D,GAAsB,IAAI,EAAAx9B,oBAAoBwuB,GAAeC,GAAeE,GAC9E1tB,GAAegD,GAAsBw2B,GAAgB3N,GAAkB,EAAA2E,cAAelR,GAAa6W,GACnG3iB,GAAe3G,GAAqB,MAAM,gFAAY,SAAAgf,GAAiBgB,KAAK,SAAU,CAAEyxD,SAAS,cAC/Fj/D,GAAc,IAAI,EAAA5mB,YAAY6mB,GAAarc,GAAYg6E,GACzDzvD,GAAeD,GAAevtB,GAAe0tB,GAAmB8L,GAAgB3N,GAAkBrY,GAClG0sD,GAAao4B,GAAmBniE,GAActpB,IAC9C,SAAOyxE,GAAgB,qEAAK,SAAAzyD,GAAiBgB,KAAK,SAAU,CAAEyxD,QAASA,cACrE1wD,GAA4B,IAAI,EAAA31B,0BAA0B+H,GAAew5B,GAAgBhmB,IACzFma,GAAc,IAAI,EAAAjsB,YAAY83B,GAAgBgD,GAAuB87D,IACrEx4F,GAAmB,IAAI,EAAAi5F,iBAAiB/4F,IACxCu9C,GAAc,IAAI,EAAArkD,YAAY8G,GAAeiD,GAC/Cqc,GAAa6W,GAAcmG,GAAc56C,GAAashB,GAAsB6oB,GAAkB0Q,GAC9F+7D,GAAmB97D,GAAuBh8B,GAAoBqM,IAC5Dm/B,GAAgB,IAAI,EAAAvqC,cAAc+rB,GAAeD,GAAetqB,GAAYjD,IAC5EkuC,GAAgB,IAAI,EAAA3d,cAAchD,GAAeC,GAAevqB,GAAYvhB,GAAagsC,GAC3F1qB,GAAsBhD,IACpBm9E,GAAuB,IAAI,EAAAphD,qBAAqBzc,GAAaD,GAAaid,GAAcr5B,GAAYs5B,GACtG/7B,IAAoB,gFAAY,SAAAqrB,GAAiBgB,KAAK,SAAU,CAAEyxD,SAAS,aAASga,IAClF7qE,GAAe,IAAI,EAAAptB,aAAam8B,GAAuBv5B,IACvD+1F,GAAsB,IAAI,eAAoBx/D,GAAgBv2B,GAAYqc,GAAaiO,GAAe+qE,IACtGxrF,GAA0B,IAAI,EAAAjU,wBAAwBmH,GAAete,GAAauhB,IAIxF,SAAgBg2F,KAAhB,WAcI,OAAO,gD,6EACH,SAAOz/D,GAAsClvC,Q,OAO9B,OAPf,SAEAkW,GAAmB04F,QAAQ,CAAEl0F,MARzBm0F,EAAUj4G,OAAOymD,SAAS51C,KAE9BonG,GADAA,EAAUA,EAAQnsG,QAAQ,MAAO,KACfA,QAAQ,OAAQ,OAMiB,GAEnD+Y,YAAW,WAAM,OAAAo3E,GAAqB7yF,SAAQ,KAE9CiyC,GAAoBjyC,MAAK,GACV,GAAMkvC,GAAev5C,IAAY,EAAAuZ,iBAAiBe,Y,OACjE,OADM0sE,EAAS,SACf,GAAMvlF,GAAY4I,KAAK28E,I,OAgBnB,OAhBJ,SACA+xB,GAAoB1uG,MAAK,GACzBizD,GAAYjzD,QACNw9E,EAAS5mF,OAAOgF,SAAS6hF,iBACxBl/E,UAAUC,IAAI,UAAYpH,GAAY2hG,mBAG7CrgF,GAAqBo2F,4BAA2B,SAAMC,GAAQ,qC,kDAC1C,SAAM7/D,GAAev5C,IAAe,EAAAuZ,iBAAiBgB,W,cAArD,WACA,GAAA8N,UAAU8+D,SACtBU,EAAOj/E,UAAUgB,OAAO,SAAW,GAAAye,UAAU0/D,MAAO,SAAW,GAAA1/D,UAAUC,MACzEu/D,EAAOj/E,UAAUC,IAAI,SAAWuwG,I,cAIxC,KAAA54F,IAAay7C,K,GAAK,EAAA1iD,iBAAiBI,mBAC/B,GAAM4/B,GAAev5C,IAAa,EAAAuZ,iBAAiBI,oB,OAClB,OAFrC,oBACI,YACJ,KAAA6G,IAAay7C,K,GAAK,mBAAmB,GAAM1iB,GAAev5C,IAAa,oB,cAAvE,oBAAqC,Y,IAvCzC,IAQQk5G,SAXZr5F,GAAiBw5F,eAAep4G,QAEhC,iBA4CA,gC,wCAgEao7F,I,iCAAAA,I,sCA3DE,CACP,EAAA1vE,kBACA,EAAA4gE,iBACA,EAAAtB,yBACA,EAAAiB,6BACA,EAAAQ,mBACA,EAAA9kD,cACA,EAAAxvB,aACA,EAAAq0E,iBACA,EAAA7lD,kBACA,CAAEzZ,QAAS,EAAAjkB,aAAyBovG,SAAU,GAAApvG,cAC9C,CAAEikB,QAAS,GAAA/N,aAAyBm5F,SAAU/rE,IAC9C,CAAErf,QAAS,GAAAlV,YAAwBsgG,SAAUj8C,IAC7C,CAAEnvC,QAAS,GAAAnqB,cAA0Bu1G,SAAUjsE,IAC/C,CAAEnf,QAAS,GAAAjV,cAA0BqgG,SAAUhsE,IAC/C,CAAEpf,QAAS,GAAA9sB,WAAYk4G,SAAUlB,IACjC,CAAElqF,QAAS,GAAAzV,kBAA8B6gG,SAAU9rE,IACnD,CAAEtf,QAAS,GAAAxV,mBAA+B4gG,SAAUh5F,IACpD,CAAE4N,QAAS,GAAA1M,YAAwB83F,SAAU7rE,IAC7C,CAAEvf,QAAS,GAAA7M,aAAyBi4F,SAAUrjE,IAC9C,CAAE/nB,QAAS,GAAA/sB,YAAwBm4G,SAAU93G,IAC7C,CAAE0sB,QAAS,GAAApqB,cAA0Bw1G,SAAUx5F,IAC/C,CAAEoO,QAAS,GAAA7sB,qBAAiCi4G,SAAUx2F,IACtD,CAAEoL,QAAS,GAAAnW,0BAAsCuhG,SAAU5rE,IAC3D,CAAExf,QAAS,GAAA5sB,WAAuBg4G,SAAUv2F,IAC5C,CAAEmL,QAAS,GAAA0qF,kBAA8BU,SAAUX,IACnD,CAAEzqF,QAAS,GAAA3V,YAAwB+gG,SAAUn6E,IAC7C,CAAEjR,QAAS,GAAA3sB,YAAwB+3G,SAAUl6E,IAC7C,CAAElR,QAAS,GAAAjsB,iBAA6Bq3G,SAAU3tE,IAClD,CAAEzd,QAAS,EAAA9M,mBAAoBk4F,SAAUn/C,IACzC,CAAEjsC,QAAS,GAAA4tB,gBAA4Bw9D,SAAUvc,IACjD,CAAE7uE,QAAS,GAAArP,oBAAgCy6F,SAAUj9D,IACrD,CAAEnuB,QAAS,GAAA5V,eAA2BghG,SAAUhgE,IAChD,CAAEprB,QAAS,GAAAlW,aAAyBshG,SAAU/4F,IAC9C,CAAE2N,QAAS,GAAA3M,cAA0B+3F,SAAUxtD,IAC/C,CAAE59B,QAAS,GAAA1S,cAA0B89F,SAAU,EAAAhpE,eAC/C,CAAEpiB,QAAS,GAAAmiB,cAA0BipE,SAAUtrD,IAC/C,CAAE9/B,QAAS,GAAA2tB,qBAAiCy9D,SAAUrc,IACtD,CAAE/uE,QAAS,GAAAhO,sBAAkCo5F,SAAUh9D,IACvD,CAAEpuB,QAAS,gBAAgCorF,SAAUR,IACrD,CAAE5qF,QAAS,GAAA3oB,cAA0B+zG,SAAUhmF,IAC/C,CAAEpF,QAAS,GAAAzM,YAAwB63F,SAAUt5B,IAC7C,CAAE9xD,QAAS,GAAAjS,oBAAgCq9F,SAAU3sF,IACrD,CAAEuB,QAAS,GAAAvV,wBAAoC2gG,SAAU1sF,IACzD,CAAEsB,QAAS,GAAA1V,wBAAoC6gG,SAAU,EAAA7gG,yBACzD,CAAE0V,QAAS,GAAA9sB,WAAYk4G,SAAUlB,IACjC,CACIlqF,QAAS,EAAAqrF,gBACTC,WAAYT,GACZU,KAAM,GACNrrF,OAAO,GAEX,CACIF,QAAS,EAAAwrF,UACTF,WAAY,WAAM,OAAAh4G,GAAY2hG,mBAC9BsW,KAAM,KAEb,SA7DQ,CACL,EAAApd,kB,EAFR,GAgEa,EAAAD,mB,iEAAAA,GAAc,UA9DnB,EAAAC,kB,gEA8DKD,GAAc,E,KAhE1B,EAAAO,S,MAAS,CACNC,QAAS,CACL,EAAAP,eAEJQ,aAAc,GACdnuE,UAAW,CACP,EAAAhC,kBACA,EAAA4gE,iBACA,EAAAtB,yBACA,EAAAiB,6BACA,EAAAQ,mBACA,EAAA9kD,cACA,EAAAxvB,aACA,EAAAq0E,iBACA,EAAA7lD,kBACA,CAAEzZ,QAAS,EAAAjkB,aAAyBovG,SAAU,GAAApvG,cAC9C,CAAEikB,QAAS,GAAA/N,aAAyBm5F,SAAU/rE,IAC9C,CAAErf,QAAS,GAAAlV,YAAwBsgG,SAAUj8C,IAC7C,CAAEnvC,QAAS,GAAAnqB,cAA0Bu1G,SAAUjsE,IAC/C,CAAEnf,QAAS,GAAAjV,cAA0BqgG,SAAUhsE,IAC/C,CAAEpf,QAAS,GAAA9sB,WAAYk4G,SAAUlB,IACjC,CAAElqF,QAAS,GAAAzV,kBAA8B6gG,SAAU9rE,IACnD,CAAEtf,QAAS,GAAAxV,mBAA+B4gG,SAAUh5F,IACpD,CAAE4N,QAAS,GAAA1M,YAAwB83F,SAAU7rE,IAC7C,CAAEvf,QAAS,GAAA7M,aAAyBi4F,SAAUrjE,IAC9C,CAAE/nB,QAAS,GAAA/sB,YAAwBm4G,SAAU93G,IAC7C,CAAE0sB,QAAS,GAAApqB,cAA0Bw1G,SAAUx5F,IAC/C,CAAEoO,QAAS,GAAA7sB,qBAAiCi4G,SAAUx2F,IACtD,CAAEoL,QAAS,GAAAnW,0BAAsCuhG,SAAU5rE,IAC3D,CAAExf,QAAS,GAAA5sB,WAAuBg4G,SAAUv2F,IAC5C,CAAEmL,QAAS,GAAA0qF,kBAA8BU,SAAUX,IACnD,CAAEzqF,QAAS,GAAA3V,YAAwB+gG,SAAUn6E,IAC7C,CAAEjR,QAAS,GAAA3sB,YAAwB+3G,SAAUl6E,IAC7C,CAAElR,QAAS,GAAAjsB,iBAA6Bq3G,SAAU3tE,IAClD,CAAEzd,QAAS,EAAA9M,mBAAoBk4F,SAAUn/C,IACzC,CAAEjsC,QAAS,GAAA4tB,gBAA4Bw9D,SAAUvc,IACjD,CAAE7uE,QAAS,GAAArP,oBAAgCy6F,SAAUj9D,IACrD,CAAEnuB,QAAS,GAAA5V,eAA2BghG,SAAUhgE,IAChD,CAAEprB,QAAS,GAAAlW,aAAyBshG,SAAU/4F,IAC9C,CAAE2N,QAAS,GAAA3M,cAA0B+3F,SAAUxtD,IAC/C,CAAE59B,QAAS,GAAA1S,cAA0B89F,SAAU,EAAAhpE,eAC/C,CAAEpiB,QAAS,GAAAmiB,cAA0BipE,SAAUtrD,IAC/C,CAAE9/B,QAAS,GAAA2tB,qBAAiCy9D,SAAUrc,IACtD,CAAE/uE,QAAS,GAAAhO,sBAAkCo5F,SAAUh9D,IACvD,CAAEpuB,QAAS,gBAAgCorF,SAAUR,IACrD,CAAE5qF,QAAS,GAAA3oB,cAA0B+zG,SAAUhmF,IAC/C,CAAEpF,QAAS,GAAAzM,YAAwB63F,SAAUt5B,IAC7C,CAAE9xD,QAAS,GAAAjS,oBAAgCq9F,SAAU3sF,IACrD,CAAEuB,QAAS,GAAAvV,wBAAoC2gG,SAAU1sF,IACzD,CAAEsB,QAAS,GAAA1V,wBAAoC6gG,SAAU,EAAA7gG,yBACzD,CAAE0V,QAAS,GAAA9sB,WAAYk4G,SAAUlB,IACjC,CACIlqF,QAAS,EAAAqrF,gBACTC,WAAYT,GACZU,KAAM,GACNrrF,OAAO,GAEX,CACIF,QAAS,EAAAwrF,UACTF,WAAY,WAAM,OAAAh4G,GAAY2hG,mBAC9BsW,KAAM,S,+HChQlB,iBACI,WAAoBt/C,GAAA,KAAAA,qBAMxB,OAJI,YAAAxtB,KAAA,SAAKgtE,EAAoBC,QAAA,IAAAA,MAAA,IACrB,IAAMtmG,EAAUvV,OAAOuS,OAAO,GAAI,CAAE+pD,QAASs/C,GAAcC,GAC3D93G,KAAKq4D,mBAAmBxtB,KAAKr5B,IAErC,EAPA,GAAa,EAAA6kG,+B,y+CCFb,YAEA,aAUI,WAAoBr1F,GAAA,KAAAA,uBATZ,KAAA+2F,iBAAmB,IAAIhK,IAAI,CAAC,QAAS,iBAAkB,kBAAmB,4BAC9E,EAAAv2F,iBAAiBI,kBAAmB,gBAAiB,kBAAmB,kBACxE,EAAAJ,iBAAiBe,UAAW,EAAAf,iBAAiBkB,wBAC7C,EAAAlB,iBAAiBU,gBAAiB,EAAAV,iBAAiBW,sBAAuB,EAAAX,iBAAiB0B,mBAC3F,EAAA1B,iBAAiB2B,YAAa,mBAAoB,EAAA3B,iBAAiBgB,WAC/D,KAAAw/F,2BAA6B,CAAC,kBAAmB,EAAAxgG,iBAAiBiB,sBAAwB,KAC1F,KAAAw/F,4BAA8B,CAAC,WAAY,WAAY,eAAgB,YAAa,aACpF,KAAAC,cAAgB,IAAIj0G,IAyFhC,OArFU,YAAAqE,KAAN,W,0FAEyB,SAAMtI,KAAK/B,IAAY,EAAAuZ,iBAAiBU,kB,cACzC,MADC,UACQlY,KAAKghB,qBAAqB8jE,QAAnD,MACA,GAAM9kF,KAAKk6D,KAAK,EAAA1iD,iBAAiBU,gBAAiB,K,OAAlD,S,iBAIuB,SAAMlY,KAAK/B,IAAY,EAAAuZ,iBAAiBW,wB,cACzC,MADC,SACvB,MACA,GAAMnY,KAAKk6D,KAAK,EAAA1iD,iBAAiBW,sBAAuB,S,OAAxD,S,mCAIR,YAAAla,IAAA,SAAOU,GACH,IAAImwD,EAAe,KAQnB,GAAY,OANRA,EADA9uD,KAAKm4G,eAAex5G,GACbO,OAAOk5G,aAAaC,QAAQ15G,GAC5BqB,KAAKs4G,gBAAgB35G,GACrBqB,KAAKk4G,cAAcj6G,IAAIU,GAEvBO,OAAOq5G,eAAeF,QAAQ15G,IAEvB,CACd,IAAMiQ,EAAMqjE,KAAKriE,MAAMk/C,GACvB,OAAO3zC,QAAQC,QAAQxM,GAE3B,OAAOuM,QAAQC,QAAQ,OAGrB,YAAAxV,IAAN,SAAUjH,G,0FACC,SAAMqB,KAAK/B,IAAIU,I,OAAtB,MAAO,CAAP,EAA8B,MAAvB,kBAGX,YAAAu7D,KAAA,SAAKv7D,EAAaiQ,GACd,GAAW,MAAPA,EACA,OAAO5O,KAAK6H,OAAOlJ,GAGnBiQ,aAAem/F,MACfn/F,EAAMpH,MAAMC,KAAKmH,IAGrB,IAAMkgD,EAAOmjB,KAAKC,UAAUtjE,GAQ5B,OAPI5O,KAAKm4G,eAAex5G,GACpBO,OAAOk5G,aAAaI,QAAQ75G,EAAKmwD,GAC1B9uD,KAAKs4G,gBAAgB35G,GAC5BqB,KAAKk4G,cAAcxyG,IAAI/G,EAAKmwD,GAE5B5vD,OAAOq5G,eAAeC,QAAQ75G,EAAKmwD,GAEhC3zC,QAAQC,WAGnB,YAAAvT,OAAA,SAAOlJ,GAQH,OAPIqB,KAAKm4G,eAAex5G,GACpBO,OAAOk5G,aAAaK,WAAW95G,GACxBqB,KAAKs4G,gBAAgB35G,GAC5BqB,KAAKk4G,cAAc5nE,OAAO3xC,GAE1BO,OAAOq5G,eAAeE,WAAW95G,GAE9Bwc,QAAQC,WAGX,YAAA+8F,eAAR,SAAuBx5G,GACnB,GAAIqB,KAAK+3G,iBAAiBnyG,IAAIjH,GAC1B,OAAO,EAEX,IAAoB,UAAAqB,KAAKg4G,2BAAL,eAAiC,CAAhD,IAAMU,EAAK,KACZ,GAAI/5G,EAAIoO,WAAW2rG,GACf,OAAO,EAGf,OAAO,GAGH,YAAAJ,gBAAR,SAAwB35G,GACpB,IAAoB,UAAAqB,KAAKi4G,4BAAL,eAAkC,CAAjD,IAAMS,EAAK,KACZ,GAAI/5G,EAAIoO,WAAW2rG,GACf,OAAO,EAGf,OAAO,GAEf,EAjGA,GAAa,EAAAlC,sB,q0DCJb,IAEA,cACI,WAAYmC,EAAwBC,GAApC,MACI,YAAMD,GAAkB,QAASC,GAAkB,SAAOC,GAAuB,qC,wDAGvD,OAFhBC,EAAW94G,KAAK44G,iBAAmB,IAAMC,EAA9B74G,8BAEK,GAAM4uD,MAAMkqD,I,OAClB,SADM,SACchqD,Q,OACpC,MAAO,CAAP,EADgB,qBAElB,K,OAGF,EAAKk2B,4BAA8B,CAC/B,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAAS,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5J,KAAM,KAAM,QAAS,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,QAAS,S,EAG7F,OAhBiC,OAgBjC,EAhBA,CAFA,QAEiC,aAApB,EAAA3lF,e,k+CCAb,iBAwDI,WAAsBs5G,EAAkCC,EAC1CG,GADQ,KAAAJ,iBAAkC,KAAAC,mBAC1C,KAAAG,iBAtDd,KAAA/zB,4BAAwC,CAAC,MAGzC,KAAAE,YAAc,IAAIjhF,IAAoB,CAClC,CAAC,KAAM,aACP,CAAC,KAAM,gBACP,CAAC,KAAM,cACP,CAAC,KAAM,aACP,CAAC,KAAM,UACP,CAAC,KAAM,WACP,CAAC,KAAM,SACP,CAAC,KAAM,WACP,CAAC,KAAM,YACP,CAAC,KAAM,WACP,CAAC,QAAS,qBACV,CAAC,KAAM,aACP,CAAC,KAAM,WACP,CAAC,KAAM,SACP,CAAC,KAAM,SACP,CAAC,KAAM,SACP,CAAC,KAAM,YACP,CAAC,KAAM,SACP,CAAC,KAAM,UACP,CAAC,KAAM,YACP,CAAC,KAAM,UACP,CAAC,KAAM,oBACP,CAAC,KAAM,YACP,CAAC,KAAM,OACP,CAAC,KAAM,OACP,CAAC,KAAM,aACP,CAAC,KAAM,UACP,CAAC,KAAM,kBACP,CAAC,KAAM,cACP,CAAC,KAAM,UACP,CAAC,QAAS,uBACV,CAAC,QAAS,aACV,CAAC,KAAM,UACP,CAAC,KAAM,WACP,CAAC,KAAM,cACP,CAAC,KAAM,UACP,CAAC,KAAM,WACP,CAAC,KAAM,OACP,CAAC,KAAM,UACP,CAAC,KAAM,cACP,CAAC,KAAM,cACP,CAAC,QAAS,YACV,CAAC,QAAS,YAIJ,KAAA+0G,gBAAuB,GACvB,KAAAC,eAAsB,GAI5Bj5G,KAAK24G,eAAiBA,EAAe3tG,QAAQ,IAAK,KA4F1D,OAzFU,YAAA1C,KAAN,SAAW28E,G,0FACP,GAAIjlF,KAAKwI,OACL,MAAM,IAAIrF,MAAM,6BAEpB,GAAwC,MAApCnD,KAAKglF,6BAAmF,IAA5ChlF,KAAKglF,4BAA4BhpF,OAC7E,MAAM,IAAImH,MAAM,wCAGpBnD,KAAKwI,QAAS,EACdxI,KAAKilF,OAASjlF,KAAKqhG,kBAA8B,MAAVpc,EAAiBA,EAASjlF,KAAK24G,eAEtE,IACI34G,KAAKmO,SAAW,IAAI+qG,KAAKC,SAASn5G,KAAKilF,OAAQ,CAAEm0B,SAAS,EAAMC,YAAa,SAC/E,SACEr5G,KAAKmO,SAAW,K,OAGsD,IAAtEnO,KAAKglF,4BAA4B/3E,QAAQjN,KAAKqhG,qBAC9CrhG,KAAKqhG,kBAAoBrhG,KAAKqhG,kBAAkBjiG,MAAM,EAAG,IAEiB,IAAtEY,KAAKglF,4BAA4B/3E,QAAQjN,KAAKqhG,qBAC9CrhG,KAAKqhG,kBAAoBrhG,KAAKglF,4BAA4B,KAIrC,MAAzBhlF,KAAK44G,iBAAL,MACA,GAAM54G,KAAKs5G,aAAat5G,KAAKqhG,kBAAmBrhG,KAAKi5G,iB,cAArD,SACIj5G,KAAKqhG,oBAAsBrhG,KAAKglF,4BAA4B,GAA5D,MACA,GAAMhlF,KAAKs5G,aAAat5G,KAAKglF,4BAA4B,GAAIhlF,KAAKg5G,kB,OAAlE,S,mCAKZ,YAAA16G,EAAA,SAAEsB,EAAYC,EAAaC,EAAaC,GACpC,OAAOC,KAAKu5G,UAAU35G,EAAIC,EAAIC,EAAIC,IAGtC,YAAAw5G,UAAA,SAAU35G,EAAYC,EAAaC,EAAaC,GAC5C,IAAIlD,EAqBJ,MAZe,MAPXA,EADAmD,KAAKi5G,eAAe98G,eAAeyD,IAAOI,KAAKi5G,eAAer5G,GACrDI,KAAKi5G,eAAer5G,GACtBI,KAAKg5G,gBAAgB78G,eAAeyD,IAAOI,KAAKg5G,gBAAgBp5G,GAC9DI,KAAKg5G,gBAAgBp5G,GAErB,MAIC,MAANC,IACAhD,EAASA,EAAO8Q,MAAM,UAAUnC,KAAK3L,IAE/B,MAANC,IACAjD,EAASA,EAAO8Q,MAAM,UAAUnC,KAAK1L,IAE/B,MAANC,IACAlD,EAASA,EAAO8Q,MAAM,UAAUnC,KAAKzL,KAItClD,GAGG,YAAAy8G,aAAd,SAA2Br0B,EAAgBu0B,G,0GAEvB,OADVX,EAAkB5zB,EAAOj6E,QAAQ,IAAK,KAC5B,GAAMhL,KAAK+4G,eAAeF,I,OAC1C,IAAW7qG,KADLyrG,EAAU,SAEZ,GAAKA,EAAQt9G,eAAe6R,KAG5BwrG,EAAYxrG,GAAQyrG,EAAQzrG,GAAMwD,QAE9BioG,EAAQzrG,GAAM0rG,cACd,IAAWC,KAAaF,EAAQzrG,GAAM0rG,aAC7BD,EAAQzrG,GAAM0rG,aAAav9G,eAAew9G,IAC1CF,EAAQzrG,GAAM0rG,aAAaC,GAAW9sD,UAIrC+sD,EAAe,MAAQD,EAAUr2G,cAAgB,MAEhC,QADnBu2G,EAAiBJ,EAAQzrG,GAAM0rG,aAAaC,GAAW9sD,UACT,OAAnBgtD,GAA8C,OAAnBA,IACtDA,EAAiB,MAAQA,EAAiB,MAE9CL,EAAYxrG,GAAQwrG,EAAYxrG,GAAMhD,QAAQ,IAAIoB,OAAOwtG,EAAc,KAAMC,I,kBAMjG,EAtJA,GAAa,EAAAx6G,e,2+CCAb,8BACY,KAAAy6G,MAAQ,IAAI71G,IA0BxB,OAxBI,YAAAhG,IAAA,SAAOU,GACH,GAAIqB,KAAK85G,MAAMl0G,IAAIjH,GAAM,CACrB,IAAMiQ,EAAM5O,KAAK85G,MAAM77G,IAAIU,GAC3B,OAAOwc,QAAQC,QAAQxM,GAE3B,OAAOuM,QAAQC,QAAQ,OAGrB,YAAAxV,IAAN,SAAUjH,G,mEACN,MAAO,CAAP,EAAwB,MAAjBqB,KAAK/B,IAAIU,WAGpB,YAAAu7D,KAAA,SAAKv7D,EAAaiQ,GACd,OAAW,MAAPA,EACO5O,KAAK6H,OAAOlJ,IAEvBqB,KAAK85G,MAAMp0G,IAAI/G,EAAKiQ,GACbuM,QAAQC,YAGnB,YAAAvT,OAAA,SAAOlJ,GAEH,OADAqB,KAAK85G,MAAMxpE,OAAO3xC,GACXwc,QAAQC,WAEvB,EA3BA,GAAa,EAAAs7F,wB,sdCFb,WAEA,UACA,S,OAEA,yE,OAEI,EAAAphD,UAAY,EAAAw7B,0B,SAD6B,O,+BAAhCp6E,I,oCAAAA,EAAuB,QAAvBA,EAAuB,O,EADpC,CAC6C,2BAAhC,EAAAA,0B,8BAAAA,I,+DAAAA,EAAuB,E,KADnC,EAAAtO,a,0/CCLD,WAKA,GAHA,MAGA,Q,GACA,M,sBAEA,aAII,WAAoBwhC,EAAoC/e,GAApC,KAAA+e,eAAoC,KAAA/e,sBAF9C,KAAAyqC,UAAY,EAAAw7B,0B,OAItB,YAAAjgD,gBAAA,WACI,MAAO,CAAC,OAAQ,WAAY,UAAW,cAAe,kBAGpD,YAAA7F,mBAAN,W,gGACS,SAAMhrC,KAAK+f,W,OAAhB,OAAK,SAMM,OAFL6pC,EAAM5pD,KAAK4pC,aAAarkC,KAAKvF,KAAKs1D,UAAW,CAAC5xD,qBAAqB,KAG9D,CAAP,GAAO,GAGI,GAAMkmD,EAAI/hB,mBATd,CAAP,GAAO,G,OAUX,MAAO,CAAP,GAAkB,IADH,kBAIb,YAAA9nB,QAAN,W,0FACY,SAAM/f,KAAK6qB,oBAAoBM,uB,OAAvC,MAAO,CAAP,GAAQ,kB,iCAzBHzU,GAAuB,+D,oCAAvBA,EAAuB,QAAvBA,EAAuB,O,EADpC,GACa,EAAAA,2B,+DAAAA,EAAuB,E,KADnC,EAAAtO,c,6jDCRD,aAEA,SACA,SAQA,QAEA,aAMI,WAAoB1I,EAAkCmqC,EAC1C5oC,EAAgCu2C,GADxB,KAAA93C,cAAkC,KAAAmqC,mBAC1C,KAAA5oC,aAAgC,KAAAu2C,iBAN5C,KAAAuiE,iBAA2B,MAEnB,KAAAC,aAA2B,KAC3B,KAAAC,uBAAyB/6G,OAAOg7G,WAAW,gCA4SvD,OAvSI,YAAApU,UAAA,WACI,OAAyB,MAArB9lG,KAAKg6G,gBAIyC,IAA9C1qG,UAAUC,UAAUtC,QAAQ,eAAmE,IAA5CqC,UAAUC,UAAUtC,QAAQ,WAC/EjN,KAAKg6G,aAAe,EAAA/hF,WAAWc,eACxBzpB,UAAUC,UAAUtC,QAAQ,UAAY,EAC/CjN,KAAKg6G,aAAe,EAAA/hF,WAAWe,cACkB,IAA1C1pB,UAAUC,UAAUtC,QAAQ,SACnCjN,KAAKg6G,aAAe,EAAA/hF,WAAWkB,aACsB,IAA9C7pB,UAAUC,UAAUtC,QAAQ,aACnCjN,KAAKg6G,aAAe,EAAA/hF,WAAWiB,gBACqB,IAA7C5pB,UAAUC,UAAUtC,QAAQ,cAAiE,IAA3CqC,UAAUC,UAAUtC,QAAQ,UACrFjN,KAAKg6G,aAAe,EAAA/hF,WAAWgB,cACvB/5B,OAAei7G,SAAuD,IAA7C7qG,UAAUC,UAAUtC,QAAQ,YAC7DjN,KAAKg6G,aAAe,EAAA/hF,WAAWa,eACsB,IAA9CxpB,UAAUC,UAAUtC,QAAQ,aACnCjN,KAAKg6G,aAAe,EAAA/hF,WAAWmB,UAE/Bp5B,KAAKg6G,aAAe,EAAA/hF,WAAWoB,gBAlBxBr5B,KAAKg6G,cAwBpB,YAAAjU,gBAAA,WAEI,OADe,EAAA9tE,WAAWj4B,KAAK8lG,aAAaviG,cAC9ByH,QAAQ,UAAW,KAGrC,YAAAukG,UAAA,WACI,OAAOvvG,KAAK8lG,cAAgB,EAAA7tE,WAAWc,gBAG3C,YAAAqhF,SAAA,WACI,OAAOp6G,KAAK8lG,cAAgB,EAAA7tE,WAAWa,eAG3C,YAAAuhF,OAAA,WACI,OAAOr6G,KAAK8lG,cAAgB,EAAA7tE,WAAWkB,aAG3C,YAAAmhF,QAAA,WACI,OAAOt6G,KAAK8lG,cAAgB,EAAA7tE,WAAWe,cAG3C,YAAAuhF,UAAA,WACI,OAAOv6G,KAAK8lG,cAAgB,EAAA7tE,WAAWiB,gBAG3C,YAAAo2E,SAAA,WACI,OAAOtvG,KAAK8lG,cAAgB,EAAA7tE,WAAWgB,eAG3C,YAAAwpE,KAAA,WACI,OAAOziG,KAAK8lG,cAAgB,EAAA7tE,WAAWmB,WAG3C,YAAAohF,cAAA,WACI,OAAO,GAGX,YAAAC,WAAA,WACI,OAAOt/F,QAAQC,SAAQ,IAG3B,YAAA4T,UAAA,SAAUnd,EAAaZ,GACnB,IAAMhD,EAAI/J,SAASgD,cAAc,KACjC+G,EAAE8B,KAAO8B,EACM,MAAXZ,GAAoBA,EAAQytD,aAC5BzwD,EAAEQ,OAAS,SACXR,EAAEysG,IAAM,uBAEZzsG,EAAEpH,UAAUC,IAAI,UAChB5C,SAASiC,KAAKC,YAAY6H,GAC1BA,EAAEkoG,QACFjyG,SAASiC,KAAK2d,YAAY7V,IAG9B,YAAAkkE,SAAA,SAAS/iE,EAAaurG,EAAeC,EAAkBr1E,GACnD,IAAIs1E,EAAa,KACb34G,EAAe,KACb44G,EAAgBv1E,EAAShiC,cAC3Bw3G,GAAa,EA8BjB,GA7BID,EAAcE,SAAS,SACvB94G,EAAO,kBACP64G,GAAa,GACND,EAAcE,SAAS,SAC9B94G,EAAO,oEACA44G,EAAcE,SAAS,SAC9B94G,EAAO,0EACA44G,EAAcE,SAAS,SAC9B94G,EAAO,4EACA44G,EAAcE,SAAS,QAC9B94G,EAAO,WACA44G,EAAcE,SAAS,QAC9B94G,EAAO,YACA44G,EAAcE,SAAS,SAAWF,EAAcE,SAAS,SAChE94G,EAAO,aACA44G,EAAcE,SAAS,UAC9B94G,EAAO,aAEC,MAARA,GAEwB,OADxB04G,EAAcA,GAAe,IACb14G,OACZ04G,EAAY14G,KAAOA,GAMvB24G,EAHe,MAAfD,GAAwB56G,KAAKyiG,OAGtB,IAAIwY,KAAK,CAACN,IAFV,IAAIM,KAAK,CAACN,GAAWC,GAI5BtrG,UAAU4rG,iBACV5rG,UAAU6rG,WAAWN,EAAMt1E,OACxB,CACH,IAAMt3B,EAAImB,EAAIlL,SAASgD,cAAc,KACjC6zG,EACA9sG,EAAEqsE,SAAW/0C,EACLvlC,KAAKsvG,aACbrhG,EAAEQ,OAAS,UAEfR,EAAE8B,KAAOJ,IAAIyrG,gBAAgBP,GAC7B5sG,EAAE7G,MAAMi0G,SAAW,QACnBjsG,EAAIlL,SAASiC,KAAKC,YAAY6H,GAC9BA,EAAEkoG,QACF/mG,EAAIlL,SAASiC,KAAK2d,YAAY7V,KAItC,YAAA0mC,sBAAA,WACI,OAAOx5B,QAAQC,QAAQ,WAG3B,YAAAghC,iBAAA,SAAiBhtC,GACb,MAAyC,oBAA1B,qBAGnB,YAAA+sC,YAAA,WACI,OAAO,GAGX,YAAAzxB,UAAA,SAAUxoB,EAAgD5B,EAAe8wB,EACrEngB,GACAjR,KAAK6pC,iBAAiBgB,KAAK,YAAa,CACpCzZ,KAAMA,EACN9wB,MAAOA,EACP4B,KAAMA,EACN+O,QAASA,KAIX,YAAAo4B,WAAN,SAAiBljC,EAAc7F,EAAgBg7G,EAAsBC,EAAqBr5G,EACtFs5G,G,YAAA,IAAAA,OAAA,G,+FAEA,GADIC,EAAsB,KACd,MAARv5G,EAEA,OAAQA,GACJ,IAAK,UACDu5G,EAAc,wBACd,MACJ,IAAK,UACDA,EAAc,0BACd,MACJ,IAAK,QACDA,EAAc,sBACd,MACJ,IAAK,OACDA,EAAc,2BAaR,OALI,OADhBC,EAAiBx3G,SAAS8C,cAAc,eAE1C00G,EAAeC,gBAAgB,YAG7BC,EAA6B,MAAfH,EAAsB,iCAAiCA,EAAW,cAAWp5G,EAC/E,GAAM,UAAK8qD,KAAK,CAC9BC,YAAY,EACZC,gBAAgB,EAChB9qD,KAAML,EACNorD,SAAUsuD,EACVxqF,KAAMoqF,EAAa,KAAOr1G,EAC1B01G,KAAML,EAAar1G,EAAO,KAC1BunD,UAAWptD,EACXw7G,iBAAiC,MAAdP,EACnBQ,iBAAkBR,EAClB5tD,mBAAmB,EACnBC,kBAAkC,MAAf0tD,EAAsBt7G,KAAKN,YAAYpB,EAAE,MAAQg9G,K,OAOxE,OAlBMpuE,EAAY,SAcI,MAAlBwuE,GACAA,EAAeh7G,aAAa,WAAY,MAGrC,CAAP,EAAOwsC,EAAU7uC,eAGrB,YAAAymF,MAAA,WACI,OAAO,GAGX,YAAArmD,WAAA,WACI,OAAO,GAGX,YAAAqO,gBAAA,SAAgB1b,EAAcngB,GAC1B,IAAI7B,EAAMlQ,OACN0R,EAAM1R,OAAOgF,SAOjB,GANI+M,IAAYA,EAAQ/R,QAAU+R,EAAQ7B,KAEtCwB,GADAxB,EAAM6B,EAAQ/R,QAAU+R,EAAQ7B,KACtBlL,SACH+M,GAAWA,EAAQL,MAC1BA,EAAMK,EAAQL,KAEbxB,EAAY4sG,eAAkB5sG,EAAY4sG,cAAcC,QAExD7sG,EAAY4sG,cAAcC,QAAQ,OAAQ7qF,QACxC,GAAIxgB,EAAIsrG,uBAAyBtrG,EAAIsrG,sBAAsB,QAAS,CACvE,IAAMC,EAAWvrG,EAAI1J,cAAc,YACnCi1G,EAAS7tD,YAAcl9B,EAEvB+qF,EAAS/0G,MAAMi0G,SAAW,QAC1B,IAAIe,EAASxrG,EAAIzK,KAEbyK,EAAIzK,KAAKU,UAAUmvG,SAAS,gBAC5BoG,EAASxrG,EAAIzK,KAAKa,cAA2B,WAEjDo1G,EAAOh2G,YAAY+1G,GACnBA,EAASnrE,SACT,IAAIj7B,GAAU,EACd,KAEIA,EAAUnF,EAAIyrG,YAAY,UAEtBr8G,KAAKiB,WAAWstF,MAAM,yCAE5B,MAAO/sF,GAELujB,QAAQixE,KAAK,4BAA6Bx0F,G,QAE1C46G,EAAOt4F,YAAYq4F,GAEvB,OAAOpmG,IAIf,YAAAumG,kBAAA,SAAkBrrG,GACd,MAAM,IAAI9N,MAAM,uCAGpB,YAAA47F,kBAAA,WACI,OAAO5jF,QAAQC,SAAQ,IAG3B,YAAAmhG,sBAAA,WACI,OAAOphG,QAAQC,SAAQ,IAG3B,YAAA8jF,sBAAA,WACI,OAAO,GAGX,YAAAsd,sBAAA,WACI,OAAOrhG,QAAQC,QAAQpb,KAAKi6G,uBAAuBhP,QAAU,EAAA3kF,UAAUC,KAAO,EAAAD,UAAU0/D,QAGtF,YAAA3/D,kBAAN,W,gGACkB,SAAMrmB,KAAKw3C,iBAAiBv5C,IAAe,EAAAuZ,iBAAiBgB,W,OAC1E,OADMmsE,EAAQ,YACA,EAAAr+D,UAAUC,KACb,CAAP,EAAO,EAAAD,UAAUC,MACVo+D,IAAU,EAAAr+D,UAAU8+D,OACpB,CAAP,EAAOplF,KAAKw8G,yBAEL,CAAP,EAAO,EAAAl2F,UAAU0/D,eAIzB,YAAAoxB,2BAAA,SAA2Bp7D,GACvB,IACIh8C,KAAKi6G,uBAAuB91G,iBAAiB,UAAU,SAAC,G,IAAE8mG,EAAO,UAC7DjvD,EAASivD,EAAU,EAAA3kF,UAAUC,KAAO,EAAAD,UAAU0/D,UAEpD,MAAOxkF,GAELxB,KAAKi6G,uBAAuBwC,aAAY,SAAAjqF,GACpCwpB,EAASxpB,EAAGy4E,QAAU,EAAA3kF,UAAUC,KAAO,EAAAD,UAAU0/D,YAIjE,EAhTA,GAAa,EAAAuwB,2B,i+CCbb,aAgGA,QAEA,UACA,SACA,UACA,UACA,UACA,SACA,SAIA,SACA,SAMA,SACA,UACA,SACA,UAIA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,UACA,SACA,UACA,UAKA,UACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UAIA,SACA,UACA,UACA,UACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,UACA,UACA,WACA,WAKA,WAKA,cAOI,WAAoBpiE,EAAoCnzB,EAC5CxC,EAAgDk+F,EAChDC,QAAA,IAAAA,MAAA,MAFQ,KAAAxoE,eAAoC,KAAAnzB,uBAC5C,KAAAxC,qBAAgD,KAAAk+F,iBAChD,KAAAC,kBALJ,KAAAC,aAAc,EACd,KAAAC,iBAAkB,EAKtB78G,KAAKkmG,OAASllF,EAAqB8kF,YACnC9lG,KAAK4yB,WAAa5yB,KAAKkmG,OAAO37F,WAC9BvK,KAAK48G,YAAc58G,KAAKkmG,SAAW,EAAAjuE,WAAWmB,WAAap5B,KAAKkmG,SAAW,EAAAjuE,WAAWa,eAClF94B,KAAKkmG,SAAW,EAAAjuE,WAAWkB,aAAen5B,KAAKkmG,SAAW,EAAAjuE,WAAWc,gBACrE/4B,KAAKkmG,SAAW,EAAAjuE,WAAWe,cAAgBh5B,KAAKkmG,SAAW,EAAAjuE,WAAWgB,eACtEj5B,KAAKkmG,SAAW,EAAAjuE,WAAWoB,gBAAkBr5B,KAAKkmG,SAAW,EAAAjuE,WAAWiB,eAC5El5B,KAAK68G,gBAAkB78G,KAAKkmG,SAAW,EAAAjuE,WAAWU,gBAAkB34B,KAAKkmG,SAAW,EAAAjuE,WAAWW,cAC3F54B,KAAKkmG,SAAW,EAAAjuE,WAAWY,aA4iDvC,OAviDU,YAAA8kB,kBAAN,SAAwBn9B,G,0GAUH,OATXqmF,EAAU,IAAIiW,QAAQ,CACxB,eAAgB,mDAChB,OAAU,mBACV,cAAe98G,KAAK4yB,aAEI,MAAxB5yB,KAAK28G,iBACL9V,EAAQnhG,IAAI,aAAc1F,KAAK28G,iBAEnCn8F,EAAQomF,0BAA0BC,GACjB,GAAM7mG,KAAK4uD,MAAM,IAAIC,QAAQ7uD,KAAKwe,mBAAmB2gD,iBAAmB,iBAAkB,CACvGh5D,KAAMnG,KAAK+8G,YAAYv8F,EAAQ2lF,gBAAgC,QAAjB,EAAC3lF,EAAQ86B,gBAAQ,QAAIt7C,KAAKghB,qBAAqB+4F,mBAC7FrlC,YAAa10E,KAAKg9G,iBAClBriC,MAAO,WACPksB,QAASA,EACTzlF,OAAQ,W,cALN7f,EAAW,SAQbytD,EAAoB,KACpBhvD,KAAKi9G,eAAe17G,GACL,GAAMA,EAASutD,QAD9B,M,OACAE,EAAe,S,wBAGC,MAAhBA,EAAA,MACwB,MAApBztD,EAASokB,OAAT,MACO,CAAP,EAAO,IAAI,EAAAu3F,sBAAsBluD,I,cACN,MAApBztD,EAASokB,QAAkBqpC,EAAamuD,qBAC/ClhH,OAAO4S,KAAKmgD,EAAamuD,qBAAqBnhH,OAC9C,GAAMgE,KAAKm0C,aAAaipE,oBAAoB58F,EAAQ3D,QAF7C,M,OAGP,OADA,SACO,CAAP,EAAO,IAAI,EAAAwgG,0BAA0BruD,I,OAClC,GAAwB,MAApBztD,EAASokB,QAAkBqpC,EAAar+B,kBAC/C10B,OAAO4S,KAAKmgD,EAAar+B,kBAAkB30B,OAC3C,MAAO,CAAP,EAAO,IAAI,EAAAshH,wBAAwBtuD,I,iBAI3C,MAAO,CAAP,EAAO7zC,QAAQ8J,OAAO,IAAI,EAAAxjB,cAAcutD,EAAcztD,EAASokB,QAAQ,aAGrE,YAAAoc,qBAAN,W,0FAEQ,O,sBAAA,GAAM/hC,KAAKu9G,iB,cAAX,S,aAEA,O,SAAO,CAAP,EAAOpiG,QAAQ8J,OAAO,O,yBAMxB,YAAAi7D,WAAN,W,gGACc,SAAMlgF,KAAK6qC,KAAK,MAAO,oBAAqB,MAAM,GAAM,I,OAClE,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA02D,gBAAgB12D,YAGzB,YAAA2lD,eAAN,W,gGACc,SAAM7jD,KAAK6qC,KAAK,MAAO,oBAAqB,MAAM,GAAM,I,OAClE,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAAs/G,gBAAgBt/G,YAGzB,YAAA+oF,oBAAN,W,gGACc,SAAMjnF,KAAK6qC,KAAK,MAAO,yBAA0B,MAAM,GAAM,I,OACvE,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAAq1F,qBAAqBr1F,YAG9B,YAAAwvB,WAAN,W,gGACc,SAAM1tB,KAAK6qC,KAAK,MAAO,gBAAiB,MAAM,GAAM,I,OAC9D,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAAu/G,gBAAgBv/G,YAGzB,YAAAmiF,WAAN,SAAiB7/D,G,gGACH,SAAMxgB,KAAK6qC,KAAK,MAAO,oBAAqBrqB,GAAS,GAAM,I,OACrE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA02D,gBAAgB12D,YAG/B,YAAAqwB,WAAA,SAAW/N,GACP,OAAOxgB,KAAK6qC,KAAK,MAAO,gBAAiBrqB,GAAS,GAAM,IAGtD,YAAAk8B,aAAN,SAAmBl8B,G,gGACL,SAAMxgB,KAAK6qC,KAAK,OAAQ,qBAAsBrqB,GAAS,GAAO,I,OACxE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAw/G,iBAAiBx/G,YAGhC,YAAAyiF,eAAA,SAAengE,GACX,OAAOxgB,KAAK6qC,KAAK,OAAQ,wBAAyBrqB,GAAS,GAAM,IAGrE,YAAAqgE,UAAA,SAAUrgE,GACN,OAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAmBrqB,GAAS,GAAM,IAG/D,YAAA4gE,aAAA,SAAa5gE,GACT,OAAOxgB,KAAK6qC,KAAK,OAAQ,qBAAsBrqB,GAAS,GAAM,IAGlE,YAAAkjF,YAAA,SAAYljF,GACR,OAAOxgB,KAAK6qC,KAAK,OAAQ,yBAA0BrqB,GAAS,GAAM,IAGtE,YAAAs/B,uBAAA,SAAuBt/B,GACnB,OAAOxgB,KAAK6qC,KAAK,OAAQ,kCAAmCrqB,GAAS,GAAM,IAG/E,YAAAw/D,kBAAA,SAAkBx/D,GACd,OAAOxgB,KAAK6qC,KAAK,OAAQ,2BAA4BrqB,GAAS,GAAM,IAGxE,YAAAg/D,cAAA,SAAch/D,GACV,OAAOxgB,KAAK6qC,KAAK,SAAU,YAAarqB,GAAS,GAAM,IAGrD,YAAAm9F,uBAAN,W,0FACc,SAAM39G,KAAK6qC,KAAK,MAAO,0BAA2B,MAAM,GAAM,I,OACxE,MAAO,CAAP,EADU,kBAId,YAAA0zD,iBAAA,SAAiB/9E,GACb,OAAOxgB,KAAK6qC,KAAK,OAAQ,0BAA2BrqB,GAAS,GAAO,IAGxE,YAAAoiF,aAAA,SAAapiF,GACT,OAAOxgB,KAAK6qC,KAAK,OAAQ,qBAAsBrqB,GAAS,GAAO,IAG7D,YAAAomE,YAAN,SAAkBprF,G,gGACJ,SAAMwE,KAAK6qC,KAAK,OAAQ,oBAAqBrvC,GAAM,GAAM,I,OACnE,OADM0C,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0/G,gBAAgB1/G,YAGzB,YAAA2/G,aAAN,SAAmBr9F,G,mEACf,MAAO,CAAP,EAAOxgB,KAAK6qC,KAAK,OAAQ,sBAAuBrqB,GAAS,GAAM,WAGnE,YAAA2mE,qBAAA,WACI,OAAOnnF,KAAK6qC,KAAK,OAAQ,8BAA+B,MAAM,GAAM,IAGxE,YAAAu8C,kBAAA,WACI,OAAOpnF,KAAK6qC,KAAK,OAAQ,2BAA4B,MAAM,GAAM,IAG/D,YAAA2c,mBAAN,SAAyBhnC,G,gGACX,SAAMxgB,KAAK6qC,KAAK,OAAQ,oBAAqBrqB,GAAS,GAAM,I,OACtE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0/G,gBAAgB1/G,YAG/B,YAAA4oD,mBAAA,SAAmBtmC,GACf,OAAOxgB,KAAK6qC,KAAK,OAAQ,oBAAqBrqB,GAAS,GAAM,IAGjE,YAAAqnC,mBAAA,SAAmBrsD,GACf,OAAOwE,KAAK6qC,KAAK,OAAQ,oBAAqBrvC,GAAM,GAAM,IAG9D,YAAA4jD,gBAAA,SAAgB5+B,GACZ,OAAOxgB,KAAK6qC,KAAK,OAAQ,iBAAkBrqB,GAAS,GAAM,IAG9D,YAAAqhE,eAAA,SAAerhE,GACX,OAAOxgB,KAAK6qC,KAAK,OAAQ,gBAAiBrqB,GAAS,GAAM,IAG7D,YAAAspE,uBAAA,WACI,OAAO9pF,KAAK6qC,KAAK,OAAQ,yBAA0B,MAAM,GAAM,IAGnE,YAAA61B,4BAAA,SAA4BlgD,GACxB,OAAOxgB,KAAK6qC,KAAK,OAAQ,+BAAgCrqB,GAAS,GAAO,IAG7E,YAAAu/E,0BAAA,SAA0Bv/E,GACtB,OAAOxgB,KAAK6qC,KAAK,OAAQ,4BAA6BrqB,GAAS,GAAM,IAGzE,YAAAi8C,yBAAA,SAAyBj8C,GACrB,OAAOxgB,KAAK6qC,KAAK,OAAQ,2BAA4BrqB,GAAS,GAAO,IAGzE,YAAAsgD,8BAAA,SAA8BtgD,GAC1B,OAAOxgB,KAAK6qC,KAAK,OAAQ,iCAAkCrqB,GAAS,GAAO,IAG/E,YAAA8iE,eAAA,SAAe9iE,GACX,OAAOxgB,KAAK6qC,KAAK,OAAQ,gBAAiBrqB,GAAS,GAAM,IAGvD,YAAAs4B,cAAN,SAAoB7oC,G,mEAChB,MAAO,CAAP,EAAOjQ,KAAK6qC,KAAK,SAAU,iBAAmB56B,EAAgB,MAAM,GAAM,WAGxE,YAAAmvD,qBAAN,W,mEACI,MAAO,CAAP,EAAOp/D,KAAK6qC,KAAK,MAAO,gCAAiC,MAAM,GAAM,WAGnE,YAAA+0C,eAAN,SAAqBhgF,EAAY4gB,G,gGACnB,SAAMxgB,KAAK6qC,KAAK,OAAQ,oBAAqBrqB,GAAS,GAAM,I,OACtE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4/G,eAAe5/G,YAGxB,YAAA6hF,qBAAN,SAA2BngF,EAAY4gB,G,gGACzB,SAAMxgB,KAAK6qC,KAAK,OAAQ,2BAA4BrqB,GAAS,GAAM,I,OAC7E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4/G,eAAe5/G,YAG9B,YAAAgpG,sBAAA,SAAsB1mF,GAClB,OAAOxgB,KAAK6qC,KAAK,MAAO,iCAAkCrqB,GAAS,GAAM,IAG7E,YAAAu9F,sBAAA,WACI,OAAO/9G,KAAK6qC,KAAK,OAAQ,wBAAyB,MAAM,GAAM,IAGlE,YAAAmzE,qBAAA,SAAqBx9F,GACjB,OAAOxgB,KAAK6qC,KAAK,OAAQ,uBAAwBrqB,GAAS,GAAM,IAGpE,YAAAy9F,0BAAA,WACI,OAAOj+G,KAAK6qC,KAAK,OAAQ,qCAAsC,MAAM,GAAM,IAKzE,YAAAqzE,UAAN,SAAgBt+G,G,gGACF,SAAMI,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAI,MAAM,GAAM,I,OAC/D,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAqzF,eAAerzF,YAGxB,YAAAigH,WAAN,SAAiB39F,G,gGACH,SAAMxgB,KAAK6qC,KAAK,OAAQ,WAAYrqB,GAAS,GAAM,I,OAC7D,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAqzF,eAAerzF,YAGxB,YAAAkgH,UAAN,SAAgBx+G,EAAY4gB,G,gGACd,SAAMxgB,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAI4gB,GAAS,GAAM,I,OAClE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAqzF,eAAerzF,YAG9B,YAAAmgH,aAAA,SAAaz+G,GACT,OAAOI,KAAK6qC,KAAK,SAAU,YAAcjrC,EAAI,MAAM,GAAM,IAKvD,YAAA0+G,QAAN,SAAc1+G,G,gGACA,SAAMI,KAAK6qC,KAAK,MAAO,UAAYjrC,EAAI,MAAM,GAAM,I,OAC7D,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAi3D,aAAaj3D,YAGtB,YAAA2/E,eAAN,SAAqBj+E,EAAY4gB,EAA4B+9F,G,kGAI/C,OAHJC,EAAkB,SAAC3X,GACrBA,EAAQnhG,IAAI,UAAW9F,IAEjB,GAAMI,KAAK6qC,KAAK,OAAQ,iBAAmBjrC,EAAI4gB,GAAS,GAAO,EAAM+9F,EAAQC,I,OACvF,OADMtgH,EAAI,SACH,CAAP,EAAO,IAAI,EAAAugH,mBAAmBvgH,YAG5B,YAAAk/E,wBAAN,SAA8BvyC,EAAsBrqB,EAA4B+9F,G,kGAIlE,OAHJC,EAAkB,SAAC3X,GACrBA,EAAQnhG,IAAI,UAAWmlC,EAAKjrC,KAEtB,GAAMI,KAAK6qC,KAAK,OAAQ,UAAYA,EAAKjrC,GAAK,gBAAkBirC,EAAKmjB,KAAKpuD,GAAI4gB,GAAS,GAAO,EACpG+9F,EAAQC,I,OACZ,OAFMtgH,EAAI,SAEH,CAAP,EAAO,IAAI,EAAAwgH,6BAA6BxgH,YAGtC,YAAAygH,SAAN,W,gGACc,SAAM3+G,KAAK6qC,KAAK,MAAO,SAAU,MAAM,GAAM,I,OACvD,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAi3D,uBAGzB,YAAA0pD,SAAN,SAAer+F,G,gGACD,SAAMxgB,KAAK6qC,KAAK,OAAQ,SAAUrqB,GAAS,GAAM,I,OAC3D,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAi3D,aAAaj3D,YAGtB,YAAA4gH,iBAAN,SAAuBt+F,G,gGACT,SAAMxgB,KAAK6qC,KAAK,OAAQ,iBAAkBrqB,GAAS,GAAM,I,OACnE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA6gH,2BAA2B7gH,YAGpC,YAAA8gH,uBAAN,SAA6B9hC,EAAgB+hC,G,gGAC/B,SAAMj/G,KAAK6qC,KAAK,MAAO,UAAYqyC,EAAS,SAAW+hC,EAAQ,MAAM,GAAM,I,OACrF,OADM/gH,EAAI,SACH,CAAP,EAAO,IAAI,EAAA6gH,2BAA2B7gH,YAG1C,YAAAghH,aAAA,SAAahiC,EAAgB+hC,EAAgBzjH,GACzC,OAAOwE,KAAK6qC,KAAK,OAAQ,UAAYqyC,EAAS,SAAW+hC,EAAQzjH,GAAM,GAAM,IAO3E,YAAA2jH,mBAAN,SAAyB3jH,G,gGACX,SAAMwE,KAAK6qC,KAAK,OAAQ,cAAervC,GAAM,GAAM,I,OAC7D,OADM0C,EAAI,SACH,CAAP,EAAO,IAAI,EAAAi3D,aAAaj3D,YAGtB,YAAAkhH,QAAN,SAAcx/G,EAAY4gB,G,gGACZ,SAAMxgB,KAAK6qC,KAAK,MAAO,UAAYjrC,EAAI4gB,GAAS,GAAM,I,OAChE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAi3D,aAAaj3D,YAGtB,YAAAmhH,sBAAN,SAA4Bz/G,G,gGACd,SAAMI,KAAK6qC,KAAK,MAAO,UAAYjrC,EAAK,mBAAoB,MAAM,GAAM,I,OAClF,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAi3D,aAAaj3D,YAG5B,YAAAohH,WAAA,SAAW1/G,GACP,OAAOI,KAAK6qC,KAAK,SAAU,UAAYjrC,EAAI,MAAM,GAAM,IAKrD,YAAA2/G,UAAN,SAAgB3/G,G,gGACF,SAAMI,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAI,MAAM,GAAM,I,OAC/D,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAA8sD,eAAN,SAAqBprD,G,gGACP,SAAMI,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,SAAU,MAAM,GAAM,I,OAC1E,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAAshH,uBAAN,SAA6BvvG,G,gGACf,SAAMjQ,KAAK6qC,KAAK,MAAO,gDAAkD56B,EAC/E,MAAM,GAAM,I,OAChB,OAFM/R,EAAI,SAEH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAA27C,yBAGzB,YAAA4lE,WAAN,SAAiBj/F,G,gGACH,SAAMxgB,KAAK6qC,KAAK,OAAQ,WAAYrqB,GAAS,GAAM,I,OAC7D,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAAwhH,iBAAN,SAAuBl/F,G,gGACT,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAmBrqB,GAAS,GAAM,I,OACpE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAAmtD,gBAAN,SAAsB7qC,G,gGACR,SAAMxgB,KAAK6qC,KAAK,OAAQ,iBAAkBrqB,GAAS,GAAM,I,OACnE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAAyhH,UAAN,SAAgB//G,EAAY4gB,G,gGACd,SAAMxgB,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAI4gB,GAAS,GAAM,I,OAClE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAAitD,eAAN,SAAqBvrD,EAAY4gB,G,gGACnB,SAAMxgB,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,SAAU4gB,GAAS,GAAM,I,OAC7E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAG9B,YAAAwyC,aAAA,SAAa9wC,GACT,OAAOI,KAAK6qC,KAAK,SAAU,YAAcjrC,EAAI,MAAM,GAAM,IAG7D,YAAA0rD,kBAAA,SAAkB1rD,GACd,OAAOI,KAAK6qC,KAAK,SAAU,YAAcjrC,EAAK,SAAU,MAAM,GAAM,IAGxE,YAAAggH,kBAAA,SAAkBp/F,GACd,OAAOxgB,KAAK6qC,KAAK,SAAU,WAAYrqB,GAAS,GAAM,IAG1D,YAAA07D,uBAAA,SAAuB17D,GACnB,OAAOxgB,KAAK6qC,KAAK,SAAU,iBAAkBrqB,GAAS,GAAM,IAGhE,YAAAq/F,eAAA,SAAer/F,GACX,OAAOxgB,KAAK6qC,KAAK,MAAO,gBAAiBrqB,GAAS,GAAM,IAGtD,YAAAs/F,eAAN,SAAqBlgH,EAAY4gB,G,gGACnB,SAAMxgB,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,SAAU4gB,GAAS,GAAM,I,OAC7E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAG9B,YAAA6hH,gBAAA,SAAgBv/F,GACZ,OAAOxgB,KAAK6qC,KAAK,MAAO,iBAAkBrqB,GAAS,GAAM,IAG7D,YAAAw/F,qBAAA,SAAqBpgH,EAAY4gB,GAC7B,OAAOxgB,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,eAAgB4gB,GAAS,GAAM,IAG9E,YAAAm7D,0BAAA,SAA0B/7E,EAAY4gB,GAClC,OAAOxgB,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,qBAAsB4gB,GAAS,GAAM,IAGpF,YAAAyiC,iBAAA,SAAiBziC,EAAoCvQ,QAAA,IAAAA,MAAA,MACjD,IAAIguF,EAAO,iBAIX,OAHsB,MAAlBhuF,IACAguF,GAAQ,mBAAqBhuF,GAE1BjQ,KAAK6qC,KAAK,OAAQozD,EAAMz9E,GAAS,GAAM,IAGlD,YAAAy/F,kBAAA,SAAkBz/F,GACd,OAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAmBrqB,GAAS,GAAM,IAG/D,YAAA0/F,8BAAA,SAA8BjwG,EAAwBuQ,GAClD,OAAOxgB,KAAK6qC,KAAK,OAAQ,+CAAiD56B,EAAgBuQ,GAAS,GAAM,IAG7G,YAAA2/F,gBAAA,SAAgBvgH,GACZ,OAAOI,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,UAAW,MAAM,GAAM,IAGtE,YAAA2rD,qBAAA,SAAqB3rD,GACjB,OAAOI,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,gBAAiB,MAAM,GAAM,IAG5E,YAAAwgH,qBAAA,SAAqB5/F,GACjB,OAAOxgB,KAAK6qC,KAAK,MAAO,kBAAmBrqB,GAAS,GAAM,IAG9D,YAAA27D,0BAAA,SAA0B37D,GACtB,OAAOxgB,KAAK6qC,KAAK,MAAO,wBAAyBrqB,GAAS,GAAM,IAG9D,YAAA6/F,iBAAN,SAAuBzgH,G,gGACT,SAAMI,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,WAAY,MAAM,GAAM,I,OAC5E,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAAoiH,sBAAN,SAA4B1gH,G,gGACd,SAAMI,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,iBAAkB,MAAM,GAAM,I,OAClF,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAGxB,YAAAqiH,sBAAN,SAA4B//F,G,gGACd,SAAMxgB,KAAK6qC,KAAK,MAAO,mBAAoBrqB,GAAS,GAAM,I,OACpE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAA6B1gH,EAAG,EAAA27C,yBAKzC,YAAA4gC,kBAAN,SAAwBvjD,EAAkB6iD,EAAsBK,G,kGAIlD,OAHJ6jB,GAA6B,MAArB7jB,EACV,qBAAuBA,EAAoB,IAC3C,aAAeljD,EAAW,eAAiB6iD,EACrC,GAAM/5E,KAAK6qC,KAAK,MAAOozD,EAAM,MAAM,GAAM,I,OACnD,OADM//F,EAAI,SACH,CAAP,EAAO,IAAI,EAAAw7C,mBAAmBx7C,YAG5B,YAAAsiH,qBAAN,SAA2B5gH,EAAY4gB,G,gGACzB,SAAMxgB,KAAK6qC,KAAK,OAAQ,YAAcjrC,EAAK,iBAAkB4gB,GAAS,GAAM,I,OACtF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAuiH,6BAA6BviH,YAOtC,YAAAwiH,2BAAN,SAAiC9gH,EAAYpE,G,gGAC/B,SAAMwE,KAAK6qC,KAAK,OAAQ,YAAcjrC,EAAK,cAAepE,GAAM,GAAM,I,OAChF,OADM0C,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAOxB,YAAAyiH,gCAAN,SAAsC/gH,EAAYpE,G,gGACpC,SAAMwE,KAAK6qC,KAAK,OAAQ,YAAcjrC,EAAK,oBAAqBpE,GAAM,GAAM,I,OACtF,OADM0C,EAAI,SACH,CAAP,EAAO,IAAI,EAAA27C,eAAe37C,YAG9B,YAAA47E,uBAAA,SAAuBl6E,EAAYm6E,GAC/B,OAAO/5E,KAAK6qC,KAAK,SAAU,YAAcjrC,EAAK,eAAiBm6E,EAAc,MAAM,GAAM,IAG7F,YAAAC,4BAAA,SAA4Bp6E,EAAYm6E,GACpC,OAAO/5E,KAAK6qC,KAAK,SAAU,YAAcjrC,EAAK,eAAiBm6E,EAAe,SAAU,MAAM,GAAM,IAGxG,YAAA6mC,0BAAA,SAA0BhhH,EAAYm6E,EAAsBv+E,EACxDyU,GACA,OAAOjQ,KAAK6qC,KAAK,OAAQ,YAAcjrC,EAAK,eACxCm6E,EAAe,yBAA2B9pE,EAAgBzU,GAAM,GAAM,IAGxE,YAAAqlH,yBAAN,SAA+BjhH,EAAYm6E,G,gGAC7B,SAAM/5E,KAAK6qC,KAAK,MAAO,YAAcjrC,EAAK,eAAiBm6E,EAAe,SAAU,MAAM,GAAM,I,OAC1G,OADM77E,EAAI,SACH,CAAP,EAAO,IAAI,EAAAuiH,6BAA6BviH,YAG5C,YAAA4iH,mBAAA,SAAmBlhH,EAAYm6E,EAAsBv+E,GACjD,OAAOwE,KAAK6qC,KAAK,OAAQ,YAAcjrC,EAAK,eAAiBm6E,EAAcv+E,GAAM,GAAM,IAKrF,YAAA8mE,qBAAN,SAA2BryD,EAAwBrQ,G,gGACrC,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,gBAAkBrQ,EAAK,WACzF,MAAM,GAAM,I,OAChB,OAFM1B,EAAI,SAEH,CAAP,EAAO,IAAI,EAAAkzF,+BAA+BlzF,YAGxC,YAAAijE,mBAAN,W,gGACc,SAAMnhE,KAAK6qC,KAAK,MAAO,eAAgB,MAAM,GAAM,I,OAC7D,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAgzF,6BAGzB,YAAApgC,eAAN,SAAqB7gD,G,gGACP,SAAMjQ,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,eAAgB,MAAM,GAAM,I,OAClG,OADM/R,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAgzF,6BAGzB,YAAAtwC,mBAAN,SAAyB3wC,EAAwBrQ,G,0FACnC,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,gBAAkBrQ,EAAK,SACzF,MAAM,GAAM,I,OAChB,MAAO,CAAP,EAFU,SAEDmI,KAAI,SAACg5G,GAAY,WAAI,EAAAjnE,0BAA0BinE,eAGtD,YAAAr+C,eAAN,SAAqBzyD,EAAwBuQ,G,gGAC/B,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,eAAgBuQ,GAAS,GAAM,I,OACtG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAgzF,mBAAmBhzF,YAG5B,YAAAukE,cAAN,SAAoBxyD,EAAwBrQ,EAAY4gB,G,gGAC1C,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,gBAAkBrQ,EACpF4gB,GAAS,GAAM,I,OACnB,OAFMtiB,EAAI,SAEH,CAAP,EAAO,IAAI,EAAAgzF,mBAAmBhzF,YAG5B,YAAAijD,mBAAN,SAAyBlxC,EAAwBrQ,EAAY4gB,G,0FACzD,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,gBAAkBrQ,EAAK,SAC/E4gB,GAAS,GAAM,I,cADnB,S,YAIJ,YAAAshD,iBAAA,SAAiB7xD,EAAwBrQ,GACrC,OAAOI,KAAK6qC,KAAK,SAAU,kBAAoB56B,EAAiB,gBAAkBrQ,EAAI,MAAM,GAAM,IAGtG,YAAAohH,qBAAA,SAAqB/wG,EAAwBrQ,EAAY43B,GACrD,OAAOx3B,KAAK6qC,KAAK,SACb,kBAAoB56B,EAAiB,gBAAkBrQ,EAAK,SAAW43B,EACvE,MAAM,GAAM,IAKd,YAAAwsC,gBAAN,SAAsB/zD,EAAwBrQ,G,gGAChC,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,WAAarQ,EAAK,WACpF,MAAM,GAAM,I,OAChB,OAFM1B,EAAI,SAEH,CAAP,EAAO,IAAI,EAAA+iH,qBAAqB/iH,YAG9B,YAAAkkE,UAAN,SAAgBnyD,G,gGACF,SAAMjQ,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAW,MAAM,GAAM,I,OAC7F,OADM/R,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAgjH,wBAGzB,YAAAxgE,cAAN,SAAoBzwC,EAAwBrQ,G,0FAC9B,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,WAAarQ,EAAK,SACpF,MAAM,GAAM,I,OAChB,MAAO,CAAP,EAFU,kBAKR,YAAAukE,UAAN,SAAgBl0D,EAAwBuQ,G,gGAC1B,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,UAAWuQ,GAAS,GAAM,I,OACjG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAgjH,cAAchjH,YAGvB,YAAAgmE,SAAN,SAAej0D,EAAwBrQ,EAAY4gB,G,gGACrC,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,WAAarQ,EAAI4gB,GAAS,GAAM,I,OACtG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAgjH,cAAchjH,YAGvB,YAAAgjD,cAAN,SAAoBjxC,EAAwBrQ,EAAY4gB,G,0FACpD,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,WAAarQ,EAAK,SAAU4gB,GAAS,GAAM,I,cAAvG,S,YAGJ,YAAAqjD,YAAA,SAAY5zD,EAAwBrQ,GAChC,OAAOI,KAAK6qC,KAAK,SAAU,kBAAoB56B,EAAiB,WAAarQ,EAAI,MAAM,GAAM,IAGjG,YAAAuhH,gBAAA,SAAgBlxG,EAAwBrQ,EAAY43B,GAChD,OAAOx3B,KAAK6qC,KAAK,SACb,kBAAoB56B,EAAiB,WAAarQ,EAAK,SAAW43B,EAAoB,MAAM,GAAM,IAKpG,YAAAq1C,UAAN,SAAgB58D,EAAwB/N,G,gGAC1B,SAAMlC,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,aAAe/N,EAAM,MAAM,GAAM,I,OACvG,OADMhE,EAAI,SACH,CAAP,EAAO,IAAI,EAAAg2C,eAAeh2C,YAGxB,YAAA0nC,YAAN,SAAkB31B,G,gGACJ,SAAMjQ,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,YAAa,MAAM,GAAM,I,OAC/F,OADM/R,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAg2C,yBAGzB,YAAA2mB,mBAAN,SAAyB5qD,EAAwB6V,EAAejJ,EAAe2a,G,gGAEjE,SAAMx3B,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAApB,yBAClB/F,mBAAmB4b,GAAS,UAAY5b,mBAAmB2S,GACtE,uBAAyB2a,EAAoB,MAAM,GAAO,I,OAC9D,OAHMt5B,EAAI,SAGH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAg2C,yBAGzB,YAAA64B,UAAN,SAAgB98D,EAAwB/N,EAAkBse,G,gGAC5C,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,aAAe/N,EAAMse,GAAS,GAAM,I,OAC1G,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAg2C,eAAeh2C,YAKxB,YAAAqsE,oBAAN,SAA0Bt6D,EAAwBrQ,G,gGACpC,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAYrQ,EAAI,MAAM,GAAM,I,OAClG,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAkjH,gCAAgCljH,YAGzC,YAAAotE,0BAAN,SAAgCr7D,EAAwBrQ,G,0FAC1C,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAYrQ,EAAK,UACnF,MAAM,GAAM,I,OAChB,MAAO,CAAP,EAFU,kBAKR,YAAA2gD,qBAAN,SAA2BtwC,G,gGACb,SAAMjQ,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,SAAU,MAAM,GAAM,I,OAC5F,OADM/R,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAmjH,8CAGzB,YAAAj4C,wCAAN,SAA8Cn5D,EAAwBrQ,G,gGAExD,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAYrQ,EAC9E,0BAA2B,MAAM,GAAM,I,OAC3C,OAFM1B,EAAI,SAEH,CAAP,EAAO,IAAI,EAAAojH,4CAA4CpjH,YAGrD,YAAAqlG,gCAAN,SAAsC5wD,G,gGACxB,SAAM3yC,KAAK6qC,KAAK,MAAO,kBAAoB8H,EAAa,sBAAuB,MAAM,GAAM,I,OACrG,OADMz0C,EAAI,SACH,CAAP,EAAO,IAAI,EAAAqjH,qCAAqCrjH,YAGpD,YAAA6sE,2BAAA,SAA2B96D,EAAwBuQ,GAC/C,OAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,gBAAiBuQ,GAAS,GAAM,IAGlG,YAAA+kD,6BAAA,SAA6Bt1D,EAAwBrQ,GACjD,OAAOI,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,UAAYrQ,EAAK,YAAa,MAAM,GAAM,IAGtG,YAAA+mE,iCAAN,SAAuC12D,EAAwBuQ,G,gGACjD,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,kBAAmBuQ,GAAS,GAAM,I,OACzG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAsjH,uCAG/B,YAAAhnD,2BAAA,SAA2BvqD,EAAwBrQ,EAC/C4gB,GACA,OAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,UAAYrQ,EAAK,UAAW4gB,GAAS,GAAM,IAG7G,YAAAklD,4BAAA,SAA4Bz1D,EAAwBrQ,EAChD4gB,GACA,OAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,UAAYrQ,EAAK,WAC3E4gB,GAAS,GAAM,IAGjB,YAAAqoD,+BAAN,SAAqC54D,EAAwBuQ,G,gGAC/C,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,qBAAsBuQ,GAAS,GAAM,I,OAC5G,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAA41F,gDAGzB,YAAA/qB,gCAAN,SAAsC94D,EAAwBuQ,G,gGAChD,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,iBAAkBuQ,GAAS,GAAM,I,OACxG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAsjH,uCAG/B,YAAA52C,oBAAA,SAAoB36D,EAAwBrQ,EAAY4gB,GACpD,OAAOxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAYrQ,EAAI4gB,GAAS,GAAM,IAGhG,YAAAmrD,0BAAA,SAA0B17D,EAAwBrQ,EAC9C4gB,GACA,OAAOxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAYrQ,EAAK,UAAW4gB,GAAS,GAAM,IAG5G,YAAAg5B,2CAAA,SAA2CvpC,EAAwB2f,EAC/DpP,GACA,OAAOxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAY2f,EAAS,6BAC9EpP,GAAS,GAAM,IAGvB,YAAAwpD,iCAAA,SAAiC/5D,EAAwBrQ,EACrD4gB,GACA,OAAOxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,UAAYrQ,EAAK,kBAC1E4gB,GAAS,GAAM,IAGvB,YAAA6kD,uBAAA,SAAuBp1D,EAAwBrQ,GAC3C,OAAOI,KAAK6qC,KAAK,SAAU,kBAAoB56B,EAAiB,UAAYrQ,EAAI,MAAM,GAAM,IAG1F,YAAAqpE,4BAAN,SAAkCh5D,EAAwBuQ,G,gGAC5C,SAAMxgB,KAAK6qC,KAAK,SAAU,kBAAoB56B,EAAiB,SAAUuQ,GAAS,GAAM,I,OAClG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAsjH,uCAKzB,YAAA9iF,SAAN,W,gGACc,SAAM1+B,KAAK6qC,KAAK,MAAO,UAAW,MAAM,GAAM,I,OACxD,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAA2zF,uBAGzB,YAAA4vB,oBAAN,SAA0BxxG,EAAwBuQ,G,mEAC9C,MAAO,CAAP,EAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,UAAWuQ,GAAS,GAAM,WAGtF,YAAAkhG,0BAAN,SAAgClhG,G,mEAC5B,MAAO,CAAP,EAAOxgB,KAAK6qC,KAAK,OAAQ,8BAA+BrqB,GAAS,GAAM,WAGrE,YAAAoN,YAAN,W,gGACc,SAAM5tB,KAAK6qC,KAAK,MAAO,0BAA2B,MAAM,GAAM,I,OACxE,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAyjH,0BAKzB,YAAA/9B,mBAAN,W,gGACc,SAAM5jF,KAAK6qC,KAAK,MAAO,oBAAqB,MAAM,GAAM,I,OAClE,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAAozF,gBAAgBpzF,YAGzB,YAAAqmF,mBAAN,SAAyB/jE,G,gGACX,SAAMxgB,KAAK6qC,KAAK,MAAO,oBAAqBrqB,GAAS,GAAM,I,OACrE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAozF,gBAAgBpzF,YAKzB,YAAA0jH,QAAN,W,kGAEc,OADJ3jB,EAAOj+F,KAAK68G,iBAAmB78G,KAAK48G,YAAc,4BAA8B,QAC5E,GAAM58G,KAAK6qC,KAAK,MAAOozD,EAAM,MAAM,GAAM,I,OACnD,OADM//F,EAAI,SACH,CAAP,EAAO,IAAI,EAAA2jH,aAAa3jH,YAKtB,YAAAyqD,sBAAN,W,gGACc,SAAM3oD,KAAK6qC,KAAK,MAAO,cAAe,MAAM,GAAM,I,OAC5D,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,GAAA4jH,oCAGzB,YAAAtvC,kCAAN,SAAwCviE,G,gGAC1B,SAAMjQ,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,cAAe,MAAM,GAAM,I,OACjG,OADM/R,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,GAAA4jH,oCAGzB,YAAAxmF,0BAAN,SAAgC9a,G,gGAClB,SAAMxgB,KAAK6qC,KAAK,OAAQ,gCAAiCrqB,GAAS,GAAM,I,OAClF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA6jH,+BAA+B7jH,YAGxC,YAAAg9B,kBAAN,SAAwB1a,G,gGACV,SAAMxgB,KAAK6qC,KAAK,OAAQ,wBAAyBrqB,GAAS,GAAM,I,OAC1E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA8jH,uBAAuB9jH,YAGhC,YAAA+8B,gBAAN,SAAsBza,G,gGACR,SAAMxgB,KAAK6qC,KAAK,OAAQ,sBAAuBrqB,GAAS,GAAM,I,OACxE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA+jH,qBAAqB/jH,YAG9B,YAAA88B,4BAAN,SAAkC/qB,EAC9BuQ,G,gGACU,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoB56B,EAAiB,sBACnEuQ,GAAS,GAAM,I,OACnB,OAFMtiB,EAAI,SAEH,CAAP,EAAO,IAAI,EAAA+jH,qBAAqB/jH,YAG9B,YAAAs9B,oBAAN,SAA0Bhb,G,gGACZ,SAAMxgB,KAAK6qC,KAAK,OAAQ,0BAA2BrqB,GAAS,GAAM,I,OAC5E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,GAAAgkH,yBAAyBhkH,YAGlC,YAAAk9B,qBAAN,SAA2B5a,G,gGACb,SAAMxgB,KAAK6qC,KAAK,OAAQ,2BAA4BrqB,GAAS,GAAM,I,OAC7E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,GAAA81F,0BAA0B91F,YAGnC,YAAAk2E,8BAAN,SAAoC5zD,G,gGACtB,SAAMxgB,KAAK6qC,KAAK,OAAQ,qCAAsCrqB,GAAS,GAAM,I,OACvF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,GAAAq2F,kBAAkBr2F,YAG3B,YAAA28B,oBAAN,SAA0Bra,G,gGACZ,SAAMxgB,KAAK6qC,KAAK,OAAQ,0BAA2BrqB,GAAS,GAAM,I,OAC5E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,GAAAikH,yBAAyBjkH,YAGlC,YAAAy0E,0BAAN,SACInyD,G,gGACU,SAAMxgB,KAAK6qC,KAAK,MAAO,4BAA6BrqB,GAAS,GAAM,I,OAC7E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA6jH,+BAA+B7jH,YAGxC,YAAAi1E,kBAAN,SAAwB3yD,G,gGACV,SAAMxgB,KAAK6qC,KAAK,MAAO,oBAAqBrqB,GAAS,GAAM,I,OACrE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA8jH,uBAAuB9jH,YAGhC,YAAAqqD,gBAAN,SAAsB/nC,G,gGACR,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAmBrqB,GAAS,GAAM,I,OACnE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA+jH,qBAAqB/jH,YAG9B,YAAAoqD,4BAAN,SAAkCr4C,EAC9BuQ,G,gGACU,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,kBAAmBuQ,GAAS,GAAM,I,OACxG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA+jH,qBAAqB/jH,YAG9B,YAAAq3E,oBAAN,SAA0B/0D,G,gGACZ,SAAMxgB,KAAK6qC,KAAK,MAAO,sBAAuBrqB,GAAS,GAAM,I,OACvE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,GAAAgkH,yBAAyBhkH,YAGlC,YAAA41E,qBAAN,SAA2BtzD,G,oGAeb,OAdJjf,EAAWif,EAAQqzD,eAAetyE,UAClC/F,EAAYS,OAAOuS,OAAO,GAAIgS,IAE/BqzD,eAAiB,CAClBj0E,GAAI4gB,EAAQqzD,eAAej0E,GAC3BwiH,MAAOx3G,KAAK4V,EAAQqzD,eAAej0E,IACnCsC,KAAMse,EAAQqzD,eAAe3xE,KAC7BkyF,WAAY5zE,EAAQqzD,eAAewuC,4BACnC9gH,SAAU,CACN+gH,kBAAmB,EAAA/5G,MAAM8B,gBAAgB9I,EAASghH,mBAClDC,eAAgB,EAAAj6G,MAAM8B,gBAAgB9I,EAASkhH,kBAI7C,GAAMziH,KAAK6qC,KAAK,MAAO,uBAAwBrvC,GAAM,GAAM,I,OACrE,OADM0C,EAAI,SACH,CAAP,EAAO,IAAI,GAAA81F,0BAA0B91F,YAGnC,YAAA+1E,wBAAN,SAA8BzzD,G,gGAChB,SAAMxgB,KAAK6qC,KAAK,SAAU,uBAAwBrqB,GAAS,GAAM,I,OAC3E,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,GAAA81F,0BAA0B91F,YAGnC,YAAAurC,oBAAN,SAA0BjpB,G,gGACZ,SAAMxgB,KAAK6qC,KAAK,MAAO,sBAAuBrqB,GAAS,GAAM,I,OACvE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,GAAA4jH,0BAA0B5jH,YAGnC,YAAAsrC,gCAAN,SAAsCv5B,EAClCuQ,G,gGACU,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoB56B,EAAiB,sBAClEuQ,GAAS,GAAM,I,OACnB,OAFMtiB,EAAI,SAEH,CAAP,EAAO,IAAI,GAAA4jH,0BAA0B5jH,YAGzC,YAAA0+D,qBAAA,SAAqBp8C,GACjB,OAAOxgB,KAAK6qC,KAAK,OAAQ,sBAAuBrqB,GAAS,GAAO,IAGpE,YAAAwyD,wBAAA,SAAwBxyD,GACpB,OAAOxgB,KAAK6qC,KAAK,OAAQ,yBAA0BrqB,GAAS,GAAM,IAGtE,YAAAqlF,mBAAA,SAAmBrlF,GACf,OAAOxgB,KAAK6qC,KAAK,OAAQ,+BAAgCrqB,GAAS,GAAO,IAKvE,YAAAwhE,0BAAN,W,gGACc,SAAMhiF,KAAK6qC,KAAK,MAAO,4BAA6B,MAAM,GAAM,I,OAC1E,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAwvF,gDAGzB,YAAAd,0BAAN,W,gGACc,SAAM5sF,KAAK6qC,KAAK,MAAO,4BAA6B,MAAM,GAAM,I,OAC1E,OADM3sC,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAA2wF,gDAGzB,YAAAI,mBAAN,SAAyBrvF,G,gGACX,SAAMI,KAAK6qC,KAAK,MAAO,qBAAuBjrC,EAAI,MAAM,GAAM,I,OACxE,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAwvF,sCAAsCxvF,YAG/C,YAAAmxF,4BAAN,SAAkCzvF,G,gGACpB,SAAMI,KAAK6qC,KAAK,MAAO,qBAAuBjrC,EAAK,YAAa,MAAM,GAAM,I,OACtF,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAg2C,yBAG/B,YAAA6uC,mBAAA,SAAmBnjF,EAAY4gB,GAC3B,OAAOxgB,KAAK6qC,KAAK,MAAO,qBAAuBjrC,EAAI4gB,GAAS,GAAM,IAGtE,YAAAitE,sBAAA,SAAsB7tF,GAClB,OAAOI,KAAK6qC,KAAK,SAAU,qBAAuBjrC,EAAI,MAAM,GAAM,IAGtE,YAAAwvF,0BAAA,SAA0B5uE,GACtB,OAAOxgB,KAAK6qC,KAAK,OAAQ,2BAA4BrqB,GAAS,GAAM,IAGxE,YAAA0sE,4BAAA,SAA4BttF,GACxB,OAAOI,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,YAAa,MAAM,GAAM,IAGlF,YAAA85D,0BAAA,SAA0B95D,EAAY4gB,GAClC,OAAOxgB,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,UAAW4gB,GAAS,GAAM,IAGnF,YAAAiuE,2BAAA,SAA2B7uF,EAAY4gB,GACnC,OAAOxgB,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,WAAY4gB,GAAS,GAAM,IAGpF,YAAAstE,4BAAA,SAA4BluF,GACxB,OAAOI,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,YAAa,MAAM,GAAM,IAGlF,YAAAquF,2BAAA,SAA2BruF,GACvB,OAAOI,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,WAAY,MAAM,GAAM,IAGjF,YAAAsuF,0BAAA,SAA0BtuF,GACtB,OAAOI,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,UAAW,MAAM,GAAM,IAG1E,YAAA0vF,4BAAN,SAAkC1vF,G,gGACpB,SAAMI,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,YAAa,MAAM,GAAM,I,OACvF,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4wF,gCAAgC5wF,YAGzC,YAAAuxF,4BAAN,SAAkC7vF,EAAY4gB,G,0FAChC,SAAMxgB,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,YAAa4gB,GAAS,GAAM,I,cAAhF,S,YAGR,YAAAqrE,wBAAN,SAA8BjsF,G,gGAChB,SAAMI,KAAK6qC,KAAK,OAAQ,qBAAuBjrC,EAAK,QAAS,MAAM,GAAM,I,OACnF,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA6wF,4BAA4B7wF,YAKrC,YAAAwkC,gBAAN,SAAsB9iC,G,gGACR,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAI,MAAM,GAAM,I,OACrE,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4zF,qBAAqB5zF,YAG9B,YAAAylD,uBAAN,SAA6B/jD,G,gGACf,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAK,WAAY,MAAM,GAAM,I,OAClF,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAs/G,gBAAgBt/G,YAGzB,YAAA4wE,4BAAN,SAAkClvE,G,gGACpB,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAK,gBAAiB,MAAM,GAAM,I,OACvF,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAwkH,iCAAiCxkH,YAG1C,YAAA4zE,uBAAN,SAA6BlyE,EAAYiyE,G,mEACrC,MAAO,CAAP,EAAO7xE,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAK,2BAA6BiyE,EAC1E,MAAM,GAAM,WAGd,YAAApkD,uBAAN,SAA6B7tB,G,gGACf,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAK,OAAQ,MAAM,GAAM,I,OAC9E,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAu/G,gBAAgBv/G,YAGzB,YAAAykH,mBAAN,SAAyB/iH,G,gGACX,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAK,OAAQ,MAAM,GAAM,I,OAC9E,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0kH,wBAAwB1kH,YAGjC,YAAAgmC,iBAAN,SAAuB1jB,G,gGACT,SAAMxgB,KAAK6qC,KAAK,OAAQ,iBAAkBrqB,GAAS,GAAM,I,OACnE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4zF,qBAAqB5zF,YAG9B,YAAAgvE,gBAAN,SAAsBttE,EAAY4gB,G,gGACpB,SAAMxgB,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAI4gB,GAAS,GAAM,I,OACxE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4zF,qBAAqB5zF,YAG9B,YAAAowB,uBAAN,SAA6B1uB,EAAY4gB,G,mEACrC,MAAO,CAAP,EAAOxgB,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAK,OAAQ4gB,GAAS,GAAM,WAG5E,YAAAw4B,sBAAA,SAAsBp5C,GAClB,OAAOI,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,SAAU,MAAM,GAAM,IAGtE,YAAA6kC,wBAAN,SAA8BjpC,G,gGAChB,SAAMwE,KAAK6qC,KAAK,OAAQ,yBAA0BrvC,GAAM,GAAM,I,OACxE,OADM0C,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4zF,qBAAqB5zF,YAG9B,YAAA4pD,8BAAN,SAAoCloD,EAAYpE,G,mEAC5C,MAAO,CAAP,EAAOwE,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,WAAYpE,GAAM,GAAM,WAGxE,YAAAiyE,uBAAN,SAA6B7tE,EAAY4gB,G,gGAC3B,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,WAAY4gB,GAAS,GAAM,I,OACtF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4/G,eAAe5/G,YAGxB,YAAAgwE,6BAAN,SAAmCtuE,EAAY4gB,G,gGACjC,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,kBAAmB4gB,GAAS,GAAM,I,OAC7F,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA4/G,eAAe5/G,YAGxB,YAAA2kH,oBAAN,SAA0BjjH,EAAY4gB,G,gGACxB,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,OAAQ4gB,GAAS,GAAM,I,OAClF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0kH,wBAAwB1kH,YAGjC,YAAA4kC,wBAAN,SAA8BljC,EAAY4gB,G,gGAC5B,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,WAAY4gB,GAAS,GAAM,I,OACtF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0/G,gBAAgB1/G,YAGzB,YAAAuzE,mCAAN,SAAyC7xE,EAAY4gB,G,mEACjD,MAAO,CAAP,EAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,gBAAiB4gB,GAAS,GAAM,WAGhF,YAAAsiG,qBAAN,SAA2BljH,EAAY4gB,G,gGACzB,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,QAAS4gB,GAAS,GAAM,I,OACnF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0/G,gBAAgB1/G,YAGzB,YAAAupD,wBAAN,SAA8B7nD,EAAY4gB,G,gGAC5B,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,WAAY4gB,GAAS,GAAM,I,OACtF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0/G,gBAAgB1/G,YAG/B,YAAA6oD,wBAAA,SAAwBnnD,EAAY4gB,GAChC,OAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,WAAY4gB,GAAS,GAAM,IAGjF,YAAA6jC,2BAAA,SAA2BzkD,EAAY4gB,GACnC,OAAOxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,eAAgB4gB,GAAS,GAAM,IAGrF,YAAA4uD,uBAAA,SAAuBxvE,GACnB,OAAOI,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,UAAW,MAAM,GAAM,IAG7E,YAAAsvE,0BAAA,SAA0BtvE,GACtB,OAAOI,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,aAAc,MAAM,GAAM,IAGhF,YAAAwjD,mBAAA,SAAmBxjD,EAAY4gB,GAC3B,OAAOxgB,KAAK6qC,KAAK,SAAU,kBAAoBjrC,EAAI4gB,GAAS,GAAM,IAGhE,YAAA44B,oBAAN,SAA0Bx5C,G,gGACZ,SAAMI,KAAK6qC,KAAK,MAAO,kBAAoBjrC,EAAK,QAAS,MAAM,GAAM,I,OAC/E,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA6kH,yBAAyB7kH,YAGlC,YAAAwmC,qBAAN,SAA2B9kC,EAAY4gB,G,gGACzB,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAoBjrC,EAAK,QAAS4gB,GAAS,GAAM,I,OACnF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA6kH,yBAAyB7kH,YAKlC,YAAA8kH,kBAAN,SAAwBpjH,EAAY4gB,G,gGACtB,SAAMxgB,KAAK6qC,KAAK,OAAQ,cAAgBjrC,EAAK,SAAU4gB,GAAS,GAAM,I,OAChF,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA+kH,iBAAiB/kH,YAG1B,YAAA2kE,YAAN,SAAkBjjE,G,gGACJ,SAAMI,KAAK6qC,KAAK,MAAO,cAAgBjrC,EAAI,MAAM,GAAM,I,OACjE,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA+kH,iBAAiB/kH,YAG1B,YAAAglH,YAAN,SAAkBtjH,EAAY4gB,G,gGAChB,SAAMxgB,KAAK6qC,KAAK,MAAO,cAAgBjrC,EAAI4gB,GAAS,GAAM,I,OACpE,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA+kH,iBAAiB/kH,YAK1B,YAAA4kE,iBAAN,SAAuBppC,G,gGACT,SAAM15B,KAAK6qC,KAAK,MAAO,cAAgBnR,EAAa,SAAU,MAAM,GAAM,I,OACpF,OADMx7B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAilH,0CAGzB,YAAAC,gBAAN,SAAsB1pF,EAAoB95B,G,gGAC5B,SAAMI,KAAK6qC,KAAK,MAAO,cAAgBnR,EAAa,UAAY95B,EAAI,MAAM,GAAM,I,OAC1F,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,EAAAmlH,qBAAqBnlH,YAGpC,YAAAolH,uBAAA,SAAuB5pF,EAAoBlZ,GACvC,OAAOxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,gBAAiBlZ,GAAS,GAAM,IAG1F,YAAA+iG,yBAAA,SAAyB7pF,EAAoB95B,GACzC,OAAOI,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,UAAY95B,EAAK,YAAa,MAAM,GAAM,IAG9F,YAAA4jH,6BAAN,SAAmC9pF,EAAoBlZ,G,gGACzC,SAAMxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,kBAAmBlZ,GAAS,GAAM,I,OACjG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAulH,mCAGzB,YAAAC,4BAAN,SAAkChqF,EAAoBlZ,G,gGACxC,SAAMxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,iBAAkBlZ,GAAS,GAAM,I,OAChG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAulH,mCAGzB,YAAAE,wBAAN,SAA8BjqF,EAAoBlZ,G,gGACpC,SAAMxgB,KAAK6qC,KAAK,SAAU,cAAgBnR,EAAa,SAAUlZ,GAAS,GAAM,I,OAC1F,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAulH,mCAG/B,YAAAG,uBAAA,SAAuBlqF,EAAoB95B,EAAY4gB,GACnD,OAAOxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,UAAY95B,EAAK,UAAW4gB,GAAS,GAAM,IAGrG,YAAAqjG,wBAAA,SAAwBnqF,EAAoB95B,EAAY4gB,GACpD,OAAOxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,UAAY95B,EAAK,WACnE4gB,GAAS,GAAM,IAGjB,YAAAsjG,2BAAN,SAAiCpqF,EAAoBlZ,G,gGACvC,SAAMxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,qBAAsBlZ,GAAS,GAAM,I,OACpG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAA6lH,4CAI/B,YAAAC,gBAAA,SAAgBtqF,EAAoB95B,EAAY4gB,GAC5C,OAAOxgB,KAAK6qC,KAAK,MAAO,cAAgBnR,EAAa,UAAY95B,EAAI4gB,GAAS,GAAM,IAGxF,YAAAyjG,mBAAA,SAAmBvqF,EAAoB95B,GACnC,OAAOI,KAAK6qC,KAAK,SAAU,cAAgBnR,EAAa,UAAY95B,EAAI,MAAM,GAAM,IAKlF,YAAAskH,mBAAN,SAAyBxqF,G,gGACX,SAAM15B,KAAK6qC,KAAK,MAAO,cAAgBnR,EAAa,iBAAkB,MAAM,GAAM,I,OAC5F,OADMx7B,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAimH,0DAG/B,YAAAC,4BAAA,SAA4B1qF,EAAoBlZ,GAC5C,OAAOxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,qBAAsBlZ,GAAS,GAAM,IAGzF,YAAAyjB,+BAAN,SAAqCvK,EAAoBlZ,G,gGAC3C,SAAMxgB,KAAK6qC,KAAK,OAAQ,cAAgBnR,EAAa,iBAAkBlZ,GAAS,GAAM,I,OAChG,OADMtiB,EAAI,SACH,CAAP,EAAO,IAAI,EAAAmmH,6BAA6BnmH,YAG5C,YAAAomH,2BAAA,SAA2B5qF,EAAoB95B,GAC3C,OAAOI,KAAK6qC,KAAK,SAAU,cAAgBnR,EAAa,kBAAoB95B,EAAI,MAAM,GAAM,IAK1F,YAAA2kH,UAAN,SAAgBvyF,EAAeL,EAAa7L,G,gGAC9B,SAAM9lB,KAAK6qC,KAAK,MAAO7qC,KAAKwkH,mBAAmB,UAAWxyF,EAAOL,EAAK7L,GAAQ,MAAM,GAAM,I,OACpG,OADM5nB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAumH,wBAGzB,YAAApiE,gBAAN,SAAsBziD,EAAYoyB,EAAeL,EAC7C7L,G,gGACU,SAAM9lB,KAAK6qC,KAAK,MAAO7qC,KAAKwkH,mBAAmB,YAAc5kH,EAAK,UAAWoyB,EAAOL,EAAK7L,GAC/F,MAAM,GAAM,I,OAChB,OAFM5nB,EAAI,SAEH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAumH,wBAGzB,YAAAvhD,sBAAN,SAA4BtjE,EAAYoyB,EAAeL,EACnD7L,G,gGACU,SAAM9lB,KAAK6qC,KAAK,MAAO7qC,KAAKwkH,mBAAmB,kBAAoB5kH,EAAK,UAAWoyB,EAAOL,EAAK7L,GACrG,MAAM,GAAM,I,OAChB,OAFM5nB,EAAI,SAEH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAumH,wBAGzB,YAAAriE,0BAAN,SAAgCnyC,EAAwBrQ,EACpDoyB,EAAeL,EAAa7L,G,gGAClB,SAAM9lB,KAAK6qC,KAAK,MACtB7qC,KAAKwkH,mBAAmB,kBAAoBv0G,EAAiB,UAAYrQ,EAAK,UAAWoyB,EAAOL,EAAK7L,GACrG,MAAM,GAAM,I,OAChB,OAHM5nB,EAAI,SAGH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAumH,wBAGzB,YAAAC,kBAAN,SAAwB9kH,EAAYoyB,EAAeL,EAAa7L,G,gGAClD,SAAM9lB,KAAK6qC,KAAK,MAAO7qC,KAAKwkH,mBAAmB,cAAgB5kH,EAAK,UAAWoyB,EAAOL,EAAK7L,GAAQ,MAAM,GAAM,I,OACzH,OADM5nB,EAAI,SACH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAumH,wBAGzB,YAAAviE,sBAAN,SAA4BxoB,EAAoB95B,EAC5CoyB,EAAeL,EAAa7L,G,gGAClB,SAAM9lB,KAAK6qC,KAAK,MACtB7qC,KAAKwkH,mBAAmB,cAAgB9qF,EAAa,UAAY95B,EAAK,UAAWoyB,EAAOL,EAAK7L,GAC7F,MAAM,GAAM,I,OAChB,OAHM5nB,EAAI,SAGH,CAAP,EAAO,IAAI,EAAA0gH,aAAa1gH,EAAG,EAAAumH,wBAGzB,YAAAE,kBAAN,SAAwBnkG,G,kGACD,SAAMxgB,KAAK4kH,wB,OASb,OATXC,EAAa,SACbhe,EAAU,IAAIiW,QAAQ,CACxB,cAAe98G,KAAK4yB,WACpB,cAAiB,UAAYiyF,EAC7B,eAAgB,oCAEQ,MAAxB7kH,KAAK28G,iBACL9V,EAAQnhG,IAAI,aAAc1F,KAAK28G,iBAElB,GAAM38G,KAAK4uD,MAAM,IAAIC,QAAQ7uD,KAAKwe,mBAAmBsmG,eAAiB,WAAY,CAC/FnqC,MAAO,WACPjG,YAAa10E,KAAKg9G,iBAClB57F,OAAQ,OACRjb,KAAM8rE,KAAKC,UAAU1xD,GACrBqmF,QAASA,M,OAEb,OAAwB,MAPP,SAOJlhF,OACF,CAAP,EAAOxK,QAAQ8J,OAAO,uB,YAMxB,YAAAu9D,iBAAN,SAAuB5iF,G,gGACT,SAAMI,KAAK6qC,KAAK,MAAO,UAAYjrC,EAAK,cAAe,MAAM,GAAM,I,OAC7E,OADM1B,EAAI,SACH,CAAP,EAAO,IAAI,GAAA6mH,gBAAgB7mH,YAKzB,YAAA8mH,cAAN,SAAoB1vG,G,0FACN,SAAMtV,KAAK6qC,KAAK,MAAO,yBAA2Bv1B,EAAU,MAAM,GAAM,I,OAClF,MAAO,CAAP,EADU,SACDvN,KAAI,SAACkG,GAAW,WAAI,EAAAg3G,sBAAsBh3G,eAKjD,YAAAk4C,kBAAN,SAAwB3lC,G,0FACV,SAAMxgB,KAAK6qC,KAAK,OAAQ,kBAAmBrqB,GAAS,GAAM,I,OACpE,MAAO,CAAP,EADU,kBAIR,YAAA+E,iBAAN,W,0FACc,SAAMvlB,KAAK6qC,KAAK,OAAQ,iBAAkB,MAAM,GAAM,I,OAChE,MAAO,CAAP,EADU,kBAMR,YAAAq6E,2BAAN,SAAiC9xE,G,sGACV,SAAMpzC,KAAK4kH,wB,OAEb,OAFXC,EAAa,SAEF,GAAM7kH,KAAK4uD,MAAM,IAAIC,QAAQzb,EAAkB,aAAc,CAC1EunC,MAAO,WACPv5D,OAAQ,MACRylF,QAAS,IAAIiW,QAAQ,CACjB,OAAU,mBACV,cAAiB,UAAY+H,Q,cAIb,OATlBtjH,EAAW,UASJokB,OAAT,MACc,GAAM3lB,KAAKmlH,YAAY5jH,GAAU,GAAO,I,OACtD,OADMK,EAAQ,SACP,CAAP,EAAOuZ,QAAQ8J,OAAOrjB,I,OAGa,O,EAA5B,GAAAwjH,4BAA2B,KAAC,GAAM7jH,EAASutD,Q,OAAtD,MAAO,CAAP,EAAO,YAAI,GAAAs2D,4BAA2B,QAAC,qBAGrC,YAAAzlE,0BAAN,SAAgCvM,EAAyB5yB,G,oGAClC,SAAMxgB,KAAK4kH,wB,OAEb,OAFXC,EAAa,SAEF,GAAM7kH,KAAK4uD,MAAM,IAAIC,QAAQzb,EAAkB,aAAc,CAC1EunC,MAAO,WACPv5D,OAAQ,OACRylF,QAAS,IAAIiW,QAAQ,CACjB,OAAU,mBACV,cAAiB,UAAY+H,EAC7B,eAAgB,oCAEpB1+G,KAAM8rE,KAAKC,UAAU1xD,O,cAGD,OAXlBjf,EAAW,UAWJokB,OAAT,MACc,GAAM3lB,KAAKmlH,YAAY5jH,GAAU,GAAO,I,OACtD,OADMK,EAAQ,SACP,CAAP,EAAOuZ,QAAQ8J,OAAOrjB,I,yBAIxB,YAAAyjH,qBAAN,SAA2BjyE,G,kGACN,SAAMpzC,KAAK4uD,MAAM,IAAIC,QAAQzb,EAAkB,SAAU,CACtEunC,MAAO,WACPv5D,OAAQ,MACRylF,QAAS,IAAIiW,QAAQ,CACjB,OAAU,mBACV,eAAgB,wC,cAIA,OATlBv7G,EAAW,UASJokB,OAAT,MACc,GAAM3lB,KAAKmlH,YAAY5jH,GAAU,GAAO,I,OACtD,OADMK,EAAQ,SACP,CAAP,EAAOuZ,QAAQ8J,OAAOrjB,I,yBAMxB,YAAAgjH,qBAAN,W,gGACsB,SAAM5kH,KAAKm0C,aAAamxE,Y,cAAtC9mE,EAAc,SACdx+C,KAAKm0C,aAAaoxE,oBAClB,GAAMvlH,KAAKu9G,iBADX,M,OAEc,OADd,SACc,GAAMv9G,KAAKm0C,aAAamxE,Y,OAAtC9mE,EAAc,S,iBAElB,MAAO,CAAP,EAAOA,WAGX,YAAAoQ,MAAA,SAAMpuC,GAKF,MAJuB,QAAnBA,EAAQY,SACRZ,EAAQqmF,QAAQnhG,IAAI,gBAAiB,YACrC8a,EAAQqmF,QAAQnhG,IAAI,SAAU,aAE3B1F,KAAKwlH,YAAYhlG,IAG5B,YAAAglG,YAAA,SAAYhlG,GACR,OAAOouC,MAAMpuC,IAGX,YAAAm+C,eAAN,SAAqBhsB,G,sGACjB,GAAkB,MAAdA,GAAqC,KAAfA,EACtB,MAAM,IAAIxvC,MAAM,6CAWH,OATX0jG,EAAU,IAAIiW,QAAQ,CACxB,OAAU,mBACV,cAAe98G,KAAK4yB,aAEI,MAAxB5yB,KAAK28G,iBACL9V,EAAQnhG,IAAI,aAAc1F,KAAK28G,iBAG7B1e,EAAO,mCAAmC/zF,mBAAmByoC,GAClD,GAAM3yC,KAAK4uD,MAAM,IAAIC,QAAQ7uD,KAAKwe,mBAAmB2gD,iBAAmB8+B,EAAM,CAC3FtjB,MAAO,WACPjG,YAAa10E,KAAKg9G,iBAClBnW,QAASA,EACTzlF,OAAQ,U,cAGY,OAPlB7f,EAAW,UAOJokB,OAAT,MACO,CAAP,GAAO,G,OAEO,SAAM3lB,KAAKmlH,YAAY5jH,GAAU,GAAO,I,OACtD,OADMK,EAAQ,SACP,CAAP,EAAOuZ,QAAQ8J,OAAOrjB,YAIxB,YAAAkuF,sBAAN,SAA4B21B,EAAwBjlG,G,0FACzC,SAAMxgB,KAAK6qC,KAAK,OACnB,6BAA+B46E,EAAiB,2BAChDjlG,GAAS,GAAM,I,OAFnB,MAAO,CAAP,EAAO,kBAKL,YAAAowE,wBAAN,SAA8B80B,G,0FACnB,SAAM1lH,KAAK6qC,KAAK,SACnB,6BAA+B66E,EAC/B,MAAM,GAAM,I,OAFhB,MAAO,CAAP,EAAO,kBAKL,YAAAx1C,wBAAN,SAA8By1C,G,0FACnB,SAAM3lH,KAAK6qC,KAAK,SACnB,uCAAyC86E,EACzC,MAAM,GAAM,I,OAFhB,MAAO,CAAP,EAAO,kBAKL,YAAA3vC,gCAAN,SAAsCra,G,0FACxB,SAAM37D,KAAK6qC,KAAK,OAAQ,6DAA+D3gC,mBAAmByxD,GAChH,MAAM,GAAM,I,OAChB,MAAO,CAAP,EAFU,kBAKR,YAAA6a,sBAAN,SAA4B7a,EAA0Bn7C,G,0FAC3C,SAAMxgB,KAAK6qC,KAAK,OAAQ,qDAAuD3gC,mBAAmByxD,GACrGn7C,GAAS,GAAM,I,OADnB,MAAO,CAAP,EAAO,kBAIL,YAAAmwE,2BAAN,SAAiCg1B,G,0FACtB,SAAM3lH,KAAK6qC,KAAK,OACnB,6BAA+B86E,EAAkB,kCACjD,MAAM,GAAM,I,OAFhB,MAAO,CAAP,EAAO,kBAMK,YAAApI,cAAhB,W,oGACyB,SAAMv9G,KAAKm0C,aAAayxE,mB,OAC7C,OAAoB,OADdnnE,EAAe,WACwB,KAAjBA,EACjB,CAAP,EAAOz+C,KAAK6lH,kBAGC,GAAM7lH,KAAKm0C,aAAa2xE,e,OACpB,OADfxqE,EAAW,SACI,GAAMt7C,KAAKm0C,aAAa4xE,mB,OAC7C,GADMvgG,EAAe,UAChB,EAAAjd,MAAM+F,mBAAmBgtC,KAAc,EAAA/yC,MAAM+F,mBAAmBkX,GACjE,MAAO,CAAP,EAAOxlB,KAAKgmH,qBAGhB,MAAM,IAAI7iH,MAAM,yEAGJ,YAAA6iH,kBAAhB,W,kGACqB,SAAMhmH,KAAKm0C,aAAa2xE,e,OACpB,OADfxqE,EAAW,SACI,GAAMt7C,KAAKm0C,aAAa4xE,mB,OAC7C,GADMvgG,EAAe,SACjB,EAAAjd,MAAM+F,mBAAmBgtC,IAAa,EAAA/yC,MAAM+F,mBAAmBkX,IAAuC,MAAtBxlB,KAAKimH,cACrF,MAAM,IAAI9iH,MAGd,SAAMnD,KAAKimH,cAAc3qE,EAAU91B,I,cAAnC,S,YAGY,YAAAqgG,eAAhB,W,4GACyB,SAAM7lH,KAAKm0C,aAAayxE,mB,OAC7C,GAAoB,OADdnnE,EAAe,WACwB,KAAjBA,EACxB,MAAM,IAAIt7C,MAYG,OAVX0jG,EAAU,IAAIiW,QAAQ,CACxB,eAAgB,mDAChB,OAAU,mBACV,cAAe98G,KAAK4yB,aAEI,MAAxB5yB,KAAK28G,iBACL9V,EAAQnhG,IAAI,aAAc1F,KAAK28G,iBAG7BuJ,EAAelmH,KAAKm0C,aAAagyE,cACtB,GAAMnmH,KAAK4uD,MAAM,IAAIC,QAAQ7uD,KAAKwe,mBAAmB2gD,iBAAmB,iBAAkB,CACvGh5D,KAAMnG,KAAK+8G,YAAY,CACnB1W,WAAY,gBACZD,UAAW8f,EAAa9f,UACxBggB,cAAe3nE,IAEnBk8B,MAAO,WACPjG,YAAa10E,KAAKg9G,iBAClBnW,QAASA,EACTzlF,OAAQ,W,cAGY,OAZlB7f,EAAW,UAYJokB,OAAT,MACqB,GAAMpkB,EAASutD,Q,OAEpC,OAFME,EAAe,SACf7Q,EAAgB,IAAI,EAAA++D,sBAAsBluD,GAChD,GAAMhvD,KAAKm0C,aAAaoK,UAAUJ,EAAcK,YAAaL,EAAcM,aAAc,O,cAAzF,S,aAEc,SAAMz+C,KAAKmlH,YAAY5jH,GAAU,GAAM,I,OACrD,OADMK,EAAQ,SACP,CAAP,EAAOuZ,QAAQ8J,OAAOrjB,I,yBAIhB,YAAAipC,KAAd,SAAmBzpB,EAA2C68E,EAAc93F,EACxE8iC,EAAiBo9E,EAAsB9H,EACvC+H,G,0GAKA,OAJA/H,EAAS,EAAAh2G,MAAM+F,mBAAmBiwG,GAAUv+G,KAAKwe,mBAAmB+nG,YAAchI,EAE5EiI,EAAajI,EAAStgB,EAExB,IAAItuF,IAAI62G,GAAYz2G,OAASy2G,EACtB,CAAP,EAAOrrG,QAAQ8J,OAAO,+BAGpB4hF,EAAU,IAAIiW,QAAQ,CACxB,cAAe98G,KAAK4yB,aAEI,MAAxB5yB,KAAK28G,iBACL9V,EAAQnhG,IAAI,aAAc1F,KAAK28G,iBAG7B8J,EAA2B,CAC7B9rC,MAAO,WACPjG,YAAa10E,KAAKg9G,iBAClB57F,OAAQA,GAGR6nB,EACmB,GAAMjpC,KAAK4kH,wBAD9B,O,OACMC,EAAa,SACnBhe,EAAQnhG,IAAI,gBAAiB,UAAYm/G,G,iBAuB5B,OArBL,MAAR1+G,IACoB,iBAATA,GACPsgH,EAAYtgH,KAAOA,EACnB0gG,EAAQnhG,IAAI,eAAgB,qDACL,iBAATS,IACVA,aAAgBo+B,SAChBkiF,EAAYtgH,KAAOA,GAEnB0gG,EAAQnhG,IAAI,eAAgB,mCAC5B+gH,EAAYtgH,KAAO8rE,KAAKC,UAAU/rE,MAI1CkgH,GACAxf,EAAQnhG,IAAI,SAAU,oBAEN,MAAhB4gH,GACAA,EAAazf,GAGjB4f,EAAY5f,QAAUA,EACL,GAAM7mG,KAAK4uD,MAAM,IAAIC,QAAQ23D,EAAYC,K,cAApDllH,EAAW,SAEb8kH,GAAmC,MAApB9kH,EAASokB,OACH,GAAMpkB,EAASutD,QADpC,M,OAEA,MAAO,CAAP,EADqB,U,cAEM,MAApBvtD,EAASokB,OAAT,MACO,GAAM3lB,KAAKmlH,YAAY5jH,GAAU,EAAO0nC,I,OACtD,OADMrnC,EAAQ,SACP,CAAP,EAAOuZ,QAAQ8J,OAAOrjB,I,yBAIhB,YAAAujH,YAAd,SAA0B5jH,EAAoBmlH,EAAqBz9E,G,yGAC3DA,IAAYy9E,GAAkC,MAApBnlH,EAASokB,QAAuC,MAApBpkB,EAASokB,QAAsC,MAApBpkB,EAASokB,QAC1F,GAAM3lB,KAAK08G,gBAAe,IAD1B,M,OAEA,OADA,SACO,CAAP,EAAO,M,cAGP1tD,EAAoB,KACpBhvD,KAAKi9G,eAAe17G,GACL,GAAMA,EAASutD,QAD9B,M,cACAE,EAAe,S,oBACRhvD,KAAK2mH,eAAeplH,I,KACD,GAAMA,EAAS6vB,SADlC,M,OACU,EAAAw1F,QAAS,SAA1B53D,EAA+C,E,iBAGnD,MAAO,CAAP,EAAO,IAAI,EAAAvtD,cAAcutD,EAAcztD,EAASokB,OAAQ+gG,YAGpD,YAAA3J,YAAR,SAAoBvvF,GAChB,OAAOvxB,OAAO4S,KAAK2e,GAAQzlB,KAAI,SAAApJ,GAC3B,OAAOuL,mBAAmBvL,GAAO,IAAMuL,mBAAmBsjB,EAAO7uB,OAClE6M,KAAK,MAGJ,YAAAwxG,eAAR,WACI,IAAKh9G,KAAK48G,aAAe58G,KAAKwe,mBAAmBqoG,aAC7C,MAAO,WAKP,YAAArC,mBAAR,SAA2BxhG,EAAcgP,EAAeL,EAAa7L,GAYjE,OAXa,MAATkM,IACAhP,GAAS,UAAYgP,GAEd,MAAPL,IACA3O,GAASA,EAAK/V,QAAQ,MAAQ,EAAI,IAAM,IACxC+V,GAAS,OAAS2O,GAET,MAAT7L,IACA9C,GAASA,EAAK/V,QAAQ,MAAQ,EAAI,IAAM,IACxC+V,GAAS,qBAAuB8C,GAE7B9C,GAGH,YAAAi6F,eAAR,SAAuB17G,GACnB,IAAMulH,EAAavlH,EAASslG,QAAQ5oG,IAAI,gBACxC,OAAqB,MAAd6oH,GAAsBA,EAAW75G,QAAQ,qBAAuB,GAGnE,YAAA05G,eAAR,SAAuBplH,GACnB,IAAMulH,EAAavlH,EAASslG,QAAQ5oG,IAAI,gBACxC,OAAqB,MAAd6oH,GAAsBA,EAAW75G,QAAQ,SAAW,GAEnE,EA7jDA,GAAa,EAAAzN,e,6cClLb,IAEA,cAGI,WAAY+B,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKuhD,OAAS,EAAK9/C,oBAAoB,U,EAE/C,OAPoC,OAOpC,EAPA,CAFA,MAEoCQ,cAAvB,EAAAs6G,kB,2dCDb,YACA,SAEA,cAMI,WAAYv8G,GAAZ,MACI,YAAMA,IAAS,KAFnB,EAAAiL,IAAc,KAGV,EAAKutE,aAAe,EAAK/2E,oBAAoB,gBAC7C,EAAK+jH,eAAiB,EAAK/jH,oBAAoB,kBAC/C,IAAMmpF,EAAiB,EAAKnpF,oBAAoB,kBAC1CgkH,EAAqB,EAAKhkH,oBAAoB,sB,OACpD,EAAKmpF,eAAmC,MAAlBA,EAAyB,KAAO,IAAI,EAAAtyC,eAAesyC,GACzE,EAAK66B,mBAA2C,MAAtBA,EAA6B,KAAO,IAAI,EAAAntE,eAAemtE,GACjF,EAAKx6G,IAAM,EAAKxJ,oBAAoB,O,EAG5C,OAjBkD,OAiBlD,EAjBA,CAAkD,EAAAQ,cAArC,EAAAi9G,gC,4hBCJb,YAKA,cAMI,WAAYl/G,GAAZ,MACI,YAAMA,IAAS,KAJnB,EAAAwjD,SAAqC,GACrC,EAAAC,aAA6C,GAIzC,EAAKL,QAAU,EAAK3hD,oBAAoB,WACxC,IAAM4hD,EAAgB,EAAK5hD,oBAAoB,iBACzCgiD,EAAe,EAAKhiD,oBAAoB,gBACxC+hD,EAAW,EAAK/hD,oBAAoB,Y,OAC1C,EAAK4hD,cAAiC,MAAjBA,EAAwB,KAAO,IAAIqiE,EAAsBriE,GAC1D,MAAhBI,IACA,EAAKA,aAAeA,EAAaj9C,KAAI,SAACzJ,GAAW,WAAI4oH,EAA2B5oH,OAEpE,MAAZymD,IACA,EAAKA,SAAWA,EAASh9C,KAAI,SAACjM,GAAW,WAAIqrH,EAAuBrrH,O,EAGhF,OApBqC,OAoBrC,EApBA,CAAqC,EAAA0H,cAAxB,EAAAg6G,kBAsBb,kBAMI,WAAYj8G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKW,KAAO,EAAKc,oBAAoB,QACrC,EAAKokH,UAAY,EAAKpkH,oBAAoB,aAC1C,EAAKm3C,YAAc,EAAKn3C,oBAAoB,eAC5C,EAAKqkH,kBAAoB,EAAKrkH,oBAAoB,qB,EAE1D,OAb2C,OAa3C,EAbA,CAA2C,EAAAQ,cAA9B,EAAAyjH,wBAeb,kBAQI,WAAY1lH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKiL,IAAM,EAAKxJ,oBAAoB,OACpC,EAAKskH,OAAS,EAAKtkH,oBAAoB,UACvC,EAAK+Y,OAAS,EAAK/Y,oBAAoB,UACvC,EAAKukH,KAAO,EAAKvkH,oBAAoB,QACrC,EAAK42B,KAAO,EAAK52B,oBAAoB,QACrC,EAAKijD,OAAS,EAAKjjD,oBAAoB,U,EAE/C,OAjB4C,OAiB5C,EAjBA,CAA4C,EAAAQ,cAA/B,EAAA2jH,yBAmBb,kBAUI,WAAY5lH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKimH,YAAc,EAAKxkH,oBAAoB,eAC5C,EAAKijD,OAAS,EAAKjjD,oBAAoB,UACvC,EAAKykH,SAAW,EAAKzkH,oBAAoB,YACzC,EAAK0kH,kBAAoB,EAAK1kH,oBAAoB,qBAClD,EAAK2kH,eAAiB,EAAK3kH,oBAAoB,kBAC/C,EAAKd,KAAO,EAAKc,oBAAoB,QACrC,EAAKgf,kBAAoB,EAAKhf,oBAAoB,qBAClD,EAAKu/E,QAAU,EAAKv/E,oBAAoB,W,EAEhD,OArBgD,OAqBhD,EArBA,CAAgD,EAAAQ,cAAnC,EAAA0jH,8B,odC7Db,IAEA,cAcI,WAAY3lH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKqmH,UAAY,EAAK5kH,oBAAoB,aAC1C,EAAK6kH,WAAa,EAAK7kH,oBAAoB,cAC3C,EAAK8kH,YAAc,EAAK9kH,oBAAoB,eAC5C,EAAKm3C,YAAc,EAAKn3C,oBAAoB,eAC5C,EAAKwK,OAAS,EAAKxK,oBAAoB,UACvC,EAAK+kH,SAAW,EAAK/kH,oBAAoB,YACzC,EAAKglH,WAAa,EAAKhlH,oBAAoB,cAC3C,EAAKilH,SAAW,EAAKjlH,oBAAoB,YACzC,EAAKklH,aAAe,EAAKllH,oBAAoB,gBAC7C,EAAKpF,KAAO,EAAKoF,oBAAoB,QACrC,EAAKmlH,SAAW,EAAKnlH,oBAAoB,YACzC,EAAK1C,MAAQ,EAAK0C,oBAAoB,S,EAE9C,OA7B2C,OA6B3C,EA7BA,CAFA,MAE2CQ,cAA9B,EAAAyhH,yB,mdCFb,IAEA,cAKI,WAAY1jH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKW,KAAO,EAAKc,oBAAoB,QACrC,EAAK+gF,QAAU,EAAK/gF,oBAAoB,WACxC,EAAKghF,SAAW,EAAKhhF,oBAAoB,Y,EAEjD,OAX0C,OAW1C,EAXA,CAFA,MAE0CQ,cAA7B,EAAA6tF,wB,4cCFb,IAKA,cAiBI,WAAY9vF,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKW,KAAO,EAAKc,oBAAoB,QACrC,EAAK4sB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAKiN,eAAiB,EAAKjN,oBAAoB,kBAC/C,EAAK02B,WAAa,EAAK12B,oBAAoB,cAC3C,EAAKk0B,SAAW,EAAKl0B,oBAAoB,YACzC,EAAKo0B,aAAe,EAAKp0B,oBAAoB,gBAC7C,EAAKs0B,QAAU,EAAKt0B,oBAAoB,WACxC,EAAK40B,SAAW,EAAK50B,oBAAoB,YACzC,EAAKw0B,mBAAqB,EAAKx0B,oBAAoB,sBACnD,EAAK80B,eAAiB,EAAK90B,oBAAoB,kBAC/C,EAAKg1B,uBAAyB,EAAKh1B,oBAAoB,0BACvD,EAAKs/C,aAAe,EAAKt/C,oBAAoB,gBAC7C,EAAK42B,KAAO,EAAK52B,oBAAoB,QACrC,EAAK4vB,WAAa,EAAK5vB,oBAAoB,cAC3C,EAAK2/C,UAAY,EAAK3/C,oBAAoB,a,EAElD,OAnCmC,OAmCnC,EAnCA,CALA,MAKmCQ,cAAtB,EAAAihH,iB,meCLb,YACA,SAEA,cAOI,WAAYljH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAKiN,eAAiB,EAAKjN,oBAAoB,kBAC/C,EAAKpF,KAAO,EAAKoF,oBAAoB,QACrC,EAAK69C,UAAY,EAAK79C,oBAAoB,aAC1C,EAAKksB,WAAa,EAAKlsB,oBAAoB,c,EAEnD,OAfmC,OAenC,EAfA,CAAmC,EAAAQ,cAAtB,EAAA09G,gBAiBb,kBAGI,WAAY3/G,GAAZ,MACI,YAAMA,IAAS,KAHnB,EAAA6R,YAA2C,GAIvC,IAAMA,EAAc,EAAKpQ,oBAAoB,e,OAC1B,MAAfoQ,IACA,EAAKA,YAAcA,EAAYrL,KAAI,SAACrK,GAAW,WAAI,EAAAo8C,0BAA0Bp8C,O,EAGzF,OAV0C,OAU1C,EAVA,CAA0CwjH,GAA7B,EAAAD,wB,sdCpBb,IAEA,cAGI,WAAY1/G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKu8C,QAAU,EAAK96C,oBAAoB,oB,EAEhD,OAP6C,OAO7C,EAPA,CAFA,MAE6CQ,cAAhC,EAAA85G,2B,odCFb,IAIA,cAgBI,WAAY/7G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKi9C,YAAcj9C,EAAS6mH,aAC5B,EAAKC,UAAY9mH,EAAS+mH,WAC1B,EAAK7pE,aAAel9C,EAAS6kH,cAC7B,EAAKmC,UAAYhnH,EAASinH,WAE1B,EAAKpqE,oBAAsB,EAAKp7C,oBAAoB,uBACpD,EAAKk8C,WAAa,EAAKl8C,oBAAoB,cAC3C,EAAKrE,IAAM,EAAKqE,oBAAoB,OACpC,EAAKy4C,eAAiB,EAAKz4C,oBAAoB,kBAC/C,EAAKuyC,IAAM,EAAKvyC,oBAAoB,OACpC,EAAKyyC,cAAgB,EAAKzyC,oBAAoB,iBAC9C,EAAKq7C,mBAAqB,EAAKr7C,oBAAoB,sBACnD,EAAK+7C,mBAAqB,EAAK/7C,oBAAoB,sBACnD,EAAKowC,gBAAkB,EAAKpwC,oBAAoB,mB,EAExD,OAjC2C,OAiC3C,EAjCA,CAJA,MAI2CQ,cAA9B,EAAA05G,yB,wdCJb,IAIA,cAKI,WAAY37G,GAAZ,MACI,YAAMA,IAAS,KAJnB,EAAAy8C,oBAAsB,IAAI/5C,IAKtB,EAAK22C,aAAe,EAAK53C,oBAAoB,sBAC7C,EAAKk7C,mBAAqB,EAAKl7C,oBAAoB,sBACnD,IAAMg7C,EAAsB,EAAKh7C,oBAAoB,uBACrD,GAA2B,MAAvBg7C,EACA,IAAK,IAAMhwC,KAAQgwC,EACXA,EAAoB7hD,eAAe6R,IACnC,EAAKgwC,oBAAoBt4C,IAAImE,SAASmE,EAAM,MAAOgwC,EAAoBhwC,I,SAK3F,OAlB+C,OAkB/C,EAlBA,CAJA,MAI+CxK,cAAlC,EAAA65G,6B,2cCJb,IAEA,cAII,WAAY97G,EAAejD,GAA3B,MACI,YAAMiD,IAAS,KACT/F,EAAO,EAAKwH,oBAAoB,Q,OACtC,EAAKxH,KAAe,MAARA,EAAe,GAAKA,EAAKuM,KAAI,SAACg5G,GAAY,WAAIziH,EAAEyiH,MAC5D,EAAK5+D,kBAAoB,EAAKn/C,oBAAoB,qB,EAE1D,OAVqC,OAUrC,EAVA,CAFA,MAEqCQ,cAAxB,EAAAo7G,gB,sdCFb,cACA,QAEA,cAKI,WAAYr9G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKwe,QAAU,EAAK/c,oBAAoB,WACxC,EAAKxH,KAAO,IAAI,EAAAitH,aAAa,EAAKzlH,oBAAoB,SACtD,EAAKu2F,KAAO,IAAImvB,EAAQ,EAAK1lH,oBAAoB,S,EAEzD,OAX6C,OAW7C,EAXA,CAA6C,EAAAQ,cAAhC,EAAAo/G,0BAab,kBAOI,WAAYrhH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKonH,aAAe,EAAK3lH,oBAAoB,gBAC7C,EAAK4lH,sBAAwB,EAAK5lH,oBAAoB,yBACtD,EAAK6lH,WAAa,EAAK7lH,oBAAoB,cAC3C,EAAK8lH,cAAgB,EAAK9lH,oBAAoB,iBAC9C,EAAK+lH,SAAW,EAAK/lH,oBAAoB,Y,EAEjD,OAfsB,OAetB,EAfA,CAAsB,EAAAQ,e,2cChBtB,IAEKwlH,EAKAC,EAKAC,EAMAC,EAYAC,EA9BL,SAEA,SAAKJ,GACD,qCACA,qBAFJ,CAAKA,MAAO,KAKZ,SAAKC,GACD,iCACA,2BAFJ,CAAKA,MAA6B,KAKlC,SAAKC,GACD,mCACA,2BACA,2BAHJ,CAAKA,MAAgB,KAMrB,SAAKC,GACD,qCACA,iCACA,mCACA,yCACA,+DACA,qDACA,2CACA,+BACA,6BATJ,CAAKA,MAAiB,KAYtB,SAAKC,GACD,mEACA,uBACA,qBAHJ,CAAKA,MAAoB,KAMzB,kBAuCI,WAAY5tH,QAAA,IAAAA,MAAA,MAAZ,MACI,YAAMA,IAAK,KACX,OAAY,MAARA,IAIJ,EAAK6tH,WAAa,EAAKrmH,oBAAoB,cAE3C,EAAKmwC,oBAAsB,EAAKnwC,oBAAoB,uBACpD,EAAKowC,gBAAkB,EAAKpwC,oBAAoB,mBAEhD,EAAKsmH,UAAY,EAAKtmH,oBAAoB,aAC1C,EAAKs4C,SAAW,EAAKt4C,oBAAoB,YACzC,EAAKwiB,aAAe,EAAKxiB,oBAAoB,gBAC7C,EAAKumH,gBAAkB,EAAKvmH,oBAAoB,mBAChD,EAAKwmH,iBAAmB,EAAKxmH,oBAAoB,oBACjD,EAAKymH,8BAAgC,EAAKzmH,oBAAoB,iCAC9D,EAAK0mH,iBAAmB,EAAK1mH,oBAAoB,oBACjD,EAAK2mH,2BAA6B,EAAK3mH,oBAAoB,8BAC3D,EAAK4mH,0BAA4B,EAAK5mH,oBAAoB,6BAC1D,EAAK6mH,yBAA2B,EAAK7mH,oBAAoB,4BACzD,EAAK8mH,UAAY,EAAK9mH,oBAAoB,aAC1C,EAAK+mH,uBAAyB,EAAK/mH,oBAAoB,0BAEvD,EAAKgnH,eAAiB,EAAKhnH,oBAAoB,kBAC/C,EAAKinH,2BAA6B,EAAKjnH,oBAAoB,8BAC3D,EAAKknH,kBAAoB,EAAKlnH,oBAAoB,qBAClD,EAAKmnH,8BAAgC,EAAKnnH,oBAAoB,iCAC9D,EAAKonH,uBAAyB,EAAKpnH,oBAAoB,0BACvD,EAAKqnH,uBAAyB,EAAKrnH,oBAAoB,0BAEvD,EAAKsnH,YAAc,EAAKtnH,oBAAoB,eAC5C,EAAKunH,eAAiB,EAAKvnH,oBAAoB,kBAC/C,EAAKwnH,0BAA4B,EAAKxnH,oBAAoB,6BAC1D,EAAKynH,0BAA4B,EAAKznH,oBAAoB,6BAC1D,EAAK0nH,gCAAkC,EAAK1nH,oBAAoB,mCAChE,EAAK2nH,kBAAoB,EAAK3nH,oBAAoB,qBAClD,EAAK4nH,4BAA8B,EAAK5nH,oBAAoB,+BAC5D,EAAK6nH,iCAAmC,EAAK7nH,oBAAoB,oCACjE,EAAK8nH,iCAAmC,EAAK9nH,oBAAoB,oCACjE,EAAK+nH,2BAA6B,EAAK/nH,oBAAoB,+B,EAEnE,OAjFkC,OAiFlC,EAjFA,CAAkC,EAAAQ,cAArB,EAAAilH,gB,meCpCb,IAEA,cAII,WAAYlnH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAKwgG,qBAAuB,EAAKxgG,oBAAoB,wB,EAE7D,OAT0D,OAS1D,EATA,CAFA,MAE0DQ,cAA7C,EAAA+9G,wC,udCFb,IAEA,cACI,WAAYhgH,G,OACR,YAAMA,IAAS,KAEvB,OAJ8C,OAI9C,EAJA,CAFA,QAE8CypH,cAAjC,EAAAjI,4B,2cCFb,IAEA,cAII,WAAYxhH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK29C,WAAa,EAAKl8C,oBAAoB,cAC3C,EAAKgyC,UAAY,EAAKhyC,oBAAoB,a,EAElD,OATkC,OASlC,EATA,CAFA,MAEkCQ,cAArB,EAAAwnH,gB,+dCFb,aACA,SAKA,cAOI,WAAYzpH,GAAZ,MACI,YAAMA,IAAS,KACf,EAAK6xF,YAAc,EAAKpwF,oBAAoB,eAC5C,EAAKutE,UAAY,EAAKvtE,oBAAoB,aAC1C,IAAMmtE,EAAe,EAAKntE,oBAAoB,gBAC9C,EAAKmtE,aAA+B,MAAhBA,EAAuB,KAAO,IAAI,EAAAkjB,4BAA4BljB,GAClF,IAAMG,EAAkB,EAAKttE,oBAAoB,mB,OACjD,EAAKstE,gBAAqC,MAAnBA,EAA0B,KAC7C,IAAI,EAAAgjB,2CAA2ChjB,GACnD,EAAK39D,WAAa,EAAK3P,oBAAoB,c,EAEnD,OAlBsD,OAkBtD,EAlBA,CAAsD,EAAA8uF,sBAAzC,EAAA4wB,oC,2dCNb,IAEA,cAII,WAAYnhH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAKpB,MAAQ,EAAKoB,oBAAoB,S,EAE9C,OATkD,OASlD,EATA,CAFA,MAEkDQ,cAArC,EAAAg+G,gC,6kBCFb,YACA,SAEA,SAMA,cASI,WAAYjgH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAK4sB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAKd,KAAO,EAAKc,oBAAoB,QACrC,EAAK2iB,OAAS,EAAK3iB,oBAAoB,UACvC,EAAK4vC,YAAc,IAAI,EAAA9J,eAAe,EAAK9lC,oBAAoB,gBAC/D,EAAK69C,UAAY,EAAK79C,oBAAoB,aAC1C,EAAK6vC,sBAAwB,EAAK7vC,oBAAoB,yB,EAE9D,OAnB8C,OAmB9C,EAnBA,CAA8C,EAAAQ,cAAjC,EAAAynH,2BAqBb,kBAMI,WAAY1pH,G,MAAZ,EACI,YAAMA,IAAS,K,OACf,EAAK3D,KAAO,EAAKoF,oBAAoB,QACrC,EAAK6Z,MAAQ,EAAK7Z,oBAAoB,SACtC,EAAKuxD,iBAAmB,EAAKvxD,oBAAoB,oBACjD,EAAK+nB,iBAA+D,QAA/C,EAAG,EAAK/nB,oBAAoB,2BAAmB,S,EAE5E,OAbyD,OAazD,EAbA,CAAyDioH,GAA5C,EAAA5J,sCAeb,kBAGI,WAAY9/G,GAAZ,MACI,YAAMA,IAAS,KAHnB,EAAA6R,YAA2C,GAIvC,IAAMA,EAAc,EAAKpQ,oBAAoB,e,OAC1B,MAAfoQ,IACA,EAAKA,YAAcA,EAAYrL,KAAI,SAACrK,GAAW,WAAI,EAAAo8C,0BAA0Bp8C,O,EAGzF,OAVqD,OAUrD,EAVA,CAAqDutH,GAAxC,EAAA7J,kCAYb,kBAMI,WAAY7/G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKg0C,IAAM,EAAKvyC,oBAAoB,OACpC,EAAKyyC,cAAgB,EAAKzyC,oBAAoB,iBAC9C,EAAKu2C,iBAAmB,EAAKv2C,oBAAoB,oBACjD,EAAKiyC,oBAAsB,EAAKjyC,oBAAoB,uB,EAE5D,OAbiE,OAajE,EAbA,CAAiE,EAAAQ,cAApD,EAAA89G,+C,8cCzDb,YACA,SAEA,cAKI,WAAY//G,GAAZ,MACI,YAAMA,IAAS,KACT2pH,EAAc,EAAKloH,oBAAoB,e,OAC1B,MAAfkoH,IACA,EAAKA,YAAc,IAAI,EAAAt2D,gBAAgBs2D,IAE3C,EAAKnoF,0BAA4B,EAAK//B,oBAAoB,6BAC1D,EAAK+S,QAAU,EAAK/S,oBAAoB,W,EAEhD,OAdqC,OAcrC,EAdA,CAAqC,EAAAQ,cAAxB,EAAAo6G,mB,keCHb,IAEA,cACI,WAAYr8G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK4xC,qBAAsB,E,EAEnC,OALyD,OAKzD,EALA,CAFA,OAEyDshB,6BAA5C,EAAAE,uC,sdCFb,YAKA,SAEA,cAWI,WAAYpzD,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAKpF,KAAO,EAAKoF,oBAAoB,QACrC,EAAKrE,IAAM,EAAKqE,oBAAoB,OACpC,EAAK2iB,OAAS,EAAK3iB,oBAAoB,UACvC,EAAKd,KAAO,EAAKc,oBAAoB,QACrC,EAAK+c,QAAU,EAAK/c,oBAAoB,WACxC,EAAK4vC,YAAc,IAAI,EAAA9J,eAAe,EAAK9lC,oBAAoB,gBAC/D,EAAK4sB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAK+uC,UAAY,EAAK/uC,oBAAoB,a,EAElD,OAvB6C,OAuB7C,EAvBA,CAA6C,EAAAQ,cAAhC,EAAAkxD,2B,+cCPb,IAIA,cAII,WAAYnzD,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKg0C,IAAM,EAAKvyC,oBAAoB,OACpC,EAAKyyC,cAAgB,EAAKzyC,oBAAoB,iB,EAEtD,OATsC,OAStC,EATA,CAJA,MAIsCQ,cAAzB,EAAAk6G,oB,6gBCJb,IAEA,cASI,WAAYn8G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAK02B,WAAa,EAAK12B,oBAAoB,cAC3C,EAAKiN,eAAiB,EAAKjN,oBAAoB,kBAC/C,EAAKrE,IAAM,EAAKqE,oBAAoB,OACpC,EAAKmoH,SAAW,EAAKnoH,oBAAoB,YACzC,EAAK2rF,aAAe,EAAK3rF,oBAAoB,gBAC7C,EAAKkkB,aAAe,EAAKlkB,oBAAoB,gB,EAErD,OAnBkD,OAmBlD,EAnBA,CAFA,MAEkDQ,cAArC,EAAA6gH,+BAqBb,kBAGI,WAAY9iH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKo5D,iBAAmB,EAAK33D,oBAAoB,oB,EAEzD,OAPqE,OAOrE,EAPA,CAAqEqhH,GAAxD,EAAAF,mD,+cCvBb,IAEA,cAMI,WAAY5iH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAKpF,KAAO,EAAKoF,oBAAoB,QACrC,EAAKq/B,aAAe,EAAKr/B,oBAAoB,gBAC7C,EAAKmgC,aAAe,EAAKngC,oBAAoB,gB,EAErD,OAbsC,OAatC,EAbA,CAFA,MAEsCQ,cAAzB,EAAAy/G,oB,geCFb,IAEA,2B,+CAEA,OAFuD,OAEvD,EAFA,CAFA,OAEuDnvB,uCAA1C,EAAAiwB,qC,udCFb,IAEA,cAII,WAAYxiH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAKpB,MAAQ,EAAKoB,oBAAoB,S,EAE9C,OAT8C,OAS9C,EATA,CAFA,MAE8CQ,cAAjC,EAAAigH,4B,qfCFb,YAEA,SAKA,cAOI,WAAYliH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAK4sB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAKd,KAAO,EAAKc,oBAAoB,QACrC,EAAK2iB,OAAS,EAAK3iB,oBAAoB,UACvC,EAAK4vC,YAAc,IAAI,EAAA9J,eAAe,EAAK9lC,oBAAoB,gB,EAEvE,OAf0C,OAe1C,EAfA,CAA0C,EAAAQ,cAA7B,EAAA6/G,uBAiBb,kBAII,WAAY9hH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3D,KAAO,EAAKoF,oBAAoB,QACrC,EAAK6Z,MAAQ,EAAK7Z,oBAAoB,S,EAE9C,OATqD,OASrD,EATA,CAAqDqgH,GAAxC,EAAAF,mC,idCxBb,YAIA,SACA,SAEA,cASI,WAAY5hH,GAAZ,MACI,YAAMA,IAAS,KACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAKd,KAAO,EAAKc,oBAAoB,QACrC,EAAKpF,KAAO,EAAKoF,oBAAoB,QAErC,IAAMouB,EAAO,EAAKpuB,oBAAoB,QAC1B,MAARouB,IACA,EAAKA,KAAO,IAAI,EAAAgiC,YAAYhiC,IAGhC,IAAM48B,EAAO,EAAKhrD,oBAAoB,Q,OAC1B,MAARgrD,IACA,EAAKA,KAAO,IAAI,EAAAmF,YAAYnF,IAGhC,EAAKgH,eAAiB,EAAKhyD,oBAAoB,kBAC/C,EAAKi6E,kBAAoB,EAAKj6E,oBAAoB,qB,EAE1D,OA5BwC,OA4BxC,EA5BA,CAAwC,EAAAQ,cAA3B,EAAAi7G,sB,2dCPb,IAEA,cAII,WAAYl9G,GAAZ,MACI,YAAMA,IAAS,K,OAHnB,EAAA3B,GAAa,KACb,EAAA4M,IAAc,KAGV,EAAK5M,GAAK,EAAKoD,oBAAoB,MACnC,EAAKwJ,IAAM,EAAKxJ,oBAAoB,O,EAE5C,OATkD,OASlD,EATA,CAFA,MAEkDQ,cAArC,EAAAk7G,gC,ydCAb,YACA,SAEA,cAKI,WAAYn9G,GAAZ,MACI,YAAMA,IAAS,KAFnB,EAAAiL,IAAc,KAGV,EAAKu6G,eAAiB,EAAK/jH,oBAAoB,kBAC/C,IAAM46E,EAAe,EAAK56E,oBAAoB,gB,OAC9C,EAAK46E,aAA+B,MAAhBA,EAAuB,KAAO,IAAI,EAAAzoB,aAAayoB,GACnE,EAAKpxE,IAAM,EAAKxJ,oBAAoB,O,EAE5C,OAZgD,OAYhD,EAZA,CAAgD,EAAAQ,cAAnC,EAAAu7G,8B,2cCLb,YACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,cASI,WAAYx9G,GAAZ,MACI,YAAMA,IAAS,KARnB,EAAA8R,QAA4B,GAC5B,EAAAD,YAA2C,GAC3C,EAAAgC,QAA4B,GAE5B,EAAAuiB,SAA8B,GAC9B,EAAA+pD,MAAwB,GAKpB,IAAMvB,EAAU,EAAKn9E,oBAAoB,WAC1B,MAAXm9E,IACA,EAAKA,QAAU,IAAI,EAAAvrB,gBAAgBurB,IAGvC,IAAM9sE,EAAU,EAAKrQ,oBAAoB,WAC1B,MAAXqQ,IACA,EAAKA,QAAUA,EAAQtL,KAAI,SAACuL,GAAW,WAAI,EAAAi+E,eAAej+E,OAG9D,IAAMF,EAAc,EAAKpQ,oBAAoB,eAC1B,MAAfoQ,IACA,EAAKA,YAAcA,EAAYrL,KAAI,SAACrK,GAAW,WAAI,EAAAyzF,0BAA0BzzF,OAGjF,IAAM0X,EAAU,EAAKpS,oBAAoB,WAC1B,MAAXoS,IACA,EAAKA,QAAUA,EAAQrN,KAAI,SAACrK,GAAW,WAAI,EAAAm8C,eAAen8C,OAG9D,IAAMqmF,EAAU,EAAK/gF,oBAAoB,WAC1B,MAAX+gF,IACA,EAAKA,QAAU,IAAI,EAAAuN,gBAAgBvN,IAGvC,IAAMpsD,EAAW,EAAK30B,oBAAoB,YAC1B,MAAZ20B,IACA,EAAKA,SAAWA,EAAS5vB,KAAI,SAAC/I,GAAW,WAAI,EAAAk1C,eAAel1C,OAGhE,IAAM0iF,EAAQ,EAAK1+E,oBAAoB,S,OAC1B,MAAT0+E,IACA,EAAKA,MAAQA,EAAM35E,KAAI,SAAC3K,GAAW,WAAI,EAAA+3D,aAAa/3D,O,EAGhE,OA/CkC,OA+ClC,EA/CA,CAAkC,EAAAoG,cAArB,EAAAq+G,gB,8cCTb,IAEA,cAUI,WAAYtgH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK2rB,MAAQ,EAAKlqB,oBAAoB,eACtC,EAAKooH,UAAY,EAAKpoH,oBAAoB,aAC1C,EAAKmqB,MAAQ,EAAKnqB,oBAAoB,SACtC,EAAKoqB,MAAQ,EAAKpqB,oBAAoB,SACtC,EAAKqlB,KAAO,EAAKrlB,oBAAoB,QACrC,EAAKslB,MAAQ,EAAKtlB,oBAAoB,SACtC,EAAKulB,WAAa,EAAKvlB,oBAAoB,cAC3C,EAAK+e,QAAU,EAAK/e,oBAAoB,W,EAEhD,OArBqC,OAqBrC,EArBA,CAFA,MAEqCQ,cAAxB,EAAAi6G,mB,8cCFb,IAEA,cAOI,WAAYl8G,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAK+e,QAAU,EAAK/e,oBAAoB,WACxC,EAAKslB,MAAQ,EAAKtlB,oBAAoB,SACtC,EAAKulB,WAAa,EAAKvlB,oBAAoB,cAC3C,EAAKgrB,KAAO,EAAKhrB,oBAAoB,Q,EAE7C,OAfqC,OAerC,EAfA,CAFA,MAEqCQ,cAAxB,EAAAm+G,mB,6dCFb,IAEA,cAII,WAAYpgH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKwe,QAAU,EAAK/c,oBAAoB,WACxC,EAAKrE,IAAM,EAAKqE,oBAAoB,O,EAE5C,OAToD,OASpD,EATA,CAFA,MAEoDQ,cAAvC,EAAAu+G,kC,mdCFb,IAEA,cAMI,WAAYxgH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKwe,QAAU,EAAK/c,oBAAoB,WACxC,EAAK4J,KAAO,EAAK5J,oBAAoB,QACrC,EAAKolD,UAAY,EAAKplD,oBAAoB,aAC1C,EAAKklD,eAAiB,EAAKllD,oBAAoB,kB,EAEvD,OAb0C,OAa1C,EAbA,CAFA,MAE0CQ,cAA7B,EAAAy+G,wB,qdCFb,IAEA,cAII,WAAY1gH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKwe,QAAU,EAAK/c,oBAAoB,WACxC,EAAK6Z,MAAQ,EAAK7Z,oBAAoB,S,EAE9C,OAT4C,OAS5C,EATA,CAFA,MAE4CQ,cAA/B,EAAAw+G,0B,wdCFb,IAIA,cAII,WAAYzgH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKwe,QAAU,EAAK/c,oBAAoB,WACxC,EAAKd,KAAO,EAAKc,oBAAoB,Q,EAE7C,OAT+C,OAS/C,EATA,CAJA,MAI+CQ,cAAlC,EAAAs+G,6B,udCJb,IAEA,cAGI,WAAYvgH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKma,KAAO,EAAK1Y,oBAAoB,Q,EAE7C,OAP8C,OAO9C,EAPA,CAFA,MAE8CQ,cAAjC,EAAA2+G,4B,udCFb,IAEA,cASI,WAAY5gH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKwe,QAAU,EAAK/c,oBAAoB,WACxC,EAAKkyE,KAAO,EAAKlyE,oBAAoB,QACrC,EAAKmyE,KAAO,EAAKnyE,oBAAoB,QACrC,EAAKoyE,KAAO,EAAKpyE,oBAAoB,QACrC,EAAKqyE,KAAO,EAAKryE,oBAAoB,QACrC,EAAKsyE,KAAO,EAAKtyE,oBAAoB,QACrC,EAAKgyE,IAAM,EAAKhyE,oBAAoB,O,EAE5C,OAnB8C,OAmB9C,EAnBA,CAFA,MAE8CQ,cAAjC,EAAA0+G,4B,8cCFb,IAEA,cAII,WAAY3gH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKquB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAKgyC,UAAY,EAAKhyC,oBAAoB,a,EAElD,OATqC,OASrC,EATA,CAFA,MAEqCQ,cAAxB,EAAAuhH,mB,0dCFb,IAEA,cAGI,WAAYxjH,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK5C,IAAM,EAAKqE,oBAAoB,O,EAE5C,OAPiD,OAOjD,EAPA,CAFA,MAEiDQ,cAApC,EAAA4hH,+B,m+CCFb,YAKA,aACI,WAAoB5tE,GAAA,KAAAA,iBAqBxB,OAlBI,YAAA0F,SAAA,WACI,OAAOl9C,KAAKqrH,gBAAgB,UAGhC,YAAAC,kBAAA,WACI,OAAOtrH,KAAKqrH,gBAAgB,mBAGlB,YAAAA,gBAAd,SAA8B1sH,G,kGACP,SAAMqB,KAAKw3C,eAAev5C,IAAYU,I,OACzD,OAAkB,OADZ4sH,EAAa,UAER,CAAP,EAAOA,IAGLC,EAAO,EAAAjjH,MAAMyD,UACnB,GAAMhM,KAAKw3C,eAAe0iB,KAAKv7D,EAAK6sH,K,OACpC,OADA,SACO,CAAP,EAAOA,WAEf,EAtBA,GAAa,EAAA5U,gB,s8DCDb,cACA,QAOA,aACI,WAAoBp8D,EAAsDv5B,GAAtD,KAAAu5B,wBAAsD,KAAAv5B,aA6B9E,OA1BU,YAAAupC,eAAN,SAAqBj1C,G,0GACC,SAAMvV,KAAKw6C,sBAAsBykB,KAAK1pD,EAAU,S,OAKjD,OALXk2G,EAAY,SACZxsD,EAAO,EAAA12D,MAAM+C,gBAAgBmgH,GAAWnoH,cACxCooH,EAAYzsD,EAAKn1D,OAAO,EAAG,GAC3B6hH,EAAa1sD,EAAKn1D,OAAO,GAEd,GAAM9J,KAAKihB,WAAWukG,YAAY,IAAI32D,QAZrC,wCAYiE68D,K,OAC9D,SADJ,SACmBt6F,Q,OAKpC,OALMw6F,EAAe,SAKd,CAAP,EAAgB,OAJVl8G,EAAQk8G,EAAaj+G,MAAM,SAASogB,MAAK,SAAAs8C,GAC3C,OAAOA,EAAE18D,MAAM,KAAK,KAAOg+G,MAGR9hH,SAAS6F,EAAM/B,MAAM,KAAK,GAAI,IAAM,WAGzD,YAAA25E,iBAAN,SAAuBhyE,G,gGAER,O,sBAAA,GAAMtV,KAAKihB,WAAW+jG,cAAc1vG,I,OAA3C,MAAO,CAAP,EAAO,U,OAGP,G,WAAyB,MADX,EACJsb,WACN,MAAO,CAAC,EAAD,IAEX,MAAM,IAAIztB,M,yBAvBlB,GADC,EAAA0oH,SAAS,KAAK,WAAM,0B,6HA2BzB,EA9BA,GAAa,EAAAxtG,gB,gGCNb,oBAAyBo9E,EAAeqwB,GACpC,OAAO,SAAIr9G,EAAaqZ,EACpB0sE,GACA,IAAMC,EAAmCD,EAAWn2F,MAC9C0tH,EAAe,IAAI9nH,IAEnB+nH,EAAe,SAACp9G,GAClB,IAAIq9G,EAAYF,EAAa9tH,IAAI2Q,GACjC,OAAiB,MAAbq9G,IAGJA,EAAY,IAAIhoH,IAChB8nH,EAAarmH,IAAIkJ,EAAKq9G,IAHXA,GAOf,MAAO,CACH5tH,MAAO,W,IAAA,WAAS,kDACZ,IAAM4tH,EAAYD,EAAahsH,MACzBksH,EAAkBJ,EAAYj3B,GAChCs3B,EAAQF,EAAUhuH,IAAIiuH,GAM1B,OALa,MAATC,IACAA,EAAQ,GACRF,EAAUvmH,IAAIwmH,EAAiBC,IAG5B,IAAIhxG,SAAW,SAACC,EAAS6J,GAC5B,IAAMmnG,EAAO,WACT,IAAMt3B,EAAY,WACdq3B,EAAMjvH,OAAOivH,EAAMl/G,QAAQm/G,GAAO,GAC9BD,EAAMnwH,QAAUy/F,EAChB0wB,EAAM1wB,EAAQ,KACU,IAAjB0wB,EAAMnwH,SACbiwH,EAAU37E,OAAO47E,GACM,IAAnBD,EAAUtnG,MACVonG,EAAaz7E,OAAO,KAIhCmkD,EAAe93F,MAAM,EAAMk4F,GAAMxzF,MAAK,SAACka,GAEnC,OADAu5E,IACOv5E,KACR8J,OAAM,SAACC,GAEN,MADAwvE,IACMxvE,KACPjkB,KAAK+Z,EAAS6J,IAErBknG,EAAM7vH,KAAK8vH,GACPD,EAAMnwH,QAAUy/F,GAChB2wB,Y,o9DCvDxB,YACA,SACA,SAEA,SAEA,SACA,SACA,SAIA,SACA,SACA,SACA,SACA,SACA,SAIA,SACA,UACA,UACA,UACA,SACA,SACA,SACA,UAGA,SAKA,SAGA,UAYA,QAGA,SACA,QAEM9rB,EACa,WADbA,EAES,iBAFTA,EAGY,eAGZ+rB,EAAuB,IAAIpoH,IAAyB,CACtD,CAAC,aAAc,IAAI8pG,IAAI,CAAC,yBAG5B,aAMI,WAAoB/vF,EAAsCsf,EAC9C29D,EAA0Ch6E,EAC1C41F,EAA8Cr/D,EAC9C93C,EAAkC8uC,EAClCvtC,GAJQ,KAAA+c,gBAAsC,KAAAsf,cAC9C,KAAA29D,kBAA0C,KAAAh6E,aAC1C,KAAA41F,oBAA8C,KAAAr/D,iBAC9C,KAAA93C,cAAkC,KAAA8uC,gBAClC,KAAAvtC,aANJ,KAAAqrH,mBAAyC,IAAI,EAAAC,mBAAmBvsH,KAAKwsH,uBAmiCjF,OA1hCI,sBAAI,mCAAoB,C,IAAxB,WACI,OAAOxsH,KAAKysH,uB,IAEhB,SAAyBpuH,GACrB2B,KAAKysH,sBAAwBpuH,EACH,MAAtB2B,KAAKwuC,gBACQ,MAATnwC,EACA2B,KAAKwuC,gBAAgB0uD,aAErBl9F,KAAKwuC,gBAAgBkiB,iB,gCAKjC,YAAAg8D,WAAA,WACI1sH,KAAK2sH,qBAAuB,KAC5B3sH,KAAKssH,mBAAmBrkC,SAGtB,YAAA1mD,QAAN,SAAc1F,EAAmBl9B,EAA0BksD,G,YAAA,IAAAA,MAAA,M,wGAEvC,MAAZhvB,EAAMj8B,GAAN,MACsB,MAAlBirD,EAAA,MACiB,GAAM7qD,KAAK/B,IAAI49B,EAAMj8B,K,OAAtCirD,EAAiB,S,wBAEC,MAAlBA,EAAA,MACuB,GAAMA,EAAevvC,W,OAAtCsxG,EAAiB,SACvB/wF,EAAM7U,gBAAkB4lG,EAAe5lG,iBAAmB,GACtD6U,EAAM35B,OAAS,EAAAoS,WAAWC,OAASq4G,EAAe1qH,OAAS,EAAAoS,WAAWC,QACjC,MAAjCq4G,EAAex4G,MAAMmB,UAAsD,KAAlCq3G,EAAex4G,MAAMmB,UAC9Dq3G,EAAex4G,MAAMmB,WAAasmB,EAAMznB,MAAMmB,WACxC4a,EAAK,IAAI,EAAA87B,qBACZ12C,SAAWq3G,EAAex4G,MAAMmB,SACnC4a,EAAGkV,aAAexJ,EAAMznB,MAAMuT,qBAAuB,IAAI+J,KACzDmK,EAAM7U,gBAAgB9pB,OAAO,EAAG,EAAGizB,IAEnC0L,EAAMznB,MAAMuT,qBAAuBilG,EAAex4G,MAAMuT,sBAG5DilG,EAAeC,YACTC,EAAuBF,EAAez4G,OAAOrF,QAAO,SAAAwE,GAAK,OAAAA,EAAEpR,OAAS,EAAAwS,UAAU4kF,QACtE,MAAVhmF,EAAE1V,MAA2B,KAAX0V,EAAE1V,MAA0B,MAAX0V,EAAEjV,OAA6B,KAAZiV,EAAEjV,SACtD,EAA+B,MAAhBw9B,EAAM1nB,OAAiB,GACxC0nB,EAAM1nB,OAAOrF,QAAO,SAAAwE,GAAK,OAAAA,EAAEpR,OAAS,EAAAwS,UAAU4kF,QAAoB,MAAVhmF,EAAE1V,MAA2B,KAAX0V,EAAE1V,QAChFkvH,EAAqBl/G,SAAQ,SAAAm/G,GACzB,IAAMC,EAAe,EAAaj/F,MAAK,SAAAza,GAAK,OAAAA,EAAE1V,OAASmvH,EAAGnvH,QAC1D,GAAoB,MAAhBovH,GAAwBA,EAAa3uH,QAAU0uH,EAAG1uH,MAAO,CACzD,IAAM8xB,EAAK,IAAI,EAAA87B,oBACf97B,EAAG5a,SAAWw3G,EAAGnvH,KAAO,KAAOmvH,EAAG1uH,MAClC8xB,EAAGkV,aAAe,IAAI3T,KACtBmK,EAAM7U,gBAAgB9pB,OAAO,EAAG,EAAGizB,Q,iBAKtB,MAAzB0L,EAAM7U,iBAA4D,IAAjC6U,EAAM7U,gBAAgBhrB,OACvD6/B,EAAM7U,gBAAkB,KACQ,MAAzB6U,EAAM7U,iBAA2B6U,EAAM7U,gBAAgBhrB,OAAS,IAEvE6/B,EAAM7U,gBAAkB6U,EAAM7U,gBAAgB5nB,MAAM,EAAG,I,wBAIzDsT,EAAS,IAAI,EAAAkqB,QACZh9B,GAAKi8B,EAAMj8B,GAClB8S,EAAO+T,SAAWoV,EAAMpV,SACxB/T,EAAOuB,SAAW4nB,EAAM5nB,SACxBvB,EAAOzC,eAAiB4rB,EAAM5rB,eAC9ByC,EAAOxQ,KAAO25B,EAAM35B,KACpBwQ,EAAOuU,cAAgB4U,EAAM5U,cAC7BvU,EAAOwU,aAAe2U,EAAM3U,aAC5BxU,EAAO0U,SAAWyU,EAAMzU,SAEb,MAAPzoB,GAAwC,MAAzB+T,EAAOzC,eAAtB,MACM,GAAMjQ,KAAKge,cAAcE,UAAUxL,EAAOzC,iB,OAChD,GAAW,OADXtR,EAAM,UAEF,MAAM,IAAIwE,MAAM,mD,iBAGxB,SAAMgY,QAAQK,IAAI,CACdxb,KAAKitH,mBAAmBpxF,EAAOnpB,EAAQ,CACnC9U,KAAM,KACNsW,MAAO,MACRvV,GACHqB,KAAKktH,kBAAkBx6G,EAAQmpB,EAAOl9B,GACtCqB,KAAKmtH,cAActxF,EAAM1nB,OAAQxV,GAAK0C,MAAK,SAAA8S,GACvCzB,EAAOyB,OAASA,KAEpBnU,KAAKotH,yBAAyBvxF,EAAM7U,gBAAiBroB,GAAK0C,MAAK,SAAA8uB,GAC3Dzd,EAAOsU,gBAAkBmJ,KAE7BnwB,KAAKqtH,mBAAmBxxF,EAAM9U,YAAapoB,GAAK0C,MAAK,SAAA0lB,GACjDrU,EAAOqU,YAAcA,Q,OAI7B,OAjBA,SAiBO,CAAP,EAAOrU,WAGL,YAAA26G,mBAAN,SAAyBC,EAAoC3uH,G,yGACzD,OAAwB,MAApB2uH,GAAwD,IAA5BA,EAAiBtxH,OACtC,CAAP,EAAO,OAGLgf,EAA2B,GAC3BuyG,EAA+B,GACrCD,EAAiB1/G,SAAQ,SAAMiuB,GAAK,qC,iDAC1BG,EAAa,IAAI,EAAAN,YACZ97B,GAAKi8B,EAAMj8B,GACtBo8B,EAAWrX,KAAOkX,EAAMlX,KACxBqX,EAAW8b,SAAWjc,EAAMic,SAC5B9b,EAAWxvB,IAAMqvB,EAAMrvB,IACjBuvB,EAAU/7B,KAAKitH,mBAAmBpxF,EAAOG,EAAY,CACvDuJ,SAAU,MACX5mC,GAAK0C,MAAK,gD,+DACQ,MAAbw6B,EAAMl9B,IAAN,OACA,EAAAq9B,EAAiB,GAAMh8B,KAAKge,cAAcujB,QAAQ1F,EAAMl9B,IAAIA,IAAKA,K,OAAjE,EAAWA,IAAM,S,wBAErB4uH,EAAejxH,KAAK0/B,G,cAExBhhB,EAAS1e,KAAKy/B,G,aAGlB,GAAM5gB,QAAQK,IAAIR,K,OAClB,OADA,SACO,CAAP,EAAOuyG,WAGL,YAAAJ,cAAN,SAAoBK,EAA0B7uH,G,kGAC1C,OAAK6uH,GAAgBA,EAAYxxH,QAI3Bif,EAAOjb,KACPytH,EAAqB,GAC3B,GAAMD,EAAY1xF,QAAO,SAACC,EAASnnB,GAC/B,OAAOmnB,EAAQ16B,MAAK,WAChB,OAAO4Z,EAAKyyG,aAAa94G,EAAOjW,MACjC0C,MAAK,SAACssH,GACLF,EAAUnxH,KAAKqxH,QAEpBxyG,QAAQC,aAXA,CAAP,EAAO,M,OAaX,OARA,SAQO,CAAP,EAAOqyG,WAGL,YAAAC,aAAN,SAAmBE,EAAuBjvH,G,gGAStC,OARMiW,EAAQ,IAAI,EAAA+mB,OACZz5B,KAAO0rH,EAAW1rH,KACxB0S,EAAMwwB,SAAWwoF,EAAWxoF,SAExBwoF,EAAW1rH,OAAS,EAAAwS,UAAU82F,SAAgC,SAArBoiB,EAAWvvH,QACpDuvH,EAAWvvH,MAAQ,SAGvB,GAAM2B,KAAKitH,mBAAmBW,EAAYh5G,EAAO,CAC7ChX,KAAM,KACNS,MAAO,MACRM,I,OAEH,OALA,SAKO,CAAP,EAAOiW,WAGL,YAAAw4G,yBAAN,SAA+BS,EAAiClvH,G,kGAC5D,OAAKkvH,GAAaA,EAAS7xH,QAIrBif,EAAOjb,KACP8tH,EAAqB,GAC3B,GAAMD,EAAS/xF,QAAO,SAACC,EAAS5L,GAC5B,OAAO4L,EAAQ16B,MAAK,WAChB,OAAO4Z,EAAK8yG,uBAAuB59F,EAAIxxB,MACxC0C,MAAK,SAAC2sH,GACLF,EAAOxxH,KAAK0xH,QAEjB7yG,QAAQC,aAXA,CAAP,EAAO,M,OAaX,OARA,SAQO,CAAP,EAAO0yG,WAGL,YAAAC,uBAAN,SAA6BE,EAA8BtvH,G,gGAIvD,OAHMwxB,EAAK,IAAI,EAAAlB,UACZoW,aAAe4oF,EAAQ5oF,aAE1B,GAAMrlC,KAAKitH,mBAAmBgB,EAAS99F,EAAI,CACvC5a,SAAU,MACX5W,I,OAEH,OAJA,SAIO,CAAP,EAAOwxB,WAGL,YAAAlyB,IAAN,SAAU2B,G,oGACS,SAAMI,KAAKs9B,YAAYqhB,a,OACpB,OADZ/uB,EAAS,SACG,GAAM5vB,KAAKw3C,eAAev5C,IAASqiG,I,OACrC,OADV/4E,EAAY,SACF,GAAMvnB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OACzB,OAAe,OAFTxa,EAAU,WAEQA,EAAQjZ,eAAeyD,GAIxC,CAAP,EAAO,IAAI,EAAAg9B,OAAOxnB,EAAQxV,IAAK,EAAO2nB,EAAYA,EAAU3nB,GAAM,OAHvD,CAAP,EAAO,cAMT,YAAA83B,OAAN,W,wGACmB,SAAM13B,KAAKs9B,YAAYqhB,a,OACpB,OADZ/uB,EAAS,SACG,GAAM5vB,KAAKw3C,eAAev5C,IAASqiG,I,OACrC,OADV/4E,EAAY,SACF,GAAMvnB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OAEzB,IAAWhwB,KAHLwV,EAAU,SAEV7T,EAAqB,GACV6T,EACTA,EAAQjZ,eAAeyD,IACvB2B,EAASjF,KAAK,IAAI,EAAAsgC,OAAOxnB,EAAQxV,IAAK,EAAO2nB,EAAYA,EAAU3nB,GAAM,OAGjF,MAAO,CAAP,EAAO2B,WAIL,YAAAmpD,gBAAN,W,iHACqC,MAA7B1qD,KAAK2sH,qBAAL,MACe,GAAM3sH,KAAKs9B,YAAYqhB,a,cAAhC/uB,EAAS,SACW,MAAtB5vB,KAAKwuC,gBAA8D,QAArC,EAACxuC,KAAKwuC,gBAAgB/0B,uBAAe,QAAImW,KAAYA,EAAnF,MAEA,GAAM5vB,KAAKwuC,gBAAgBkiB,aAAa9gC,EAAQ5vB,KAAK2sH,uB,OAArD,S,iBAEJ,MAAO,CAAP,EAAO3sH,KAAK2sH,sB,OAID,OADT3gC,EAA2B,GAClB,GAAMhsF,KAAKge,cAAckwG,U,OACxC,IADe,SAEX,MAAM,IAAI/qH,MAAM,WAIJ,OADV6X,EAAkB,GACR,GAAMhb,KAAK03B,U,OAK3B,OALgB,SACR9pB,SAAQ,SAAA8E,GACZsI,EAAS1e,KAAKoW,EAAO4I,UAAUja,MAAK,SAAA3D,GAAK,OAAAsuF,EAAW1vF,KAAKoB,UAG7D,GAAMyd,QAAQK,IAAIR,I,OAGlB,OAHA,SACAgxE,EAAW1zC,KAAKt4C,KAAKqsF,4BACrBrsF,KAAK2sH,qBAAuB3gC,EACrB,CAAP,EAAOhsF,KAAK2sH,8BAGV,YAAAwB,2BAAN,SAAiCC,EAAoBn7D,G,YAAA,IAAAA,OAAA,G,mFACjC,SAAMjzD,KAAK0qD,mB,OAE3B,MAAO,CAAP,EAFgB,SAED57C,QAAO,SAAA4D,GAClB,OAAIA,EAAO+9B,eAGPwiB,GAAUvgD,EAAO+T,WAAa2nG,KAEtBn7D,GAAkC,MAAxBvgD,EAAOuU,eAAyBvU,EAAOuU,cAAcha,QAAQmhH,IAAe,eAQpG,YAAAC,sBAAN,SAA4B7hH,EAAa8hH,EACrCC,G,YAAA,IAAAA,MAAA,M,wGACA,OAAW,MAAP/hH,GAAoC,MAArB8hH,EACR,CAAP,EAAOnzG,QAAQC,QAAQ,MAGrB5N,EAAS,EAAAjF,MAAMsE,UAAUL,GACzBgiH,EAA6B,MAAVhhH,EAAiB2N,QAAQC,QAAQ,IACtDpb,KAAKi7F,gBAAgBwzB,uBAAuBptH,MAAK,SAACqtH,GAC9C,IAAIzjB,EAAiB,GAWrB,OAVAyjB,EAAU9gH,SAAQ,SAAA+gH,GACVA,EAAS3yH,QAAU2yH,EAAS1hH,QAAQO,IAAW,IAC/Cy9F,EAAUA,EAAQzgF,OAAOmkG,OAI5B1jB,EAAQjvG,QACTivG,EAAQ3uG,KAAKkR,GAGVy9F,KAGA,GAAM9vF,QAAQK,IAAI,CAACgzG,EAAkBxuH,KAAK0qD,sB,cAAnD7tD,EAAS,SACT+xH,EAAkB/xH,EAAO,GACzBuY,EAAUvY,EAAO,GAEH,MAAhB0xH,EAAA,MACe,GAAMvuH,KAAKw3C,eAAev5C,IAAkB,EAAAuZ,iBAAiBqB,kB,OACxD,OADpB01G,EAAe,YAEXA,EAAe,EAAAl3E,aAAasyD,Q,iBAIpC,MAAO,CAAP,EAAOv0F,EAAQtG,QAAO,SAAA4D,GAClB,GAA0B,MAAtBA,EAAOyU,YACP,OAAO,EAEX,GAAyB,MAArBmnG,GAA6BA,EAAkBrhH,QAAQyF,EAAOxQ,OAAS,EACvE,OAAO,EAGX,GAAW,MAAPsK,GAAekG,EAAOxQ,OAAS,EAAAoS,WAAWC,OAA8B,MAArB7B,EAAO0B,MAAMoB,KAChE,IAAK,IAAI1Z,EAAI,EAAGA,EAAI4W,EAAO0B,MAAMoB,KAAKxZ,OAAQF,IAAK,CAC/C,IAAMmW,EAAIS,EAAO0B,MAAMoB,KAAK1Z,GAC5B,GAAa,MAATmW,EAAEJ,IAKN,OADyB,MAAXI,EAAEvC,MAAgB6+G,EAAet8G,EAAEvC,OAE7C,KAAK,EAAA2nC,aAAasyD,OACd,GAAc,MAAVn8F,GAA8B,MAAZyE,EAAEzE,QAAkBohH,EAAgB3hH,QAAQgF,EAAEzE,SAAW,EAAG,CAC9E,IAAI6+G,EAAqBzmH,IAAIqM,EAAEzE,QAM3B,OAAO,EALP,IAAMqhH,EAAgB,EAAAtmH,MAAMoE,QAAQH,GACpC,IAAK6/G,EAAqBpuH,IAAIgU,EAAEzE,QAAQ5H,IAAIipH,GACxC,OAAO,EAMnB,MACJ,KAAK,EAAAx3E,aAAakuD,KACd,IAAMupB,EAAU,EAAAvmH,MAAMoE,QAAQH,GAC9B,GAAe,MAAXsiH,GAAmBA,IAAY,EAAAvmH,MAAMoE,QAAQsF,EAAEJ,KAC/C,OAAO,EAEX,MACJ,KAAK,EAAAwlC,aAAawyD,MACd,GAAIr9F,IAAQyF,EAAEJ,IACV,OAAO,EAEX,MACJ,KAAK,EAAAwlC,aAAauyD,WACd,GAAIp9F,EAAIO,WAAWkF,EAAEJ,KACjB,OAAO,EAEX,MACJ,KAAK,EAAAwlC,aAAaC,kBACd,IAEI,GADc,IAAIlrC,OAAO6F,EAAEJ,IAAK,KACtBxF,KAAKG,GACX,OAAO,EAEb,MAAOhL,GACL,EAAKP,WAAWW,MAAMJ,GAG9B,KAAK,EAAA61C,aAAayyD,QAO9B,OAAO,cAIT,YAAAr5C,6BAAN,SAAmCxgD,G,oGACf,SAAMjQ,KAAKihB,WAAWu+F,uBAAuBvvG,I,cAC9C,OADTmF,EAAU,WACuB,MAAhBA,EAAQ5Z,MAAgB4Z,EAAQ5Z,KAAKQ,QAClD,EAA2B,GAC3B,EAAkB,GACxBoZ,EAAQ5Z,KAAKoS,SAAQ,SAAA1P,GACjB,IAAM1C,EAAO,IAAI,EAAA60B,WAAWnyB,GACtBwU,EAAS,IAAI,EAAAkqB,OAAOphC,GAC1B,EAASc,KAAKoW,EAAO4I,UAAUja,MAAK,SAAA3D,GAAK,SAAWpB,KAAKoB,UAE7D,GAAMyd,QAAQK,IAAI,KARlB,M,OAUA,OAFA,SACA,EAAW88B,KAAKt4C,KAAKqsF,4BACd,CAAP,EAAO,G,OAEP,MAAO,CAAC,EAAD,YAIT,YAAA0iC,kBAAN,SAAwBviH,EAAaoiB,G,YAAA,IAAAA,OAAA,G,4DACjC,MAAO,CAAP,EAAO5uB,KAAKgvH,gBAAgBxiH,GAAK,GAAM,EAAOoiB,WAG5C,YAAAqgG,sBAAN,SAA4BziH,EAAaoiB,G,YAAA,IAAAA,OAAA,G,4DACrC,MAAO,CAAP,EAAO5uB,KAAKgvH,gBAAgBxiH,GAAK,GAAO,EAAMoiB,WAG5C,YAAAsgG,oBAAN,SAA0B1iH,G,mEACtB,MAAO,CAAP,EAAOxM,KAAKgvH,gBAAgBxiH,GAAK,GAAO,GAAO,WAGnD,YAAA2iH,0BAAA,SAA0B3iH,GACtBxM,KAAKssH,mBAAmB8C,oBAAoB5iH,IAG1C,YAAA6iH,mBAAN,SAAyBzvH,G,oGACE,SAAMI,KAAKw3C,eAAev5C,IAASqiG,I,OAa1D,OAbIgvB,EAAmB,YAEnBA,EAAmB,IAGnBA,EAAiB1vH,GACjB0vH,EAAiB1vH,GAAIylC,cAAe,IAAI3T,MAAOW,UAE/Ci9F,EAAiB1vH,GAAM,CACnBylC,cAAc,IAAI3T,MAAOW,WAIjC,GAAMryB,KAAKw3C,eAAe0iB,KAAKomC,EAAgBgvB,I,OAE/C,GAFA,SAEiC,MAA7BtvH,KAAK2sH,qBACL,UAGJ,IAAS7wH,EAAI,EAAGA,EAAIkE,KAAK2sH,qBAAqB3wH,OAAQF,IAElD,IADMyzH,EAASvvH,KAAK2sH,qBAAqB7wH,IAC9B8D,KAAOA,EAAI,CAClB2vH,EAAOhoG,UAAY+nG,EAAiB1vH,GACpC,M,kBAKN,YAAA4vH,uBAAN,SAA6B5vH,G,oGACF,SAAMI,KAAKw3C,eAAev5C,IAASqiG,I,OAa1D,OAbIgvB,EAAmB,YAEnBA,EAAmB,IAGnBA,EAAiB1vH,GACjB0vH,EAAiB1vH,GAAI6vH,cAAe,IAAI/9F,MAAOW,UAE/Ci9F,EAAiB1vH,GAAM,CACnBylC,cAAc,IAAI3T,MAAOW,WAIjC,GAAMryB,KAAKw3C,eAAe0iB,KAAKomC,EAAgBgvB,I,OAE/C,GAFA,SAEiC,MAA7BtvH,KAAK2sH,qBACL,UAGJ,IAAS7wH,EAAI,EAAGA,EAAIkE,KAAK2sH,qBAAqB3wH,OAAQF,IAElD,IADMyzH,EAASvvH,KAAK2sH,qBAAqB7wH,IAC9B8D,KAAOA,EAAI,CAClB2vH,EAAOhoG,UAAY+nG,EAAiB1vH,GACpC,M,kBAKN,YAAA8vH,gBAAN,SAAsBliH,G,gGAClB,OAAc,MAAVA,EACA,IAGU,GAAMxN,KAAKw3C,eAAev5C,IAA4BqiG,I,OAKpE,OALIvc,EAAU,YAEVA,EAAU,IAEdA,EAAQv2E,GAAU,KAClB,GAAMxN,KAAKw3C,eAAe0iB,KAAKomC,EAAmBvc,I,cAAlD,S,YAGE,YAAAonB,eAAN,SAAqBz4F,G,6GAEA,MAAbA,EAAO9S,GAAP,MAC4B,MAAxB8S,EAAOuU,cAAP,OACMzG,EAAU,IAAI,EAAA4qC,oBAAoB14C,GAC7B,GAAM1S,KAAKihB,WAAWy+F,iBAAiBl/F,K,cAAlDjf,EAAW,S,aAGA,OADLif,EAAU,IAAI,EAAAklB,cAAchzB,GACvB,GAAM1S,KAAKihB,WAAWw+F,WAAWj/F,I,OAA5Cjf,EAAW,S,wBAEfmR,EAAO9S,GAAK2B,EAAS3B,G,aAGV,OADL4gB,EAAU,IAAI,EAAAklB,cAAchzB,GACvB,GAAM1S,KAAKihB,WAAW0+F,UAAUjtG,EAAO9S,GAAI4gB,I,OAAtDjf,EAAW,S,iBAGA,SAAMvB,KAAKs9B,YAAYqhB,a,OAEtC,OAFM/uB,EAAS,SACTp0B,EAAO,IAAI,EAAA60B,WAAW9uB,EAAUquB,EAAQld,EAAOuU,eACrD,GAAMjnB,KAAK2vH,OAAOn0H,I,cAAlB,S,YAGE,YAAA45G,gBAAN,SAAsB1iG,EAAoBzC,EAAwBgX,G,iHAS9D,OARM2oG,EAAqC,GACjB,MAAtBl9G,EAAOqU,aACPrU,EAAOqU,YAAYnZ,SAAQ,SAAAouB,GACD,MAAlBA,EAAWr9B,KACXixH,EAAmBtzH,KAAK,EAAKuzH,0BAA0B7zF,EAAYtpB,EAAO9S,GAAIqQ,OAI1F,GAAMkL,QAAQK,IAAIo0G,I,OAIA,OAJlB,SAEAl9G,EAAOzC,eAAiBA,EACxByC,EAAOuU,cAAgBA,EACL,GAAMjnB,KAAKuhC,QAAQ7uB,I,OAEpB,OAFXo9G,EAAY,SACZtvG,EAAU,IAAI,EAAAuvG,mBAAmBD,GACtB,GAAM9vH,KAAKihB,WAAW6+F,eAAeptG,EAAO9S,GAAI4gB,I,OAClD,OADTjf,EAAW,SACF,GAAMvB,KAAKs9B,YAAYqhB,a,OAEtC,OAFM/uB,EAAS,SACTp0B,EAAO,IAAI,EAAA60B,WAAW9uB,EAAUquB,EAAQ3I,GAC9C,GAAMjnB,KAAK2vH,OAAOn0H,I,cAAlB,S,YAGE,YAAAohF,oBAAN,SAA0BxnE,EAAuBnF,EAAwBgX,G,4GAGrE,IAFMjM,EAA2B,GAC3Bg1G,EAAuB,GACxB,EAAL,EAAqB,EAAA56G,EAAA,gBAAV1C,EAAM,MACNzC,eAAiBA,EACxByC,EAAOuU,cAAgBA,EACvBjM,EAAS1e,KAAK0D,KAAKuhC,QAAQ7uB,GAAQrR,MAAK,SAAA3D,GACpCsyH,EAAW1zH,KAAKoB,OAGxB,SAAMyd,QAAQK,IAAIR,I,OAElB,OAFA,SACMwF,EAAU,IAAI,EAAAyvG,uBAAuBD,EAAY/oG,GACvD,GAAMjnB,KAAKihB,WAAW8+F,gBAAgBv/F,I,OACvB,OADf,SACe,GAAMxgB,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAK2vH,OAAOK,EAAWjoH,KAAI,SAAArK,GAAK,OAAAA,EAAE0+B,aAAaxM,Q,cAArD,S,YAGJ,YAAAgqD,yBAAA,SAAyBlnE,EAAgBw9G,EAAsBj1C,GAA/D,WACI,YAD2D,IAAAA,OAAA,GACpD,IAAI9/D,SAAQ,SAACC,EAAS6J,GACzB,IAAMgpC,EAAS,IAAIC,WACnBD,EAAOkiE,kBAAkBD,GACzBjiE,EAAOvrC,OAAS,SAAO0rC,GAAQ,qC,0DAET,O,sBAAA,GAAMpuD,KAAKk7E,4BAA4BxoE,EACjDw9G,EAAgBtyH,KAAMwwD,EAAI3/C,OAAO5R,OAAQo+E,I,cADvCm1C,EAAQ,SAEdh1G,EAAQg1G,G,+BAERnrG,EAAO,G,+BAGfgpC,EAAOM,QAAU,SAAAH,GACbnpC,EAAO,4BAKb,YAAAi2D,4BAAN,SAAkCxoE,EAAgB29G,EAC9C70H,EAAmBy/E,G,YAAA,IAAAA,OAAA,G,2GACP,SAAMj7E,KAAKge,cAAcE,UAAUxL,EAAOzC,iB,OAClC,OADdtR,EAAM,SACQ,GAAMqB,KAAKge,cAAcujB,QAAQ8uF,EAAU1xH,I,OAE5C,OAFb2xH,EAAc,SAED,GAAMtwH,KAAKge,cAAc+3B,WAAWp3C,I,OACvC,OADV4xH,EAAa,SACH,GAAMvwH,KAAKge,cAAcwyG,eAAeh1H,EAAM+0H,EAAW,K,OAAnEE,EAAU,SAEVjwG,EAA6B,CAC/B7hB,IAAK4xH,EAAW,GAAG31G,gBACnB2qB,SAAU+qF,EAAY11G,gBACtB81G,SAAUD,EAAQnmH,OAAOG,WACzBkmH,aAAc11C,G,iBAKa,O,uBAAA,GAAMj7E,KAAKihB,WAAWu/F,qBAAqB9tG,EAAO9S,GAAI4gB,I,OAEjF,OAFMowG,EAAqB,SAC3BrvH,EAAW05E,EAAQ21C,EAAmB5J,mBAAqB4J,EAAmBzkC,eAC9E,GAAMnsF,KAAK62G,kBAAkBga,uBAAuB51C,EAAO21C,EAAoBN,EAAaG,I,cAA5F,S,2CAEiB,EAAAhvH,eAAqD,MAAnC,EAAoBmvB,YAA0D,MAAnC,EAAoBA,WACnF,GAAM5wB,KAAK8wH,iCAAiC71C,EAAOvoE,EAAO9S,GAAI0wH,EAAaG,EAASF,EAAW,KAD1G,O,cACAhvH,EAAW,S,eACR,MAAI,aAAa,EAAAE,cACd,IAAI0B,MAAO,EAAoBtB,oBAE/B,E,6BAIC,SAAM7B,KAAKs9B,YAAYqhB,a,eAAhC/uB,EAAS,SACTwgG,EAAQ,IAAI,EAAA//F,WAAW9uB,EAAUquB,EAAQld,EAAOuU,eACjDg0D,EAAD,OACA,GAAMj7E,KAAK2vH,OAAOS,I,QAAlB,S,mBAEJ,MAAO,CAAP,EAAO,IAAI,EAAAxzF,OAAOwzF,YAOhB,YAAAU,iCAAN,SAAuC71C,EAAgB/jD,EAAkBo5F,EACrEG,EAAyB9xH,G,sGACnB2lC,EAAK,IAAIC,SACf,IACUs2E,EAAO,IAAII,KAAK,CAACwV,EAAQnmH,QAAS,CAAEpI,KAAM,6BAChDoiC,EAAGE,OAAO,MAAO7lC,EAAIic,iBACrB0pB,EAAGE,OAAO,OAAQq2E,EAAMyV,EAAY11G,iBACtC,MAAOpZ,GACL,IAAI,EAAA+G,MAAME,QAAW,EAAAF,MAAMK,UAOvB,MAAMpH,EANN8iC,EAAGE,OAAO,MAAO7lC,EAAIic,iBACrB0pB,EAAGE,OAAO,OAAQn7B,EAAO5B,KAAKgpH,EAAQnmH,QAAgB,CAClDymH,SAAUT,EAAY11G,gBACtBo2G,YAAa,6B,8CASjB/1C,EACW,GAAMj7E,KAAKihB,WAAW0/F,gCAAgCzpF,EAAUoN,IAD3E,M,cACA/iC,EAAW,S,aAEA,SAAMvB,KAAKihB,WAAWy/F,2BAA2BxpF,EAAUoN,I,OAAtE/iC,EAAW,S,oCAGf,M,WAAM,IAAI4B,MAAO,EAAoBtB,oB,OAGzC,MAAO,CAAP,EAAON,WAGL,YAAAyrG,0BAAN,SAAgCt6F,G,oGAE5B,OADM8N,EAAU,IAAI,EAAAk7D,yBAAyBhpE,EAAOuU,eACpD,GAAMjnB,KAAKihB,WAAW++F,qBAAqBttG,EAAO9S,GAAI4gB,I,OACvC,OADf,SACe,GAAMxgB,KAAKs9B,YAAYqhB,a,OAEtC,OAFM/uB,EAAS,SACTp0B,EAAOkX,EAAO0pB,aAAaxM,GACjC,GAAM5vB,KAAK2vH,OAAOn0H,I,cAAlB,S,YAGE,YAAAm0H,OAAN,SAAaj9G,G,oGACM,SAAM1S,KAAKs9B,YAAYqhB,a,OACxB,OADR/uB,EAAS,SACD,GAAM5vB,KAAKw3C,eAAev5C,IACpCqiG,EAAqB1wE,I,OAczB,OAbe,OAFXxa,EAAU,YAGVA,EAAU,IAGV1C,aAAkB,EAAA2d,WAElBjb,GADM1X,EAAIgV,GACA9S,IAAMlC,EAEfgV,EAAwB9E,SAAQ,SAAAlQ,GAC7B0X,EAAQ1X,EAAEkC,IAAMlC,KAIxB,GAAMsC,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQxa,I,cAA5D,SACApV,KAAK2sH,qBAAuB,K,YAG1B,YAAA3hH,QAAN,SAAcoK,G,gGACK,SAAMpV,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQxa,I,cAA5D,SACApV,KAAK2sH,qBAAuB,K,YAG1B,YAAA1kC,MAAN,SAAYr4D,G,0FACR,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAAqB1wE,I,cAAtD,SACA5vB,KAAK0sH,a,YAGH,YAAAtwC,mBAAN,SAAyB96B,EAAe76B,G,kGACpC,SAAMzmB,KAAKihB,WAAW4+F,eAAe,IAAI,EAAAoR,sBAAsB3vE,EAAK76B,K,OAErD,OAFf,SAEe,GAAMzmB,KAAKs9B,YAAYqhB,a,OACxB,OADR/uB,EAAS,SACD,GAAM5vB,KAAKw3C,eAAev5C,IACpCqiG,EAAqB1wE,I,OAWzB,OAVe,OAFXxa,EAAU,YAGVA,EAAU,IAGdksC,EAAI1zC,SAAQ,SAAAhO,GACJwV,EAAQjZ,eAAeyD,KACvBwV,EAAQxV,GAAI6mB,SAAWA,MAI/B,GAAMzmB,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQxa,I,cAA5D,SACApV,KAAK2sH,qBAAuB,K,YAG1B,YAAAr8E,OAAN,SAAa1wC,G,kGACM,SAAMI,KAAKs9B,YAAYqhB,a,OACtB,OADV/uB,EAAS,SACC,GAAM5vB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OACzB,GAAe,OAFTxa,EAAU,UAGZ,UAGJ,GAAkB,iBAAPxV,EAAiB,CACxB,GAAmB,MAAfwV,EAAQxV,GACR,iBAEGwV,EAAQxV,QAEdA,EAAgBgO,SAAQ,SAAA9R,UACdsZ,EAAQtZ,MAIvB,SAAMkE,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQxa,I,cAA5D,SACApV,KAAK2sH,qBAAuB,K,YAG1B,YAAAp7E,iBAAN,SAAuB3xC,G,0FACnB,SAAMI,KAAKihB,WAAWyvB,aAAa9wC,I,OACnC,OADA,SACA,GAAMI,KAAKswC,OAAO1wC,I,cAAlB,S,YAGE,YAAAk8E,qBAAN,SAA2Bx6B,G,0FACvB,SAAMthD,KAAKihB,WAAW2+F,kBAAkB,IAAI,EAAA3jC,wBAAwB36B,K,OACpE,OADA,SACA,GAAMthD,KAAKswC,OAAOgR,I,cAAlB,S,YAGE,YAAA4vE,iBAAN,SAAuBtxH,EAAYm6E,G,oGAChB,SAAM/5E,KAAKs9B,YAAYqhB,a,OACtB,OADV/uB,EAAS,SACC,GAAM5vB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OAEzB,GAAe,OAHTxa,EAAU,YAGQA,EAAQjZ,eAAeyD,IAAkC,MAA3BwV,EAAQxV,GAAImnB,YAC9D,UAGJ,IAASjrB,EAAI,EAAGA,EAAIsZ,EAAQxV,GAAImnB,YAAY/qB,OAAQF,IAC5CsZ,EAAQxV,GAAImnB,YAAYjrB,GAAG8D,KAAOm6E,GAClC3kE,EAAQxV,GAAImnB,YAAY7pB,OAAOpB,EAAG,GAI1C,SAAMkE,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQxa,I,cAA5D,SACApV,KAAK2sH,qBAAuB,K,YAG1B,YAAAtxC,2BAAN,SAAiCz7E,EAAYm6E,G,gGAErC,O,sBAAA,GAAM/5E,KAAKihB,WAAW64D,uBAAuBl6E,EAAIm6E,I,cAAjD,S,aAEA,O,WAAO,CAAP,EAAO5+D,QAAQ8J,OAAQ,EAAoBpjB,qB,OAE/C,SAAM7B,KAAKkxH,iBAAiBtxH,EAAIm6E,I,cAAhC,S,YAGJ,YAAAyyC,sBAAA,SAAsBv+G,EAAeC,GACjC,IAAMijH,EAAYljH,EAAEsZ,WAAatZ,EAAEsZ,UAAU8d,aAAep3B,EAAEsZ,UAAU8d,aAAyB,KAC3F+rF,EAAYljH,EAAEqZ,WAAarZ,EAAEqZ,UAAU8d,aAAen3B,EAAEqZ,UAAU8d,aAAyB,KAE3FgsF,EAA2B,MAAbF,GAAkC,MAAbC,EACzC,OAAIC,GAAeF,EAAYC,EACpB,EAEM,MAAbD,GAAkC,MAAbC,GAIrBC,GAAeF,EAAYC,GAHnB,EAMK,MAAbA,GAAkC,MAAbD,EACd,EAGJ,GAGX,YAAAG,8BAAA,SAA8BrjH,EAAeC,GACzC,IAAMrR,EAASmD,KAAKwsH,sBAAsBv+G,EAAGC,GAC7C,OAAe,IAAXrR,EACOA,EAGJmD,KAAKqsF,0BAALrsF,CAAgCiO,EAAGC,IAG9C,YAAAm+E,yBAAA,sBACI,OAAO,SAACp+E,EAAGC,GACP,IAAIqjH,EAAQtjH,EAAErQ,KACV4zH,EAAQtjH,EAAEtQ,KAEd,GAAa,MAAT2zH,GAA0B,MAATC,EACjB,OAAQ,EAEZ,GAAa,MAATD,GAA0B,MAATC,EACjB,OAAO,EAEX,GAAa,MAATD,GAA0B,MAATC,EACjB,OAAO,EAGX,IAAM30H,EAAS,EAAK6C,YAAYyO,SAAW,EAAKzO,YAAYyO,SAASC,QAAQmjH,EAAOC,GAChFD,EAAMljH,cAAcmjH,GAExB,OAAe,IAAX30H,GAAgBoR,EAAE/L,OAAS,EAAAoS,WAAWC,OAASrG,EAAEhM,OAAS,EAAAoS,WAAWC,MAC9D1X,GAGa,MAApBoR,EAAEmG,MAAMkB,WACRi8G,GAAStjH,EAAEmG,MAAMkB,UAGG,MAApBpH,EAAEkG,MAAMkB,WACRk8G,GAAStjH,EAAEkG,MAAMkB,UAGd,EAAK5V,YAAYyO,SAAW,EAAKzO,YAAYyO,SAASC,QAAQmjH,EAAOC,GACxED,EAAMljH,cAAcmjH,MAI1B,YAAAC,WAAN,SAAiB7xH,G,oGACE,SAAMI,KAAKs9B,YAAYqhB,a,OACtB,OADV/uB,EAAS,SACC,GAAM5vB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OACzB,OAAe,OAFTxa,EAAU,UAGZ,KAGEs8G,EAAiB,SAACx6F,GACK,MAArB9hB,EAAQ8hB,KAGZ9hB,EAAQ8hB,GAAU/P,aAAc,IAAIuK,MAAOY,gBAG7B,iBAAP1yB,EACP8xH,EAAe9xH,GAEdA,EAAgBgO,QAAQ8jH,GAG7B,GAAM1xH,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQxa,K,cAA5D,SACApV,KAAK2sH,qBAAuB,K,YAG1B,YAAAn7E,qBAAN,SAA2B5xC,G,0FACvB,SAAMI,KAAKihB,WAAWk/F,gBAAgBvgH,I,OACtC,OADA,SACA,GAAMI,KAAKyxH,WAAW7xH,I,cAAtB,S,YAGE,YAAAm8E,yBAAN,SAA+Bz6B,G,0FAC3B,SAAMthD,KAAKihB,WAAWm/F,qBAAqB,IAAI,EAAAnkC,wBAAwB36B,K,OACvE,OADA,SACA,GAAMthD,KAAKyxH,WAAWnwE,I,cAAtB,S,YAGE,YAAA3Q,QAAN,SAAcj+B,G,oGACK,SAAM1S,KAAKs9B,YAAYqhB,a,OACtB,OADV/uB,EAAS,SACC,GAAM5vB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OACzB,OAAe,OAFTxa,EAAU,UAGZ,KAGEu8G,EAAmB,SAACj0H,GACD,MAAjB0X,EAAQ1X,EAAEkC,MAGdwV,EAAQ1X,EAAEkC,IAAIunB,YAAc,KAC5B/R,EAAQ1X,EAAEkC,IAAIsnB,aAAexpB,EAAEwpB,eAIH,UAA5BxU,EAAOhR,YAAY9D,KAClB8U,EAAmD9E,QAAQ+jH,GAE5DA,EAAiBj/G,GAGrB,GAAM1S,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQxa,K,cAA5D,SACApV,KAAK2sH,qBAAuB,K,YAG1B,YAAA/7E,kBAAN,SAAwBhxC,G,gGACH,SAAMI,KAAKihB,WAAWo/F,iBAAiBzgH,I,OACxD,OADM2B,EAAW,SACjB,GAAMvB,KAAK2wC,QAAQ,CAAE/wC,GAAIA,EAAIsnB,aAAc3lB,EAAS2lB,gB,cAApD,S,YAGE,YAAAm1D,sBAAN,SAA4B/6B,G,wGACP,SAAMthD,KAAKihB,WAAWs/F,sBAAsB,IAAI,EAAAqR,yBAAyBtwE,K,OAE1F,IAFM//C,EAAW,SACXswH,EAAoD,GACrD,EAAL,EAAqB,EAAAtwH,EAAS/F,KAAT,eAAVkX,EAAM,KACbm/G,EAASv1H,KAAK,CAAEsD,GAAI8S,EAAO9S,GAAIsnB,aAAcxU,EAAOwU,eAExD,SAAMlnB,KAAK2wC,QAAQkhF,I,cAAnB,S,YAKU,YAAAhC,0BAAd,SAAwCiC,EAAgC56F,EACpEjnB,G,kHAC2B,SAAMjQ,KAAKihB,WAAWukG,YAC7C,IAAI32D,QAAQijE,EAAetlH,IAAK,CAAEmuE,MAAO,e,OAC7C,GAAkC,OAF5Bo3C,EAAqB,UAEJpsG,OACnB,MAAMxiB,MAAM,kCAAoC4uH,EAAmBpsG,OAAOpb,YAGlE,SAAMwnH,EAAmBn3C,e,OACtB,OADTC,EAAM,SACG,GAAM76E,KAAKge,cAAc88D,iBAAiBD,EAAK,O,OAClD,OADNE,EAAS,SACH,GAAM/6E,KAAKge,cAAcE,UAAUjO,I,OAC3B,OADdtR,EAAM,SACQ,GAAMqB,KAAKge,cAAcujB,QAAQuwF,EAAevsF,SAAU5mC,I,OAE3D,OAFb2xH,EAAc,SAED,GAAMtwH,KAAKge,cAAc+3B,WAAWp3C,I,OACvC,OADV4xH,EAAa,SACH,GAAMvwH,KAAKge,cAAcwyG,eAAez1C,EAAQw1C,EAAW,K,OAArEE,EAAU,SAEVnsF,EAAK,IAAIC,SACf,IACUs2E,EAAO,IAAII,KAAK,CAACwV,EAAQnmH,QAAS,CAAEpI,KAAM,6BAChDoiC,EAAGE,OAAO,MAAO+rF,EAAW,GAAG31G,iBAC/B0pB,EAAGE,OAAO,OAAQq2E,EAAMyV,EAAY11G,iBACtC,MAAOpZ,GACL,IAAI,EAAA+G,MAAME,QAAW,EAAAF,MAAMK,UAOvB,MAAMpH,EANN8iC,EAAGE,OAAO,MAAO+rF,EAAW,GAAG31G,iBAC/B0pB,EAAGE,OAAO,OAAQn7B,EAAO5B,KAAKgpH,EAAQnmH,QAAgB,CAClDymH,SAAUT,EAAY11G,gBACtBo2G,YAAa,6B,iBAQrB,O,wBAAA,GAAMhxH,KAAKihB,WAAW2/F,0BAA0B1pF,EAAU46F,EAAelyH,GAAI0kC,EAAIr0B,I,cAAjF,S,eAEA,M,WAAM,IAAI9M,MAAO,EAAoBtB,oB,0BAI/B,YAAAorH,mBAAd,SAAmEpxF,EAAUjtB,EACzE7G,EAAUpJ,G,oGAIV,IAAWqP,KAHLgN,EAAW,GACXC,EAAOjb,KAEM+H,EACVA,EAAI5L,eAAe6R,IAKxB,SAAWkN,EAAS82G,GAChB,IAAMhzH,EAAImc,QAAQC,UAAU/Z,MAAK,WAC7B,IAAM4wH,EAAap2F,EAAe9zB,EAAImT,IAAYA,GAClD,OAAI+2G,GAA2B,KAAdA,EACNh3G,EAAK+C,cAAcujB,QAAQ0wF,EAAWtzH,GAE1C,QACR0C,MAAK,SAACka,GACJy2G,EAAe92G,GAAWK,KAE/BP,EAAS1e,KAAK0C,GAVlB,CAWGgP,EAAMY,GAGb,SAAMuM,QAAQK,IAAIR,I,cAAlB,S,YAGU,YAAAkyG,kBAAd,SAAgCx6G,EAAgBmpB,EAAmBl9B,G,yGACvD+T,EAAOxQ,M,KACN,EAAAoS,WAAWC,MAAX,Y,KAsBA,EAAAD,WAAWmB,WAAX,Y,KAIA,EAAAnB,WAAW2K,KAAX,Y,KAWA,EAAA3K,WAAW4K,SAAX,a,oBAjCD,OAHAxM,EAAO0B,MAAQ,IAAI,EAAAG,MACnB7B,EAAO0B,MAAMuT,qBAAuBkU,EAAMznB,MAAMuT,qBAChDjV,EAAO0B,MAAMwa,mBAAqBiN,EAAMznB,MAAMwa,mBAC9C,GAAM5uB,KAAKitH,mBAAmBpxF,EAAMznB,MAAO1B,EAAO0B,MAAO,CACrDkB,SAAU,KACVC,SAAU,KACVoZ,KAAM,MACPhwB,I,UAJH,SAMwB,MAApBk9B,EAAMznB,MAAMoB,KAAZ,YACA9C,EAAO0B,MAAMoB,KAAO,GACX1Z,EAAI,E,wBAAGA,EAAI+/B,EAAMznB,MAAMoB,KAAKxZ,SAC3B8V,EAAW,IAAI,EAAA+5C,UACZn8C,MAAQmsB,EAAMznB,MAAMoB,KAAK1Z,GAAG4T,MACrC,GAAM1P,KAAKitH,mBAAmBpxF,EAAMznB,MAAMoB,KAAK1Z,GAAIgW,EAAU,CACzDD,IAAK,MACNlT,KALoC,M,OAGvC,SAGA+T,EAAO0B,MAAMoB,KAAKlZ,KAAKwV,G,wBANkBhW,I,aASjD,U,OAIA,OAFA4W,EAAOgD,WAAa,IAAI,EAAAD,WACxB/C,EAAOgD,WAAWxT,KAAO25B,EAAMnmB,WAAWxT,KAC1C,I,OAGA,OADAwQ,EAAOI,KAAO,IAAI,EAAAmM,KAClB,GAAMjf,KAAKitH,mBAAmBpxF,EAAM/oB,KAAMJ,EAAOI,KAAM,CACnD2I,eAAgB,KAChBO,MAAO,KACPD,OAAQ,KACRhJ,SAAU,KACVC,QAAS,KACT0I,KAAM,MACP/c,I,OACH,OARA,SAQA,I,QAGA,OADA+T,EAAOmU,SAAW,IAAI,EAAA3H,SACtB,GAAMlf,KAAKitH,mBAAmBpxF,EAAMhV,SAAUnU,EAAOmU,SAAU,CAC3DvmB,MAAO,KACPyoB,UAAW,KACXd,WAAY,KACZe,SAAU,KACVd,SAAU,KACVC,SAAU,KACVC,SAAU,KACVC,KAAM,KACNC,MAAO,KACPC,WAAY,KACZxG,QAAS,KACTyG,QAAS,KACT3L,MAAO,KACP4L,MAAO,KACPC,IAAK,KACLpT,SAAU,KACVqT,eAAgB,KAChBC,cAAe,MAChBjqB,I,QACH,OApBA,SAoBA,I,QAEA,MAAM,IAAIwE,MAAM,gCAId,YAAA6rH,gBAAd,SAA8BxiH,EAAa0lH,EAAmBzC,EAAuB7gG,G,2GAC3EqhC,EAAWrhC,EAAqB,sBAAwBpiB,EAAMA,EAE/DxM,KAAKssH,mBAAmB6F,SAASliE,GAAlC,MACc,GAAMjwD,KAAKquH,sBAAsB7hH,I,OAC/C,OADI4I,EAAU,UAKVwZ,EACkC,GAAM5uB,KAAKw3C,eAAev5C,IAAI,EAAAuZ,iBAAiBS,+BADjF,MAHO,CAAP,EAAO,M,OAOP,GAHM,EAA4B,SAGX,KAFvB7C,EAAUA,EAAQtG,QAAO,SAAA4D,GAAU,OAAAA,EAAO0B,MAAMwa,oBACR,MAAnClc,EAAO0B,MAAMwa,qBAA4D,IAA9B,MACpC5yB,OACR,MAAO,CAAP,EAAO,M,iBAIfgE,KAAKssH,mBAAmB8F,WAAWniE,EAAU76C,G,iBAGjD,OAAIq6G,EACO,CAAP,EAAOzvH,KAAKssH,mBAAmB+F,gBAAgBpiE,IACxCiiE,EACA,CAAP,EAAOlyH,KAAKssH,mBAAmBgG,YAAYriE,IAEpC,CAAP,EAAOjwD,KAAKssH,mBAAmBiG,QAAQtiE,YA7zB/C,GADC,EAAAuiE,eAAc,WAAM,2B,wHAi0BzB,EAviCA,GAAa,EAAAvwH,kB,uICnEb,MAII,SAAYq/C,EAAe76B,GACvBzmB,KAAKshD,IAAa,MAAPA,EAAc,GAAKA,EAC9BthD,KAAKymB,SAAWA,GANX,EAAAwqG,yB,gHCAb,MAGI,SAAY3vE,GACRthD,KAAKshD,IAAa,MAAPA,EAAc,GAAKA,GAJzB,EAAAswE,4B,8GCAb,aAIA,EAII,SAAYx8G,EAAmB6R,GAA/B,WACmB,MAAX7R,IACApV,KAAKoV,QAAU,GACfA,EAAQxH,SAAQ,SAAAlQ,GACZ,EAAK0X,QAAQ9Y,KAAK,IAAI,EAAA02D,oBAAoBt1D,QAGlDsC,KAAKinB,cAAgBA,GAXhB,EAAAgpG,0B,0GCJb,aAIA,EAII,SAAYv9G,GACR1S,KAAK0S,OAAS,IAAI,EAAAgzB,cAAchzB,GAChC1S,KAAKinB,cAAgBvU,EAAOuU,eANvB,EAAA8oG,sB,0GCFb,IAEA,aAII,WAA6B0C,GAAA,KAAAA,aAHZ,KAAAC,mBAA2C,IAAIzuH,IAC/C,KAAA0uH,SAA6B,IAAI1uH,IA8CtD,OA1CI,YAAAkuH,SAAA,SAAS3lH,GACL,OAAOxM,KAAK0yH,mBAAmB9sH,IAAI4G,IAGvC,YAAA4lH,WAAA,SAAW5lH,EAAa4I,GACpBA,EAAQkjC,KAAKt4C,KAAKyyH,YAClBzyH,KAAK0yH,mBAAmBhtH,IAAI8G,EAAK,IAAIomH,EAAQx9G,IAC7CpV,KAAK6yH,WAAWrmH,IAGpB,YAAA8lH,YAAA,SAAY9lH,GAER,OADAxM,KAAK6yH,WAAWrmH,GACTxM,KAAKmyH,SAAS3lH,GAAOxM,KAAK0yH,mBAAmBz0H,IAAIuO,GAAK8lH,cAAgB,MAGjF,YAAAD,gBAAA,SAAgB7lH,GACZ,OAAOxM,KAAKmyH,SAAS3lH,GAAOxM,KAAK0yH,mBAAmBz0H,IAAIuO,GAAK6lH,kBAAoB,MAGrF,YAAAE,QAAA,SAAQ/lH,GAEJ,OADAxM,KAAK6yH,WAAWrmH,GACTxM,KAAKmyH,SAAS3lH,GAAOxM,KAAK0yH,mBAAmBz0H,IAAIuO,GAAK+lH,UAAY,MAG7E,YAAAnD,oBAAA,SAAoB5iH,GACZxM,KAAKmyH,SAAS3lH,IACdxM,KAAK0yH,mBAAmBz0H,IAAIuO,GAAK4iH,uBAIzC,YAAAnnC,MAAA,WACIjoF,KAAK0yH,mBAAmBzqC,QACxBjoF,KAAK2yH,SAAS1qC,SAGV,YAAA4qC,WAAR,SAAmBrmH,GAAnB,WACIiqC,aAAaz2C,KAAK2yH,SAAS10H,IAAIuO,IAC/BxM,KAAK2yH,SAASjtH,IAAI8G,EAAKuX,YAAW,WAC9B,EAAK2uG,mBAAmBpiF,OAAO9jC,GAC/B,EAAKmmH,SAASriF,OAAO9jC,KA/ChB,OAkDjB,EAhDA,GAAa,EAAA+/G,qBAkDb,iBAGI,WAA6Bn3G,GAAA,KAAAA,UAF7B,KAAA09G,eAAiB,EA0BrB,OAtBI,YAAAR,YAAA,WAEI,OADAtyH,KAAK8yH,cAAgB7mH,KAAK0pE,IAAI31E,KAAK8yH,cAAe,GAC3C9yH,KAAKoV,QAAQpV,KAAK8yH,gBAG7B,YAAAT,gBAAA,WAGI,OAFoBryH,KAAKoV,QAAQtG,QAAO,SAAA4D,GAAM,aAAoB,QAApB,EAAIA,EAAO6U,iBAAS,eAAEkoG,gBAClCn3E,MAAK,SAAC/sC,EAAGwnH,GAAM,OAAAA,EAAExrG,UAAUkoG,aAAauD,UAAYznH,EAAEgc,UAAUkoG,aAAauD,aAC1F,IAGzB,YAAAC,aAAA,WACI,OAAQjzH,KAAK8yH,cAAgB,GAAK9yH,KAAKoV,QAAQpZ,QAGnD,YAAAu2H,QAAA,WACI,OAAOvyH,KAAKoV,QAAQpV,KAAKizH,iBAG7B,YAAA7D,oBAAA,WACIpvH,KAAK8yH,cAAgB9yH,KAAKizH,gBAElC,EA3BA,I,w+CCtDA,aAEA,SAGA,SAQA,SACA,QAEM3yB,EACiB,eAIvB,aAGI,WAAoBtiF,EAAsCsf,EAC9Cka,EAAwC93C,GADhC,KAAAse,gBAAsC,KAAAsf,cAC9C,KAAAka,iBAAwC,KAAA93C,cAmJxD,OAhJI,YAAAgtH,WAAA,WACI1sH,KAAKkzH,yBAA2B,MAG9B,YAAA3xF,QAAN,SAAc1F,G,oGACV,GAA4B,MAAxBA,EAAM5rB,eACN,MAAM,IAAI9M,MAAM,sCAER,SAAMnD,KAAKge,cAAcE,UAAU2d,EAAM5rB,iB,OACrD,GAAW,OADLtR,EAAM,UAER,MAAM,IAAIwE,MAAM,8CAMF,OAJZoQ,EAAa,IAAI,EAAA8b,YACZzvB,GAAKi8B,EAAMj8B,GACtB2T,EAAWtD,eAAiB4rB,EAAM5rB,eAClCsD,EAAW4b,SAAW0M,EAAM1M,SAC5B,EAAA5b,EAAkB,GAAMvT,KAAKge,cAAcujB,QAAQ1F,EAAMj+B,KAAMe,I,OAC/D,OADA,EAAWf,KAAO,SACX,CAAP,EAAO2V,WAGL,YAAAy9C,YAAN,SAAkB59C,G,kGACd,OAAmB,MAAfA,EACO,CAAC,EAAD,KAEL+/G,EAAmC,GACnCn4G,EAA2B,GACjC5H,EAAYxF,SAAQ,SAAA2F,GAChByH,EAAS1e,KAAKiX,EAAW+H,UAAUja,MAAK,SAAA3D,GAAK,OAAAy1H,EAAe72H,KAAKoB,UAErE,GAAMyd,QAAQK,IAAIR,K,OAClB,OADA,SACO,CAAP,EAAOm4G,EAAe76E,KAAK,EAAA/vC,MAAMwF,gBAAgB/N,KAAKN,YAAa,kBAGjE,YAAAzB,IAAN,SAAU2B,G,kGACS,SAAMI,KAAKs9B,YAAYqhB,a,OAClB,OADd/uB,EAAS,SACK,GAAM5vB,KAAKw3C,eAAev5C,IAC1CqiG,EAAyB1wE,I,OAC7B,OAAmB,OAFbxc,EAAc,WAEQA,EAAYjX,eAAeyD,GAIhD,CAAP,EAAO,IAAI,EAAAyvB,WAAWjc,EAAYxT,KAHvB,CAAP,EAAO,cAMT,YAAA83B,OAAN,W,sGACmB,SAAM13B,KAAKs9B,YAAYqhB,a,OAClB,OADd/uB,EAAS,SACK,GAAM5vB,KAAKw3C,eAAev5C,IAC1CqiG,EAAyB1wE,I,OAE7B,IAAWhwB,KAHLwT,EAAc,SAEd7R,EAAyB,GACd6R,EACTA,EAAYjX,eAAeyD,IAC3B2B,EAASjF,KAAK,IAAI,EAAA+yB,WAAWjc,EAAYxT,KAGjD,MAAO,CAAP,EAAO2B,WAGL,YAAAmpD,gBAAN,W,kGACI,OAAqC,MAAjC1qD,KAAKkzH,yBACE,CAAP,EAAOlzH,KAAKkzH,0BAGD,GAAMlzH,KAAKge,cAAckwG,U,OACxC,IADe,SAEX,MAAM,IAAI/qH,MAAM,WAGA,SAAMnD,KAAK03B,U,OACC,OAD1BtkB,EAAc,SACpB,EAAApT,KAAgC,GAAMA,KAAKgxD,YAAY59C,I,OACvD,OADA,EAAK8/G,yBAA2B,SACzB,CAAP,EAAOlzH,KAAKkzH,kCAGV,YAAAhiE,aAAN,SAAmB99C,G,YAAA,IAAAA,MAAA,M,gGACI,MAAfA,EAAA,MACc,GAAMpT,KAAK0qD,mB,OAAzBt3C,EAAc,S,iBAUlB,OARMggH,EAAoC,GAC1ChgH,EAAYxF,SAAQ,SAAAlQ,GAChB,IAAM21H,EAAiB,IAAI,EAAA7/G,eAC3B6/G,EAAezzH,GAAKlC,EAAEkC,GACtByzH,EAAepjH,eAAiBvS,EAAEuS,eAClC,IAAMnC,EAAkB,MAAVpQ,EAAEE,KAAeF,EAAEE,KAAKoN,QAAQ,aAAc,IAAI2C,MA1FnD,KA0F6E,GAC1F,EAAA2nF,aAAaP,eAAeq+B,EAAO,EAAGtlH,EAAOulH,EAAgB,KA3FhD,QA6FV,CAAP,EAAOD,WAGL,YAAAE,UAAN,SAAgB1zH,G,gGACQ,SAAMI,KAAKkxD,gB,OAC/B,OADM99C,EAAc,SACb,CAAP,EAAO,EAAAkiF,aAAaG,kBAAkBriF,EAAaxT,YAGjD,YAAA+vH,OAAN,SAAap8G,G,oGACM,SAAMvT,KAAKs9B,YAAYqhB,a,OACpB,OADZ/uB,EAAS,SACG,GAAM5vB,KAAKw3C,eAAev5C,IACxCqiG,EAAyB1wE,I,OAc7B,OAbmB,OAFfxc,EAAc,YAGdA,EAAc,IAGdG,aAAsB,EAAA+d,eAEtBle,GADM1V,EAAI6V,GACI3T,IAAMlC,EAEnB6V,EAAgC3F,SAAQ,SAAAlQ,GACrC0V,EAAY1V,EAAEkC,IAAMlC,KAI5B,GAAMsC,KAAKw3C,eAAe0iB,KAAKomC,EAAyB1wE,EAAQxc,I,cAAhE,SACApT,KAAKkzH,yBAA2B,K,YAG9B,YAAAloH,QAAN,SAAcoI,G,gGACK,SAAMpT,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAyB1wE,EAAQxc,I,cAAhE,SACApT,KAAKkzH,yBAA2B,K,YAG9B,YAAAjrC,MAAN,SAAYr4D,G,0FACR,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAAyB1wE,I,cAA1D,SACA5vB,KAAKkzH,yBAA2B,K,YAG9B,YAAA5iF,OAAN,SAAa1wC,G,kGACM,SAAMI,KAAKs9B,YAAYqhB,a,OAClB,OADd/uB,EAAS,SACK,GAAM5vB,KAAKw3C,eAAev5C,IAC1CqiG,EAAyB1wE,I,OAC7B,OAAmB,OAFbxc,EAAc,UAGhB,KAGc,iBAAPxT,GACGA,SACHwT,EAAYxT,IAElBA,EAAgBgO,SAAQ,SAAA9R,UACdsX,EAAYtX,MAI3B,GAAMkE,KAAKw3C,eAAe0iB,KAAKomC,EAAyB1wE,EAAQxc,K,cAAhE,SACApT,KAAKkzH,yBAA2B,K,YAExC,EAvJA,GAAa,EAAAv8G,qB,gGCrBb,MAKI,SAAYy+E,EAASx3F,EAAc2vB,GAFnC,KAAAgoE,SAA0B,GAGtBv1F,KAAKutB,OAASA,EACdvtB,KAAKo1F,KAAOA,EACZp1F,KAAKo1F,KAAKx3F,KAAOA,GARZ,EAAAy3F,Y,oGCAb,SAAYM,GACR,qBACA,mBACA,yBACA,qBAJJ,CAAY,EAAAA,eAAA,EAAAA,aAAY,M,yGCExB,iBACI,WAAoB33E,GAAA,KAAAA,gBAiBxB,OAbI,YAAAs5F,eAAA,SAAeloG,GACXpP,KAAKuzH,eAAenkH,IAGxB,YAAAmkH,eAAA,SAAerqH,GACNA,EAAO6U,4BACR7U,EAAO6U,0BAA4B/d,OAI3C,YAAAie,iBAAA,WACI,OAAOje,KAAKge,eAEpB,EAlBA,GAAa,EAAA+4F,oB,88DCFb,cAEA,SACA,SACA,SAEA,UACA,UACA,QACA,SAYA,QAEA,SACA,QACA,SAIa,EAAAzW,KAAO,CAChB3hG,IAAK,MACL60H,WAAY,aACZC,gBAAiB,kBACjBlyC,cAAe,gBACf3lD,OAAQ,SACR83F,QAAS,WAGb,iBAUI,WAAoBl8E,EAA0Ci/D,EAClDj8D,EAAwDm5E,EACtD1yH,GAFM,KAAAu2C,iBAA0C,KAAAi/D,uBAClD,KAAAj8D,wBAAwD,KAAAm5E,sBACtD,KAAA1yH,aAq0BlB,OAl0BU,YAAA29C,OAAN,SAAajgD,G,0FAGT,OAFAqB,KAAKrB,IAAMA,EAEX,GAAMqB,KAAK4zH,SAASj1H,I,cAApB,S,YAGJ,YAAAkgD,WAAA,SAAW60E,GAEP,OADA1zH,KAAK0zH,QAAUA,EACR1zH,KAAKw3C,eAAe0iB,KAAK,EAAAomC,KAAKozB,QAASA,IAG5C,YAAAz0E,UAAN,SAAgBrjB,G,0FACZ,OAAc,MAAVA,EACA,IAGJ,GAAM57B,KAAKw3C,eAAe0iB,KAAK,EAAAomC,KAAK1kE,OAAQA,I,cAA5C,SACA57B,KAAK47B,OAAS,K,YAGZ,YAAAyjB,iBAAN,SAAuBkiC,G,0FACnB,OAAqB,MAAjBA,EACA,IAGJ,GAAMvhF,KAAKw3C,eAAe0iB,KAAK,EAAAomC,KAAK/e,cAAeA,I,cAAnD,SACAvhF,KAAKk/C,WAAa,K,YAGhB,YAAA20E,WAAN,SAAiBx7E,EAAqCy7E,G,8GAC5CpyF,EAAe,GACrB2W,EAAKzqC,SAAQ,SAAA8qC,GACThX,EAAQgX,EAAI94C,IAAM84C,EAAI/5C,O,IAGA,EAAAm1H,E,wBAAA,YAAfC,EAAW,KAEE,GAAM/zH,KAAK8jC,eAAeiwF,EAAYr6F,cAFxB,M,OAGjB,OADXqK,EAAc,SACH,GAAM/jC,KAAKupE,eAAe,IAAI,EAAA9uD,UAAUs5G,EAAYp1H,KAAMolC,I,OAC1C,OAD3B2lC,EAAW,SACjB,EAAAhoC,EAAQ,EAAAqyF,EAAYn0H,GAAa,GAAMI,KAAKq5C,WAAWqwB,I,OAA7B,SAAO,SAAiC9uD,iB,OAAlE,KAA0B,S,wBAJJ,I,aAQ1B,OADA5a,KAAK0hC,QAAU,KACR,CAAP,EAAO1hC,KAAKw3C,eAAe0iB,KAAK,EAAAomC,KAAKkzB,WAAY9xF,YAGrD,YAAAsyF,gBAAA,SAAgBpnG,GACZ,IAAMqnG,EAAoB,GAM1B,OALArnG,EAAUhf,SAAQ,SAAA6uC,GACdw3E,EAAax3E,EAAS78C,IAAM68C,EAAS99C,OAGzCqB,KAAKi0H,aAAe,KACbj0H,KAAKw3C,eAAe0iB,KAAK,EAAAomC,KAAKmzB,gBAAiBQ,IAGpD,YAAApqC,OAAN,SAAaqqC,G,gGACT,OAAgB,MAAZl0H,KAAKrB,IACE,CAAP,EAAOqB,KAAKrB,MAGhBu1H,MAAc,QACO,GAAMl0H,KAAKm0H,kBAAkBD,K,OAMlD,OAJoB,OAFdE,EAAe,WAGjBp0H,KAAK4+C,OAAOw1E,GAGT,CAAP,EAAOA,WAGL,YAAAD,kBAAN,SAAwBD,G,kGACR,SAAMl0H,KAAKq0H,uBAAuBH,I,cACnC,OADLv1H,EAAM,UACR,OAEMy1H,EAAe,IAAI,EAAAl3F,mBAAmB,EAAA30B,MAAMY,eAAexK,GAAK2L,QAEjE,GAAMtK,KAAKs0H,YAAYF,K,OAA5B,OAAK,SAME,CAAP,EAAOA,IALHp0H,KAAKiB,WAAWsQ,QAAQ,uCACxBvR,KAAKy2G,qBAAqB5uG,OAAO,EAAAy4F,KAAK3hG,IAAK,CAAEu1H,UAAWA,IACjD,CAAP,EAAO,O,OAKf,MAAO,CAAP,EAAO,cAGL,YAAAx0B,WAAN,W,gGACI,OAAoB,MAAhB1/F,KAAK0zH,QACE,CAAP,EAAO1zH,KAAK0zH,SAGA,GAAM1zH,KAAKw3C,eAAev5C,IAAY,EAAAqiG,KAAKozB,U,OAK3D,OAJe,OADTA,EAAU,YAEZ1zH,KAAK0zH,QAAUA,GAGZ,CAAP,EAAkB,MAAXA,EAAkB,KAAO1zH,KAAK0zH,iBAGnC,YAAA3iC,wBAAN,SAA8Bn7C,EAAwBj3C,G,oGAC5B,SAAMqB,KAAK0/F,c,cAA3BC,EAAgB,SACA,MAAlB/pD,GAA2C,MAAjB+pD,EAA1B,MACqB,GAAM3/F,KAAK61C,aAAaD,EAAgBj3C,EAAK,EAAAo2C,YAAYgG,qB,OAC9E,OAAoB,OADdilD,EAAe,WACOL,IAAkBK,EACnC,CAAP,GAAO,GAIW,GAAMhgG,KAAK61C,aAAaD,EAAgBj3C,EAAK,EAAAo2C,YAAY8qD,sB,cAC1D,OADfC,EAAgB,WACOH,IAAkBG,EAA3C,MACA,GAAM9/F,KAAK6+C,WAAWmhD,I,OACtB,OADA,SACO,CAAP,GAAO,G,OAIf,MAAO,CAAP,GAAO,WAIL,YAAAlqD,UAAN,SAAgBn3C,G,YAAA,IAAAA,MAAA,M,+FACZ,OAAmB,MAAfqB,KAAK47B,OACE,CAAP,EAAO57B,KAAK47B,QAGD,GAAM57B,KAAKw3C,eAAev5C,IAAY,EAAAqiG,KAAK1kE,S,OAC1D,OAAc,OADRA,EAAS,UAEJ,CAAP,EAAO,MAGA,MAAPj9B,EAAA,MACM,GAAMqB,KAAK6pF,U,OAAjBlrF,EAAM,S,iBAEV,OAAW,MAAPA,EACO,CAAP,EAAO,OAIL41H,EAAe,IAAI,EAAA95G,UAAUmhB,IAClBxe,iBAAmB,EAAAG,eAAeE,cAA/C,MACY,GAAMzd,KAAKupE,eAAegrD,EAAc51H,I,cAApD61H,EAAY,S,oBACLD,EAAan3G,iBAAmB,EAAAG,eAAeG,yBAA/C,MACQ,GAAM1d,KAAKy0H,WAAW91H,I,OACzB,OADNirE,EAAS,SACH,GAAM5pE,KAAKupE,eAAegrD,EAAc3qD,I,cAApD4qD,EAAY,S,aAEZ,MAAM,IAAIrxH,MAAM,4B,OAGpB,OAAiB,MAAbqxH,EACO,CAAP,EAAO,OAEXx0H,KAAK47B,OAAS,IAAI,EAAAsB,mBAAmBs3F,GAC9B,CAAP,EAAOx0H,KAAK47B,iBAGV,YAAA84F,aAAN,W,kGACI,OAAsB,MAAlB10H,KAAKg1C,UACE,CAAP,EAAOh1C,KAAKg1C,WAGG,GAAMh1C,KAAKshF,iB,OAC9B,OAAkB,OADZpiC,EAAa,UAER,CAAP,EAAO,OAGX,EAAAl/C,KAAiB,GAAMA,KAAKw6C,sBAAsBm6E,oBAAoBz1E,K,OACtE,OADA,EAAKlK,UAAY,SACV,CAAP,EAAOh1C,KAAKg1C,mBAGV,YAAAssC,cAAN,W,kGACI,OAAuB,MAAnBthF,KAAKk/C,WACE,CAAP,EAAOl/C,KAAKk/C,YAGM,GAAMl/C,KAAKw3C,eAAev5C,IAAY,EAAAqiG,KAAK/e,gB,OACjE,OAAqB,OADfA,EAAgB,UAEX,CAAP,EAAO,OAGX,EAAAvhF,KAAkB,GAAMA,KAAKupE,eAAe,IAAI,EAAA9uD,UAAU8mE,GAAgB,Q,OAC1E,OADA,EAAKriC,WAAa,SACX,CAAP,EAAOl/C,KAAKk/C,oBAGV,YAAA4oB,eAAN,SAAqBl4C,EAAgBolB,G,yGAChB,MAAbA,EAAA,MACY,GAAMh1C,KAAK00H,gB,OAAvB1/E,EAAY,S,iBAEhB,GAAkB,OAAdA,EACA,MAAM,IAAI7xC,MAAM,4BAEG,SAAMnD,KAAKw6C,sBAAsBykB,KAAKjqB,EAAW,W,OAChD,OADlB4/E,EAAiB,SACC,GAAM50H,KAAKw6C,sBAAsBq6E,WAAWD,EAAgBhlG,EAAQ,GAAI,W,OAChG,OADMklG,EAAkB,SACjB,CAAP,EAAO90H,KAAK+0H,WAAWD,YAIrB,YAAAE,WAAN,W,8GACI,OAAoB,MAAhBh1H,KAAK0hC,SAAmB1hC,KAAK0hC,QAAQ/c,KAAO,EACrC,CAAP,EAAO3kB,KAAK0hC,SAGG,GAAM1hC,KAAKw3C,eAAev5C,IAAS,EAAAqiG,KAAKkzB,a,OAC3D,GAAkB,OADZA,EAAa,UAEf,MAAO,CAAP,EAAO,M,SAGL9xF,EAA2C,IAAIz9B,IACjD26C,GAAS,E,KAEO40E,E,yDACXA,EAAWr3H,eAAe4e,GAId,GAAM/a,KAAKypE,WAAW+pD,EAAWz4G,KAH9C,O,aAGE2uD,EAAW,SACjBhoC,EAAQh8B,IAAIqV,EAAO,IAAI,EAAAmiB,mBAAmBwsC,IAC1C9qB,GAAS,E,yCAOb,OAJIA,IACA5+C,KAAK0hC,QAAUA,GAGZ,CAAP,EAAO1hC,KAAK0hC,iBAGV,YAAAxjB,UAAN,SAAgBnD,G,gGACZ,OAAa,MAATA,EACO,CAAP,EAAO,MAGK,GAAM/a,KAAKg1H,c,OAC3B,OAAe,OADTtzF,EAAU,WACQA,EAAQ97B,IAAImV,GAI7B,CAAP,EAAO2mB,EAAQzjC,IAAI8c,IAHR,CAAP,EAAO,cAOT,YAAAk6G,gBAAN,W,8GACI,OAAyB,MAArBj1H,KAAKi0H,cAAwBj0H,KAAKi0H,aAAatvG,KAAO,EAC/C,CAAP,EAAO3kB,KAAKi0H,cAGQ,GAAMj0H,KAAKw3C,eAAev5C,IAAS,EAAAqiG,KAAKmzB,kB,OAChE,GAAuB,OADjBA,EAAkB,UAEpB,MAAO,CAAP,EAAO,M,SAGLQ,EAAgD,IAAIhwH,IACtD26C,GAAS,E,KAEO60E,E,yDACXA,EAAgBt3H,eAAe4e,GAInB,GAAM/a,KAAKypE,WAAWgqD,EAAgB14G,KAHnD,O,aAGE2uD,EAAW,SACjBuqD,EAAavuH,IAAIqV,EAAO,IAAI,EAAAmiB,mBAAmBwsC,IAC/C9qB,GAAS,E,yCAOb,OAJIA,IACA5+C,KAAKi0H,aAAeA,GAGjB,CAAP,EAAOj0H,KAAKi0H,sBAGV,YAAAnwF,eAAN,SAAqBpK,G,gGACjB,OAAkB,MAAdA,EACO,CAAP,EAAO,MAGU,GAAM15B,KAAKi1H,mB,OAChC,OAAoB,OADdhB,EAAe,WACQA,EAAaruH,IAAI8zB,GAIvC,CAAP,EAAOu6F,EAAah2H,IAAIy7B,IAHb,CAAP,EAAO,cAMT,YAAAw0F,OAAN,W,yGACW,EAAAluH,KAAKk1H,kBAAL,MAAyB,GAAMl1H,KAAKi/F,aAAa,S,SAAxB,S,wBAAzB,WAA4D,GAAMj/F,KAAKi/F,aAAa,c,SAAxB,S,iBAAnE,MAAO,CAAP,aAGJ,YAAAi2B,eAAA,WACI,OAAmB,MAAZl1H,KAAKrB,KAGhB,YAAAsgG,aAAA,SAAai1B,GACT,OAAOl0H,KAAKy2G,qBAAqB7wG,IAAI,EAAA06F,KAAK3hG,IAAK,CAAEu1H,UAAWA,KAG1D,YAAAl5C,UAAN,W,0FACmB,SAAMh7E,KAAKw3C,eAAev5C,IAAY,EAAAqiG,KAAK1kE,S,OAC1D,MAAO,CAAP,EAAiB,MADF,kBAIb,YAAAu5F,SAAN,SAAeC,G,YAAA,IAAAA,OAAA,G,mEACXp1H,KAAKrB,IAAMqB,KAAKq1H,aAAe,KAC3BD,IACAp1H,KAAKs1H,eAAe,QACpBt1H,KAAKs1H,eAAe,c,WAItB,YAAAA,eAAN,SAAqBpB,G,0FACjB,SAAMl0H,KAAKy2G,qBAAqB5uG,OAAO,EAAAy4F,KAAK3hG,IAAK,CAAEu1H,UAAWA,K,cAA9D,S,YAGJ,YAAAqB,aAAA,WAEI,OADAv1H,KAAK0zH,QAAU,KACR1zH,KAAKw3C,eAAe3vC,OAAO,EAAAy4F,KAAKozB,UAG3C,YAAA8B,YAAA,SAAYC,GAER,OADAz1H,KAAK47B,OAAS,KACV65F,EACOt6G,QAAQC,UAEZpb,KAAKw3C,eAAe3vC,OAAO,EAAAy4F,KAAK1kE,SAG3C,YAAA85F,aAAA,SAAaD,GAGT,OAFAz1H,KAAKk/C,WAAa,KAClBl/C,KAAKg1C,UAAY,KACbygF,EACOt6G,QAAQC,UAEZpb,KAAKw3C,eAAe3vC,OAAO,EAAAy4F,KAAK/e,gBAG3C,YAAAo0C,aAAA,SAAaF,GAET,OADAz1H,KAAK0hC,QAAU,KACX+zF,EACOt6G,QAAQC,UAEZpb,KAAKw3C,eAAe3vC,OAAO,EAAAy4F,KAAKkzB,aAG3C,YAAAoC,kBAAA,SAAkBH,GAEd,OADAz1H,KAAKi0H,aAAe,KAChBwB,EACOt6G,QAAQC,UAEZpb,KAAKw3C,eAAe3vC,OAAO,EAAAy4F,KAAKkzB,aAG3C,YAAAqC,qBAAA,WACI,OAAO71H,KAAKw3C,eAAe3vC,OAAO,EAAA2P,iBAAiBsB,kBAGjD,YAAAkkF,UAAN,W,0FACI,SAAMh9F,KAAKm1H,Y,OACX,OADA,SACA,GAAMn1H,KAAKu1H,gB,OACX,OADA,SACA,GAAMv1H,KAAK21H,gB,OACX,OADA,SACA,GAAM31H,KAAK41H,qB,OACX,OADA,SACA,GAAM51H,KAAKw1H,e,OACX,OADA,SACA,GAAMx1H,KAAK01H,gB,OACX,OADA,SACA,GAAM11H,KAAK61H,wB,cAAX,S,YAGE,YAAAC,UAAN,W,gGACgB,SAAM91H,KAAK6pF,U,OAEvB,OAFMlrF,EAAM,SAEZ,GAAMqB,KAAK4+C,OAAOjgD,I,cAAlB,S,YAGE,YAAAg3C,QAAN,SAAcpgC,EAAkBwgH,EAAcxgF,EAAcE,G,mGAEpD92C,EAAmB,KACZ,MAAP42C,GAAeA,IAAQ,EAAAzO,QAAQq8C,cAA/B,YACA,GAAqB,MAAjB1tC,EACAA,EAAgB,SACb,GAAIA,EAAgB,IACvB,MAAM,IAAItyC,MAAM,qCAEd,SAAMnD,KAAKw6C,sBAAsBkjC,OAAOnoE,EAAUwgH,EAAM,SAAUtgF,I,cAAxE92C,EAAM,S,aAEN,MAAM,IAAIwE,MAAM,gB,OAEpB,MAAO,CAAP,EAAO,IAAI,EAAA+5B,mBAAmBv+B,YAG5B,YAAA4gG,eAAN,SAAqBd,EAAas3B,EAAcxgF,EAAcE,EAC1DugF,G,YAAA,IAAAA,MAAA,M,oGAEsB,MAAlBA,EAAA,MACwB,GAAMh2H,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBsB,kB,OAC/E,GAAuB,OADjBA,EAAkB,UAEpB,MAAM,IAAI3V,MAAM,+BAEpB6yH,EAAiB,IAAI,EAAAv7G,UAAU3B,G,iBAEpB,SAAM9Y,KAAKigG,WAAWxB,EAAKs3B,EAAMxgF,EAAKE,I,OACtC,OADTyqD,EAAS,SACA,GAAMlgG,KAAKupE,eAAeysD,EAAgB91B,I,OACzD,OADM/iB,EAAS,SACR,CAAP,EAAO,IAAI,EAAAjgD,mBAAmBigD,YAG5B,YAAA97C,aAAN,W,kGACqB,SAAMrhC,KAAKw6C,sBAAsB8E,YAAY,K,OAC5C,OADZhe,EAAW,SACC,GAAMthC,KAAK00H,gB,OACT,OADd1/E,EAAY,SACE,GAAMh1C,KAAKq5C,WAAW/X,EAAU0T,I,OACpD,MAAO,CAAC,EAAD,CADa,SACC,IAAI,EAAA9X,mBAAmBoE,aAG1C,YAAAG,YAAN,SAAkB9iC,G,oGACE,SAAMqB,KAAKw6C,sBAAsBy7E,mBAAmB,O,OAEjD,OAFb92E,EAAU,SACV+2E,EAAY,EAAA3tH,MAAM8B,gBAAgB80C,EAAQ,IAC7B,GAAMn/C,KAAKuhC,QAAQ4d,EAAQ,GAAIxgD,I,OAClD,OADMw3H,EAAa,SACZ,CAAC,EAAD,CAACD,EAAWC,YAGjB,YAAAl2B,WAAN,SAAiBxB,EAAas3B,EAAcxgF,EAAcE,G,gGACvC,SAAMz1C,KAAK21C,QAAQ8oD,EAAKs3B,EAAMxgF,EAAKE,I,OAC3C,OADDyqD,EAAS,SACR,GAAMlgG,KAAKy0H,WAAWv0B,I,OAA7B,MAAO,CAAP,EAAO,kBAGL,YAAAliB,YAAN,SAAkBo4C,G,gGACE,SAAMp2H,KAAKw6C,sBAAsB67E,KAAKD,EAAa,iBAAkB,OAAQ,GAAI,W,OACjG,OADME,EAAU,SACT,CAAP,EAAO,IAAI,EAAAp5F,mBAAmBo5F,YAG5B,YAAAzgF,aAAN,SAAmBtgC,EAAkB5W,EAAyB43H,G,yGAC/C,MAAP53H,EAAA,MACM,GAAMqB,KAAK6pF,U,OAAjBlrF,EAAM,S,iBAEV,GAAgB,MAAZ4W,GAA2B,MAAP5W,EACpB,MAAM,IAAIwE,MAAM,uBAIP,OADPqzH,EAAaD,IAAgB,EAAAxhF,YAAYgG,mBAAqB,EAAI,EAC3D,GAAM/6C,KAAKw6C,sBAAsBkjC,OAAO/+E,EAAIA,IAAK4W,EAAU,SAAUihH,I,OAClF,OADMv3D,EAAO,SACN,CAAP,EAAO,EAAA12D,MAAM8B,gBAAgB40D,YAG3B,YAAAlpB,WAAN,SAAiBp3C,G,kGACE,SAAMqB,KAAKy2H,oBAAoB93H,I,OAC/B,OADT+3H,EAAS,SACA,GAAM12H,KAAKw6C,sBAAsB8E,YAAY,K,OAC5D,OADM1jB,EAAS,SACR,CAAP,EAAO57B,KAAK22H,YAAYD,EAAQ96F,YAG9B,YAAAoa,aAAN,SAAmBr3C,EAAyBi9B,G,iGAC1B,MAAVA,EAAA,MACS,GAAM57B,KAAK81C,a,OAApBla,EAAS,S,iBAEb,MAAO,CAAP,EAAO57B,KAAK22H,YAAYh4H,EAAKi9B,EAAOj9B,cAGlC,YAAA4iC,QAAN,SAAcq1F,EAAkCj4H,G,wGAC5C,OAAkB,MAAdi4H,EACO,CAAP,EAAOz7G,QAAQC,QAAQ,QAKvBy7G,EADwB,iBAAjB,EACI,EAAAtuH,MAAMwB,gBAAgB6sH,GAAYtsH,OAElCssH,EAGA,GAAM52H,KAAK82H,WAAWD,EAAUl4H,K,OAI/C,OAJMo4H,EAAS,SACT95G,EAAK,EAAA1U,MAAM8B,gBAAgB0sH,EAAO95G,IAClCzhB,EAAO,EAAA+M,MAAM8B,gBAAgB0sH,EAAOv7H,MACpC0hB,EAAoB,MAAd65G,EAAO75G,IAAc,EAAA3U,MAAM8B,gBAAgB0sH,EAAO75G,KAAO,KAC9D,CAAP,EAAO,IAAI,EAAAzC,UAAUs8G,EAAOp4H,IAAIwe,QAAS3hB,EAAMyhB,EAAIC,YAGjD,YAAAszG,eAAN,SAAqBoG,EAAyBj4H,G,oGACzB,SAAMqB,KAAK82H,WAAWF,EAAYj4H,I,OAcnD,OAdMq4H,EAAW,SACbC,EAAS,EACO,MAAhBD,EAAS95G,MACT+5G,EAASD,EAAS95G,IAAIzS,aAGpBysH,EAAW,IAAI9tH,WAAW,EAAI4tH,EAAS/5G,GAAGxS,WAAawsH,EAASD,EAASx7H,KAAKiP,aAC3E/E,IAAI,CAACsxH,EAASr4H,IAAIwe,UAC3B+5G,EAASxxH,IAAI,IAAI0D,WAAW4tH,EAAS/5G,IAAK,GACtB,MAAhB+5G,EAAS95G,KACTg6G,EAASxxH,IAAI,IAAI0D,WAAW4tH,EAAS95G,KAAM,EAAI85G,EAAS/5G,GAAGxS,YAG/DysH,EAASxxH,IAAI,IAAI0D,WAAW4tH,EAASx7H,MAAO,EAAIw7H,EAAS/5G,GAAGxS,WAAawsH,GAClE,CAAP,EAAO,IAAI,EAAAE,eAAeD,EAAS5sH,iBAGjC,YAAA+uC,WAAN,SAAiB79C,EAAmBw5C,G,uGACf,MAAbA,EAAA,MACY,GAAMh1C,KAAK00H,gB,OAAvB1/E,EAAY,S,iBAEhB,GAAiB,MAAbA,EACA,MAAM,IAAI7xC,MAAM,2BAGH,SAAMnD,KAAKw6C,sBAAsBnB,WAAW79C,EAAMw5C,EAAW,S,OAC9E,OADMkiF,EAAW,SACV,CAAP,EAAO,IAAI,EAAAz8G,UAAU,EAAA8C,eAAeK,qBAAsB,EAAArV,MAAM8B,gBAAgB6sH,aAG9E,YAAAztD,WAAN,SAAiButD,EAAkBI,G,4GAK/B,GAJM/5G,EAAe25G,EAASrpH,MAAM,KAChCwP,EAA0B,KAGF,IAAxBE,EAAarhB,OACbmhB,EAAU,EAAAI,eAAeI,uBACzBL,EAAY,CAACD,EAAa,SACvB,GAA4B,IAAxBA,EAAarhB,OACpB,IACImhB,EAAUtT,SAASwT,EAAa,GAAI,MACpCC,EAAYD,EAAa,GAAG1P,MAAM,KACpC,MAAOnM,GACLxB,KAAKiB,WAAWW,MAAMJ,GAI9B,OAAQ2b,GACJ,KAAK,EAAAI,eAAeI,uBACpB,KAAK,EAAAJ,eAAeK,qBAEpB,KAAK,EAAAL,eAAe85G,kCACpB,KAAK,EAAA95G,eAAe+5G,gCAChB,MACJ,QACI,MAAM,IAAIn0H,MAAM,wBAGxB,GAAiB,MAAbma,GAAqBA,EAAUthB,QAAU,EACzC,MAAM,IAAImH,MAAM,0B,OAGd3H,EAAO,EAAA+M,MAAMY,eAAemU,EAAU,IAAIhT,O,MAC7B8sH,EAAe,OAAf,EAAAA,E,cAAmB,SAAMp3H,KAAKshF,iB,OAAX,W,iBACtC,GAAkB,OADZpiC,EAAa,GAEf,MAAM,IAAI/7C,MAAM,mBAIpB,OADIo0H,EAAyB,OACrBp6G,GACJ,KAAK,EAAAI,eAAeI,uBACpB,KAAK,EAAAJ,eAAe85G,kCAChBE,EAAM,SACN,MACJ,KAAK,EAAAh6G,eAAeK,qBACpB,KAAK,EAAAL,eAAe+5G,gCAChB,MACJ,QACI,MAAM,IAAIn0H,MAAM,wBAGxB,MAAO,CAAP,EAAOnD,KAAKw6C,sBAAsBivB,WAAWjuE,EAAM0jD,EAAYq4E,YAG7D,YAAAhuD,eAAN,SAAqBiuD,EAAsB74H,G,sGAItB,OAHXse,EAAK,EAAA1U,MAAMY,eAAequH,EAAUv6G,IAAI3S,OACxC9O,EAAO,EAAA+M,MAAMY,eAAequH,EAAUh8H,MAAM8O,OAC5C4S,EAAMs6G,EAAUt6G,IAAM,EAAA3U,MAAMY,eAAequH,EAAUt6G,KAAK5S,OAAS,KACxD,GAAMtK,KAAKy3H,kBAAkBD,EAAUp6G,eAAgB5hB,EAAMyhB,EAAIC,EAAKve,I,OACvF,OAAgB,OADV+4H,EAAW,UAEN,CAAP,EAAO,MAGJ,CAAP,EAAOA,WAGL,YAAAv5G,cAAN,SAAoBq5G,EAAsB74H,G,0FAC/B,SAAMqB,KAAK23H,iBAAiBH,EAAUp6G,eAAgBo6G,EAAUh8H,KACnEg8H,EAAUv6G,GAAIu6G,EAAUt6G,IAAKve,I,OADjC,MAAO,CAAP,EAAO,kBAIL,YAAAm8E,iBAAN,SAAuB88C,EAAqBj5H,G,wGACxC,GAAc,MAAVi5H,EACA,MAAM,IAAIz0H,MAAM,cASpB,OANM+zH,EAAW,IAAI9tH,WAAWwuH,GAC1Bz6G,EAAU+5G,EAAS,GACrBW,EAAsB,KACtBC,EAAsB,KACtBC,EAAuB,KAEnB56G,GACJ,KAAK,EAAAI,eAAeC,yBACpB,KAAK,EAAAD,eAAeG,yBAChB,GAAIw5G,EAASl7H,QAAU,GACnB,MAAO,CAAP,EAAO,MAGX87H,EAAUZ,EAAS93H,MAAM,EAAG,IAC5B24H,EAAWb,EAAS93H,MAAM,GAAI,IAC9By4H,EAAUX,EAAS93H,MAAM,IACzB,MACJ,KAAK,EAAAme,eAAeE,cAChB,GAAIy5G,EAASl7H,QAAU,GACnB,MAAO,CAAP,EAAO,MAGX87H,EAAUZ,EAAS93H,MAAM,EAAG,IAC5By4H,EAAUX,EAAS93H,MAAM,IACzB,MACJ,QACI,MAAO,CAAP,EAAO,MAGR,SAAMY,KAAKy3H,kBAAkBt6G,EAAS06G,EAAQvtH,OAAQwtH,EAAQxtH,OACrD,MAAZytH,EAAmBA,EAASztH,OAAS,KAAM3L,I,OAD/C,MAAO,CAAP,EAAO,kBAML,YAAAq5H,aAAN,SAAmBC,EAAatiD,G,gHAI5B,GAHIuiD,EAAO,EACLC,EAAQxiD,EAAMsiD,EAAM,GACpBG,EAAansH,KAAKosH,KAAKpsH,KAAKqsH,KAAKH,KACtB,GACb,MAAM,IAAIh1H,MAAM,mDAQa,OAL3Bo1H,EAActsH,KAAKosH,KAAKD,EAAa,GACrCI,EAAOvsH,KAAKwsH,IAAI,EAAGL,GAAc,E,EAIjBhvH,WAAU,KAAC,GAAMpJ,KAAKw6C,sBAAsB8E,YAAYi5E,I,OAG9E,IAHMG,EAAY,YAAItvH,WAAU,QAAC,YAE7BpK,EAAwB,GAAnBu5H,EAAc,GACdz8H,EAAI,EAAGA,EAAIy8H,EAAaz8H,IAC7Bo8H,GAAQQ,EAAU58H,GAAKmQ,KAAKwsH,IAAI,EAAGz5H,GACnCA,GAAK,EAOT,OAFAk5H,GAAcM,IAEFL,EAED,CAAP,EAAOn4H,KAAKg4H,aAAaC,EAAKtiD,IAI3B,CAAP,EAAOsiD,EAAMC,WAGX,YAAA5D,YAAN,SAAkB31H,G,oGAEY,O,sBAAA,GAAMqB,KAAKw3C,eAAev5C,IAAY,EAAAqiG,KAAK/e,gB,OAClD,OADTA,EAAgB,SACP,GAAMvhF,KAAK81C,UAAUn3C,I,OACpC,OADMi9B,EAAS,SACM,MAAjB2lD,GAAmC,MAAV3lD,EAClB,CAAP,GAAO,GAGQ,GAAM57B,KAAKupE,eAAe,IAAI,EAAA9uD,UAAU8mE,GAAgB3lD,I,OAC3E,OADMsjB,EAAa,SACnB,GAAMl/C,KAAKw6C,sBAAsBm6E,oBAAoBz1E,I,cAArD,S,aAEA,O,SAAO,CAAP,GAAO,G,OAGX,MAAO,CAAP,GAAO,WAKK,YAAA00E,SAAhB,SAAyBj1H,G,gGACjB,SAAMqB,KAAK24H,eAAe,S,gBAA1B,U,MAAqC,GAAM34H,KAAK24H,eAAe,c,SAA1B,S,wBAArC,EACA34H,KAAKy2G,qBAAqBv8C,KAAK,EAAAomC,KAAK3hG,IAAKA,EAAIo+B,QAE7C/8B,KAAKy2G,qBAAqB5uG,OAAO,EAAAy4F,KAAK3hG,K,YAI9B,YAAAg6H,eAAhB,SAA+BzE,G,2GACvByE,GAAiB,EACH,SAAdzE,EAAA,MACqB,GAAMl0H,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBU,kB,cAAtE0sE,EAAe,SACrB+zC,EAAiC,MAAhB/zC,E,mBACI,cAAdsvC,EAAA,MACiB,GAAMl0H,KAAKw3C,eAAev5C,IAAa,EAAAuZ,iBAAiB4B,qB,OAA1Ew/G,EAAkB,SACxBD,EAAiBC,GAAmB54H,KAAK2zH,oBAAoBz0B,wB,iBAEjE,MAAO,CAAP,EAAOy5B,WAGD,YAAAtE,uBAAV,SAAiCH,GAC7B,OAAOl0H,KAAKy2G,qBAAqBx4G,IAAY,EAAAqiG,KAAK3hG,IAAK,CAAEu1H,UAAWA,KAG1D,YAAA4C,WAAd,SAAyBt7H,EAAmBmD,G,0GAE9B,OADJiQ,EAAM,IAAI,EAAAiqH,gBAChB,EAAAjqH,EAAU,GAAM5O,KAAKy2H,oBAAoB93H,I,OAChC,OADT,EAAIA,IAAM,SACV,EAAAiQ,EAAS,GAAM5O,KAAKw6C,sBAAsB8E,YAAY,K,OAC3C,OADX,EAAIriC,GAAK,SACT,EAAArO,EAAW,GAAM5O,KAAKw6C,sBAAsBs8E,WAAWt7H,EAAMoT,EAAIqO,GAAIrO,EAAIjQ,IAAIi9B,S,cAA7E,EAAIpgC,KAAO,SAEW,MAAlBoT,EAAIjQ,IAAIm+B,OAAR,QACMg8F,EAAU,IAAI1vH,WAAWwF,EAAIqO,GAAGxS,WAAamE,EAAIpT,KAAKiP,aACpD/E,IAAI,IAAI0D,WAAWwF,EAAIqO,IAAK,GACpC67G,EAAQpzH,IAAI,IAAI0D,WAAWwF,EAAIpT,MAAOoT,EAAIqO,GAAGxS,YAC7C,EAAAmE,EAAU,GAAM5O,KAAKw6C,sBAAsBu+E,KAAKD,EAAQxuH,OAAQsE,EAAIjQ,IAAIm+B,OAAQ,Y,OAAhF,EAAI5f,IAAM,S,iBAGd,MAAO,CAAP,EAAOtO,WAGG,YAAA+oH,iBAAd,SAA+Bx6G,EAAyB3hB,EAAcyhB,EAAYC,EAC9Eve,G,sGACkB,SAAMqB,KAAKy2H,oBAAoB93H,I,OAGjD,OAHMq6H,EAAY,SAGG,OAFftC,EAAS12H,KAAKi5H,iBAAiB97G,EAAS67G,IAEnCl8F,QAAyB,MAAP5f,GACzBld,KAAKiB,WAAWW,MAAM,iBACf,CAAP,EAAO,OAGP80H,EAAOv5G,UAAYA,GACnBnd,KAAKiB,WAAWW,MAAM,wBACf,CAAP,EAAO,OAIc,OADnBs3H,EAAal5H,KAAKw6C,sBAAsB2+E,yBAAyB39H,EAAMyhB,EAAIC,EAAKw5G,IACvE55F,QAAoC,MAAlBo8F,EAAWh8G,IAAxC,MACoB,GAAMld,KAAKw6C,sBAAsB4+E,SAASF,EAAWJ,QACrEI,EAAWp8F,OAAQ,W,OACL,OAFZu8F,EAAc,SAEF,GAAMr5H,KAAKw6C,sBAAsB8+E,YAAYJ,EAAWh8G,IAAKm8G,I,OAC/E,IADkB,SAGd,OADAr5H,KAAKiB,WAAWW,MAAM,eACf,CAAP,EAAO,M,iBAIf,MAAO,CAAP,EAAO5B,KAAKw6C,sBAAsB++E,eAAeL,YAGvC,YAAAzB,kBAAd,SAAgCt6G,EAAyB3hB,EAAmByhB,EACxEC,EAAkBve,G,sGACA,SAAMqB,KAAKy2H,oBAAoB93H,I,OAGjD,OAHMq6H,EAAY,SAGG,OAFftC,EAAS12H,KAAKi5H,iBAAiB97G,EAAS67G,IAEnCl8F,QAAyB,MAAP5f,EAClB,CAAP,EAAO,MAGPw5G,EAAOv5G,UAAYA,EACZ,CAAP,EAAO,MAGU,MAAjBu5G,EAAO55F,QAAyB,MAAP5f,EAAzB,QACM47G,EAAU,IAAI1vH,WAAW6T,EAAGxS,WAAajP,EAAKiP,aAC5C/E,IAAI,IAAI0D,WAAW6T,GAAK,GAChC67G,EAAQpzH,IAAI,IAAI0D,WAAW5N,GAAOyhB,EAAGxS,YACjB,GAAMzK,KAAKw6C,sBAAsBu+E,KAAKD,EAAQxuH,OAAQosH,EAAO55F,OAAQ,Y,OACzF,OAAoB,QADdu8F,EAAc,UAET,CAAP,EAAO,MAGO,GAAMr5H,KAAKw6C,sBAAsBpsC,QAAQ8O,EAAKm8G,I,OAChE,IADkB,SAGd,OADAr5H,KAAKiB,WAAWW,MAAM,eACf,CAAP,EAAO,M,iBAIR,SAAM5B,KAAKw6C,sBAAsBg/E,WAAWh+H,EAAMyhB,EAAIy5G,EAAO96F,S,OAApE,MAAO,CAAP,EAAO,kBAGG,YAAA66F,oBAAd,SAAkC93H,G,gGAC9B,OAAW,MAAPA,EACO,CAAP,EAAOA,GAGI,GAAMqB,KAAK81C,a,OAC1B,OAAc,OADRla,EAAS,UAEJ,CAAP,EAAOA,GAGJ,GAAM57B,KAAK6pF,U,OAAlB,MAAO,CAAP,EAAO,kBAGH,YAAAovC,iBAAR,SAAyB97G,EAAyBxe,GAC9C,OAAIwe,IAAY,EAAAI,eAAeC,0BAC3B7e,EAAIwe,UAAY,EAAAI,eAAeE,eAEN,MAArBzd,KAAKq1H,eACLr1H,KAAKq1H,aAAe,IAAI,EAAAn4F,mBAAmBv+B,EAAIA,IAAK,EAAA4e,eAAeC,2BAEhExd,KAAKq1H,cAGT12H,GAGG,YAAA81H,WAAd,SAAyB91H,G,oGAEN,OADTirE,EAAS,IAAIxgE,WAAW,IACf,GAAMpJ,KAAKw6C,sBAAsBq6E,WAAWl2H,EAAIA,IAAK,MAAO,GAAI,W,OAChE,OADTi9B,EAAS,SACA,GAAM57B,KAAKw6C,sBAAsBq6E,WAAWl2H,EAAIA,IAAK,MAAO,GAAI,W,OAG/E,OAHMm+B,EAAS,SACf8sC,EAAOlkE,IAAI,IAAI0D,WAAWwyB,IAC1BguC,EAAOlkE,IAAI,IAAI0D,WAAW0zB,GAAS,IAC5B,CAAP,EAAO,IAAI,EAAAI,mBAAmB0sC,EAAOt/D,iBAG3B,YAAAyqH,WAAd,SAAyB91D,EAAmBw6D,G,YAAA,IAAAA,MAAA,I,8EAMxC,GALMC,EAAiBztH,KAAKuoE,IAAI,EAAA6hB,gBAAgBr6F,QAAUiQ,KAAKuoE,IAAI,GAC/DmlD,EAAW1tH,KAAKosH,KAAKoB,EAAiBC,GAEpCE,EAAUpyH,MAAMC,KAAK,IAAI2B,WAAW61D,IACpC46D,EAAoC,EAAjBD,EAAQ59H,OAC7B29H,EAAWD,EAAiBG,EAC5B,MAAM,IAAI12H,MAAM,gDAKpB,IAFM22H,EAAmB,GACrBC,EAAaC,EAAOC,UAAUL,EAAS,KACpCD,KACGO,EAAYH,EAAW5rF,IAAI,EAAAkoD,gBAAgBr6F,QACjD+9H,EAAaA,EAAWI,OAAO,EAAA9jC,gBAAgBr6F,QAC/C89H,EAAOx9H,KAAK,EAAA+5F,gBAAgB6jC,IAEhC,MAAO,CAAP,EAAOJ,UAGG,YAAAnD,YAAd,SAA0Bh4H,EAAyBi9B,G,yGAE3Cw+F,EAAuB,KACA,KAAvBz7H,EAAIA,IAAI8L,WAAR,MACe,GAAMzK,KAAKy0H,WAAW91H,I,OACzB,OADNirE,EAAS,SACH,GAAM5pE,KAAKuhC,QAAQ3F,EAAQguC,I,qBAEvCwwD,EAAY,S,oBADkB,KAAvBz7H,EAAIA,IAAI8L,WAAR,MACK,GAAMzK,KAAKuhC,QAAQ3F,EAAQj9B,I,OAEvC,MAAM,IAAIwE,MAAM,qB,OAEpB,MAAO,CAAC,EAAD,CAAC,IAAI,EAAA+5B,mBAAmBtB,GAASw+F,YAvsB5C,GADC,EAAA5H,eAAc,WAAM,qB,iDACA,EAAAt1F,qB,8DA4ErB,GADC,EAAAs1F,eAAc,WAAM,sB,mHA6CrB,GADC,EAAAA,eAAc,WAAM,2B,wHAklBzB,EAj1BA,GAAa,EAAAxwH,iB,uGCtCb,MACI,SAAmBsI,GAAA,KAAAA,UADV,EAAA6sH,kB,uGCEb,mBAAa,EAAA0B,mB,y+CCFb,aAEA,UAEA,QAKA,aAcI,WAAoBrhF,GAAA,KAAAA,iBAZH,KAAA6iF,YAAc,IAAI,EAAArzF,QACnC,KAAAuyD,KAAyBv5F,KAAKq6H,YA6LlC,OAhLI,YAAAxT,WAAA,WACI,OAAuB,MAAhB7mH,KAAKm3G,SAGhB,YAAAmjB,oBAAA,WACI,OAA6B,MAAzBt6H,KAAKu6H,iBACEv6H,KAAKu6H,iBAGI,MAAhBv6H,KAAKm3G,QACEn3G,KAAKm3G,QAAU,iBAGnB,uCAGX,YAAAl7C,eAAA,WACI,OAAwB,MAApBj8D,KAAKg8D,YACEh8D,KAAKg8D,YAGZh8D,KAAKm3G,QACEn3G,KAAKm3G,QAET,+BAGX,YAAAnI,WAAA,WACI,MAAiC,gCAA1BhvG,KAAKi8D,iBACN,+BACAj8D,KAAKi8D,iBAAmB,YAGlC,YAAAt9C,YAAA,WACI,OAAqB,MAAjB3e,KAAK0e,SACE1e,KAAK0e,SAGZ1e,KAAKm3G,QACEn3G,KAAKm3G,QAAU,SAGnB,+BAGX,YAAAoP,UAAA,WACI,OAAmB,MAAfvmH,KAAKu+G,OACEv+G,KAAKu+G,OAGZv+G,KAAKm3G,QACEn3G,KAAKm3G,QAAU,OAGnB,6BAGX,YAAAh4C,eAAA,WACI,OAAwB,MAApBn/D,KAAKw6H,YACEx6H,KAAKw6H,YAGZx6H,KAAKm3G,QACEn3G,KAAKm3G,QAAU,YAGnB,kCAGX,YAAA2N,aAAA,WACI,OAAsB,MAAlB9kH,KAAKy6H,UACEz6H,KAAKy6H,UAGZz6H,KAAKm3G,QACEn3G,KAAKm3G,QAAU,UAGnB,gCAGX,YAAAn4D,mBAAA,WACI,OAAOh/C,KAAKozC,iBAGV,YAAAsnF,mBAAN,W,oGACyB,SAAM16H,KAAKw3C,eAAev5C,IAAI,EAAAuZ,iBAAiBD,qB,OAcpE,OAdMojH,EAAe,SACfphC,EAAOohC,GAAW,CACpB33G,KAAM,KACN43G,IAAK,KACL/zG,SAAU,KACVg0G,MAAO,KACPC,cAAe,KACf50F,OAAQ,KACR60F,SAAU,KACVC,aAAc,MAGZC,EAAU,IAAI,EAAAC,gBAEhB3hC,EAAKv2E,MACLhjB,KAAKm3G,QAAU8jB,EAAQj4G,KAAOu2E,EAAKv2E,KACnC,MAGJhjB,KAAKg8D,YAAcu9B,EAAKwhC,SACxB/6H,KAAKu+G,OAAS0c,EAAQL,IAAMrhC,EAAKqhC,IACjC56H,KAAKw6H,YAAcS,EAAQp0G,SAAW0yE,EAAK1yE,SAC3C7mB,KAAK0e,SAAW66E,EAAKshC,MACrB76H,KAAKu6H,iBAAmBhhC,EAAKuhC,cAC7B96H,KAAKy6H,UAAYQ,EAAQ/0F,OAASqzD,EAAKrzD,OACvClmC,KAAKozC,gBAAkBmmD,EAAKyhC,a,aAG1B,YAAA9jB,QAAN,SAAc3d,EAAY4hC,G,YAAA,IAAAA,OAAA,G,0FACtB5hC,EAAKv2E,KAAOhjB,KAAKo7H,UAAU7hC,EAAKv2E,MAChCu2E,EAAKwhC,SAAW/6H,KAAKo7H,UAAU7hC,EAAKwhC,UACpCxhC,EAAKqhC,IAAM56H,KAAKo7H,UAAU7hC,EAAKqhC,KAC/BrhC,EAAK1yE,SAAW7mB,KAAKo7H,UAAU7hC,EAAK1yE,UACpC0yE,EAAKshC,MAAQ76H,KAAKo7H,UAAU7hC,EAAKshC,OACjCthC,EAAKuhC,cAAgB96H,KAAKo7H,UAAU7hC,EAAKuhC,eACzCvhC,EAAKrzD,OAASlmC,KAAKo7H,UAAU7hC,EAAKrzD,QAClCqzD,EAAKyhC,aAAeh7H,KAAKo7H,UAAU7hC,EAAKyhC,cAEpCG,EACA,GAAMn7H,KAAKw3C,eAAe0iB,KAAK,EAAA1iD,iBAAiBD,mBAAoB,CAChEyL,KAAMu2E,EAAKv2E,KACX43G,IAAKrhC,EAAKqhC,IACV/zG,SAAU0yE,EAAK1yE,SACfk0G,SAAUxhC,EAAKwhC,SACfF,MAAOthC,EAAKshC,MACZC,cAAevhC,EAAKuhC,cACpB50F,OAAQqzD,EAAKrzD,OACb80F,aAAczhC,EAAKyhC,gBATvB,M,OACA,S,iBAuBJ,OAXAh7H,KAAKm3G,QAAU5d,EAAKv2E,KACpBhjB,KAAKg8D,YAAcu9B,EAAKwhC,SACxB/6H,KAAKu+G,OAAShlB,EAAKqhC,IACnB56H,KAAKw6H,YAAcjhC,EAAK1yE,SACxB7mB,KAAK0e,SAAW66E,EAAKshC,MACrB76H,KAAKu6H,iBAAmBhhC,EAAKuhC,cAC7B96H,KAAKy6H,UAAYlhC,EAAKrzD,OACtBlmC,KAAKozC,gBAAkBmmD,EAAKyhC,aAE5Bh7H,KAAKq6H,YAAY5yF,KAAK8xD,GAEf,CAAP,EAAOA,WAGX,YAAA8hC,QAAA,WACI,MAAO,CACHr4G,KAAMhjB,KAAKm3G,QACX4jB,SAAU/6H,KAAKg8D,YACf4+D,IAAK56H,KAAKu+G,OACV13F,SAAU7mB,KAAKw6H,YACfK,MAAO76H,KAAK0e,SACZo8G,cAAe96H,KAAKu6H,iBACpBr0F,OAAQlmC,KAAKy6H,UACbO,aAAch7H,KAAKozC,kBAInB,YAAAgoF,UAAR,SAAkB5uH,GACd,OAAW,MAAPA,GAAuB,KAARA,EACR,OAGXA,EAAMA,EAAIxB,QAAQ,QAAS,KAClB+B,WAAW,YAAeP,EAAIO,WAAW,cAC9CP,EAAM,WAAaA,GAGhBA,EAAIM,SAEnB,EAhMA,GAAa,EAAA8J,sB,uGCTb,mBAAa,EAAAskH,mB,m+CCEb,cAEA,UASA,QAEA,aAGI,WAAoB1jF,EAAwCv2B,EAChDqc,EAAkCiO,EAClCtqC,GAFQ,KAAAu2C,iBAAwC,KAAAv2B,aAChD,KAAAqc,cAAkC,KAAAiO,gBAClC,KAAAtqC,aAJJ,KAAAuH,QAAS,EA+ErB,OAzEI,YAAAF,KAAA,SAAKgzH,GAAL,WACQt7H,KAAKwI,SAITxI,KAAKwI,QAAS,EACV8yH,IACAt7H,KAAK48F,eACLpwD,aAAY,WAAM,SAAKowD,iBAAgB,QAIzC,YAAA5vD,QAAN,SAAcs+D,EAAsBp0E,EAAyBqkG,G,YAAzB,IAAArkG,MAAA,WAAyB,IAAAqkG,OAAA,G,iGAC1C,SAAMv7H,KAAKs9B,YAAY28B,mB,OACtC,OADe,SAIO,GAAMj6D,KAAKs9B,YAAY8a,uBAFzC,I,OAGJ,OAAqB,OADfG,EAAgB,WAKF,KADdijF,EAAS,IAAIztB,IAAYx1D,EAAczpC,QAAO,SAAAhR,GAAK,OAAAA,EAAEi0C,aAAWhqC,KAAI,SAAAjK,GAAK,OAAAA,EAAE8B,QACtE+kB,KAHP,IAMY,MAAZuS,EAAA,MACe,GAAMl3B,KAAKurC,cAActtC,IAAIi5B,I,OAC5C,GAAc,OADRxkB,EAAS,WACgC,MAAzBA,EAAOzC,iBAA2BurH,EAAO51H,IAAI8M,EAAOzC,gBACtE,U,iBAGc,SAAMjQ,KAAKw3C,eAAev5C,IAAiB,EAAAuZ,iBAAiByB,qB,OASlF,OARuB,OADnBwiH,EAAkB,YAElBA,EAAkB,KAEhBr3H,EAAQ,IAAI,EAAAs3H,WACZx5H,KAAOopG,EACblnG,EAAM8yB,SAAWA,EACjB9yB,EAAMw1B,MAAO,IAAIlI,MAAOY,cACxBmpG,EAAgBn/H,KAAK8H,GACrB,GAAMpE,KAAKw3C,eAAe0iB,KAAK,EAAA1iD,iBAAiByB,mBAAoBwiH,I,cAApE,SACIF,EACA,GAAMv7H,KAAK48F,gBADX,M,OACA,S,mCAIF,YAAAA,aAAN,W,oGACmB,SAAM58F,KAAKs9B,YAAY28B,mB,OACtC,OADe,SAIS,GAAMj6D,KAAKw3C,eAAev5C,IAAiB,EAAAuZ,iBAAiByB,qBAFhF,I,OAGJ,GAAuB,OADjBwiH,EAAkB,WACkC,IAA3BA,EAAgBz/H,OAC3C,UAEEwkB,EAAUi7G,EAAgB1zH,KAAI,SAAAvG,GAChC,IAAMskD,EAAM,IAAI,EAAA61E,aAIhB,OAHA71E,EAAI5jD,KAAOV,EAAEU,KACb4jD,EAAI5uB,SAAW11B,EAAE01B,SACjB4uB,EAAIlsB,KAAOp4B,EAAEo4B,KACNksB,K,iBAGP,O,sBAAA,GAAM9lD,KAAKihB,WAAW0jG,kBAAkBnkG,I,cAAxC,SACAxgB,KAAK68F,c,+BAEL78F,KAAKiB,WAAWW,MAAM,G,+BAIxB,YAAAi7F,YAAN,W,0FACI,SAAM78F,KAAKw3C,eAAe3vC,OAAO,EAAA2P,iBAAiByB,qB,cAAlD,S,YAER,EAhFA,GAAa,EAAA5B,gB,iGCbb,mBAAa,EAAAqkH,a,oGCAb,mBAAa,EAAAC,gB,o+CCFb,aAEA,QAYA,SACA,SAGA,SACA,SAGA,SACA,SACA,UACA,SAGA,QAEA,aACI,WAAoBnwF,EAAsCD,EAC9CtqB,EAAgCjD,GADxB,KAAAwtB,gBAAsC,KAAAD,gBAC9C,KAAAtqB,aAAgC,KAAAjD,gBAgVhD,OA9UU,YAAA0qF,UAAN,SAAgBv8C,G,YAAA,IAAAA,MAAA,O,4DACZ,MAAe,mBAAXA,EACO,CAAP,EAAOnsD,KAAK47H,sBAEL,CAAP,EAAO57H,KAAK67H,mBAAmB1vE,WAIjC,YAAA0qB,sBAAN,SAA4B5mE,EACxBk8C,G,YAAA,IAAAA,MAAA,O,4DACA,MAAe,mBAAXA,EACO,CAAP,EAAOnsD,KAAK87H,+BAA+B7rH,IAEpC,CAAP,EAAOjQ,KAAK+7H,+BAA+B9rH,EAAgBk8C,WAI7D,YAAAu7C,eAAN,SAAqBxhE,G,mEACjB,MAAO,CAAP,EAAO90B,EAAK4qH,QAAQ91F,EAAOn+B,KAAI,SAAAvG,GAAK,WAAI,EAAAy6H,MAAMz6H,eAGlD,YAAAs1E,YAAA,SAAYhmD,EAAuB63E,QAAvB,IAAA73E,MAAA,WAAuB,IAAA63E,MAAA,OAC/B,IAAMxL,EAAM,IAAIzrE,KAMhB,MAAO,aAAeZ,EAAU,IAAMA,EAAU,IAAM,YAJlDqsE,EAAIvrE,cAAgB,GAAK5xB,KAAKk8H,UAAU/+B,EAAItrE,WAAa,EAAG,GAAU7xB,KAAKk8H,UAAU/+B,EAAIrrE,UAAW,GACpG9xB,KAAKk8H,UAAU/+B,EAAIrjE,WAAY,GAAU95B,KAAKk8H,UAAU/+B,EAAIpjE,aAAc,GAC1E/5B,KAAKk8H,UAAU/+B,EAAIg/B,aAAc,IAE2C,IAAMxzB,GAG5E,YAAAkzB,mBAAd,SAAiC1vE,G,iHAa7B,OAZIiwE,EAA2B,GAC3BpwC,EAA2B,IACzBhxE,EAAW,IAER1e,KAAK0D,KAAKwrC,cAAckf,kBAAkBrpD,MAAK,SAAAgS,GACpD+oH,EAAa/oH,MAGjB2H,EAAS1e,KAAK0D,KAAKurC,cAAcmf,kBAAkBrpD,MAAK,SAAA+T,GACpD42E,EAAa52E,EAAQtG,QAAO,SAAAwE,GAAK,OAAiB,MAAjBA,EAAE6T,mBAGvC,GAAMhM,QAAQK,IAAIR,I,OAElB,OAFA,SAEe,QAAXmxC,GACM,EAAa,IAAIloD,IACvBm4H,EAAWxuH,SAAQ,SAAA0F,GACH,MAARA,EAAE1T,IACF,EAAW8F,IAAI4N,EAAE1T,GAAI0T,MAIvB,EAAuB,GAC7B04E,EAAWp+E,SAAQ,SAAAlQ,GAEf,IAAIA,EAAEwE,OAAS,EAAAoS,WAAWC,OAAS7W,EAAEwE,OAAS,EAAAoS,WAAWmB,aAGjC,MAApB/X,EAAEuS,eAAN,CAIA,IAAMyC,EAAc,GACpBA,EAAOugD,OAAuB,MAAdv1D,EAAE+oB,UAAoB,EAAW7gB,IAAIlI,EAAE+oB,UACnD,EAAWxoB,IAAIP,EAAE+oB,UAAU7oB,KAAO,KACtC8U,EAAOuB,SAAWvW,EAAEuW,SAAW,EAAI,KACnC,EAAKooH,kBAAkB3pH,EAAQhV,GAC/B,EAAcpB,KAAKoW,OAGhB,CAAP,EAAOtB,EAAK4qH,QAAQ,MAEd,EAAe,CACjBM,WAAW,EACXjpH,QAAS,GACTic,MAAO,IAGX8sG,EAAWxuH,SAAQ,SAAA0F,GACf,GAAY,MAARA,EAAE1T,GAAN,CAGA,IAAMqzD,EAAS,IAAI,eACnBA,EAAOqjC,MAAMhjF,GACb,EAAQD,QAAQ/W,KAAK22D,OAGzB+4B,EAAWp+E,SAAQ,SAAAlQ,GACf,GAAwB,MAApBA,EAAEuS,eAAN,CAGA,IAAMyC,EAAS,IAAI,gBACnBA,EAAO4jF,MAAM54F,GACbgV,EAAOuU,cAAgB,KACvB,EAAQqI,MAAMhzB,KAAKoW,OAGhB,CAAP,EAAOu/D,KAAKC,UAAU,EAAS,KAAM,gBAI/B,YAAA0pD,mBAAd,W,wGAaI,OAZIvoH,EAAoB,GACpB+B,EAAoB,IAClB4F,EAAW,IAER1e,KAAK0D,KAAKwrC,cAAc9T,SAASr2B,MAAK,SAAAiS,GAC3CD,EAAUC,MAGd0H,EAAS1e,KAAK0D,KAAKurC,cAAc7T,SAASr2B,MAAK,SAAA3D,GAC3C0X,EAAU1X,EAAEoR,QAAO,SAAAwE,GAAK,OAAiB,MAAjBA,EAAE6T,mBAG9B,GAAMhM,QAAQK,IAAIR,I,OAEO,OAFzB,SAEyB,GAAMhb,KAAKge,cAAcujB,QAAQ,EAAAh5B,MAAMyD,Y,OA4BhE,OA5BMuwH,EAAmB,SAEnBC,EAAe,CACjBF,WAAW,EACXG,6BAA8BF,EAAiB3hH,gBAC/CvH,QAAS,GACTic,MAAO,IAGXjc,EAAQzF,SAAQ,SAAA0F,GACZ,GAAY,MAARA,EAAE1T,GAAN,CAGA,IAAMqzD,EAAS,IAAI,eACnBA,EAAOqjC,MAAMhjF,GACbkpH,EAAQnpH,QAAQ/W,KAAK22D,OAGzB79C,EAAQxH,SAAQ,SAAAlQ,GACZ,GAAwB,MAApBA,EAAEuS,eAAN,CAGA,IAAMyC,EAAS,IAAI,gBACnBA,EAAO4jF,MAAM54F,GACbgV,EAAOuU,cAAgB,KACvBu1G,EAAQltG,MAAMhzB,KAAKoW,OAGhB,CAAP,EAAOu/D,KAAKC,UAAUsqD,EAAS,KAAM,eAG3B,YAAAT,+BAAd,SAA6C9rH,EAAwBk8C,G,iHA+BjE,OA9BMgnE,EAAmC,GACnCnnC,EAA2B,IAC3BhxE,EAAW,IAER1e,KAAK0D,KAAKihB,WAAW6vC,eAAe7gD,GAAgB5O,MAAK,SAAA+R,GAC9D,IAAMspH,EAA0B,GAShC,OARmB,MAAftpH,GAA2C,MAApBA,EAAY5X,MAAgB4X,EAAY5X,KAAKQ,OAAS,GAC7EoX,EAAY5X,KAAKoS,SAAQ,SAAAlQ,GACrB,IAAM6V,EAAa,IAAI,EAAA8b,WAAW,IAAI,EAAAiC,eAAe5zB,IACrDg/H,EAAmBpgI,KAAKiX,EAAW+H,UAAUja,MAAK,SAAAs7H,GAC9CxJ,EAAe72H,KAAKqgI,UAIzBxhH,QAAQK,IAAIkhH,OAGvB1hH,EAAS1e,KAAK0D,KAAKihB,WAAWu+F,uBAAuBvvG,GAAgB5O,MAAK,SAAA+T,GACtE,IAAMwnH,EAAsB,GAS5B,OARe,MAAXxnH,GAAmC,MAAhBA,EAAQ5Z,MAAgB4Z,EAAQ5Z,KAAKQ,OAAS,GACjEoZ,EAAQ5Z,KAAKsT,QAAO,SAAApR,GAAK,OAAkB,OAAlBA,EAAEypB,eAAsBvZ,SAAQ,SAAAlQ,GACrD,IAAMgV,EAAS,IAAI,EAAAkqB,OAAO,IAAI,EAAAvM,WAAW3yB,IACzCk/H,EAAetgI,KAAKoW,EAAO4I,UAAUja,MAAK,SAAAw7H,GACtC7wC,EAAW1vF,KAAKugI,UAIrB1hH,QAAQK,IAAIohH,OAGvB,GAAMzhH,QAAQK,IAAIR,I,OAElB,OAFA,SAEe,QAAXmxC,GACM,EAAiB,IAAIloD,IAC3BkvH,EAAevlH,SAAQ,SAAAlQ,GACnB,EAAegI,IAAIhI,EAAEkC,GAAIlC,MAGvB,EAAuB,GAC7BsuF,EAAWp+E,SAAQ,SAAAlQ,GAEf,GAAIA,EAAEwE,OAAS,EAAAoS,WAAWC,OAAS7W,EAAEwE,OAAS,EAAAoS,WAAWmB,WAAzD,CAIA,IAAM/C,EAAc,CACpBA,YAAqB,IACE,MAAnBhV,EAAEupB,gBACFvU,EAAOU,YAAc1V,EAAEupB,cAAcnY,QAAO,SAAAlP,GAAM,SAAegG,IAAIhG,MAChEmI,KAAI,SAAAnI,GAAM,SAAe3B,IAAI2B,GAAIhC,SAE1C,EAAKy+H,kBAAkB3pH,EAAQhV,GAC/B,EAAcpB,KAAKoW,OAGhB,CAAP,EAAOtB,EAAK4qH,QAAQ,MAEd,EAAe,CACjBM,WAAW,EACXlpH,YAAa,GACbkc,MAAO,IAGX6jG,EAAevlH,SAAQ,SAAAlQ,GACnB,IAAM6V,EAAa,IAAI,mBACvBA,EAAW+iF,MAAM54F,GACjB,EAAQ0V,YAAY9W,KAAKiX,MAG7By4E,EAAWp+E,SAAQ,SAAAlQ,GACf,IAAMgV,EAAS,IAAI,gBACnBA,EAAO4jF,MAAM54F,GACb,EAAQ4xB,MAAMhzB,KAAKoW,MAEhB,CAAP,EAAOu/D,KAAKC,UAAU,EAAS,KAAM,gBAI/B,YAAA4pD,+BAAd,SAA6C7rH,G,0GA2BzC,OA1BMmD,EAA4B,GAC5BgC,EAAoB,IACpB4F,EAAW,IAER1e,KAAK0D,KAAKihB,WAAW6vC,eAAe7gD,GAAgB5O,MAAK,SAAA3D,GAQ9D,OANS,MAALA,GAAuB,MAAVA,EAAElC,MAAgBkC,EAAElC,KAAKQ,OAAS,GAC/C0B,EAAElC,KAAKoS,SAAQ,SAAA1P,GACX,IAAMqV,EAAa,IAAI,EAAA8b,WAAW,IAAI,EAAAiC,eAAepzB,IACrDkV,EAAY9W,KAAKiX,MAGlB4H,QAAQK,IAPiB,QAUpCR,EAAS1e,KAAK0D,KAAKihB,WAAWu+F,uBAAuBvvG,GAAgB5O,MAAK,SAAA3D,GAQtE,OANS,MAALA,GAAuB,MAAVA,EAAElC,MAAgBkC,EAAElC,KAAKQ,OAAS,GAC/C0B,EAAElC,KAAKsT,QAAO,SAAA0Y,GAAQ,OAAqB,OAArBA,EAAKL,eAAsBvZ,SAAQ,SAAA4Z,GACrD,IAAM9U,EAAS,IAAI,EAAAkqB,OAAO,IAAI,EAAAvM,WAAW7I,IACzCpS,EAAQ9Y,KAAKoW,MAGdyI,QAAQK,IAPa,QAUhC,GAAML,QAAQK,IAAIR,I,OAEH,OAFf,SAEe,GAAMhb,KAAKge,cAAcE,UAAUjO,I,OACzB,OADnB+yB,EAAS,SACU,GAAMhjC,KAAKge,cAAcujB,QAAQ,EAAAh5B,MAAMyD,UAAWg3B,I,OAoB3E,OApBMu5F,EAAmB,SAEnBC,EAAe,CACjBF,WAAW,EACXG,6BAA8BF,EAAiB3hH,gBAC/CxH,YAAa,GACbkc,MAAO,IAGXlc,EAAYxF,SAAQ,SAAAlQ,GAChB,IAAM6V,EAAa,IAAI,mBACvBA,EAAW+iF,MAAM54F,GACjB8+H,EAAQppH,YAAY9W,KAAKiX,MAG7B6B,EAAQxH,SAAQ,SAAAlQ,GACZ,IAAMgV,EAAS,IAAI,gBACnBA,EAAO4jF,MAAM54F,GACb8+H,EAAQltG,MAAMhzB,KAAKoW,MAEhB,CAAP,EAAOu/D,KAAKC,UAAUsqD,EAAS,KAAM,eAGjC,YAAAN,UAAR,SAAkBliG,EAAaknE,EAAe47B,QAAA,IAAAA,MAAA,KAC1C,IAAMC,EAAY/iG,EAAIzvB,WACtB,OAAOwyH,EAAU/gI,QAAUklG,EAAQ67B,EAC/B,IAAIv1H,MAAM05F,EAAQ67B,EAAU/gI,OAAS,GAAGwP,KAAKsxH,GAAgBC,GAG7D,YAAAV,kBAAR,SAA0B3pH,EAAahV,GAwBnC,OAvBAgV,EAAOxQ,KAAO,KACdwQ,EAAO9U,KAAOF,EAAEE,KAChB8U,EAAOwB,MAAQxW,EAAEwW,MACjBxB,EAAOyB,OAAS,KAChBzB,EAAO0U,SAAW1pB,EAAE0pB,SAEpB1U,EAAOsqH,UAAY,KACnBtqH,EAAOuqH,eAAiB,KACxBvqH,EAAOwqH,eAAiB,KACxBxqH,EAAOyqH,WAAa,KAEhBz/H,EAAEyW,QACFzW,EAAEyW,OAAOvG,SAAQ,SAAC0F,GACTZ,EAAOyB,OAGRzB,EAAOyB,QAAU,KAFjBzB,EAAOyB,OAAS,GAKpBzB,EAAOyB,SAAYb,EAAE1V,MAAQ,IAAM,KAAO0V,EAAEjV,SAI5CX,EAAEwE,MACN,KAAK,EAAAoS,WAAWC,MACZ7B,EAAOxQ,KAAO,QACdwQ,EAAOuqH,eAAiBv/H,EAAE0W,MAAMkB,SAChC5C,EAAOwqH,eAAiBx/H,EAAE0W,MAAMmB,SAChC7C,EAAOyqH,WAAaz/H,EAAE0W,MAAMua,KAExBjxB,EAAE0W,MAAMoB,OACR9C,EAAOsqH,UAAY,GACnBt/H,EAAE0W,MAAMoB,KAAK5H,SAAQ,SAAAqE,GACjBS,EAAOsqH,UAAU1gI,KAAK2V,EAAEJ,SAGhC,MACJ,KAAK,EAAAyC,WAAWmB,WACZ/C,EAAOxQ,KAAO,OACd,MACJ,QACI,OAGR,OAAOwQ,GAEf,EAlVA,GAAa,EAAA+M,iB,8FC9Bb,aACA,QAEA,SAEA,SACA,QAEA,UACA,UACA,UACA,UACA,UAEA,2BA+IA,OA9IW,EAAA6kF,SAAP,WACI,IAAMx+C,EAAM,IAAIlpB,EAchB,OAbAkpB,EAAI71C,eAAiB,KACrB61C,EAAI7+B,cAAgB,KACpB6+B,EAAIr/B,SAAW,KACfq/B,EAAI5jD,KAAO,EAAAoS,WAAWC,MACtBuxC,EAAIloD,KAAO,YACXkoD,EAAI5xC,MAAQ,8BACZ4xC,EAAI7xC,UAAW,EACf6xC,EAAI3xC,OAAS,GACb2xC,EAAI1xC,MAAQ,KACZ0xC,EAAIpwC,WAAa,KACjBowC,EAAIhzC,KAAO,KACXgzC,EAAIj/B,SAAW,KACfi/B,EAAI1+B,SAAW,EAAAC,mBAAmBC,KAC3Bw+B,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAagG,G,UAMvB,QANuB,IAAAA,MAAA,IAAW,EAAA93C,YAClC83C,EAAK5pD,KAAO4jD,EAAI5jD,KAChB4pD,EAAKrlC,SAAWq/B,EAAIr/B,SACO,MAAvBqlC,EAAK77C,iBACL67C,EAAK77C,eAAiB61C,EAAI71C,gBAE1B67C,EAAK7kC,eAAiB6+B,EAAI7+B,cAAe,CACzC,IAAMvhB,EAAM,IAAIqoG,KAAuB,QAAnB,EAACjiD,EAAK7kC,qBAAa,QAAI,IAAIuD,OAAwB,QAAlB,EAACs7B,EAAI7+B,qBAAa,QAAI,KAC3E6kC,EAAK7kC,cAAgBzf,MAAMC,KAAK/B,EAAI23H,UAWxC,OATAvxE,EAAKluD,KAAOkoD,EAAIloD,KAChBkuD,EAAK53C,MAAQ4xC,EAAI5xC,MACjB43C,EAAK73C,SAAW6xC,EAAI7xC,SACpB63C,EAAK1kC,SAAuB,QAAf,EAAG0+B,EAAI1+B,gBAAQ,QAAI,EAAAC,mBAAmBC,KAEjC,MAAdw+B,EAAI3xC,SACJ23C,EAAK33C,OAAS2xC,EAAI3xC,OAAOpM,KAAI,SAAAuL,GAAK,SAAAqoB,MAAMyhG,OAAO9pH,OAG3CwyC,EAAI5jD,MACR,KAAK,EAAAoS,WAAWC,MACZu3C,EAAK13C,MAAQ,EAAAG,MAAM6oH,OAAOt3E,EAAI1xC,OAC9B,MACJ,KAAK,EAAAE,WAAWmB,WACZq2C,EAAKp2C,WAAa,EAAAD,WAAW2nH,OAAOt3E,EAAIpwC,YACxC,MACJ,KAAK,EAAApB,WAAW2K,KACZ6sC,EAAKh5C,KAAO,EAAAmM,KAAKm+G,OAAOt3E,EAAIhzC,MAC5B,MACJ,KAAK,EAAAwB,WAAW4K,SACZ4sC,EAAKjlC,SAAW,EAAA3H,SAASk+G,OAAOt3E,EAAIj/B,UAI5C,OAAOilC,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAat4C,G,MAezB,YAfyB,IAAAA,MAAA,IAAa,EAAAovB,QACtCpvB,EAAOtL,KAAO4jD,EAAI5jD,KAClBsL,EAAOiZ,SAAWq/B,EAAIr/B,SACO,MAAzBjZ,EAAOyC,iBACPzC,EAAOyC,eAAiB61C,EAAI71C,gBAEhCzC,EAAO5P,KAAmB,MAAZkoD,EAAIloD,KAAe,IAAI,EAAA6c,UAAUqrC,EAAIloD,MAAQ,KAC3D4P,EAAO0G,MAAqB,MAAb4xC,EAAI5xC,MAAgB,IAAI,EAAAuG,UAAUqrC,EAAI5xC,OAAS,KAC9D1G,EAAOyG,SAAW6xC,EAAI7xC,SACtBzG,EAAO4Z,SAAuB,QAAf,EAAG0+B,EAAI1+B,gBAAQ,QAAI,EAAAC,mBAAmBC,KAEnC,MAAdw+B,EAAI3xC,SACJ3G,EAAO2G,OAAS2xC,EAAI3xC,OAAOpM,KAAI,SAAAuL,GAAK,SAAAqoB,MAAM2hG,SAAShqH,OAG/CwyC,EAAI5jD,MACR,KAAK,EAAAoS,WAAWC,MACZ/G,EAAO4G,MAAQ,EAAAG,MAAM+oH,SAASx3E,EAAI1xC,OAClC,MACJ,KAAK,EAAAE,WAAWmB,WACZjI,EAAOkI,WAAa,EAAAD,WAAW6nH,SAASx3E,EAAIpwC,YAC5C,MACJ,KAAK,EAAApB,WAAW2K,KACZzR,EAAOsF,KAAO,EAAAmM,KAAKq+G,SAASx3E,EAAIhzC,MAChC,MACJ,KAAK,EAAAwB,WAAW4K,SACZ1R,EAAOqZ,SAAW,EAAA3H,SAASo+G,SAASx3E,EAAIj/B,UAIhD,OAAOrZ,GAkBX,YAAA8oF,MAAA,SAAMx4F,G,QAwBF,OAvBAkC,KAAKiQ,eAAiBnS,EAAEmS,eACxBjQ,KAAKymB,SAAW3oB,EAAE2oB,SAClBzmB,KAAKkC,KAAOpE,EAAEoE,KACdlC,KAAKonB,SAAWtpB,EAAEspB,SAEdtpB,aAAa,EAAAkW,YACbhU,KAAKpC,KAAOE,EAAEF,KACdoC,KAAKkU,MAAQpW,EAAEoW,QAEflU,KAAKpC,KAAa,QAAT,EAAGE,EAAEF,YAAI,eAAEgd,gBACpB5a,KAAKkU,MAAe,QAAV,EAAGpW,EAAEoW,aAAK,eAAE0G,iBAG1B5a,KAAKiU,SAAWnW,EAAEmW,SAEF,MAAZnW,EAAEqW,SACe,EAAAH,WACbhU,KAAKmU,OAASrW,EAAEqW,OAAOpM,KAAI,SAAAuL,GAAK,WAAI,EAAAqoB,MAAMroB,OAM1CxV,EAAEoE,MACN,KAAK,EAAAoS,WAAWC,MACZvU,KAAKoU,MAAQ,IAAI,EAAAG,MAAMzW,EAAEsW,OACzB,MACJ,KAAK,EAAAE,WAAWmB,WACZzV,KAAK0V,WAAa,IAAI,EAAAD,WAAW3X,EAAE4X,YACnC,MACJ,KAAK,EAAApB,WAAW2K,KACZjf,KAAK8S,KAAO,IAAI,EAAAmM,KAAKnhB,EAAEgV,MACvB,MACJ,KAAK,EAAAwB,WAAW4K,SACZlf,KAAK6mB,SAAW,IAAI,EAAA3H,SAASphB,EAAE+oB,YAI/C,EA/IA,GAAa,EAAA+V,U,4FCdb,YAEA,SACA,QAEA,aAuCI,WAAY9+B,G,gBACC,MAALA,IAIAA,aAAa,EAAA6e,UACb3c,KAAKyb,eAAiB3d,EAAE2d,eACxBzb,KAAKgc,MAAQle,EAAEke,MACfhc,KAAK+b,OAASje,EAAEie,OAChB/b,KAAK+S,SAAWjV,EAAEiV,SAClB/S,KAAKgT,QAAUlV,EAAEkV,QACjBhT,KAAK0b,KAAO5d,EAAE4d,OAEd1b,KAAKyb,eAAiC,QAAnB,EAAG3d,EAAE2d,sBAAc,eAAEb,gBACxC5a,KAAKgc,MAAe,QAAV,EAAGle,EAAEke,aAAK,eAAEpB,gBACtB5a,KAAK+b,OAAiB,QAAX,EAAGje,EAAEie,cAAM,eAAEnB,gBACxB5a,KAAK+S,SAAqB,QAAb,EAAGjV,EAAEiV,gBAAQ,eAAE6H,gBAC5B5a,KAAKgT,QAAmB,QAAZ,EAAGlV,EAAEkV,eAAO,eAAE4H,gBAC1B5a,KAAK0b,KAAa,QAAT,EAAG5d,EAAE4d,YAAI,eAAEd,kBAGhC,OA3DW,EAAA0pF,SAAP,WACI,IAAMx+C,EAAM,IAAI7mC,EAOhB,OANA6mC,EAAIrqC,eAAiB,WACrBqqC,EAAI9pC,MAAQ,OACZ8pC,EAAI/pC,OAAS,mBACb+pC,EAAI/yC,SAAW,KACf+yC,EAAI9yC,QAAU,OACd8yC,EAAIpqC,KAAO,MACJoqC,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAWgG,GAOrB,YAPqB,IAAAA,MAAA,IAAW,EAAAnvC,UAChCmvC,EAAKrwC,eAAiBqqC,EAAIrqC,eAC1BqwC,EAAK9vC,MAAQ8pC,EAAI9pC,MACjB8vC,EAAK/vC,OAAS+pC,EAAI/pC,OAClB+vC,EAAK/4C,SAAW+yC,EAAI/yC,SACpB+4C,EAAK94C,QAAU8yC,EAAI9yC,QACnB84C,EAAKpwC,KAAOoqC,EAAIpqC,KACTowC,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAWt4C,GAOvB,YAPuB,IAAAA,MAAA,IAAa,EAAAyR,MACpCzR,EAAOiO,eAAuC,MAAtBqqC,EAAIrqC,eAAyB,IAAI,EAAAhB,UAAUqrC,EAAIrqC,gBAAkB,KACzFjO,EAAOwO,MAAqB,MAAb8pC,EAAI9pC,MAAgB,IAAI,EAAAvB,UAAUqrC,EAAI9pC,OAAS,KAC9DxO,EAAOuO,OAAuB,MAAd+pC,EAAI/pC,OAAiB,IAAI,EAAAtB,UAAUqrC,EAAI/pC,QAAU,KACjEvO,EAAOuF,SAA2B,MAAhB+yC,EAAI/yC,SAAmB,IAAI,EAAA0H,UAAUqrC,EAAI/yC,UAAY,KACvEvF,EAAOwF,QAAyB,MAAf8yC,EAAI9yC,QAAkB,IAAI,EAAAyH,UAAUqrC,EAAI9yC,SAAW,KACpExF,EAAOkO,KAAmB,MAAZoqC,EAAIpqC,KAAe,IAAI,EAAAjB,UAAUqrC,EAAIpqC,MAAQ,KACpDlO,GA+Bf,EA5DA,GAAa,EAAAyR,Q,6FCLb,aAGA,SAEA,QACA,SAEA,aA8BI,WAAYnhB,G,QACC,MAALA,IAIAA,aAAa,EAAA+W,WACb7U,KAAKpC,KAAOE,EAAEF,KACdoC,KAAK3B,MAAQP,EAAEO,QAEf2B,KAAKpC,KAAa,QAAT,EAAGE,EAAEF,YAAI,eAAEgd,gBACpB5a,KAAK3B,MAAe,QAAV,EAAGP,EAAEO,aAAK,eAAEuc,iBAE1B5a,KAAKkC,KAAOpE,EAAEoE,KACdlC,KAAKolC,SAAWtnC,EAAEsnC,UAE1B,OA5CW,EAAAk/D,SAAP,WACI,IAAMx+C,EAAM,IAAInqB,EAIhB,OAHAmqB,EAAIloD,KAAO,aACXkoD,EAAIznD,MAAQ,aACZynD,EAAI5jD,KAAO,EAAAwS,UAAUC,KACdmxC,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAYgG,GAKtB,YALsB,IAAAA,MAAA,IAAW,EAAAj3C,WACjCi3C,EAAK5pD,KAAO4jD,EAAI5jD,KAChB4pD,EAAKztD,MAAQynD,EAAIznD,MACjBytD,EAAKluD,KAAOkoD,EAAIloD,KAChBkuD,EAAK1mB,SAAW0gB,EAAI1gB,SACb0mB,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAYt4C,GAKxB,YALwB,IAAAA,MAAA,IAAa,EAAAmuB,OACrCnuB,EAAOtL,KAAO4jD,EAAI5jD,KAClBsL,EAAOnP,MAAqB,MAAbynD,EAAIznD,MAAgB,IAAI,EAAAoc,UAAUqrC,EAAIznD,OAAS,KAC9DmP,EAAO5P,KAAmB,MAAZkoD,EAAIloD,KAAe,IAAI,EAAA6c,UAAUqrC,EAAIloD,MAAQ,KAC3D4P,EAAO43B,SAAW0gB,EAAI1gB,SACf53B,GAuBf,EA7CA,GAAa,EAAAmuB,S,gGCRb,aAEA,QACA,SAEA,aAuFI,WAAY79B,G,wCACC,MAALA,IAIAA,aAAa,EAAAgpB,cACb9mB,KAAKM,MAAQxC,EAAEwC,MACfN,KAAK+oB,UAAYjrB,EAAEirB,UACnB/oB,KAAKioB,WAAanqB,EAAEmqB,WACpBjoB,KAAKgpB,SAAWlrB,EAAEkrB,SAClBhpB,KAAKkoB,SAAWpqB,EAAEoqB,SAClBloB,KAAKmoB,SAAWrqB,EAAEqqB,SAClBnoB,KAAKooB,SAAWtqB,EAAEsqB,SAClBpoB,KAAKqoB,KAAOvqB,EAAEuqB,KACdroB,KAAKsoB,MAAQxqB,EAAEwqB,MACftoB,KAAKuoB,WAAazqB,EAAEyqB,WACpBvoB,KAAK+hB,QAAUjkB,EAAEikB,QACjB/hB,KAAKwoB,QAAU1qB,EAAE0qB,QACjBxoB,KAAK6c,MAAQ/e,EAAE+e,MACf7c,KAAKyoB,MAAQ3qB,EAAE2qB,MACfzoB,KAAK0oB,IAAM5qB,EAAE4qB,IACb1oB,KAAKsV,SAAWxX,EAAEwX,SAClBtV,KAAK2oB,eAAiB7qB,EAAE6qB,eACxB3oB,KAAK4oB,cAAgB9qB,EAAE8qB,gBAEvB5oB,KAAKM,MAAe,QAAV,EAAGxC,EAAEwC,aAAK,eAAEsa,gBACtB5a,KAAK+oB,UAAuB,QAAd,EAAGjrB,EAAEirB,iBAAS,eAAEnO,gBAC9B5a,KAAKioB,WAAyB,QAAf,EAAGnqB,EAAEmqB,kBAAU,eAAErN,gBAChC5a,KAAKgpB,SAAqB,QAAb,EAAGlrB,EAAEkrB,gBAAQ,eAAEpO,gBAC5B5a,KAAKkoB,SAAqB,QAAb,EAAGpqB,EAAEoqB,gBAAQ,eAAEtN,gBAC5B5a,KAAKmoB,SAAqB,QAAb,EAAGrqB,EAAEqqB,gBAAQ,eAAEvN,gBAC5B5a,KAAKooB,SAAqB,QAAb,EAAGtqB,EAAEsqB,gBAAQ,eAAExN,gBAC5B5a,KAAKqoB,KAAa,QAAT,EAAGvqB,EAAEuqB,YAAI,eAAEzN,gBACpB5a,KAAKsoB,MAAe,QAAV,EAAGxqB,EAAEwqB,aAAK,eAAE1N,gBACtB5a,KAAKuoB,WAAyB,QAAf,EAAGzqB,EAAEyqB,kBAAU,eAAE3N,gBAChC5a,KAAK+hB,QAAmB,QAAZ,EAAGjkB,EAAEikB,eAAO,eAAEnH,gBAC1B5a,KAAKwoB,QAAmB,QAAZ,EAAG1qB,EAAE0qB,eAAO,eAAE5N,gBAC1B5a,KAAK6c,MAAe,QAAV,EAAG/e,EAAE+e,aAAK,eAAEjC,gBACtB5a,KAAKyoB,MAAe,QAAV,EAAG3qB,EAAE2qB,aAAK,eAAE7N,gBACtB5a,KAAK0oB,IAAW,QAAR,EAAG5qB,EAAE4qB,WAAG,eAAE9N,gBAClB5a,KAAKsV,SAAqB,QAAb,EAAGxX,EAAEwX,gBAAQ,eAAEsF,gBAC5B5a,KAAK2oB,eAAiC,QAAnB,EAAG7qB,EAAE6qB,sBAAc,eAAE/N,gBACxC5a,KAAK4oB,cAA+B,QAAlB,EAAG9qB,EAAE8qB,qBAAa,eAAEhO,kBAGlD,OAnIW,EAAA0pF,SAAP,WACI,IAAMx+C,EAAM,IAAI5mC,EAmBhB,OAlBA4mC,EAAIxlD,MAAQ,KACZwlD,EAAI/8B,UAAY,OAChB+8B,EAAI79B,WAAa,UACjB69B,EAAI98B,SAAW,MACf88B,EAAI59B,SAAW,aACf49B,EAAI39B,SAAW,WACf29B,EAAI19B,SAAW,KACf09B,EAAIz9B,KAAO,WACXy9B,EAAIx9B,MAAQ,KACZw9B,EAAIv9B,WAAa,QACjBu9B,EAAI/jC,QAAU,KACd+jC,EAAIt9B,QAAU,YACds9B,EAAIjpC,MAAQ,mBACZipC,EAAIr9B,MAAQ,aACZq9B,EAAIp9B,IAAM,eACVo9B,EAAIxwC,SAAW,OACfwwC,EAAIn9B,eAAiB,eACrBm9B,EAAIl9B,cAAgB,oBACbk9B,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAegG,GAmBzB,YAnByB,IAAAA,MAAA,IAAW,EAAAhlC,cACpCglC,EAAKxrD,MAAQwlD,EAAIxlD,MACjBwrD,EAAK/iC,UAAY+8B,EAAI/8B,UACrB+iC,EAAK7jC,WAAa69B,EAAI79B,WACtB6jC,EAAK9iC,SAAW88B,EAAI98B,SACpB8iC,EAAK5jC,SAAW49B,EAAI59B,SACpB4jC,EAAK3jC,SAAW29B,EAAI39B,SACpB2jC,EAAK1jC,SAAW09B,EAAI19B,SACpB0jC,EAAKzjC,KAAOy9B,EAAIz9B,KAChByjC,EAAKxjC,MAAQw9B,EAAIx9B,MACjBwjC,EAAKvjC,WAAau9B,EAAIv9B,WACtBujC,EAAK/pC,QAAU+jC,EAAI/jC,QACnB+pC,EAAKtjC,QAAUs9B,EAAIt9B,QACnBsjC,EAAKjvC,MAAQipC,EAAIjpC,MACjBivC,EAAKrjC,MAAQq9B,EAAIr9B,MACjBqjC,EAAKpjC,IAAMo9B,EAAIp9B,IACfojC,EAAKx2C,SAAWwwC,EAAIxwC,SACpBw2C,EAAKnjC,eAAiBm9B,EAAIn9B,eAC1BmjC,EAAKljC,cAAgBk9B,EAAIl9B,cAClBkjC,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAet4C,GAmB3B,YAnB2B,IAAAA,MAAA,IAAa,EAAA0R,UACxC1R,EAAOlN,MAAqB,MAAbwlD,EAAIxlD,MAAgB,IAAI,EAAAma,UAAUqrC,EAAIxlD,OAAS,KAC9DkN,EAAOub,UAA6B,MAAjB+8B,EAAI/8B,UAAoB,IAAI,EAAAtO,UAAUqrC,EAAI/8B,WAAa,KAC1Evb,EAAOya,WAA+B,MAAlB69B,EAAI79B,WAAqB,IAAI,EAAAxN,UAAUqrC,EAAI79B,YAAc,KAC7Eza,EAAOwb,SAA2B,MAAhB88B,EAAI98B,SAAmB,IAAI,EAAAvO,UAAUqrC,EAAI98B,UAAY,KACvExb,EAAO0a,SAA2B,MAAhB49B,EAAI59B,SAAmB,IAAI,EAAAzN,UAAUqrC,EAAI59B,UAAY,KACvE1a,EAAO2a,SAA2B,MAAhB29B,EAAI39B,SAAmB,IAAI,EAAA1N,UAAUqrC,EAAI39B,UAAY,KACvE3a,EAAO4a,SAA2B,MAAhB09B,EAAI19B,SAAmB,IAAI,EAAA3N,UAAUqrC,EAAI19B,UAAY,KACvE5a,EAAO6a,KAAmB,MAAZy9B,EAAIz9B,KAAe,IAAI,EAAA5N,UAAUqrC,EAAIz9B,MAAQ,KAC3D7a,EAAO8a,MAAqB,MAAbw9B,EAAIx9B,MAAgB,IAAI,EAAA7N,UAAUqrC,EAAIx9B,OAAS,KAC9D9a,EAAO+a,WAA+B,MAAlBu9B,EAAIv9B,WAAqB,IAAI,EAAA9N,UAAUqrC,EAAIv9B,YAAc,KAC7E/a,EAAOuU,QAAyB,MAAf+jC,EAAI/jC,QAAkB,IAAI,EAAAtH,UAAUqrC,EAAI/jC,SAAW,KACpEvU,EAAOgb,QAAyB,MAAfs9B,EAAIt9B,QAAkB,IAAI,EAAA/N,UAAUqrC,EAAIt9B,SAAW,KACpEhb,EAAOqP,MAAqB,MAAbipC,EAAIjpC,MAAgB,IAAI,EAAApC,UAAUqrC,EAAIjpC,OAAS,KAC9DrP,EAAOib,MAAqB,MAAbq9B,EAAIr9B,MAAgB,IAAI,EAAAhO,UAAUqrC,EAAIr9B,OAAS,KAC9Djb,EAAOkb,IAAiB,MAAXo9B,EAAIp9B,IAAc,IAAI,EAAAjO,UAAUqrC,EAAIp9B,KAAO,KACxDlb,EAAO8H,SAA2B,MAAhBwwC,EAAIxwC,SAAmB,IAAI,EAAAmF,UAAUqrC,EAAIxwC,UAAY,KACvE9H,EAAOmb,eAAuC,MAAtBm9B,EAAIn9B,eAAyB,IAAI,EAAAlO,UAAUqrC,EAAIn9B,gBAAkB,KACzFnb,EAAOob,cAAqC,MAArBk9B,EAAIl9B,cAAwB,IAAI,EAAAnO,UAAUqrC,EAAIl9B,eAAiB,KAC/Epb,GAmEf,EApIA,GAAa,EAAA0R,Y,6FCLb,cAEA,SAEA,QACA,SAEA,aAmCI,WAAYphB,G,UACC,MAALA,IAIU,MAAVA,EAAE0X,OACe,EAAAnB,UACbrU,KAAKwV,KAAO1X,EAAE0X,KAAKzN,KAAI,SAAAkK,GAAK,WAAI,EAAA45C,SAAS55C,OAM7CnU,aAAa,EAAAuW,WACbrU,KAAKsV,SAAWxX,EAAEwX,SAClBtV,KAAKuV,SAAWzX,EAAEyX,SAClBvV,KAAK2uB,KAAO7wB,EAAE6wB,OAEd3uB,KAAKsV,SAAqB,QAAb,EAAGxX,EAAEwX,gBAAQ,eAAEsF,gBAC5B5a,KAAKuV,SAAqB,QAAb,EAAGzX,EAAEyX,gBAAQ,eAAEqF,gBAC5B5a,KAAK2uB,KAAa,QAAT,EAAG7wB,EAAE6wB,YAAI,eAAE/T,kBAGhC,OAzDW,EAAA0pF,SAAP,WACI,IAAMx+C,EAAM,IAAIvxC,EAKhB,OAJAuxC,EAAItwC,KAAO,GACXswC,EAAIxwC,SAAW,OACfwwC,EAAIvwC,SAAW,gBACfuwC,EAAIn3B,KAAO,mBACJm3B,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAYgG,GAOtB,YAPsB,IAAAA,MAAA,IAAW,EAAAz3C,WACjB,MAAZyxC,EAAItwC,OACJs2C,EAAKt2C,KAAOswC,EAAItwC,KAAKzN,KAAI,SAAAkK,GAAK,SAAA45C,SAASuxE,OAAOnrH,OAElD65C,EAAKx2C,SAAWwwC,EAAIxwC,SACpBw2C,EAAKv2C,SAAWuwC,EAAIvwC,SACpBu2C,EAAKn9B,KAAOm3B,EAAIn3B,KACTm9B,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAYt4C,GAOxB,YAPwB,IAAAA,MAAA,IAAa,EAAA+G,OACrB,MAAZuxC,EAAItwC,OACJhI,EAAOgI,KAAOswC,EAAItwC,KAAKzN,KAAI,SAAAkK,GAAK,SAAA45C,SAASyxE,SAASrrH,OAEtDzE,EAAO8H,SAA2B,MAAhBwwC,EAAIxwC,SAAmB,IAAI,EAAAmF,UAAUqrC,EAAIxwC,UAAY,KACvE9H,EAAO+H,SAA2B,MAAhBuwC,EAAIvwC,SAAmB,IAAI,EAAAkF,UAAUqrC,EAAIvwC,UAAY,KACvE/H,EAAOmhB,KAAmB,MAAZm3B,EAAIn3B,KAAe,IAAI,EAAAlU,UAAUqrC,EAAIn3B,MAAQ,KACpDnhB,GA+Bf,EA1DA,GAAa,EAAA+G,S,gGCLb,aAEA,QACA,SAEA,aAuBI,WAAYzW,G,MAFZ,KAAA4R,MAAsB,KAGT,MAAL5R,IAIAA,aAAa,EAAAiU,aACb/R,KAAK6R,IAAM/T,EAAE+T,IAEb7R,KAAK6R,IAAW,QAAR,EAAG/T,EAAE+T,WAAG,eAAE+I,gBAEtB5a,KAAK0P,MAAQ5R,EAAE4R,OAEvB,OAlCW,EAAA40F,SAAP,WACI,IAAMx+C,EAAM,IAAI+F,EAGhB,OAFA/F,EAAIj0C,IAAM,qBACVi0C,EAAIp2C,MAAQ,KACLo2C,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAegG,GAGzB,YAHyB,IAAAA,MAAA,IAAW,EAAA/5C,cACpC+5C,EAAKj6C,IAAMi0C,EAAIj0C,IACfi6C,EAAKp8C,MAAQo2C,EAAIp2C,MACVo8C,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAet4C,GAG3B,YAH2B,IAAAA,MAAA,IAAa,EAAAq+C,UACxCr+C,EAAOqE,IAAiB,MAAXi0C,EAAIj0C,IAAc,IAAI,EAAA4I,UAAUqrC,EAAIj0C,KAAO,KACxDrE,EAAOkC,MAAQo2C,EAAIp2C,MACZlC,GAkBf,EAnCA,GAAa,EAAAq+C,Y,kGCPb,aAEA,SAEA,SAEA,aAmBI,WAAY/tD,GACC,MAALA,IAIJkC,KAAKkC,KAAOpE,EAAEoE,MAEtB,OAzBW,EAAAoiG,SAAP,WACI,IAAMx+C,EAAM,IAAIrwC,EAEhB,OADAqwC,EAAI5jD,KAAO,EAAA0T,eAAeC,QACnBiwC,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAiBgG,GAE3B,YAF2B,IAAAA,MAAA,IAAW,EAAAn2C,gBACtCm2C,EAAK5pD,KAAO4jD,EAAI5jD,KACT4pD,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAiBgG,GAE7B,YAF6B,IAAAA,MAAA,IAAW,EAAAr2C,YACxCq2C,EAAK5pD,KAAO4jD,EAAI5jD,KACT4pD,GAYf,EA1BA,GAAa,EAAAr2C,c,kGCNb,aAEA,SACA,QAEA,2BAyCA,OAxCW,EAAA6uF,SAAP,WACI,IAAMx+C,EAAM,IAAIz2B,EAIhB,OAHAy2B,EAAI71C,eAAiB,uCACrB61C,EAAIloD,KAAO,kBACXkoD,EAAI52B,WAAa,KACV42B,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAiBgG,GAM3B,YAN2B,IAAAA,MAAA,IAAW,EAAAt4C,gBACtCs4C,EAAKluD,KAAOkoD,EAAIloD,KAChBkuD,EAAK58B,WAAa42B,EAAI52B,WACK,MAAvB48B,EAAK77C,iBACL67C,EAAK77C,eAAiB61C,EAAI71C,gBAEvB67C,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAiBt4C,GAM7B,YAN6B,IAAAA,MAAA,IAAa,EAAA6hB,YAC1C7hB,EAAO5P,KAAmB,MAAZkoD,EAAIloD,KAAe,IAAI,EAAA6c,UAAUqrC,EAAIloD,MAAQ,KAC3D4P,EAAO0hB,WAAa42B,EAAI52B,WACK,MAAzB1hB,EAAOyC,iBACPzC,EAAOyC,eAAiB61C,EAAI71C,gBAEzBzC,GAQX,YAAA8oF,MAAA,SAAMx4F,G,MACFkC,KAAKiQ,eAAiBnS,EAAEmS,eACpBnS,aAAa,EAAA0V,eACbxT,KAAKpC,KAAOE,EAAEF,KAEdoC,KAAKpC,KAAa,QAAT,EAAGE,EAAEF,YAAI,eAAEgd,gBAExB5a,KAAKkvB,WAAapxB,EAAEoxB,YAE5B,EAzCA,GAAa,EAAAG,c,6FCLb,aAGA,EAWI,SAAYjrB,GACRpE,KAAKwR,QAAUpN,EAAM0uB,qBACrB9yB,KAAK+yB,QAAU3uB,EAAM2uB,QACrB/yB,KAAKgzB,QAAU5uB,EAAM4uB,QACrBhzB,KAAK4vB,OAASxrB,EAAMwrB,OACpB5vB,KAAKwiD,SAAWp+C,EAAMo+C,SACtBxiD,KAAKyiD,UAAYr+C,EAAMq+C,UACvBziD,KAAK45B,KAAOx1B,EAAMw1B,KAClB55B,KAAK0iD,GAAKt+C,EAAMs+C,GAChB1iD,KAAKkC,KAAO,EAAAixB,UAAU/uB,EAAMlC,OApBvB,EAAA+5H,S,8FCHb,aAEA,QACA,SAEA,2BA2BA,OA1BW,EAAA33B,SAAP,WACI,IAAMx+C,EAAM,IAAI2wC,EAEhB,OADA3wC,EAAIloD,KAAO,cACJkoD,GAGJ,EAAAs3E,OAAP,SAAct3E,EAAagG,GAEvB,YAFuB,IAAAA,MAAA,IAAW,EAAA32C,YAClC22C,EAAKluD,KAAOkoD,EAAIloD,KACTkuD,GAGJ,EAAAwxE,SAAP,SAAgBx3E,EAAat4C,GAEzB,YAFyB,IAAAA,MAAA,IAAa,EAAAipF,QACtCjpF,EAAO5P,KAAmB,MAAZkoD,EAAIloD,KAAe,IAAI,EAAA6c,UAAUqrC,EAAIloD,MAAQ,KACpD4P,GAMX,YAAA8oF,MAAA,SAAMx4F,G,MACEA,aAAa,EAAAqX,WACbnV,KAAKpC,KAAOE,EAAEF,KAEdoC,KAAKpC,KAAa,QAAT,EAAGE,EAAEF,YAAI,eAAEgd,iBAGhC,EA3BA,GAAa,EAAA67E,U,w+CCDb,cAQA,UACA,UAEA,aAII,WAAoBx1F,EAAgCggB,GAAhC,KAAAhgB,aAAgC,KAAAggB,aAChDjhB,KAAKu9H,uBAAyB,IAAI,EAAAC,uBAAuBv8H,GACzDjB,KAAKy9H,2BAA6B,IAAI,EAAAC,2BAA2Bz8G,GAyDzE,OAtDU,YAAA08G,eAAN,SAAqBC,EAAwCr4F,EAAqBs4F,G,sIAElED,EAAW7W,gB,KACV,EAAA+W,eAAeC,OAAf,Y,KAIA,EAAAD,eAAeE,MAAf,Y,mBAHD,SAAMh+H,KAAKy9H,2BAA2BQ,OAAO14F,EAAS3qB,gBAAiBijH,GACnE,SAAAv5F,GAAM,SAAKrjB,WAAWi+F,aAAa0e,EAAWhgD,aAAah+E,GAAIg+H,EAAWhgD,aAAa5vB,KAAKpuD,GAAI0kC,O,cAUpG,OAFA,SAEA,M,OAFA,OALM45F,EAAkB,gD,kDACI,SAAMl+H,KAAKihB,WAAW+9F,uBAAuB4e,EAAWhgD,aAAah+E,GACzFg+H,EAAWhgD,aAAa5vB,KAAKpuD,K,OACjC,MAAO,CAAP,EAFwB,SAED4M,aAE3B,GAAMxM,KAAKu9H,uBAAuBU,OAAOL,EAAWpxH,IAAKqxH,EACrDK,I,OAGJ,MAAM,IAAI/6H,MAAM,4B,0BAGxB,O,WAAA,GAAMnD,KAAKihB,WAAWq+F,WAAWse,EAAWhgD,aAAah+E,K,OACzD,MADA,SACM,E,yBAIR,YAAAixH,uBAAN,SAA6B51C,EAAgB2iD,EAA0CO,EACnFN,G,2GACMt8H,EAAW05E,EAAQ2iD,EAAW5W,mBAAqB4W,EAAWzxC,e,+CAExDyxC,EAAW7W,gB,KACV,EAAA+W,eAAeC,OAAf,Y,KAIA,EAAAD,eAAeE,MAAf,Y,mBAHD,SAAMh+H,KAAKy9H,2BAA2BQ,OAAOE,EAAkBvjH,gBAAiBijH,GAC5E,SAAAv5F,GAAM,SAAKrjB,WAAW6/F,mBAAmBv/G,EAAS3B,GAAIg+H,EAAW7jD,aAAcz1C,O,OACnF,OAFA,SAEA,M,OAOA,OALM45F,EAAkB,gD,kDACI,SAAMl+H,KAAKihB,WAAW4/F,yBAAyBt/G,EAAS3B,GAC5Eg+H,EAAW7jD,e,OACf,MAAO,CAAP,EAFwB,SAEDvtE,aAE3B,GAAMxM,KAAKu9H,uBAAuBU,OAAOL,EAAWpxH,IAAKqxH,EAAmBK,I,OAC5E,OADA,SACA,M,OAEA,MAAM,IAAI/6H,MAAM,6B,6CAGpB83E,EACA,GAAMj7E,KAAKihB,WAAW+4D,4BAA4Bz4E,EAAS3B,GAAIg+H,EAAW7jD,eAD1E,O,cACA,S,eAEA,SAAM/5E,KAAKihB,WAAW64D,uBAAuBv4E,EAAS3B,GAAIg+H,EAAW7jD,e,QAArE,S,mBAEJ,MAAM,E,0BAGlB,EA/DA,GAAa,EAAA+8B,qB,sGCfb,SAAYgnB,GACR,uBACA,qBAFJ,CAAY,EAAAA,iBAAA,EAAAA,eAAc,M,6+CCE1B,YAOA,aACI,WAAoB78H,GAAA,KAAAA,aA+IxB,OA7IU,YAAAg9H,OAAN,SAAazxH,EAAahR,EAAsB0iI,G,iGACxC1iI,EAAK8O,OAAOG,YAPY,UAQjB,GAAMzK,KAAKo+H,gBAAgB5xH,EAAKhR,IADvC,M,cAGA,MAAO,CAAP,EAAO,U,OAAA,SAAMwE,KAAKq+H,kBAAkB7xH,EAAKhR,EAAM0iI,YAGzC,YAAAE,gBAAd,SAA8B5xH,EAAahR,G,sGAgBlB,OAff8iI,EAAY,EAAA/1H,MAAMkE,OAAOD,GACzBq6F,EAAU,IAAIiW,QAAQ,CACxB,aAAa,IAAIprF,MAAO2nE,cACxB,eAAgBilC,EAAUC,aAAatgI,IAAI,MAC3C,iBAAkBzC,EAAK8O,OAAOG,WAAWF,WACzC,iBAAkB,cAGhBiW,EAAU,IAAIquC,QAAQriD,EAAK,CAC7BrG,KAAM3K,EAAK8O,OACXqwE,MAAO,WACPv5D,OAAQ,MACRylF,QAASA,IAGQ,GAAMj4C,MAAMpuC,I,OAEjC,GAA4B,OAFtBg+G,EAAe,UAEJ74G,OACb,MAAM,IAAIxiB,MAAM,gCAAgCq7H,EAAa74G,Q,kBAGvD,YAAA04G,kBAAd,SAAgC7xH,EAAahR,EAAsB0iI,G,8IAO/D,GANM/mB,EAAU,EAAA5uG,MAAMkE,OAAOD,GACvBiyH,EAAYz+H,KAAK0+H,gBAAgBvnB,EAAQonB,aAAatgI,IAAI,OAC5D0gI,EAAa,EACXC,EAAY3yH,KAAKosH,KAAK78H,EAAK8O,OAAOG,WAAag0H,GAC/CI,EAAyB,GAE3BD,EAzCgB,IA0ChB,MAAM,IAAIz7H,MAAM,+CA1CA,IA0C+Cs7H,G,iEAIxDE,EAAaC,EACV,GAAM5+H,KAAK8+H,oBAAoBtyH,EAAK0xH,IADjB,M,OAqBH,OApBtB1xH,EAAM,SACAuyH,EAAW,EAAAx2H,MAAMkE,OAAOD,GACxBwyH,EAAUh/H,KAAKi/H,eAAeN,GACpCI,EAASR,aAAa/5F,OAAO,OAAQ,SACrCu6F,EAASR,aAAa/5F,OAAO,UAAWw6F,GAClChtG,EAAQ2sG,EAAaF,EACrBS,EAAY1jI,EAAK8O,OAAOlL,MAAM4yB,EAAOA,EAAQysG,GAC7CU,EAAe,IAAIriB,QAAQ,CAC7B,aAAa,IAAIprF,MAAO2nE,cACxB,eAAgB0lC,EAASR,aAAatgI,IAAI,MAC1C,iBAAkBihI,EAAUz0H,WAAWF,aAGrC60H,EAAe,IAAIvwE,QAAQkwE,EAASx0H,WAAY,CAClDpE,KAAM+4H,EACNvkD,MAAO,WACPv5D,OAAQ,MACRylF,QAASs4B,IAGS,GAAMvwE,MAAMwwE,I,cAEL,OAFvBC,EAAgB,UAEJ15G,OAAd,OACMnU,EAAU,2CAA2C6tH,EAAc15G,OACzE,KAAA3lB,KAAKiB,YAAWW,MAAM,EAAA4P,EAAU,KAAO,GAAM6tH,EAAcvwE,S,OAC3D,MADA,WAAsB,EAAiB,WACjC,IAAI3rD,MAAMqO,G,cAGpBqtH,EAAaviI,KAAK0iI,GAClBL,I,aAGE,SAAM3+H,KAAK8+H,oBAAoBtyH,EAAK0xH,I,OAiBzB,OAjBjB1xH,EAAM,SACA8yH,EAAe,EAAA/2H,MAAMkE,OAAOD,GAC5B+yH,EAAev/H,KAAKu/H,aAAaV,GACvCS,EAAaf,aAAa/5F,OAAO,OAAQ,aACnCqiE,EAAU,IAAIiW,QAAQ,CACxB,aAAa,IAAIprF,MAAO2nE,cACxB,eAAgBimC,EAAaf,aAAatgI,IAAI,MAC9C,iBAAkBshI,EAAavjI,OAAOuO,aAGpCiW,EAAU,IAAIquC,QAAQywE,EAAa/0H,WAAY,CACjDpE,KAAMo5H,EACN5kD,MAAO,WACPv5D,OAAQ,MACRylF,QAASA,IAGI,GAAMj4C,MAAMpuC,I,cAEL,OAFlBjf,EAAW,UAEJokB,OAAT,QACMnU,EAAU,gDAAgDjQ,EAASokB,OACzE,KAAA3lB,KAAKiB,YAAWW,MAAM,EAAA4P,EAAU,KAAO,GAAMjQ,EAASutD,S,QACtD,MADA,WAAsB,EAAiB,WACjC,IAAI3rD,MAAMqO,G,6BAGpB,M,mCAIM,YAAAstH,oBAAd,SAAkCtyH,EAAa0xH,G,+GACrCI,EAAY,EAAA/1H,MAAMkE,OAAOD,GACzBgzH,EAAS,IAAI9tG,KAAqC,QAAjC,EAAC4sG,EAAUC,aAAatgI,IAAI,aAAK,QAAI,IAExDgR,MAAMuwH,EAAOntG,YACbmtG,EAAO1tB,QAAQpgF,KAAKyrE,MAAQ,MAG5BqiC,EAAOntG,UAAYX,KAAKyrE,MAAQ,IACzB,GAAM+gC,KADb,M,OACA,MAAO,CAAP,EAAO,U,OAEX,MAAO,CAAP,EAAO1xH,WAGH,YAAAyyH,eAAR,SAAuBN,GAEnB,IAAMc,GAAc,mDAAqDd,EAAWp0H,YAAYnL,OAAO,IACvG,OAAO,EAAAmJ,MAAMsD,cAAc4zH,IAGvB,YAAAF,aAAR,SAAqBG,GACjB,IAAIC,EAAM,oDAKV,OAJAD,EAAY9xH,SAAQ,SAAAoxH,GAChBW,GAAO,WAAWX,EAAO,eAE7BW,GAAO,gBAIH,YAAAjB,gBAAR,SAAwB9pF,GACpB,OAAIgrF,EAAQxxH,QAAQwmC,EAAS,eAAiB,EACnC,UACAgrF,EAAQxxH,QAAQwmC,EAAS,eAAiB,EAC1C,UAEA,SAGnB,EAhJA,GAAa,EAAA4oF,yBAkJb,iBA0BI,WAAY5oF,GAJZ,KAAA/hC,KAAO,EACP,KAAAD,MAAQ,EACR,KAAAitH,IAAM,EAGF,IACI,IAAM/xH,EAAQ8mC,EAAQjnC,MAAM,KAAK5F,KAAI,SAAAsiE,GAAK,OAAAr7D,OAAOnF,SAASwgE,EAAG,OAC7DrqE,KAAK6S,KAAO/E,EAAM,GAClB9N,KAAK4S,MAAQ9E,EAAM,GACnB9N,KAAK6/H,IAAM/xH,EAAM,GACnB,WAaV,OArCW,EAAAM,QAAP,SAAeH,EAA+BC,GAS1C,MARmB,iBAAR,IACPD,EAAI,IAAI2xH,EAAQ3xH,IAGD,iBAAR,IACPC,EAAI,IAAI0xH,EAAQ1xH,IAGbD,EAAE4E,OAAS3E,EAAE2E,KAAO5E,EAAE4E,KAAO3E,EAAE2E,KAClC5E,EAAE2E,QAAU1E,EAAE0E,MAAQ3E,EAAE2E,MAAQ1E,EAAE0E,MAC9B3E,EAAE4xH,MAAQ3xH,EAAE2xH,IAAM5xH,EAAE4xH,IAAM3xH,EAAE2xH,IACxB,GAsBhB,YAAAzxH,QAAA,SAAQ0xH,GACJ,OAAOF,EAAQxxH,QAAQpO,KAAM8/H,IAErC,EA7CA,I,8/CCvJA,YAEA,aAEI,WAAoB7+G,GAAA,KAAAA,aAoBxB,OAlBU,YAAAg9G,OAAN,SAAaE,EAA2BN,EAAmCljG,G,kGACjE2J,EAAK,IAAIC,SACf,IACUs2E,EAAO,IAAII,KAAK,CAAC4iB,EAAkBvzH,QAAS,CAAEpI,KAAM,6BAC1DoiC,EAAGE,OAAO,OAAQq2E,EAAMsjB,GAC1B,MAAO38H,GACL,IAAI,EAAA+G,MAAME,QAAW,EAAAF,MAAMK,UAMvB,MAAMpH,EALN8iC,EAAGE,OAAO,OAAQn7B,EAAO5B,KAAKo2H,EAAkBvzH,QAAgB,CAC5DymH,SAAUoN,EACVnN,YAAa,6BAOzB,SAAMr2F,EAAQ2J,I,cAAd,S,YAER,EAtBA,GAAa,EAAAo5F,+B,8/CCNb,aAEA,SAIA,SAIA,SAWA,SACA,QAEMp9B,EACa,WADbA,EAEa,WAInB,aAGI,WAAoBtiF,EAAsCsf,EAC9Crc,EAAgCu2B,EAChC93C,EAAkC6rC,GAF1B,KAAAvtB,gBAAsC,KAAAsf,cAC9C,KAAArc,aAAgC,KAAAu2B,iBAChC,KAAA93C,cAAkC,KAAA6rC,gBA6KlD,OA3KI,YAAAmhF,WAAA,WACI1sH,KAAK+/H,qBAAuB,MAG1B,YAAAx+F,QAAN,SAAc1F,EAAmBl9B,G,kGAGf,OAFRs0D,EAAS,IAAI,EAAAwjC,QACZ72F,GAAKi8B,EAAMj8B,GAClB,EAAAqzD,EAAc,GAAMjzD,KAAKge,cAAcujB,QAAQ1F,EAAMj+B,KAAMe,I,OAC3D,OADA,EAAOf,KAAO,SACP,CAAP,EAAOq1D,WAGL,YAAAh1D,IAAN,SAAU2B,G,kGACS,SAAMI,KAAKs9B,YAAYqhB,a,OACtB,OADV/uB,EAAS,SACC,GAAM5vB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OACzB,OAAe,OAFTvc,EAAU,WAEQA,EAAQlX,eAAeyD,GAIxC,CAAP,EAAO,IAAI,EAAA62F,OAAOpjF,EAAQzT,KAHf,CAAP,EAAO,cAMT,YAAA83B,OAAN,W,sGACmB,SAAM13B,KAAKs9B,YAAYqhB,a,OACtB,OADV/uB,EAAS,SACC,GAAM5vB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OAEzB,IAAWhwB,KAHLyT,EAAU,SAEV9R,EAAqB,GACV8R,EACTA,EAAQlX,eAAeyD,IACvB2B,EAASjF,KAAK,IAAI,EAAAm6F,OAAOpjF,EAAQzT,KAGzC,MAAO,CAAP,EAAO2B,WAGL,YAAAmpD,gBAAN,W,oGACI,OAAiC,MAA7B1qD,KAAK+/H,qBACE,CAAP,EAAO//H,KAAK+/H,sBAGD,GAAM//H,KAAKge,cAAckwG,U,OACxC,IADe,SAEX,MAAM,IAAI/qH,MAAM,WAKJ,OAFVi5H,EAA2B,GAC3BphH,EAA2B,GACjB,GAAMhb,KAAK03B,U,OAK3B,OALgB,SACR9pB,SAAQ,SAAAqlD,GACZj4C,EAAS1e,KAAK22D,EAAO33C,UAAUja,MAAK,SAAAiS,GAAK,OAAA8oH,EAAW9/H,KAAKgX,UAG7D,GAAM6H,QAAQK,IAAIR,I,OAQlB,OARA,SACAohH,EAAW9jF,KAAK,EAAA/vC,MAAMwF,gBAAgB/N,KAAKN,YAAa,UAElDsgI,EAAa,IAAI,EAAA7qH,YACZvX,KAAOoC,KAAKN,YAAYpB,EAAE,cACrC89H,EAAW9/H,KAAK0jI,GAEhBhgI,KAAK+/H,qBAAuB3D,EACrB,CAAP,EAAOp8H,KAAK+/H,8BAGV,YAAA7uE,aAAN,W,kGACoB,SAAMlxD,KAAK0qD,mB,OAS3B,OATMr3C,EAAU,SACV+/G,EAAgC,GACtC//G,EAAQzF,SAAQ,SAAA0F,GACZ,IAAM2sH,EAAa,IAAI,EAAA9qH,WACvB8qH,EAAWrgI,GAAK0T,EAAE1T,GAClBqgI,EAAW/4G,aAAe5T,EAAE4T,aAC5B,IAAMpZ,EAAkB,MAAVwF,EAAE1V,KAAe0V,EAAE1V,KAAKoN,QAAQ,aAAc,IAAI2C,MA/EnD,KA+E6E,GAC1F,EAAA2nF,aAAaP,eAAeq+B,EAAO,EAAGtlH,EAAOmyH,EAAY,KAhF5C,QAkFV,CAAP,EAAO7M,WAGL,YAAAE,UAAN,SAAgB1zH,G,gGACI,SAAMI,KAAKkxD,gB,OAC3B,OADM79C,EAAU,SACT,CAAP,EAAO,EAAAiiF,aAAaG,kBAAkBpiF,EAASzT,YAG7C,YAAAurG,eAAN,SAAqBl4C,G,6GACXzyC,EAAU,IAAI,EAAA0yC,cAAcD,GAGjB,MAAbA,EAAOrzD,GAAP,MACW,GAAMI,KAAKihB,WAAWk9F,WAAW39F,I,cAA5Cjf,EAAW,SACX0xD,EAAOrzD,GAAK2B,EAAS3B,G,aAEV,SAAMI,KAAKihB,WAAWm9F,UAAUnrD,EAAOrzD,GAAI4gB,I,OAAtDjf,EAAW,S,iBAGA,SAAMvB,KAAKs9B,YAAYqhB,a,OAEtC,OAFM/uB,EAAS,SACTp0B,EAAO,IAAI,EAAAm7F,WAAWp1F,EAAUquB,GACtC,GAAM5vB,KAAK2vH,OAAOn0H,I,cAAlB,S,YAGE,YAAAm0H,OAAN,SAAa18D,G,oGACM,SAAMjzD,KAAKs9B,YAAYqhB,a,OACxB,OADR/uB,EAAS,SACD,GAAM5vB,KAAKw3C,eAAev5C,IACpCqiG,EAAqB1wE,I,OAczB,OAbe,OAFXvc,EAAU,YAGVA,EAAU,IAGV4/C,aAAkB,EAAA0jC,WAElBtjF,GADMC,EAAI2/C,GACArzD,IAAM0T,EAEf2/C,EAAwBrlD,SAAQ,SAAA0F,GAC7BD,EAAQC,EAAE1T,IAAM0T,KAIxB,GAAMtT,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQvc,I,cAA5D,SACArT,KAAK+/H,qBAAuB,K,YAG1B,YAAA/0H,QAAN,SAAcqI,G,gGACK,SAAMrT,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQvc,I,cAA5D,SACArT,KAAK+/H,qBAAuB,K,YAG1B,YAAA93C,MAAN,SAAYr4D,G,0FACR,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAAqB1wE,I,cAAtD,SACA5vB,KAAK+/H,qBAAuB,K,YAG1B,YAAAzvF,OAAN,SAAa1wC,G,wGACM,SAAMI,KAAKs9B,YAAYqhB,a,OACtB,OADV/uB,EAAS,SACC,GAAM5vB,KAAKw3C,eAAev5C,IACtCqiG,EAAqB1wE,I,OACzB,GAAe,OAFTvc,EAAU,UAGZ,UAGJ,GAAkB,iBAAPzT,EAAiB,CACxB,GAAmB,MAAfyT,EAAQzT,GACR,iBAEGyT,EAAQzT,QAEdA,EAAgBgO,SAAQ,SAAA9R,UACduX,EAAQvX,MAIvB,SAAMkE,KAAKw3C,eAAe0iB,KAAKomC,EAAqB1wE,EAAQvc,I,OAI5C,OAJhB,SACArT,KAAK+/H,qBAAuB,KAGZ,GAAM//H,KAAKw3C,eAAev5C,IAAmCqiG,EAAqB1wE,I,OAClG,GAAe,OADTxa,EAAU,UACK,CAEjB,IAAW8qH,KADLC,EAAwB,GACZ/qH,EACVA,EAAQ8qH,GAAKz5G,WAAa7mB,IAC1BwV,EAAQ8qH,GAAKz5G,SAAW,KACxB05G,EAAQ7jI,KAAK8Y,EAAQ8qH,KAGzBC,EAAQnkI,OAAS,GACjBgE,KAAKurC,cAAcokF,OAAOwQ,G,kBAKhC,YAAA5uF,iBAAN,SAAuB3xC,G,0FACnB,SAAMI,KAAKihB,WAAWo9F,aAAaz+G,I,OACnC,OADA,SACA,GAAMI,KAAKswC,OAAO1wC,I,cAAlB,S,YAER,EAlLA,GAAa,EAAAuX,iB,o+CChBb,YAEA,QAEA,SACA,SACA,SACA,UACA,UACA,UAEA,SAGA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UAEA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WAEA,cA+DI,WAAoBo0B,EAAsCC,EAC9CvqB,EAAgCvhB,EAChCgsC,EAA8C1qB,EAC9ChD,GAHQ,KAAAutB,gBAAsC,KAAAC,gBAC9C,KAAAvqB,aAAgC,KAAAvhB,cAChC,KAAAgsC,oBAA8C,KAAA1qB,uBAC9C,KAAAhD,gBAjEZ,KAAAivC,sBAAwB,CACpB,CAAErtD,GAAI,gBAAiBhC,KAAM,oBAC7B,CAAEgC,GAAI,eAAgBhC,KAAM,mBAC5B,CAAEgC,GAAI,YAAahC,KAAM,gBACzB,CAAEgC,GAAI,eAAgBhC,KAAM,mBAC5B,CAAEgC,GAAI,aAAchC,KAAM,iBAC1B,CAAEgC,GAAI,cAAehC,KAAM,mBAC3B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,YAAahC,KAAM,0BACzB,CAAEgC,GAAI,gBAAiBhC,KAAM,qBAGjC,KAAAsvD,qBAAuC,CACnC,CAAEttD,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,kBAAmBhC,KAAM,mCAC/B,CAAEgC,GAAI,kBAAmBhC,KAAM,+BAC/B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,YAAahC,KAAM,gBACzB,CAAEgC,GAAI,YAAahC,KAAM,gBACzB,CAAEgC,GAAI,aAAchC,KAAM,iBAC1B,CAAEgC,GAAI,iBAAkBhC,KAAM,qBAC9B,CAAEgC,GAAI,YAAahC,KAAM,uBACzB,CAAEgC,GAAI,oBAAqBhC,KAAM,yBACjC,CAAEgC,GAAI,aAAchC,KAAM,iBAC1B,CAAEgC,GAAI,aAAchC,KAAM,kBAC1B,CAAEgC,GAAI,mBAAoBhC,KAAM,wBAChC,CAAEgC,GAAI,eAAgBhC,KAAM,oBAC5B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,oBAAqBhC,KAAM,yBACjC,CAAEgC,GAAI,aAAchC,KAAM,iBAC1B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,eAAgBhC,KAAM,mBAC5B,CAAEgC,GAAI,WAAYhC,KAAM,eACxB,CAAEgC,GAAI,eAAgBhC,KAAM,mBAC5B,CAAEgC,GAAI,SAAUhC,KAAM,oCACtB,CAAEgC,GAAI,aAAchC,KAAM,2BAC1B,CAAEgC,GAAI,aAAchC,KAAM,iBAC1B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,WAAYhC,KAAM,eACxB,CAAEgC,GAAI,aAAchC,KAAM,iBAC1B,CAAEgC,GAAI,YAAahC,KAAM,4CACzB,CAAEgC,GAAI,UAAWhC,KAAM,cACvB,CAAEgC,GAAI,mBAAoBhC,KAAM,wBAChC,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,WAAYhC,KAAM,yBACxB,CAAEgC,GAAI,YAAahC,KAAM,0BACzB,CAAEgC,GAAI,aAAchC,KAAM,sBAC1B,CAAEgC,GAAI,eAAgBhC,KAAM,oCAC5B,CAAEgC,GAAI,eAAgBhC,KAAM,mBAC5B,CAAEgC,GAAI,oBAAqBhC,KAAM,wBACjC,CAAEgC,GAAI,UAAWhC,KAAM,cACvB,CAAEgC,GAAI,gBAAiBhC,KAAM,oBAC7B,CAAEgC,GAAI,eAAgBhC,KAAM,mBAC5B,CAAEgC,GAAI,gBAAiBhC,KAAM,oCAC7B,CAAEgC,GAAI,eAAgBhC,KAAM,mBAC5B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,cAAehC,KAAM,kBAC3B,CAAEgC,GAAI,UAAWhC,KAAM,cACvB,CAAEgC,GAAI,cAAehC,KAAM,mBAmQnC,OA3PI,YAAAwiI,iBAAA,WACI,OAAOpgI,KAAKitD,sBAAsBziC,OAAOxqB,KAAKktD,uBAG5C,YAAAJ,OAAN,SAAaL,EAAoBE,EAAsB18C,G,YAAA,IAAAA,MAAA,M,iGAC9B,SAAMw8C,EAAS78C,MAAM+8C,I,YAApC0zE,EAAe,UACJtqH,QAAb,YACA,GAAoC,IAAhCsqH,EAAahtH,QAAQrX,QAAgD,IAAhCqkI,EAAajrH,QAAQpZ,OAC1D,MAAO,CAAP,EAAO,IAAImH,MAAMnD,KAAKN,YAAYpB,EAAE,wBACjC,GAAI+hI,EAAajrH,QAAQpZ,OAAS,IAC/BskI,EAAUr0H,KAAKiuB,MAAMmmG,EAAajrH,QAAQpZ,OAAS,GACnDukI,EAAOF,EAAajrH,QAAQpZ,OAAS,EAEvCgE,KAAKwgI,QAAQH,EAAajrH,QAAQ,KAClCpV,KAAKwgI,QAAQH,EAAajrH,QAAQkrH,KAClCtgI,KAAKwgI,QAAQH,EAAajrH,QAAQmrH,KAClC,MAAO,CAAP,EAAO,IAAIp9H,MAAMnD,KAAKN,YAAYpB,EAAE,uB,iBAIxC,O,sBAAA,GAAM0B,KAAKygI,WAAWJ,EAAcpwH,I,cAApC,S,aAGA,O,WADMywH,EAAgB,IAAI,EAAAj/H,cAAc,EAAO,KACxC,CAAP,EAAOzB,KAAK2gI,kBAAkBD,EAAeL,I,OAEjD,MAAO,CAAP,EAAO,M,OAEP,OAAK,EAAA93H,MAAM+F,mBAAmB+xH,EAAarmE,cAGhC,CAAP,EAAO,IAAI72D,MAAMnD,KAAKN,YAAYpB,EAAE,uBAF7B,CAAP,EAAO,IAAI6E,MAAMk9H,EAAarmE,e,yBAO1C,YAAAtN,YAAA,SAAYP,EAAgBl8C,QAAA,IAAAA,MAAA,MACxB,IAAMw8C,EAAWzsD,KAAK4gI,oBAAoBz0E,GAC1C,OAAgB,MAAZM,EACO,MAEXA,EAASx8C,eAAiBA,EACnBw8C,IAGH,YAAAm0E,oBAAR,SAA4Bz0E,GACxB,GAAc,MAAVA,GAA6B,KAAXA,EAClB,OAAO,KAGX,OAAQA,GACJ,IAAK,eACD,OAAO,IAAI,EAAA00E,qBACf,IAAK,gBACD,OAAO,IAAI,EAAAC,sBAAsB9gI,KAAKge,cAAehe,KAAKN,aAC9D,IAAK,cACL,IAAK,cACD,OAAO,IAAI,EAAAqhI,oBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,IAAK,WACD,OAAO,IAAI,EAAAC,iBACf,IAAK,UACD,OAAO,IAAI,EAAAC,gBACf,IAAK,iBACD,OAAO,IAAI,GAAAC,uBACf,IAAK,aACD,OAAO,IAAI,EAAAC,mBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,IAAK,YACL,IAAK,WACL,IAAK,aACD,OAAO,IAAI,EAAAC,kBACf,IAAK,aACD,OAAO,IAAI,EAAAC,mBACf,IAAK,SACD,OAAO,IAAI,GAAAC,eACf,IAAK,eACD,OAAO,IAAI,GAAAC,qBACf,IAAK,YACD,OAAO,IAAI,GAAAC,kBACf,IAAK,aACD,OAAO,IAAI,EAAAC,mBACf,IAAK,gBACD,OAAO,IAAI,EAAAC,wBACf,IAAK,kBACD,OAAO,IAAI,EAAAC,0BACf,IAAK,kBACD,OAAO,IAAI,EAAAC,0BACf,IAAK,YACD,OAAO,IAAI,EAAAC,kBACf,IAAK,oBACD,OAAO,IAAI,EAAAC,0BACf,IAAK,YACD,OAAO,IAAI,EAAAC,kBACf,IAAK,aACD,OAAO,IAAI,EAAAC,mBACf,IAAK,YACD,OAAO,IAAI,EAAAC,wBACf,IAAK,eACD,OAAO,IAAI,EAAAC,qBACf,IAAK,aACD,OAAO,IAAI,EAAAC,mBACf,IAAK,oBACD,OAAO,IAAI,GAAAC,0BACf,IAAK,aACD,OAAO,IAAI,GAAAC,mBACf,IAAK,eACD,OAAO,IAAI,EAAAC,qBACf,IAAK,cACD,OAAO,IAAI,GAAAC,oBACf,IAAK,aACD,OAAO,IAAI,EAAAC,mBACf,IAAK,mBACD,OAAO,IAAI,EAAAC,yBACf,IAAK,eACD,OAAO,IAAI,GAAAC,qBACf,IAAK,cACD,OAAO,IAAI,GAAAC,oBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,IAAK,YACD,OAAO,IAAI,EAAAC,kBACf,IAAK,mBACD,OAAO,IAAI,EAAAC,yBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,IAAK,WACD,OAAO,IAAI,EAAAC,iBACf,IAAK,YACD,OAAO,IAAI,EAAAC,kBACf,IAAK,aACD,OAAO,IAAI,EAAAC,mBACf,IAAK,eACD,OAAO,IAAI,EAAAC,qBACf,IAAK,eACD,OAAO,IAAI,GAAAC,qBACf,IAAK,oBACD,OAAO,IAAI,GAAAC,0BACf,IAAK,UACD,OAAO,IAAI,EAAAC,gBACf,IAAK,gBACD,OAAO,IAAI,GAAAC,sBACf,IAAK,eACD,OAAO,IAAI,EAAAC,qBACf,IAAK,gBACD,OAAO,IAAI,EAAAC,sBACf,IAAK,eACD,OAAO,IAAI,EAAAC,qBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,IAAK,UACD,OAAO,IAAI,GAAAC,gBACf,IAAK,cACD,OAAO,IAAI,EAAAC,oBACf,QACI,OAAO,OAIL,YAAAxD,WAAd,SAAyBJ,EAA4BpwH,G,YAAA,IAAAA,MAAA,M,oGAC3B,MAAlBA,EAAA,aACM,EAAU,IAAI,EAAAi0H,qBACXpoI,EAAI,E,wBAAGA,EAAIukI,EAAajrH,QAAQpZ,OAC3B,GAAMgE,KAAKurC,cAAchK,QAAQ8+F,EAAajrH,QAAQtZ,KADrB,M,OACrC4B,EAAI,SACV,EAAQ0X,QAAQ9Y,KAAK,IAAI,EAAAopC,cAAchoC,I,wBAFM5B,I,gBAIrB,MAAxBukI,EAAahtH,QAAb,YACSvX,EAAI,E,wBAAGA,EAAIukI,EAAahtH,QAAQrX,OAC3B,GAAMgE,KAAKwrC,cAAcjK,QAAQ8+F,EAAahtH,QAAQvX,KADrB,M,OACrCwX,EAAI,SACV,EAAQD,QAAQ/W,KAAK,IAAI,EAAA42D,cAAc5/C,I,wBAFMxX,I,aAS9C,OAJiC,MAApCukI,EAAantH,qBACbmtH,EAAantH,oBAAoBtF,SAAQ,SAAA1P,GACrC,SAAQgV,oBAAoB5W,KAAK,IAAI,EAAA6nI,WAAWjmI,EAAE,GAAIA,EAAE,QAEzD,GAAM8B,KAAKihB,WAAWg/F,kBAAkB,I,OAA/C,MAAO,CAAP,EAAO,U,QAED,EAAU,IAAI,EAAAmkB,iCACXtoI,EAAI,E,0BAAGA,EAAIukI,EAAajrH,QAAQpZ,QACrCqkI,EAAajrH,QAAQtZ,GAAGmU,eAAiBA,EAC/B,GAAMjQ,KAAKurC,cAAchK,QAAQ8+F,EAAajrH,QAAQtZ,MAFrB,O,QAErC4B,EAAI,SACV,EAAQ0X,QAAQ9Y,KAAK,IAAI,EAAAopC,cAAchoC,I,0BAHM5B,I,kBAKjB,MAA5BukI,EAAajtH,YAAb,aACStX,EAAI,E,0BAAGA,EAAIukI,EAAajtH,YAAYpX,QACzCqkI,EAAajtH,YAAYtX,GAAGmU,eAAiBA,EACnC,GAAMjQ,KAAK0rC,kBAAkBnK,QAAQ8+F,EAAajtH,YAAYtX,MAFzB,O,QAEzC4B,EAAI,SACV,EAAQ0V,YAAY9W,KAAK,IAAI,EAAAkmE,kBAAkB9kE,I,0BAHE5B,I,eAUlD,OAJqC,MAAxCukI,EAAaltH,yBACbktH,EAAaltH,wBAAwBvF,SAAQ,SAAA1P,GACzC,SAAQiV,wBAAwB7W,KAAK,IAAI,EAAA6nI,WAAWjmI,EAAE,GAAIA,EAAE,QAE7D,GAAM8B,KAAKihB,WAAWi/F,8BAA8BjwG,EAAgB,I,QAA3E,MAAO,CAAP,EAAO,kBAIP,YAAAuwH,QAAR,SAAgB9iI,GACZ,OAAkB,MAAVA,EAAEE,MAA2B,OAAXF,EAAEE,OACvBF,EAAEwE,OAAS,EAAAoS,WAAWC,OAAoB,MAAX7W,EAAE0W,OAAiB,EAAA7L,MAAM+F,mBAAmB5Q,EAAE0W,MAAMmB,WAGpF,YAAAorH,kBAAR,SAA0BD,EAA8BL,GACpD,GAAsC,MAAlCK,EAAcn2G,iBACd,OAAO,IAAIpnB,MAAMu9H,EAAclvH,SAGnC,IAAIwoD,EAAe,GAmCnB,OAjCA/9D,OAAOy8F,QAAQgoC,EAAcn2G,kBAAkB3c,SAAQ,SAAC,EAAcq0D,G,IAC9Dz6C,EACA68G,EAFiD1lI,EAAG,KAAEN,EAAK,KAGzDvC,EAAIkT,OAAOrQ,EAAI+Q,MAAM,UAAU,IAErC,OAAQ/Q,EAAI+Q,MAAM,QAAQ,IACtB,IAAK,UACD8X,EAAO64G,EAAajrH,QAAQtZ,GAC5BuoI,EAAW,EAAA/vH,WAAWkT,EAAKtlB,MAC3B,MACJ,IAAK,UACDslB,EAAO64G,EAAahtH,QAAQvX,GAC5BuoI,EAAW,SACX,MACJ,IAAK,cACD78G,EAAO64G,EAAajtH,YAAYtX,GAChCuoI,EAAW,aACX,MACJ,QACI,OAGJpiE,EAAQ,IACRjI,GAAgB,QAGH,WAAbqqE,GAAsC,eAAbA,IACzBrqE,GAAgB,KAAOl+D,EAAI,GAAK,MAGpCk+D,GAAgB,IAAMqqE,EAAW,MAAQ78G,EAAK5pB,KAAO,MAAQS,KAG1D,IAAI8E,MAAM62D,IAEzB,EA/TA,GAAa,EAAAzrB,kB,4GC/Eb,iBACI,KAAAn5B,QAA2B,GAC3B,KAAA/B,QAA2B,GAC3B,KAAAH,oBAAoD,IAH3C,EAAAgxH,wB,wHCAb,iBACI,KAAA9uH,QAA2B,GAC3B,KAAAhC,YAAmC,GACnC,KAAAD,wBAAwD,IAH/C,EAAAixH,oC,kGCJb,MAII,SAAYzlI,EAASN,GACjB2B,KAAKrB,IAAMA,EACXqB,KAAK3B,MAAQA,GANR,EAAA8lI,c,idCAb,YAGA,QAEA,2B,+CAiDA,OAjDwC,OACpC,YAAAv0H,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,KAAIA,EAAMrC,OAAS,GAAnB,CAIA,IAAM0W,EAAS,EAAKqB,kBAIpB,GAHArB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMA,EAAMrC,OAAS,IAC3D0W,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAE3CA,EAAMrC,OAAS,GAAMqC,EAAMrC,OAAS,GAAO,EAC3C,IAAK,IAAIF,EAAI,EAAGA,EAAIuC,EAAMrC,OAAS,EAAGF,GAAK,EAAG,CAC1C,IAAMyf,EAAcld,EAAMvC,EAAI,GACxB8Y,EAAgBvW,EAAMvC,EAAI,GAChC,IAAI,EAAKwS,mBAAmBiN,KAAQ,EAAKjN,mBAAmBsG,GAA5D,CAIA,IAAM0vH,EAAa1vH,EAAMrR,cACI,MAAzBmP,EAAO0B,MAAMmB,UAAoB,EAAKnF,mBAAmBnD,QAAQq3H,IAAe,EAChF5xH,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkBmJ,GACf,MAAzB7I,EAAO0B,MAAMkB,UACpB,EAAKjF,mBAAmBpD,QAAQq3H,IAAe,EAC/C5xH,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBmJ,IAClB,MAArB7I,EAAO0B,MAAMoB,MAA6C,IAA7B9C,EAAO0B,MAAMoB,KAAKxZ,SACvD,EAAKuU,cAActD,QAAQq3H,IAAe,EAC1C5xH,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAa2J,GAEtC,EAAK9G,WAAW/B,EAAQkC,EAAO2G,IAK3C,EAAKlG,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAjDA,CAAwC,EAAAiZ,cAA3B,EAAA4sH,sB,+cCLb,YAGA,QAEA,2B,+CAsBA,OAtBsC,OAClC,YAAA9yH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,MAC3C8U,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMkmI,KAC5C7xH,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM+V,OACrD,EAAKI,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAtBA,CAAsC,EAAAiZ,cAAzB,EAAAqtH,oB,gdCLb,YAGA,QAEA,QACA,SAEA,2B,+CA4DA,OA5DuC,OACnC,YAAAvzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUilB,KAAKriE,MAAMpU,GAC3B,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAGL,MAAlBmwD,EAAQw3E,QACRx3E,EAAQw3E,OAAO52H,SAAQ,SAACvP,GACpB,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMomI,UAC3C/xH,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMqmI,MAC5ChyH,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmO,KAC5CkG,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMsmI,KACrDjyH,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMumI,WACrD,EAAKpwH,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAIP,MAAjBs6C,EAAQ94C,OACR84C,EAAQ94C,MAAMtG,SAAQ,SAACvP,GACnB,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,QACxCnD,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMqmB,OAC3ChS,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM+yB,MAC5C,EAAK5c,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAIP,MAAjBs6C,EAAQ63E,OACR73E,EAAQ63E,MAAMj3H,SAAQ,SAACvP,GACnB,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMomI,UAC3C/xH,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMqmI,MAC5ChyH,EAAOI,KAAK2I,eAAiB,EAAKrJ,kBAAkB/T,EAAMymI,YAC1DpyH,EAAOI,KAAKiJ,OAAS,EAAK3J,kBAAkB/T,EAAM0mI,YAClDryH,EAAOI,KAAK4I,KAAO,EAAKtJ,kBAAkB/T,EAAM2mI,KAChDtyH,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,QACtB,MAAxB1d,EAAM22D,iBAC4B,MAA9B32D,EAAM22D,eAAepiD,QACrBF,EAAOI,KAAKC,SAAW1U,EAAM22D,eAAepiD,MAAQ,IAEvB,MAA7BvU,EAAM22D,eAAeniD,OACrBH,EAAOI,KAAKE,QAAU3U,EAAM22D,eAAeniD,KAAO,KAG1D,EAAK2B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAI5B7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EA5DA,CAAuC,EAAAiZ,cAA1B,EAAAstH,qB,+cCRb,YAGA,QAEA,2B,+CA8BA,OA9BsC,OAClC,YAAAxzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,KACvC,EAAKwU,kBAAkB,EAAKD,YAAY9T,EAAM4mI,SAAU,OAC5DvyH,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM4mI,SAC5CvyH,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UAEjD,EAAKjH,mBAAmBjQ,EAAMiX,YAAc,EAAKhH,mBAAmBjQ,EAAM6mI,oBAC1ExyH,EAAO0B,MAAMkB,SAAWjX,EAAM6mI,oBAE9BxyH,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,UACrD5C,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM6mI,qBAGhD,EAAK1wH,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EA9BA,CAAsC,EAAAiZ,cAAzB,EAAAmrH,oB,mdCLb,YAGA,QAEA,SACA,SACA,SAEA,SACA,SAEA,SACA,QACA,SACA,SAEA,2B,+CAoGA,OApG0C,OACtC,YAAArxH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACR,EAAKwhB,eAAiB,EAAKvR,mBAAmBjQ,EAAM+U,aAC/B/U,EAAM+U,YAAuBzF,MAAM,KAC5CC,SAAQ,SAAAu3H,GAIhB,IAHA,IAAIC,GAAgB,EAChBC,EAAkBxoI,EAAOuW,YAAYpX,OAEhCF,EAAI,EAAGA,EAAIe,EAAOuW,YAAYpX,OAAQF,IAC3C,GAAIe,EAAOuW,YAAYtX,GAAG8B,OAASunI,EAAK,CACpCC,GAAgB,EAChBC,EAAkBvpI,EAClB,MAIR,GAAIspI,EAAe,CACf,IAAM7xH,EAAa,IAAI,EAAAC,eACvBD,EAAW3V,KAAOunI,EAClBtoI,EAAOuW,YAAY9W,KAAKiX,GAG5B1W,EAAOsW,wBAAwB7W,KAAK,CAACO,EAAOuY,QAAQpZ,OAAQqpI,OAExD,EAAKxlH,cACb,EAAK/K,cAAcjY,EAAQwB,EAAM40D,QAGrC,IAAMvgD,EAAS,IAAI,EAAAsB,WACnBtB,EAAOuB,UAAY,EAAK4L,cAAgE,MAAhD,EAAKzN,kBAAkB/T,EAAM4V,SAAU,KAC/EvB,EAAOxQ,KAAO,EAAAoS,WAAWC,MACzB7B,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM6V,OAC5CxB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,KAAM,MACjD,IACI8U,EAAO0U,SAAWvd,SAAS,EAAKuI,kBAAkB/T,EAAM+oB,SAAU,EAAAC,mBAAmBC,KAAK/c,YAAa,IACzG,MAAO/I,GAELujB,QAAQnjB,MAAM,iCAAkCJ,GAChDkR,EAAO0U,SAAW,EAAAC,mBAAmBC,KAGzC,IAAK,EAAKhZ,mBAAmBjQ,EAAM8V,QAE/B,IADA,IAAMA,EAAS,EAAKhD,aAAa9S,EAAM8V,QAC9BrY,EAAI,EAAGA,EAAIqY,EAAOnY,OAAQF,IAC/B,IAAI,EAAKwS,mBAAmB6F,EAAOrY,IAAnC,CAIA,IAAMwpI,EAAgBnxH,EAAOrY,GAAGk1B,YAAY,MAC5C,IAAuB,IAAnBs0G,EAAJ,CAIqB,MAAjB5yH,EAAOyB,SACPzB,EAAOyB,OAAS,IAGpB,IAAMS,EAAQ,IAAI,EAAAC,UAClBD,EAAMhX,KAAOuW,EAAOrY,GAAGgO,OAAO,EAAGw7H,GACjC1wH,EAAMvW,MAAQ,KACduW,EAAM1S,KAAO,EAAAwS,UAAUC,KACnBR,EAAOrY,GAAGE,OAAUspI,EAAgB,IACpC1wH,EAAMvW,MAAQ8V,EAAOrY,GAAGgO,OAAOw7H,EAAgB,IAEnD5yH,EAAOyB,OAAO7X,KAAKsY,IAK3B,GACS,UAFuB,MAAdvW,EAAM6D,KAAe7D,EAAM6D,KAAKqB,cAAgB,MAG1DmP,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,YAE5C,CACInD,EAAOxQ,KAAO,EAAAoS,WAAWC,MACzB7B,EAAO0B,MAAQ,IAAI,EAAAC,UACnB3B,EAAO0B,MAAMua,KAAO,EAAKvc,kBAAkB/T,EAAM8+H,YAAc9+H,EAAMswB,MACrEjc,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM4+H,gBAAkB5+H,EAAMiX,UAC7E5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM6+H,gBAAkB7+H,EAAMkX,UAC7E,IAAMC,EAAO,EAAK/D,kBAAkBpT,EAAM2+H,WAAa3+H,EAAMwT,KAC7Da,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAa4D,GAI9C3Y,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EApGA,CAA0C,EAAAiZ,cAA7B,EAAA+qH,wB,+0DCjBb,YAGA,QACA,QAEA,SACA,SACA,SAKA,cAII,WAAoB7iH,EAAsCte,GAA1D,MACI,cAAO,K,OADS,EAAAse,gBAAsC,EAAAte,c,EA6I9D,OAjJ2C,OAQjC,YAAAkQ,MAAN,SAAYpU,G,0FAGR,OAFAwE,KAAKnD,OAAS,IAAI,EAAAmZ,aAClBhW,KAAKgtD,QAAUilB,KAAKriE,MAAMpU,GACN,MAAhBwE,KAAKgtD,SAAyC,MAAtBhtD,KAAKgtD,QAAQ19B,OAA+C,IAA9BtvB,KAAKgtD,QAAQ19B,MAAMtzB,QACzEgE,KAAKnD,OAAOkZ,SAAU,EACf,CAAP,EAAO/V,KAAKnD,SAGZmD,KAAKgtD,QAAQsvE,UACb,GAAMt8H,KAAKulI,kBADX,M,cACA,S,aAEAvlI,KAAKwlI,iB,iBAGT,MAAO,CAAP,EAAOxlI,KAAKnD,gBAGF,YAAA0oI,eAAd,W,0IACqD,MAA7CvlI,KAAKgtD,QAAQyvE,6BAAb,MACe,GAAMz8H,KAAKge,cAAcE,UAAUle,KAAKiQ,iB,OAEvB,OAF1B+yB,EAAS,SACTu5F,EAAmB,IAAI,EAAA9hH,UAAUza,KAAKgtD,QAAQyvE,8BACpB,GAAMz8H,KAAKge,cAAcG,cAAco+G,EAAkBv5F,I,OACzF,GAAgC,OADA,SAI5B,OAFAhjC,KAAKnD,OAAOkZ,SAAU,EACtB/V,KAAKnD,OAAOm9D,aAAeh6D,KAAKN,YAAYpB,EAAE,qBAC9C,I,oBAIFmnI,EAAe,IAAIxhI,KAErBjE,KAAK6f,cAA4C,MAA5B7f,KAAKgtD,QAAQ55C,YAAlC,Y,IACgB,EAAApT,KAAKgtD,QAAQ55C,Y,wBAAb,YAAL1V,EAAC,KAEU,OADZ6V,EAAa,EAAAijF,iBAAiB8mC,SAAS5/H,IACzC,OACA6V,EAAW3T,GAAK,KAChB2T,EAAWtD,eAAiBjQ,KAAKiQ,eACpB,GAAMsD,EAAW+H,aALwB,M,OAKhDwwC,EAAO,SACb25E,EAAa//H,IAAIhI,EAAEkC,GAAII,KAAKnD,OAAOuW,YAAYpX,QAC/CgE,KAAKnD,OAAOuW,YAAY9W,KAAKwvD,G,wBAPrB,I,oCAUR9rD,KAAK6f,cAAwC,MAAxB7f,KAAKgtD,QAAQ35C,QAAnC,a,IACS,EAAArT,KAAKgtD,QAAQ35C,Q,wBAAb,YAALC,EAAC,KAEM,OADR2/C,EAAS,EAAAyjC,aAAa4mC,SAAShqH,IACjC,QACA2/C,EAAOrzD,GAAK,KACC,GAAMqzD,EAAO33C,aAJoB,O,QAIxCwwC,EAAO,SACb25E,EAAa//H,IAAI4N,EAAE1T,GAAII,KAAKnD,OAAOwW,QAAQrX,QAC3CgE,KAAKnD,OAAOwW,QAAQ/W,KAAKwvD,G,0BANjB,I,kBAWJ,EAAA9rD,KAAKgtD,QAAQ19B,M,0BAAb,YAAL5xB,EAAC,MACFgV,EAAS,EAAA6jF,cAAc+mC,SAAS5/H,IAE/BkC,GAAK,KACZ8S,EAAO+T,SAAW,KAClB/T,EAAOzC,eAAiBjQ,KAAKiQ,eAC7ByC,EAAOuU,cAAgB,KAGO,MAA1BvU,EAAOsU,iBAA2BtU,EAAOsU,gBAAgBhrB,OAAS,IAClE0W,EAAOsU,gBAAkBtU,EAAOsU,gBAAgB5nB,MAAM,EAAG,KAGxDY,KAAK6f,cAA8B,MAAdniB,EAAE+oB,UAAoBg/G,EAAa7/H,IAAIlI,EAAE+oB,UAC/DzmB,KAAKnD,OAAOqW,oBAAoB5W,KAAK,CAAC0D,KAAKnD,OAAOuY,QAAQpZ,OAAQypI,EAAaxnI,IAAIP,EAAE+oB,YAC9EzmB,KAAK6f,cAAmC,MAAnBniB,EAAEupB,eAC9BvpB,EAAEupB,cAAcrZ,SAAQ,SAAAsyH,GAChBuF,EAAa7/H,IAAIs6H,IACjB,EAAKrjI,OAAOsW,wBAAwB7W,KAAK,CAAC,EAAKO,OAAOuY,QAAQpZ,OAAQypI,EAAaxnI,IAAIiiI,QAKtF,GAAMxtH,EAAO4I,YAvBuB,O,QAuB3CwwC,EAAO,SACb9rD,KAAKwU,cAAcs3C,GACnB9rD,KAAKnD,OAAOuY,QAAQ9Y,KAAKwvD,G,0BAzBb,I,sBA4BhB9rD,KAAKnD,OAAOkZ,SAAU,E,YAGlB,YAAAyvH,eAAR,sBACUC,EAAe,IAAIxhI,IACrBjE,KAAK6f,cAA4C,MAA5B7f,KAAKgtD,QAAQ55C,YAClCpT,KAAKgtD,QAAQ55C,YAAYxF,SAAQ,SAAClQ,GAC9B,IAAM6V,EAAa,EAAAijF,iBAAiB4mC,OAAO1/H,GACzB,MAAd6V,IACAA,EAAW3T,GAAK,KAChB2T,EAAWtD,eAAiB,KAC5Bw1H,EAAa//H,IAAIhI,EAAEkC,GAAI,EAAK/C,OAAOuW,YAAYpX,QAC/C,EAAKa,OAAOuW,YAAY9W,KAAKiX,OAG7BvT,KAAK6f,cAAwC,MAAxB7f,KAAKgtD,QAAQ35C,SAC1CrT,KAAKgtD,QAAQ35C,QAAQzF,SAAQ,SAAC0F,GAC1B,IAAM2/C,EAAS,EAAAyjC,aAAa0mC,OAAO9pH,GACrB,MAAV2/C,IACAA,EAAOrzD,GAAK,KACZ6lI,EAAa//H,IAAI4N,EAAE1T,GAAI,EAAK/C,OAAOwW,QAAQrX,QAC3C,EAAKa,OAAOwW,QAAQ/W,KAAK22D,OAKrCjzD,KAAKgtD,QAAQ19B,MAAM1hB,SAAQ,SAAClQ,GACxB,IAAMgV,EAAS,EAAA6jF,cAAc6mC,OAAO1/H,GAEpCgV,EAAO9S,GAAK,KACZ8S,EAAO+T,SAAW,KAClB/T,EAAOzC,eAAiB,KACxByC,EAAOuU,cAAgB,KAGO,MAA1BvU,EAAOsU,iBAA2BtU,EAAOsU,gBAAgBhrB,OAAS,IAClE0W,EAAOsU,gBAAkBtU,EAAOsU,gBAAgB5nB,MAAM,EAAG,KAGxD,EAAKygB,cAA8B,MAAdniB,EAAE+oB,UAAoBg/G,EAAa7/H,IAAIlI,EAAE+oB,UAC/D,EAAK5pB,OAAOqW,oBAAoB5W,KAAK,CAAC,EAAKO,OAAOuY,QAAQpZ,OAAQypI,EAAaxnI,IAAIP,EAAE+oB,YAC9E,EAAK5G,cAAmC,MAAnBniB,EAAEupB,eAC9BvpB,EAAEupB,cAAcrZ,SAAQ,SAAAsyH,GAChBuF,EAAa7/H,IAAIs6H,IACjB,EAAKrjI,OAAOsW,wBAAwB7W,KAAK,CAAC,EAAKO,OAAOuY,QAAQpZ,OAAQypI,EAAaxnI,IAAIiiI,QAKnG,EAAK1rH,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,MAG7B1S,KAAKnD,OAAOkZ,SAAU,GAE9B,EAjJA,CAA2C,EAAAD,cAA9B,EAAAgrH,yB,odCbb,YAGA,QAEA,2B,+CA8BA,OA9B2C,OACvC,YAAAlxH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,GAAuB,SAAnBA,EAAMgzD,SAAV,CAGA,IAAM3+C,EAAS,EAAKqB,kBACpBrB,EAAOuB,SAAyB,MAAd5V,EAAMqnI,IACxBhzH,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,MAC3C8U,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMsnI,OACrB,SAAnBtnI,EAAMgzD,WACN3+C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmO,KAC5CkG,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,WAEzD,EAAKD,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EA9BA,CAA2C,EAAAiZ,cAA9B,EAAA8tH,yB,8cCLb,YAGA,QAEA,2B,+CAiCA,OAjCqC,OACjC,YAAAh0H,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACQ,SAAhBA,EAAMqmB,QACNrmB,EAAMqmB,MAAQ,MAElB,IAAMhS,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMqmB,MACvC,EAAKtS,kBAAkB,EAAKD,YAAY9T,EAAMmP,QAAS,OAC3DkF,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmP,QAC5CkF,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UAEjD,EAAKjH,mBAAmBjQ,EAAMwe,SAAW,EAAKvO,mBAAmBjQ,EAAMiX,UACvE5C,EAAO0B,MAAMkB,SAAWjX,EAAMiX,UAE9B5C,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMwe,OACrDnK,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMiX,WAGhD,EAAKd,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAjCA,CAAqC,EAAAiZ,cAAxB,EAAAorH,mB,mdCLb,YAGA,QAEM0E,EAAgB,CAClB,YAAa,cAAe,QAAS,WAAY,WAAY,MAAO,MAGxE,2B,+CAyCA,OAzC0C,OACtC,YAAAh2H,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,EAAKyW,cAAcjY,EAAQ,EAAKuV,kBAAkB/T,EAAM,iBAExD,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMiC,MAAO,MAClDoS,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,UACrD5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMsR,KAE5C,IAAIk2H,GAAyB,EAC7B,IAAK,IAAM73H,KAAQ3P,EACXA,EAAMlC,eAAe6R,KAChB63H,IAA2D,IAAjCD,EAAc34H,QAAQe,KACjD63H,GAAyB,GAEzBA,GACA,EAAKpxH,WAAW/B,EAAQ1E,EAAM3P,EAAM2P,KAKhD,EAAKwG,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAzCA,CAA0C,EAAAiZ,cAA7B,EAAA+tH,wB,gdCTb,YAGA,QAEA,2B,+CAsBA,OAtBuC,OACnC,YAAAj0H,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,KAAM,MACjD8U,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,UACrD5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmO,KAC5C,EAAKgI,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAtBA,CAAuC,EAAAiZ,cAA1B,EAAAwrH,qB,mdCLb,YAGA,QAEA,2B,+CAyEA,OAzE0C,OACtC,YAAA1xH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbpF,EAAM5Q,KAAK2Q,SAASnV,GAC1B,GAAW,MAAPoV,EAEA,OADA/T,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAMs/G,EAAWvrG,EAAI5J,cAAc,YACnC,OAAgB,MAAZm1G,GAAoBn8G,KAAKsO,mBAAmB6tG,EAAS7tD,cACrDzxD,EAAOm9D,aAAe,oBACtBn9D,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAGXo1E,KAAKriE,MAAMusG,EAAS7tD,aAC5B1gD,SAAQ,SAAC46D,GACb,IAAM91D,EAAS,EAAKqB,kBAQpB,GAPK,EAAKzF,mBAAmBk6D,EAAM9jD,SAC/BhS,EAAO9U,KAAO4qE,EAAM9jD,MAAM/W,MAAM,MAAM,IAExB,MAAd66D,EAAMhtE,MAAiB,EAAK8S,mBAAmBk6D,EAAMhtE,KAAK0Y,SAC1DxB,EAAOwB,MAAQs0D,EAAMhtE,KAAK0Y,MAAMvG,MAAM,OAAOnC,KAAK,OAG1B,MAAxBg9D,EAAMs9D,gBAAyD,MAA/Bt9D,EAAMs9D,eAAe3xH,OACrD,IAAK,IAAMpV,KAAYypE,EAAMs9D,eAAe3xH,OACxC,GAAKq0D,EAAMs9D,eAAe3xH,OAAOhY,eAAe4C,GAAhD,CAIA,IAAM6V,EAAQ4zD,EAAMs9D,eAAe3xH,OAAOpV,GAE1C,OADuC,MAApB6V,EAAMmxH,WAAqBnxH,EAAMmxH,WAAWxiI,cAAgB,MAE3E,IAAK,WACDmP,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkBwC,EAAMvW,OACrD,MACJ,IAAK,QACL,IAAK,WACL,IAAK,OACL,IAAK,OACDqU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBwC,EAAMvW,OACrD,MACJ,IAAK,MACDqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAagD,EAAMvW,OAC5C,MACJ,QACI,IAAM2nI,EAA4B,MAAfpxH,EAAM8P,MAAgB9P,EAAM8P,MAAMnhB,cAAgB,KACxC,MAAzBmP,EAAO0B,MAAMmB,UAAoB,EAAKnF,mBAAmBnD,QAAQ+4H,IAAe,EAChFtzH,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkBwC,EAAMvW,OACrB,MAAzBqU,EAAO0B,MAAMkB,UACpB,EAAKjF,mBAAmBpD,QAAQ+4H,IAAe,EAC/CtzH,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBwC,EAAMvW,QACxB,MAArBqU,EAAO0B,MAAMoB,MAA6C,IAA7B9C,EAAO0B,MAAMoB,KAAKxZ,SACvD,EAAKuU,cAActD,QAAQ+4H,IAAe,EAC1CtzH,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAagD,EAAMvW,OAE5C,EAAKoW,WAAW/B,EAAQkC,EAAM8P,MAAO9P,EAAMvW,QAO/D,EAAKgX,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAzEA,CAA0C,EAAAiZ,cAA7B,EAAA0sH,wB,kdCLb,YAGA,QAEA,2B,+CAyCA,OAzCyC,OACrC,YAAA5yH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,EAAKyW,cAAcjY,EAAQ,EAAKuV,kBAAkB/T,EAAM4nI,WAExD,IAAMvzH,EAAS,EAAKqB,kBACpBrB,EAAOuB,SAAsD,SAA3C,EAAK7B,kBAAkB/T,EAAM6nI,UAC/CxzH,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM8nI,MAAO,MAClDzzH,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM+nI,MAC5C1zH,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM2rB,SAAU3rB,EAAMwrB,OACrEnX,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMua,KAAO,EAAKvc,kBAAkB/T,EAAMgoI,MACjD3zH,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMioI,SAEvC,EAAKh4H,mBAAmBjQ,EAAM2rB,WAC/B,EAAKvV,WAAW/B,EAAQ,QAASrU,EAAMwrB,OAE3C,EAAKpV,WAAW/B,EAAQ,QAASrU,EAAMyrB,OACvC,EAAKrV,WAAW/B,EAAQ,MAAOrU,EAAMkoI,KACrC,EAAK9xH,WAAW/B,EAAQ,UAAWrU,EAAMmoI,SACzC,EAAK/xH,WAAW/B,EAAQ,OAAQrU,EAAMqzB,MAEtC,EAAKrc,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAzCA,CAAyC,EAAAiZ,cAA5B,EAAAguH,uB,mdCLb,YAGA,QAEA,QACA,SACA,SACA,SAEA,QACA,SAEM2C,EAAiB,IAAI14B,IAAI,CAAC,UAAW,gBAAiB,gBAAiB,SAAU,WACnF,0BAA2B,qBAAsB,UAErD,2B,+CAiJA,OAjJ0C,OAGtC,YAAAn+F,MAAA,SAAMpU,GACFwE,KAAKnD,OAAS,IAAI,EAAAmZ,aAClB,IAAMg3C,EAAUilB,KAAKriE,MAAMpU,GAC3B,GAAe,MAAXwxD,GAAsC,IAAnBA,EAAQhxD,OAE3B,OADAgE,KAAKnD,OAAOkZ,SAAU,EACfoF,QAAQC,QAAQpb,KAAKnD,QAsBhC,IAAK,IAAM8B,KAnBY,MAAnBquD,EAAQ05E,SACR1mI,KAAK2mI,eAAe35E,EAAQ05E,SAEH,MAAzB15E,EAAQ45E,eACR5mI,KAAK6mI,YAAY75E,EAAQ45E,eAEA,MAAzB55E,EAAQ85E,eACR9mI,KAAK+mI,YAAY/5E,EAAQ85E,cAAe,mBAEtB,MAAlB95E,EAAQg6E,QACRhnI,KAAK+mI,YAAY/5E,EAAQg6E,OAAQ,YAEE,MAAnCh6E,EAAQi6E,yBACRjnI,KAAKknI,YAAYl6E,EAAQi6E,yBAEL,MAApBj6E,EAAQm6E,UACRnnI,KAAKonI,gBAAgBp6E,EAAQm6E,UAGfn6E,EACVA,EAAQ7wD,eAAewC,KAAS8nI,EAAe7gI,IAAIjH,IACnDqB,KAAK+mI,YAAY/5E,EAAQruD,GAAM,KAAM,gBAK7C,OADAqB,KAAKnD,OAAOkZ,SAAU,EACfoF,QAAQC,QAAQpb,KAAKnD,SAGxB,YAAAgqI,YAAR,SAAoB75E,GAApB,WACIA,EAAQp/C,SAAQ,SAACy5H,GACb,IAAM30H,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkBi1H,EAAW/mI,OAEhDoS,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBi1H,EAAWjzH,MACtD,EAAKhC,kBAAkBi1H,EAAWC,iBAClC,EAAKh5H,mBAAmBoE,EAAO0B,MAAMkB,UACrC5C,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBi1H,EAAWxqH,OAClD,EAAKvO,mBAAmB+4H,EAAWxqH,SAC3CnK,EAAOwB,MAAS,UAAYmzH,EAAWxqH,MAAQ,MAGnDnK,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkBi1H,EAAW9xH,UAC1D7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAay1H,EAAW75H,QACjDkF,EAAOwB,OAAS,EAAK9B,kBAAkBi1H,EAAW3C,KAAM,IAExD,EAAKrvH,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,OAIzB,YAAA00H,gBAAR,SAAwBp6E,GAAxB,WACIA,EAAQp/C,SAAQ,SAACgB,GACb,IAAM8D,EAAS,IAAI,EAAAsB,WACnBtB,EAAOmU,SAAW,IAAI,EAAAC,aACtBpU,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAO9U,KAAO,EAAKwU,kBAAkBxD,EAAI24H,SAAU,IACnD,IAAMC,EAAY90H,EAAO9U,KAAK+P,MAAM,KAChC65H,EAAUxrI,OAAS,IACnB0W,EAAOmU,SAASkC,UAAY,EAAK3W,kBAAkBo1H,EAAU,KAExC,IAArBA,EAAUxrI,OACV0W,EAAOmU,SAASmC,SAAW,EAAK5W,kBAAkBo1H,EAAU,IAChC,IAArBA,EAAUxrI,SACjB0W,EAAOmU,SAASoB,WAAa,EAAK7V,kBAAkBo1H,EAAU,IAC9D90H,EAAOmU,SAASmC,SAAW,EAAK5W,kBAAkBo1H,EAAU,KAEhE90H,EAAOmU,SAASvR,SAAW,EAAKlD,kBAAkBxD,EAAI64H,QACtD,EAAKjzH,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,OAIzB,YAAAi0H,eAAR,SAAuB35E,GAAvB,WACIA,EAAQp/C,SAAQ,SAACgB,GACb,IAAM8D,EAAS,IAAI,EAAAsB,WACnBtB,EAAOmU,SAAW,IAAI,EAAAC,aACtBpU,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAO9U,KAAO,EAAKwU,kBAAkBxD,EAAI84H,aACzCh1H,EAAOmU,SAASqB,SAAW,EAAK9V,kBAAkBxD,EAAI+4H,aACtDj1H,EAAOmU,SAASwB,KAAO,EAAKjW,kBAAkBxD,EAAIyZ,MAClD3V,EAAOmU,SAASyB,MAAQ,EAAKlW,kBAAkBxD,EAAI0Z,OACnD5V,EAAOmU,SAAS0B,WAAa,EAAKnW,kBAAkBxD,EAAIg5H,SACxDl1H,EAAOmU,SAAS9E,QAAU,EAAK3P,kBAAkBxD,EAAImT,SACtB,MAA3BrP,EAAOmU,SAAS9E,UAChBrP,EAAOmU,SAAS9E,QAAUrP,EAAOmU,SAAS9E,QAAQze,eAEtD,EAAKkR,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,OAIzB,YAAAw0H,YAAR,SAAoBl6E,GAApB,WACIA,EAAQp/C,SAAQ,SAACgB,GACb,IAAM8D,EAAS,IAAI,EAAAsB,WACnBtB,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAO9U,KAAO,EAAKwU,kBAAkBxD,EAAI6S,MACzC/O,EAAOI,KAAKiJ,OAAS,EAAK3J,kBAAkBxD,EAAIm2H,YAChDryH,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,QAClDrJ,EAAOI,KAAK2I,eAAiB,EAAKrJ,kBAAkBxD,EAAIi5H,OACnD,EAAKv5H,mBAAmBoE,EAAOI,KAAKkJ,SACjC,EAAK1N,mBAAmBoE,EAAO9U,MAC/B8U,EAAO9U,KAAO8U,EAAOI,KAAKkJ,MAE1BtJ,EAAO9U,MAAS,MAAQ8U,EAAOI,KAAKkJ,OAG5C,EAAKxH,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,OAIzB,YAAAq0H,YAAR,SAAoB/5E,EAAgB86E,EAAsBlqI,GAA1D,gBAA0D,IAAAA,MAAA,MACtDovD,EAAQp/C,SAAQ,SAACgB,GACb,IAAM8D,EAAS,IAAI,EAAAsB,WASnB,IAAK,IAAMrV,KARX+T,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,QAEpCnD,EAAO9U,KADC,MAARA,EACcA,EAEA,EAAKwU,kBAAkBxD,EAAIk5H,IAE3Bl5H,EACVA,EAAIzS,eAAewC,IAAQA,IAAQmpI,GACnC,EAAKrzH,WAAW/B,EAAQ/T,EAAKiQ,EAAIjQ,GAAK4L,YAG9C,EAAKiK,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,OAGrC,EAjJA,CAA0C,EAAAoD,cAA7B,EAAAssH,wB,kdChBb,YAGA,QAEA,QAEA,QAEA,2B,+CAoDA,OApDyC,OACrC,YAAAxyH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM0pI,MAAO,MAClDr1H,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM2pI,OAC5C,IAAM52G,EAAO,EAAKhf,kBAAkB/T,EAAMsW,MACrC,EAAKrG,mBAAmB8iB,KACrB,EAAK9iB,mBAAmBoE,EAAOwB,OAC/BxB,EAAOwB,MAAQkd,EAEf1e,EAAOwB,OAAU,OAASkd,GAIlC,IAAMlvB,EAAO7D,EAAM,cACnB,GAAa,aAAT6D,EACAwQ,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM2rB,UACrDtX,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,kBACzC,GAAa,gBAAT6D,EAAwB,CAC/BwQ,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOI,KAAK2I,eAAiB,EAAKrJ,kBAAkB/T,EAAM,iBAC1DqU,EAAOI,KAAKiJ,OAAS,EAAK3J,kBAAkB/T,EAAM,gBAClDqU,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,QAClDrJ,EAAOI,KAAK4I,KAAO,EAAKtJ,kBAAkB/T,EAAM4pI,KAChD,IAAMzI,EAAS,EAAKptH,kBAAkB/T,EAAM6pI,QAC5C,IAAK,EAAK55H,mBAAmBkxH,GAAS,CAClC,IAAM2I,EAAW3I,EAAO7xH,MAAM,KAC1Bw6H,EAASnsI,OAAS,IAClB0W,EAAOI,KAAKC,SAAWlJ,SAASs+H,EAAS,GAAI,MAAM59H,WACnDmI,EAAOI,KAAKE,SAAW,IAAOnJ,SAASs+H,EAAS,GAAI,OAAO59H,aAKvE,EAAK8K,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EApDA,CAAyC,EAAAiZ,cAA5B,EAAAiuH,uB,gdCTb,YAGA,QAEA,QACA,SAEA,QACA,SAEA,2B,+CAoGA,OApGuC,OACnC,YAAAn0H,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,GAAe,MAAXwxD,EAEA,OADAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAIurI,GAAW,EAiFf,OAhFAp7E,EAAQp/C,SAAQ,SAAAvP,GACZ,GAAIA,EAAMrC,OAAS,GAAMosI,IAA0B,UAAb/pI,EAAM,IAA+B,UAAbA,EAAM,IAChE+pI,GAAW,MADf,CAKA,IAAM11H,EAAS,EAAKqB,kBAkBpB,GAjBArB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMA,EAAMrC,OAAS,IAC3D0W,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAE1B,IAAjBA,EAAMrC,SAAkB,EAAKqsI,cAAchqI,EAAO,aACjD,EAAKgqI,cAAchqI,EAAO,aAAgB,EAAKgqI,cAAchqI,EAAO,UACpE,EAAKgqI,cAAchqI,EAAO,UAC3BqU,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,SAGxC,EAAKwyH,cAAchqI,EAAO,eAAiB,EAAKgqI,cAAchqI,EAAO,WACrE,EAAKgqI,cAAchqI,EAAO,iBAC1BqU,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,UAGlBte,EAAMrC,OAAS,GAAMqC,EAAMrC,OAAS,GAAO,EAC3C,IAAK,IAAIF,EAAI,EAAGA,EAAIuC,EAAMrC,OAAS,EAAGF,GAAK,EAAG,CAC1C,IAAMwsI,EAAqBjqI,EAAMvC,EAAI,GACrC,IAAI,EAAKwS,mBAAmBg6H,GAA5B,CAIA,IAAMC,EAAoBlqI,EAAMvC,EAAI,GAC9B0sI,EAAiBD,EAAUhlI,cAEjC,GAAImP,EAAOxQ,OAAS,EAAAoS,WAAWC,MAAO,CAClC,GAAuB,QAAnBi0H,IAAkD,MAArB91H,EAAO0B,MAAMoB,MAA6C,IAA7B9C,EAAO0B,MAAMoB,KAAKxZ,QAAe,CAC3F0W,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAa02H,GACtC,SACG,IAAwB,aAAnBE,GAAoD,UAAnBA,IACzC,EAAKl6H,mBAAmBoE,EAAO0B,MAAMkB,UAAW,CAChD5C,EAAO0B,MAAMkB,SAAWgzH,EACxB,SACG,GAAuB,aAAnBE,GAAiC,EAAKl6H,mBAAmBoE,EAAO0B,MAAMmB,UAAW,CACxF7C,EAAO0B,MAAMmB,SAAW+yH,EACxB,SACG,GAAuB,SAAnBE,GAA6B,EAAKl6H,mBAAmBoE,EAAO0B,MAAMua,MAAO,CAChFjc,EAAO0B,MAAMua,KAAO25G,EACpB,eAED,GAAI51H,EAAOxQ,OAAS,EAAAoS,WAAW2K,KAAM,CACxC,GAAuB,eAAnBupH,GAAmC,EAAKl6H,mBAAmBoE,EAAOI,KAAK2I,gBAAiB,CACxF/I,EAAOI,KAAK2I,eAAiB6sH,EAC7B,SACG,GAAuB,WAAnBE,GAA+B,EAAKl6H,mBAAmBoE,EAAOI,KAAKiJ,QAAS,CACnFrJ,EAAOI,KAAKiJ,OAASusH,EACrB51H,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAag2H,GACtC,SACG,GAAuB,QAAnBE,GAA4B,EAAKl6H,mBAAmBoE,EAAOI,KAAK4I,MAAO,CAC9EhJ,EAAOI,KAAK4I,KAAO4sH,EACnB,SACG,GAAuB,gBAAnBE,GAAoC,EAAKl6H,mBAAmBoE,EAAOI,KAAKC,WAC/E,EAAKzE,mBAAmBoE,EAAOI,KAAKE,UACpC,GAAI,EAAKP,kBAAkBC,EAAQ41H,GAC/B,cAED,GAAuB,SAAnBE,EAEP,SAIR,EAAK/zH,WAAW/B,EAAQ61H,EAAWD,IAI3C,EAAK9zH,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAGnB,YAAAwrI,cAAR,SAAsBl0H,EAAevW,GAArC,WACI,OAAc,MAAVuW,GAA0B,MAARvW,GAGfuW,EAAOrF,QAAO,SAAAwE,GAAK,OAAC,EAAKhF,mBAAmBgF,IAC/CA,EAAE/P,gBAAkB3F,EAAK2F,iBAAevH,OAAS,GAE7D,EApGA,CAAuC,EAAA8Z,cAA1B,EAAAmsH,qB,idCXb,YAGA,QAEA,QAEA,SAEA,QACA,SAEA,2B,+CAsJA,OAtJwC,OACpC,YAAAryH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUilB,KAAKriE,MAAMpU,GAC3B,GAAe,MAAXwxD,GAAoC,MAAjBA,EAAQ19B,OAA0C,IAAzB09B,EAAQ19B,MAAMtzB,OAE1D,OADAa,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAM4rI,EAAa,IAAIxkI,IACjBykI,EAAkB,IAAIzkI,IACtB0kI,EAAa3oI,KAAK4oI,gBAAgB57E,EAAQ35C,SAsChD,OArCArT,KAAK6oI,kBAAkB,KAAMF,EAAYF,GACzCA,EAAW76H,SAAQ,SAAC2N,EAAK5c,GACrB+pI,EAAgBhjI,IAAI/G,EAAK9B,EAAOwW,QAAQrX,QACxC,IAAMsX,EAAI,IAAI,EAAA6B,WACd7B,EAAE1V,KAAO2d,EACT1e,EAAOwW,QAAQ/W,KAAKgX,MAGxB05C,EAAQ19B,MAAM1hB,SAAQ,SAAC4Z,GACC,MAAhBA,EAAKnU,SAAmBmU,EAAKnU,QAAQrX,OAAS,GAAK0sI,EAAgB9iI,IAAI4hB,EAAKnU,QAAQ,KACpFxW,EAAOqW,oBAAoB5W,KAAK,CAACO,EAAOuY,QAAQpZ,OAAQ0sI,EAAgBzqI,IAAIupB,EAAKnU,QAAQ,MAG7F,IAAMX,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkBoV,EAAKlnB,OAC1CoS,EAAOuB,SAAWuT,EAAKvT,SAAW,EAER,MAAtBuT,EAAKshH,eAAwC,MAAfthH,EAAKrT,QAAkBqT,EAAKrT,OAAOnY,OAAS,IAC7B,IAAzCwrB,EAAKshH,cAAc77H,QAAQ,WAA+D,IAA5Cua,EAAKshH,cAAc77H,QAAQ,aACzE,EAAK87H,aAAar2H,EAAQ8U,EAAKrT,QACsB,IAA9CqT,EAAKshH,cAAc77H,QAAQ,eAClC,EAAKi6H,YAAYx0H,EAAQ8U,EAAKrT,QACvBqT,EAAKshH,cAAc77H,QAAQ,aAAe,GACjDua,EAAKrT,OAAO2a,MAAK,SAACxb,GAAW,MAAW,aAAXA,EAAEpR,OAAwB,EAAKoM,mBAAmBgF,EAAEjV,UACjF,EAAK0qI,aAAar2H,EAAQ8U,EAAKrT,QAE/B,EAAK4yH,YAAYr0H,EAAQ8U,EAAKrT,SAItCzB,EAAOwB,OAAU,KAAO,EAAK9B,kBAAkBoV,EAAKk9G,KAAM,IAC1D,EAAKrvH,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAGnB,YAAAksI,aAAR,SAAqBr2H,EAAoByB,GAAzC,WACUolF,EAAiB,GACvBplF,EAAOvG,SAAQ,SAACgH,GACR,EAAKtG,mBAAmBsG,EAAMvW,QAAyB,YAAfuW,EAAM1S,OAI9B,aAAf0S,EAAM1S,MAAsC,UAAf0S,EAAM1S,OACpC,EAAKoM,mBAAmBoE,EAAO0B,MAAMkB,UAEf,aAAfV,EAAM1S,MAAuB,EAAKoM,mBAAmBoE,EAAO0B,MAAMmB,UACzE7C,EAAO0B,MAAMmB,SAAWX,EAAMvW,MACR,SAAfuW,EAAM1S,MAAmB,EAAKoM,mBAAmBoE,EAAO0B,MAAMua,MACrEjc,EAAO0B,MAAMua,KAAO/Z,EAAMvW,MACJ,QAAfuW,EAAM1S,KACbq3F,EAAKj9F,KAAKsY,EAAMvW,OAEhB,EAAKoW,WAAW/B,EAAQkC,EAAM8P,MAAO9P,EAAMvW,MACnB,IAApBuW,EAAMo0H,UAAkB,EAAAt0H,UAAU4kF,OAAS,EAAA5kF,UAAUC,MATzDjC,EAAO0B,MAAMkB,SAAWV,EAAMvW,UAYtCqU,EAAO0B,MAAMoB,KAAOxV,KAAK4R,aAAa2nF,IAGlC,YAAA2tC,YAAR,SAAoBx0H,EAAoByB,GAAxC,WACIzB,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzB9K,EAAOvG,SAAQ,SAACgH,GACR,EAAKtG,mBAAmBsG,EAAMvW,QAAyB,YAAfuW,EAAM1S,MAAqC,WAAf0S,EAAM1S,OAI3D,WAAf0S,EAAM1S,MAAqB,EAAKoM,mBAAmBoE,EAAOI,KAAK2I,gBAC/D/I,EAAOI,KAAK2I,eAAiB7G,EAAMvW,MACb,aAAfuW,EAAM1S,MAAuB,EAAKoM,mBAAmBoE,EAAOI,KAAKiJ,SACxErJ,EAAOI,KAAKiJ,OAASnH,EAAMvW,MAC3BqU,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,SAC5B,UAAfnH,EAAM1S,MAAoB,EAAKoM,mBAAmBoE,EAAOI,KAAK4I,MACrEhJ,EAAOI,KAAK4I,KAAO9G,EAAMvW,MACH,aAAfuW,EAAM1S,MAAuB,EAAKoM,mBAAmBoE,EAAOI,KAAKE,UACnE,EAAKP,kBAAkBC,EAAQkC,EAAMvW,QAK1C,EAAKoW,WAAW/B,EAAQkC,EAAM8P,MAAO9P,EAAMvW,MACnB,IAApBuW,EAAMo0H,UAAkB,EAAAt0H,UAAU4kF,OAAS,EAAA5kF,UAAUC,WAK7D,YAAAoyH,YAAR,SAAoBr0H,EAAoByB,GAAxC,WACIA,EAAOvG,SAAQ,SAACgH,GACR,EAAKtG,mBAAmBsG,EAAMvW,QAAyB,YAAfuW,EAAM1S,MAGlD,EAAKuS,WAAW/B,EAAQkC,EAAM8P,MAAO9P,EAAMvW,MACnB,IAApBuW,EAAMo0H,UAAkB,EAAAt0H,UAAU4kF,OAAS,EAAA5kF,UAAUC,UAIzD,YAAAi0H,gBAAR,SAAwBv1H,GACpB,GAAe,MAAXA,EACA,MAAO,GAEX,IAAMs1H,EAAoB,GACpB5gI,EAAM,IAAI9D,IAAiB,IAYjC,OAXAoP,EAAQzF,SAAQ,SAACgB,GACb7G,EAAIrC,IAAIkJ,EAAIq6H,KAAMr6H,GAClBA,EAAI2mF,SAAW,MAEnBliF,EAAQzF,SAAQ,SAACgB,GACU,MAAnBA,EAAIs6H,aAA2C,KAApBt6H,EAAIs6H,aAAsBnhI,EAAInC,IAAIgJ,EAAIs6H,aACjEnhI,EAAI9J,IAAI2Q,EAAIs6H,aAAa3zC,SAASj5F,KAAKsS,GAEvC+5H,EAAWrsI,KAAKsS,MAGjB+5H,GAGH,YAAAE,kBAAR,SAA0BM,EAAqBC,EAAarhI,GAA5D,WACgB,MAARqhI,GAGJA,EAAKx7H,SAAQ,SAAC0F,GACV,GAAe,MAAXA,EAAEhT,OAAoC,KAAnBgT,EAAEhT,MAAMwM,OAAe,CAC1C,IAAIxM,EAAQgT,EAAEhT,MAAMwM,OACD,MAAfq8H,GAA8C,KAAvBA,EAAYr8H,SACnCxM,EAAQ6oI,EAAc,IAAM7oI,GAEhCyH,EAAIrC,IAAI4N,EAAE21H,KAAM3oI,GACE,MAAdgT,EAAEiiF,UAA0C,IAAtBjiF,EAAEiiF,SAASv5F,QACjC,EAAK6sI,kBAAkBvoI,EAAOgT,EAAEiiF,SAAUxtF,QAK9D,EAtJA,CAAwC,EAAA+N,cAA3B,EAAAosH,sB,idCZb,YAGA,QAEA,2B,+CAyBA,OAzBwC,OACpC,YAAAtyH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQl+C,QAAO,SAAAzQ,GACX,MAAqB,6BAAdA,EAAMmO,OACdoB,SAAQ,SAAAvP,GACP,IAAMqU,EAAS,EAAKqB,kBACdvH,EAAM,EAAK4F,kBAAkB/T,EAAMmO,IAAK,EAAK4F,kBAAkB/T,EAAMqO,WAC3EgG,EAAO9U,KAAO,EAAKwU,kBAAkB,EAAKD,YAAY3F,GAAM,MAC5DkG,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,UACrD5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAapF,GACtC,EAAKgI,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAzBA,CAAwC,EAAAiZ,cAA3B,EAAAyrH,sB,idCLb,YAGA,QAEA,QAEA,QAEA,2B,+CAkDA,OAlDwC,OACpC,YAAA3xH,MAAA,SAAMpU,GACF,IAAMqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUilB,KAAKriE,MAAMpU,GAC3B,GAAe,MAAXwxD,GAAmC,MAAhBA,EAAQxxD,KAE3B,OADAqB,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAK,IAAM8B,KAAOquD,EAAQxxD,KACtB,GAAKwxD,EAAQxxD,KAAKW,eAAewC,GAAjC,CAIA,IAAMN,EAAQ2uD,EAAQxxD,KAAKmD,GACrB+T,EAAS1S,KAAK+T,kBAIpB,GAHArB,EAAO9U,KAAOoC,KAAKoS,kBAAkB/T,EAAM8wD,SAC3Cz8C,EAAOwB,MAAQlU,KAAKoS,kBAAkB/T,EAAM6V,OAExB,YAAhB7V,EAAM+I,MACNsL,EAAO0B,MAAMkB,SAAWtV,KAAKoS,kBAAkB/T,EAAMiX,UACrD5C,EAAO0B,MAAMmB,SAAWvV,KAAKoS,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMoB,KAAOxV,KAAK4R,aAAavT,EAAMmO,SACzC,IAAoB,eAAhBnO,EAAM+I,MAgBb,SAfAsL,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOI,KAAK2I,eAAiBzb,KAAKoS,kBAAkB/T,EAAMiX,UAC1D5C,EAAOI,KAAKiJ,OAAS/b,KAAKoS,kBAAkB/T,EAAMgrI,cAClD32H,EAAOI,KAAKkJ,MAAQhc,KAAKsS,aAAaI,EAAOI,KAAKiJ,QAClDrJ,EAAOI,KAAK4I,KAAO1b,KAAKoS,kBAAkB/T,EAAMirI,WAC3CtpI,KAAKsO,mBAAmBjQ,EAAMkrI,eAC1BvpI,KAAKyS,kBAAkBC,EAAQrU,EAAMkrI,eACtCvpI,KAAKyU,WAAW/B,EAAQ,aAAcrU,EAAMkrI,cAG/CvpI,KAAKsO,mBAAmBjQ,EAAMkX,WAC/BvV,KAAKyU,WAAW/B,EAAQ,MAAOrU,EAAMkX,UAM7CvV,KAAKqV,sBAAsB3C,GAC3B1S,KAAKwU,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,GAIxB,OADA7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EAlDA,CAAwC,EAAAiZ,cAA3B,EAAAutH,sB,gdCTb,YAGA,QAEA,2B,+CAsDA,OAtDuC,OACnC,YAAAzzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUilB,KAAKriE,MAAMpU,GAC3B,GAAe,MAAXwxD,GAAmD,IAAhC/wD,OAAO4S,KAAKm+C,GAAShxD,OAExC,OADAa,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,G,eAGhB2sI,GACP,IAAKx8E,EAAQ7wD,eAAeqtI,IAAY,EAAKl7H,mBAAmBk7H,IAChC,IAA5Bx8E,EAAQw8E,GAASxtI,O,iBAIrBgxD,EAAQw8E,GAAS57H,SAAQ,SAACvP,GACtB,IAAI,EAAKiQ,mBAAmBjQ,EAAMorI,eAAwD,IAAvCprI,EAAMorI,aAAax8H,QAAQ,QAA9E,CAIA,EAAK6H,cAAcjY,EAAQ2sI,GAC3B,IAAM92H,EAAS,EAAKqB,kBAQpB,GAPArB,EAAO9U,KAAOS,EAAMorI,aAAaz+H,QAAQ,UAAW,IAAIA,QAAQ,WAAY,IACxE0H,EAAO9U,KAAK5B,OAAS,KACrB0W,EAAO9U,KAAO8U,EAAO9U,KAAKsU,UAAU,EAAG,KAE3CQ,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM6sB,QACrDxY,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMorI,cAEpB,MAApBprI,EAAMqrI,WAGN,IAAK,IAAMC,KAFXj3H,EAAO0B,MAAMkB,SAA+B,MAApBjX,EAAMqrI,WAC1B,EAAKt3H,kBAAkB/T,EAAMqrI,WAAWE,gBAAkB,KAC3CvrI,EAAMqrI,WAChBrrI,EAAMqrI,WAAWvtI,eAAewtI,IAAkB,mBAATA,GACjC,eAATA,GAGJ,EAAKl1H,WAAW/B,EAAQi3H,EAAMtrI,EAAMqrI,WAAWC,IAIvD,EAAKt0H,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,Q,OAlC5B,IAAK,IAAM82H,KAAWx8E,E,EAAXw8E,GA2CX,OALIxpI,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EAtDA,CAAuC,EAAAiZ,cAA1B,EAAAitH,qB,mdCLb,YAGA,QAEM8G,EAAc,YACdC,EAAqB,mBACrBC,EAAiB,eACjBC,EAAY,UAElB,2B,+CAiHA,OAjH0C,OACtC,YAAAp6H,MAAA,SAAMpU,GAAN,IAGQyuI,EACAC,EACAC,EAkBMr8H,EAvBd,OACUjR,EAAS,IAAI,EAAAmZ,aAKfo0H,EAAcpqI,KAAKmR,aAAa3V,GAAMgQ,KAAK,OAEL,IAAtC4+H,EAAYn9H,QAAQ48H,MACd/7H,EAAQs8H,EAAYz8H,MAAMk8H,IACtB7tI,OAAS,IACfouI,EAAct8H,EAAM,GACpBm8H,EAAYn8H,EAAM,MAGuB,IAA7Cs8H,EAAYn9H,QAAQ68H,MACdh8H,EAAQs8H,EAAYz8H,MAAMm8H,IACtB9tI,OAAS,IACfouI,EAAct8H,EAAM,GACpBo8H,EAAmBp8H,EAAM,KAGW,IAAxCs8H,EAAYn9H,QAAQ88H,MACdj8H,EAAQs8H,EAAYz8H,MAAMo8H,IACtB/tI,OAAS,IACfouI,EAAct8H,EAAM,GACpBq8H,EAAer8H,EAAM,KAI7B,IAAMoG,EAAQlU,KAAKqqI,kBAAkBJ,GAC/BK,EAAetqI,KAAKqqI,kBAAkBH,GACtCK,EAAWvqI,KAAKqqI,kBAAkBF,GA+BxC,OA7BAj2H,EAAMtG,SAAQ,SAAA/O,GACV,IAAM6T,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkBvT,EAAEZ,IAAI,SAC3CyU,EAAOwB,MAAQ,EAAK9B,kBAAkBvT,EAAEZ,IAAI,SAC5C,EAAKuW,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB63H,EAAS//G,OAAO8/G,GAAc18H,SAAQ,SAAAylE,GAClC,IAAM3gE,EAAS,EAAKqB,kBACdy2H,EAAUn3D,EAAEztE,IAAI,gBAAkB,eAAiB,cACzD8M,EAAO9U,KAAO,EAAKwU,kBAAkBihE,EAAEp1E,IAAIusI,GAAU,IAChD,EAAKl8H,mBAAmB+kE,EAAEp1E,IAAI,iBAC1B,EAAKqQ,mBAAmBoE,EAAO9U,QAChC8U,EAAO9U,MAAQ,MAEnB8U,EAAO9U,MAAQy1E,EAAEp1E,IAAI,eAEzByU,EAAOwB,MAAQ,EAAK9B,kBAAkBihE,EAAEp1E,IAAI,YACxCo1E,EAAEztE,IAAI,iBACN8M,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAayhE,EAAEp1E,IAAI,iBAEhDyU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBihE,EAAEp1E,IAAI,UACrDyU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkBihE,EAAEp1E,IAAI,aACrD,EAAKuW,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAGnB,YAAAwtI,kBAAR,SAA0B7uI,GACtB,GAAIwE,KAAKsO,mBAAmB9S,KAAsC,IAA7BA,EAAKyR,QAAQ+8H,GAC9C,MAAO,GAEX,IAAM16G,EAA+B,GAwCrC,OAvCA9zB,EAAKmS,MAAMq8H,GAAWp8H,SAAQ,SAAA5O,GAC1B,IAAyB,IAArBA,EAAEiO,QAAQ,MAAd,CAGA,IACIw9H,EACAC,EAFEljH,EAAO,IAAIvjB,IAGjBjF,EAAE2O,MAAM,MAAMC,SAAQ,SAAApQ,GAClB,GAAmB,MAAfitI,EAAJ,CAIA,IACI9rI,EACA4c,EAFEovH,EAAantI,EAAEyP,QAAQ,MAGT,IAAhB09H,IAGAhsI,EAAMnB,EAAE0U,UAAU,EAAGy4H,GACjBntI,EAAExB,OAAS2uI,EAAa,IACxBpvH,EAAM/d,EAAE0U,UAAUy4H,EAAa,IAG5B,MAAPhsI,GACA6oB,EAAK9hB,IAAI/G,EAAK4c,GAEN,YAAR5c,GAA6B,SAARA,IACrB8rI,EAAclvH,EACdmvH,EAAiB/rI,SAnBjB8rI,GAAgB,KAAOjtI,KAsBZ,MAAfitI,GAAyC,MAAlBC,GACvBljH,EAAK9hB,IAAIglI,EAAgBD,GAEX,IAAdjjH,EAAK7C,MAGT2K,EAAMhzB,KAAKkrB,OAER8H,GAEf,EAjHA,CAA0C,EAAAxZ,cAA7B,EAAAwtH,wB,kdCVb,YAGA,SAEA,QAEA,SAEA,yE,OACI,EAAAzmI,OAAS,IAAI,EAAAmZ,a,EAyFjB,OA1FyC,OAGrC,YAAApG,MAAA,SAAMpU,GACF,IAAMoV,EAAM5Q,KAAK2Q,SAASnV,GAC1B,GAAW,MAAPoV,EAEA,OADA5Q,KAAKnD,OAAOkZ,SAAU,EACfoF,QAAQC,QAAQpb,KAAKnD,QAGhC,IAAM+tI,EAAYh6H,EAAI5J,cAAc,8BACpC,OAAiB,MAAb4jI,GACA5qI,KAAKnD,OAAOm9D,aAAe,6CAC3Bh6D,KAAKnD,OAAOkZ,SAAU,EACfoF,QAAQC,QAAQpb,KAAKnD,UAGhCmD,KAAK6qI,SAASD,GAAW,EAAM,IAE3B5qI,KAAK6f,cACL7f,KAAKiT,yBAAyBjT,KAAKnD,QAGvCmD,KAAKnD,OAAOkZ,SAAU,EACfoF,QAAQC,QAAQpb,KAAKnD,UAGhC,YAAAguI,SAAA,SAASz1C,EAAe01C,EAAqBC,GAA7C,WACU/1H,EAAchV,KAAKnD,OAAOwW,QAAQrX,OACpCgvI,EAAYD,EAEhB,IAAKD,EAAY,CACK,KAAdE,IACAA,GAAa,KAEjB,IAAMC,EAASjrI,KAAKyT,yBAAyB2hF,EAAM,QACnD41C,GAAuB,MAAVC,EAAiB,IAAMA,EAAO38E,YAC3C,IAAM2E,EAAS,IAAI,EAAA99C,WACnB89C,EAAOr1D,KAAOotI,EACdhrI,KAAKnD,OAAOwW,QAAQ/W,KAAK22D,GAG7BjzD,KAAK6T,4BAA4BuhF,EAAM,SAASxnF,SAAQ,SAAA46D,GACpD,IAAM0iE,EAAc,EAAKruI,OAAOuY,QAAQpZ,OAElC0W,EAAS,EAAKqB,kBACpB,EAAKF,4BAA4B20D,EAAO,UAAU56D,SAAQ,SAAAu9H,GACtD,IAAMC,EAAU,EAAK33H,yBAAyB03H,EAAa,SACrD9sI,EAAmB,MAAX+sI,EAAkBA,EAAQ98E,YAAc,KACtD,IAAI,EAAKhgD,mBAAmBjQ,GAA5B,CAGA,IAAMgtI,EAAQ,EAAK53H,yBAAyB03H,EAAa,OACnDxsI,EAAe,MAAT0sI,EAAgBA,EAAM/8E,YAAc,KAEhD,GAAY,QAAR3vD,EACA+T,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,QACnC,GAAY,aAARM,EACP+T,EAAO0B,MAAMkB,SAAWjX,OACrB,GAAY,aAARM,EACP+T,EAAO0B,MAAMmB,SAAWlX,OACpB,GAAY,QAARM,EACR+T,EAAO0B,MAAMua,KAAOtwB,EAAM2M,QAAQ,OAAQ,SACvC,GAAY,UAARrM,EACP+T,EAAO9U,KAAOS,OACX,GAAY,UAARM,EACP+T,EAAOwB,OAAU7V,EAAQ,SACtB,CACH,IAAI6D,EAAO,EAAAwS,UAAUC,KACf22H,EAASF,EAAQ1B,WACnB4B,EAAMtvI,OAAS,GAA8B,MAAzBsvI,EAAMC,iBACM,SAAhCD,EAAMC,gBAAgBltI,QACtB6D,EAAO,EAAAwS,UAAU4kF,QAErB,EAAK7kF,WAAW/B,EAAQ/T,EAAKN,EAAO6D,QAI5C,EAAKsS,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,GAEpBo4H,GACD,EAAKjuI,OAAOqW,oBAAoB5W,KAAK,CAAC4uI,EAAal2H,OAI3DhV,KAAK6T,4BAA4BuhF,EAAM,SAASxnF,SAAQ,SAAAqoD,GACpD,EAAK40E,SAAS50E,GAAO,EAAO+0E,OAGxC,EA1FA,CAAyC,EAAAl1H,cAA5B,EAAAurH,uB,kdCTb,YAGA,QAEA,2B,+CAoCA,OApCyC,OACrC,YAAAzxH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAI,EAAKiQ,mBAAmBjQ,EAAM8qB,OAAlC,CAIA9qB,EAAMmtI,OAAS,EAAKl9H,mBAAmBjQ,EAAMmtI,QAAUntI,EAAMmtI,MAAMz+H,WAAW,SAC1E1O,EAAMmtI,MAAMxgI,QAAQ,QAAS,IAAM3M,EAAMmtI,MAC7C,IAAMR,EAAa,EAAK18H,mBAAmBjQ,EAAMmtI,OAAuB,KAAdntI,EAAMmtI,MAChE,EAAK12H,cAAcjY,EAAQmuI,GAE3B,IAAMt4H,EAAS,EAAKqB,kBACpBrB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM2pI,OAC5Ct1H,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM8qB,MAAO,MAClDzW,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM2rB,UACrDtX,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMsR,KAC5C,EAAK6E,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EApCA,CAAyC,EAAAiZ,cAA5B,EAAAkrH,uB,gdCLb,YAGA,QAIA,2B,+CAwCA,OAxCuC,OACnC,YAAApxH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,KAAIA,EAAMrC,OAAS,GAAnB,CAIA,EAAK8Y,cAAcjY,EAAQwB,EAAM,IACjC,IAAMqU,EAAS,EAAKqB,kBAOpB,GANArB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM,IAAM,KAClDqU,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAC/CqU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,IAExCA,EAAMrC,OAAS,EAEf,IAAK,IAAIF,EAAI,EAAGA,EAAIuC,EAAMrC,OAAQF,GAAQ,EACtC,EAAK2Y,WAAW/B,EAAQrU,EAAMvC,GAAIuC,EAAMvC,EAAI,IAIpD,EAAK0Y,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAxCA,CAAuC,EAAAiZ,cAA1B,EAAAisH,qB,kdCPb,YAGA,QAEA,QACA,SACA,SACA,SACA,SACA,SAEA,QACA,SAEA,2B,+CAoQA,OApQyC,OACrC,YAAAnyH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAACvP,EAAO4jE,GACpB,IAAMipE,EAAcruI,EAAOuY,QAAQpZ,OAC/BgZ,EAAcnY,EAAOwW,QAAQrX,OAC7Bq1D,EAAWhzD,EAAMgzD,SACL,MAAZA,IACAA,EAAWA,EAASrmD,QAAQ,MAAO,KAAKA,QAAQ,wBAAyB,KAE7E,IAAMiK,EAA2D,WAA/C,EAAK7C,kBAAkBi/C,EAAU,UAC/Cn8C,EAAYD,EAEhB,GAAIA,EACA,IAAK,IAAInZ,EAAI,EAAGA,EAAIe,EAAOwW,QAAQrX,OAAQF,IACvC,GAAIe,EAAOwW,QAAQvX,GAAG8B,OAASyzD,EAAU,CACrCn8C,GAAY,EACZF,EAAclZ,EACd,MAKZ,IAAM4W,EAAS,EAAK+4H,gBAAgBptI,GACpC,GAAIqU,EAAOxQ,OAAS,EAAAoS,WAAWC,MAC3B7B,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMsnI,OAC5CjzH,EAAO0B,MAAQ,IAAI,EAAAC,UACnB3B,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmO,KAC5CkG,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,UACrD5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMua,KAAO,EAAKvc,kBAAkB/T,EAAMswB,WAC9C,GAAIjc,EAAOxQ,OAAS,EAAAoS,WAAWmB,WAClC,EAAKi2H,gBAAgBrtI,EAAOqU,QACzB,GAAIA,EAAOxQ,OAAS,EAAAoS,WAAW2K,KAClCvM,EAAOI,KAAO,EAAK64H,UAAUttI,GAC7BqU,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM6V,YACzC,GAAIxB,EAAOxQ,OAAS,EAAAoS,WAAW4K,WAClCxM,EAAOmU,SAAW,EAAK+kH,cAAcvtI,GACrCqU,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM6V,QACvC,EAAK5F,mBAAmBjQ,EAAMwtI,QAAQ,CAEvC,IAAMC,EAAa,EAAKL,gBAAgBptI,GACxCytI,EAAWjlH,SAAW,KACtBilH,EAAW5pI,KAAO,EAAAoS,WAAW2K,KAC7B6sH,EAAWh5H,KAAO,EAAK64H,UAAUttI,GACjCxB,EAAOuY,QAAQ9Y,KAAKwvI,GAM5B,GAFAjvI,EAAOuY,QAAQ9Y,KAAKoW,GAEhBwC,EAAW,CACX,IAAM5B,EAAI,IAAI,EAAA6B,WACd7B,EAAE1V,KAAOyzD,EACTx0D,EAAOwW,QAAQ/W,KAAKgX,GAEpB2B,GACApY,EAAOqW,oBAAoB5W,KAAK,CAAC4uI,EAAal2H,OAIlDhV,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAGnB,YAAA4uI,gBAAR,SAAwBptI,GACpB,IAAMqU,EAAS,IAAI,EAAAsB,WAmBnB,OAlBI3V,EAAMlC,eAAe,gBAAkBkC,EAAMlC,eAAe,oBAE5DuW,EAAOuB,UAAW,EAClBvB,EAAO9U,KAAOoC,KAAKoS,kBAAkB/T,EAAM0tI,YAAa,MACxDr5H,EAAOxQ,KAAO,EAAAoS,WAAW2K,KAEpBjf,KAAKsO,mBAAmBjQ,EAAMiC,QAAWN,KAAKsO,mBAAmBjQ,EAAM2tI,YACvEhsI,KAAKsO,mBAAmBjQ,EAAM4tI,WAAcjsI,KAAKsO,mBAAmBjQ,EAAM6pB,WAC1EloB,KAAKsO,mBAAmBjQ,EAAMoqB,QAAWzoB,KAAKsO,mBAAmBjQ,EAAMiX,WACvEtV,KAAKsO,mBAAmBjQ,EAAMwe,SAC/BnK,EAAOxQ,KAAO,EAAAoS,WAAW4K,YAI7BxM,EAAOuB,UAAYjU,KAAK6f,cAA2D,MAA3C7f,KAAKoS,kBAAkB/T,EAAMqnI,IAAK,KAC1EhzH,EAAO9U,KAAOoC,KAAKoS,kBAAkB/T,EAAMT,KAAM,MACjD8U,EAAOxQ,KAAqB,cAAd7D,EAAMmO,IAAsB,EAAA8H,WAAWmB,WAAa,EAAAnB,WAAWC,OAE1E7B,GAGH,YAAAi5H,UAAR,SAAkBttI,GACd,IAAMyU,EAAO,IAAI,EAAA6J,SAMjB,GALA7J,EAAK2I,eAAiBzb,KAAKoS,kBAAkB/T,EAAM6tI,QACnDp5H,EAAKiJ,OAAS/b,KAAKoS,kBAAkB/T,EAAMwtI,OAC3C/4H,EAAK4I,KAAO1b,KAAKoS,kBAAkB/T,EAAM8tI,OACzCr5H,EAAKkJ,MAAQhc,KAAKsS,aAAajU,EAAMwtI,QAEhC7rI,KAAKsO,mBAAmBjQ,EAAM+tI,QAAU/tI,EAAM+tI,MAAMn/H,QAAQ,MAAQ,EAAG,CACxE,IAAMo/H,EAAchuI,EAAM+tI,MAAiBz+H,MAAM,KAC7C0+H,EAAWrwI,OAAS,IACpB8W,EAAKE,QAAUq5H,EAAW,GAC1Bv5H,EAAKC,SAAWs5H,EAAW,GACE,IAAzBv5H,EAAKC,SAAS/W,QAAqC,MAArB8W,EAAKC,SAAS,KAC5CD,EAAKC,SAAWD,EAAKC,SAAS,KAK1C,OAAOD,GAGH,YAAA84H,cAAR,SAAsBvtI,GAClB,IAAMwoB,EAAW,IAAI,EAAAC,aAsBrB,OArBAD,EAASvmB,MAAQN,KAAKoS,kBAAkB/T,EAAMiC,OAC9CumB,EAASkC,UAAY/oB,KAAKoS,kBAAkB/T,EAAM2tI,WAClDnlH,EAASoB,WAAajoB,KAAKoS,kBAAkB/T,EAAMiuI,YACnDzlH,EAASmC,SAAWhpB,KAAKoS,kBAAkB/T,EAAM4tI,UACjDplH,EAASvR,SAAWtV,KAAKoS,kBAAkB/T,EAAMiX,UACjDuR,EAAS2B,QAAUxoB,KAAKoS,kBAAkB/T,EAAMmqB,SAChD3B,EAAS6B,IAAM1oB,KAAKoS,kBAAkB/T,EAAMqqB,KAC5C7B,EAASqB,SAAWloB,KAAKoS,kBAAkB/T,EAAM6pB,UACjDrB,EAASsB,SAAWnoB,KAAKoS,kBAAkB/T,EAAM8pB,UACjDtB,EAASuB,SAAWpoB,KAAKoS,kBAAkB/T,EAAM+pB,UACjDvB,EAASwB,KAAOroB,KAAKoS,kBAAkB/T,EAAMgqB,MAC7CxB,EAASyB,MAAQtoB,KAAKoS,kBAAkB/T,EAAMiqB,OAC9CzB,EAAS0B,WAAavoB,KAAKoS,kBAAkB/T,EAAMkuI,KACnD1lH,EAAS9E,QAAU/hB,KAAKoS,kBAAkB/T,EAAM0jB,SAChD8E,EAAShK,MAAQ7c,KAAKoS,kBAAkB/T,EAAMwe,OAC9CgK,EAAS4B,MAAQzoB,KAAKoS,kBAAkB/T,EAAMoqB,OAEzCzoB,KAAKsO,mBAAmBuY,EAASvmB,SAClCumB,EAASvmB,MAAQumB,EAASvmB,MAAM+C,OAAO,GAAGC,cAAgBujB,EAASvmB,MAAMlB,MAAM,IAG5EynB,GAGH,YAAA6kH,gBAAR,SAAwBrtI,EAAYqU,GAChC,IAAM85H,EAAaxsI,KAAKmR,aAAa9S,EAAMsnI,OACvC8G,GAAgB,EAEpB,GAAID,EAAWxwI,OAAQ,CACnB,IAAM0wI,EAAYF,EAAW,GAAG7+H,MAAM,KACtC,GAAI++H,EAAU1wI,OAAS,GAAsB,aAAjB0wI,EAAU,KAChB,gBAAjBA,EAAU,IAAyC,YAAjBA,EAAU,IAAmB,CAChE,GAAqB,gBAAjBA,EAAU,GAAsB,CAChC,IAAMC,EAAa3sI,KAAK4sI,uBAAiCl6H,EAAQ85H,EAAY,CACzE,OAAU,SACV,eAAgB,iBAChB,gBAAiB,OAGjB,kBAAmB,aAGvB,GAAIxsI,KAAKsO,mBAAmBq+H,EAAW55H,WAAqC,MAAxB45H,EAAW55H,SAE3D45H,EAAW55H,cAAW1Q,MACnB,CACG,MAAsBsqI,EAAW55H,SAASpF,MAAM,KAA/Ck/H,EAAW,KAAEh6H,EAAI,KAExB,GAAK7S,KAAKsO,mBAAmBu+H,GAQzBF,EAAW55H,cAAW1Q,MARiB,CACvC,IAAMuQ,EAAQ,IAAI8e,KAAKA,KAAK9hB,MAAMi9H,EAAY//H,OAAS,aAAa+kB,WAAa,EAC7E5iB,MAAM2D,GACN+5H,EAAW55H,cAAW1Q,EAEtBsqI,EAAW55H,SAAWH,EAAMrI,WAK/BvK,KAAKsO,mBAAmBuE,KACzB85H,EAAW35H,QAAUH,GAI7BH,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO65H,OACX,GAAqB,YAAjBD,EAAU,GAAkB,CAC7BC,EAAa3sI,KAAK4sI,uBAAqCl6H,EAAQ85H,EAAY,CAC7E,MAAS,QACT,aAAc,YACd,YAAa,WACb,cAAe,aACf,QAAW,UACX,YAAa,WACb,YAAa,WACb,YAAa,WACb,cAAe,OACf,MAAS,QACT,oBAAqB,aACrB,QAAW,UACX,gBAAiB,QACjB,SAAY,aAEhB95H,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAOmU,SAAW8lH,EAEtBF,GAAgB,GAInBA,IACD/5H,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,QACxCnD,EAAOwB,MAAQlU,KAAKoS,kBAAkB/T,EAAMsnI,SAI5C,YAAAiH,uBAAR,SAAkCl6H,EAAoB85H,EAAsBzkI,GAA5E,WACUsS,EAAe,GAEjByyH,GAAkB,EAsCtB,OArCAN,EAAW5+H,SAAQ,SAAAm/H,GACf,IAAIpuI,EAAc,KACd4c,EAAc,KAClB,IAAKuxH,EAAiB,CAClB,GAAI,EAAKx+H,mBAAmBy+H,GACxB,OAEJ,IAAMpC,EAAaoC,EAAU9/H,QAAQ,KASrC,IARoB,IAAhB09H,EACAhsI,EAAMouI,GAENpuI,EAAMouI,EAAU76H,UAAU,EAAGy4H,GACzBoC,EAAU/wI,OAAS2uI,IACnBpvH,EAAMwxH,EAAU76H,UAAUy4H,EAAa,KAG3C,EAAKr8H,mBAAmB3P,IAAQ,EAAK2P,mBAAmBiN,IAAgB,aAAR5c,EAChE,OAIJmuI,EACAp6H,EAAOwB,OAAU,KAAO64H,EACT,UAARpuI,GACF,EAAK2P,mBAAmBoE,EAAOwB,OAGhCxB,EAAOwB,MAAQqH,EAFf7I,EAAOwB,OAAU,KAAOqH,EAI5BuxH,GAAkB,GACX/kI,EAAI5L,eAAewC,GAC1B0b,EAAQtS,EAAIpJ,IAAQ4c,EAEpB,EAAK9G,WAAW/B,EAAQ/T,EAAK4c,MAI9BlB,GAEf,EApQA,CAAyC,EAAAvE,cAA5B,EAAAirH,uB,mdCfb,YAGA,QAEA,2B,+CAyBA,OAzB0C,OACtC,YAAAnxH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,KAAIA,EAAMrC,OAAS,GAAnB,CAGA,IAAM0W,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAC/CqU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,IAC5C,EAAKmW,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAzBA,CAA0C,EAAAiZ,cAA7B,EAAA6tH,wB,idCLb,YAGA,QAEA,2B,+CAuBA,OAvBwC,OACpC,YAAA/zH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM2uI,YAAa,MACxDt6H,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM2pI,OAC5Ct1H,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM4uI,UACrDv6H,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM6uI,KAC5C,EAAK14H,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAvBA,CAAwC,EAAAiZ,cAA3B,EAAA6rH,sB,idCLb,YAGA,QAEA,QACA,SAEA,SAEA,2B,+CAmDA,OAnDwC,OACpC,YAAA/xH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,KAAIA,EAAMrC,OAAS,GAAnB,CAIA,IAAM+Y,EAAgE,eAAnD,EAAK3C,kBAAkB/T,EAAM,GAAI,cAAiCA,EAAM,GAAK,KAChG,EAAKyW,cAAcjY,EAAQkY,GAE3B,IAAMrC,EAAS,EAAKqB,kBAGpB,GAFArB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAE9B,eAAbA,EAAM,IAAoC,UAAbA,EAAM,GACnCqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,IAC5CqU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM,IACrDqU,EAAOwB,MAAS,EAAK5F,mBAAmBjQ,EAAM,IAAyC,KAAnCA,EAAM,GAAGsP,MAAM,OAAOnC,KAAK,WAC5E,GAAInN,EAAMrC,OAAS,EAAG,CACzB0W,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,QACxC,IAAK,IAAI/Z,EAAI,EAAGA,EAAIuC,EAAMrC,OAAQF,IACzB,EAAKwS,mBAAmBjQ,EAAMvC,MAC/B4W,EAAOwB,OAAU7V,EAAMvC,GAAK,MAKnC,EAAKwS,mBAAmBjQ,EAAM,KAAOqU,EAAOxQ,OAAS,EAAAoS,WAAWC,QACjE7B,EAAO9U,KAAOS,EAAM,GAAK,KAAOqU,EAAO9U,MAG3C,EAAK4W,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAnDA,CAAwC,EAAAiZ,cAA3B,EAAAusH,sB,8cCVb,YAGA,QACA,SAEA,QACA,SACA,SAEA,QAEA,2B,+CA+DA,OA/DqC,OACjC,YAAAzyH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBAIpB,GAHArB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM8uI,SAAU,MACrDz6H,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM+uI,qBAE1B/qI,IAAdhE,EAAMmO,IAENkG,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmO,KAC5CkG,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,UACrD5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMua,KAAO,EAAKvc,kBAAkB/T,EAAMgvI,uBAC9C,QAAyBhrI,IAArBhE,EAAM0mI,WAEbryH,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAK2I,eAAiB,EAAKrJ,kBAAkB/T,EAAMivI,UAC1D56H,EAAOI,KAAKiJ,OAAS,EAAK3J,kBAAkB/T,EAAM0mI,YAClDryH,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,QAClDrJ,EAAOI,KAAKC,SAAW,EAAKX,kBAAkB/T,EAAMkvI,WACpD76H,EAAOI,KAAKE,QAAU,EAAKZ,kBAAkB/T,EAAMmvI,UACnD96H,EAAOI,KAAK4I,KAAO,EAAKtJ,kBAAkB/T,EAAM2mI,UAC7C,QAAwB3iI,IAApBhE,EAAM0qB,UAEbrW,EAAOmU,SAAW,IAAI,EAAAC,aACtBpU,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAOmU,SAASvmB,MAAQ,EAAK8R,kBAAkB/T,EAAMiC,OACrDoS,EAAOmU,SAASkC,UAAY,EAAK3W,kBAAkB/T,EAAM0qB,WACzDrW,EAAOmU,SAASoB,WAAa,EAAK7V,kBAAkB/T,EAAM4pB,YAC1DvV,EAAOmU,SAASmC,SAAW,EAAK5W,kBAAkB/T,EAAM2qB,UACxDtW,EAAOmU,SAAS4B,MAAQ,EAAKrW,kBAAkB/T,EAAM0d,QACrDrJ,EAAOmU,SAAShK,MAAQ,EAAKzK,kBAAkB/T,EAAMwe,OACrDnK,EAAOmU,SAASqB,SAAW,EAAK9V,kBAAkB/T,EAAMovI,kBACxD/6H,EAAOmU,SAASsB,SAAW,EAAK/V,kBAAkB/T,EAAMqvI,mBACxDh7H,EAAOmU,SAASwB,KAAO,EAAKjW,kBAAkB/T,EAAMgqB,MACpD3V,EAAOmU,SAAS9E,QAAU,EAAK3P,kBAAkB/T,EAAM0jB,SACvDrP,EAAOmU,SAAS0B,WAAa,EAAKnW,kBAAkB/T,EAAMsvI,aACvD,SAAsBtrI,IAAlBhE,EAAMwuD,QAQb,OANAn6C,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,QACxCnD,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMiC,MAAO,MAClDoS,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMwuD,SAKhD,EAAKr4C,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EA/DA,CAAqC,EAAAiZ,cAAxB,EAAA2tH,mB,kdCZb,YAGA,QAEA,SACA,SAEA,QACA,SAwBA,2B,+CAmHA,OAnHyC,OACrC,YAAA7zH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAA+BhtD,KAAK+Q,SAASvV,GAAM,GACzD,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAggI,GAEZ,IAAMC,EAAa,EAAKC,aAAaF,GACrC,QAAmBvrI,IAAfwrI,EAAJ,CAIK,EAAKhuH,cACN,EAAK/K,cAAcjY,EAAQ+wI,EAAO36E,QAGtC,IAAMvgD,EAAS,IAAI,EAAAsB,WAInB,OAHAtB,EAAO9U,KAAO,EAAKwU,kBAAkBw7H,EAAOhwI,KAAM,MAClD8U,EAAOwB,MAAQ,EAAK9B,kBAAkBw7H,EAAOlJ,MAErCmJ,GACJ,KAAK,EAAAv5H,WAAWC,MACZ7B,EAAOxQ,KAAO,EAAAoS,WAAWC,MACzB7B,EAAO0B,MAAQ,IAAI,EAAAC,UACnB3B,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBw7H,EAAOt4H,UACtD5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkBw7H,EAAOr4H,UACtD7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAag8H,EAAOphI,KAC7C,MACJ,KAAK,EAAA8H,WAAW2K,KACZvM,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAK2I,eAAiB,EAAKrJ,kBAAkBw7H,EAAOG,gBAC3Dr7H,EAAOI,KAAKiJ,OAAS,EAAK3J,kBAAkBw7H,EAAOI,YACnDt7H,EAAOI,KAAK4I,KAAO,EAAKtJ,kBAAkBw7H,EAAOK,KACjDv7H,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,QAClD,EAAKtJ,kBAAkBC,EAAQk7H,EAAOM,YACtC,MAEJ,KAAK,EAAA55H,WAAW4K,SACZxM,EAAOxQ,KAAO,EAAAoS,WAAW4K,SAEzB,EAAKivH,YAAYz7H,EAAQ,EAAKN,kBAAkBw7H,EAAOQ,YACvD17H,EAAOmU,SAASqB,SAAW,EAAK9V,kBAAkBw7H,EAAO1lH,UACzDxV,EAAOmU,SAASsB,SAAW,EAAK/V,kBAAkBw7H,EAAOzlH,UACzDzV,EAAOmU,SAASwB,KAAO,EAAKjW,kBAAkBw7H,EAAOvlH,MACrD3V,EAAOmU,SAASyB,MAAQ,EAAKlW,kBAAkBw7H,EAAOtlH,OACtD5V,EAAOmU,SAAS0B,WAAa,EAAKnW,kBAAkBw7H,EAAOhG,SAC3Dl1H,EAAOmU,SAAS9E,QAAU,EAAK3P,kBAAkBw7H,EAAO7rH,SACzB,MAA3BrP,EAAOmU,SAAS9E,UAChBrP,EAAOmU,SAAS9E,QAAUrP,EAAOmU,SAAS9E,QAAQze,eAEtDoP,EAAOmU,SAAShK,MAAQ,EAAKzK,kBAAkBw7H,EAAO/wH,OACtDnK,EAAOmU,SAAS4B,MAAQ,EAAKrW,kBAAkBw7H,EAAOS,cACtD,MACJ,KAAK,EAAA/5H,WAAWmB,WACZ/C,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,QAMhD,EAAKrB,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAGnB,YAAAixI,aAAR,SAAqBF,GAEjB,OAAK5tI,KAAKsO,mBAAmBs/H,EAAOt4H,UAI/BtV,KAAKsO,mBAAmBs/H,EAAOI,YAI/BhuI,KAAKsO,mBAAmBs/H,EAAOQ,WAI/BpuI,KAAKsO,mBAAmBs/H,EAAOlJ,WAApC,EACW,EAAApwH,WAAWmB,WAJX,EAAAnB,WAAW4K,SAJX,EAAA5K,WAAW2K,KAJX,EAAA3K,WAAWC,OAkBlB,YAAA45H,YAAR,SAAoBz7H,EAAoB60H,GAEpC,IAAIvnI,KAAKsO,mBAAmBi5H,GAA5B,CAIA,IAAMC,EAAYD,EAAS55H,MAAM,KAC7B65H,EAAUxrI,OAAS,IACnB0W,EAAOmU,SAASkC,UAAY/oB,KAAKoS,kBAAkBo1H,EAAU,KAExC,IAArBA,EAAUxrI,OACV0W,EAAOmU,SAASmC,SAAWhpB,KAAKoS,kBAAkBo1H,EAAU,IACrDA,EAAUxrI,QAAU,IAC3B0W,EAAOmU,SAASoB,WAAajoB,KAAKoS,kBAAkBo1H,EAAU,IAC9D90H,EAAOmU,SAASmC,SAAWw+G,EAAUpoI,MAAM,EAAGooI,EAAUxrI,QAAQwP,KAAK,QAGjF,EAnHA,CAAyC,EAAAsK,cAA5B,EAAAmuH,uB,sdCjCb,YAGA,QAEA,QAEA,SACA,SACA,SAEA,QACA,SACA,SAEA,yE,OACI,EAAApnI,OAAS,IAAI,EAAAmZ,a,EAuOjB,OAxO6C,OAGzC,YAAApG,MAAA,SAAMpU,GAAN,WAuBI,OAtBAA,EAAKmS,MAAM3N,KAAKmQ,cAAcvC,SAAQ,SAAA0gI,GAClC,IAAI,EAAKhgI,mBAAmBggI,IAAqB,MAAZA,EAAK,GAA1C,CAGA,IAAM9mH,EAAOyqD,KAAKriE,MAAM0+H,GACxB,IAAqB,IAAjB9mH,EAAK+mH,QAAT,CAGA,IAAM77H,EAAS,EAAKqB,kBAEhB,EAAKzF,mBAAmBkZ,EAAKuxG,MAC7B,EAAKyV,oBAAoBhnH,EAAM9U,GAE/B,EAAK+7H,sBAAsBjnH,EAAM9U,GAGrC,EAAK2C,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB,EAAK7V,OAAOuY,QAAQ9Y,KAAKoW,QAG7B1S,KAAKnD,OAAOkZ,SAAU,EACfoF,QAAQC,QAAQpb,KAAKnD,SAGxB,YAAA4xI,sBAAR,SAA8BjnH,EAAW9U,GAAzC,WACI,GAAqB,MAAjB8U,EAAKknH,WACLh8H,EAAO9U,KAAOoC,KAAKoS,kBAAkBoV,EAAKknH,SAASpuI,OACzB,MAAtBknB,EAAKknH,SAASC,MAAc,CAC5B,IAAM,EAAiB,GACvBnnH,EAAKknH,SAASC,KAAK/gI,SAAQ,SAACpB,GACnB,EAAK8B,mBAAmB9B,EAAIyF,IAC7B,EAAK3V,KAAKkQ,EAAIyF,MAGtBS,EAAO0B,MAAMoB,KAAOxV,KAAK4R,aAAa,GAI1B,MAAhB4V,EAAK+6D,UAC+B,MAAhC/6D,EAAK+6D,QAAQv7D,iBACbhnB,KAAK4uI,qBAAqBpnH,EAAK+6D,QAAQv7D,gBAAiBtU,GAEvD1S,KAAKsO,mBAAmBkZ,EAAK+6D,QAAQspD,QAAW7rI,KAAKsO,mBAAmBkZ,EAAK+6D,QAAQyiD,KAG9EhlI,KAAKsO,mBAAmBkZ,EAAK+6D,QAAQypD,YAC5ChsI,KAAKsO,mBAAmBkZ,EAAK+6D,QAAQr6D,YACtCxV,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAOmU,SAAW,IAAI,EAAAC,eALtBpU,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,UAMlBjK,EAAOxQ,OAAS,EAAAoS,WAAWC,OAAUvU,KAAKsO,mBAAmBkZ,EAAK+6D,QAAQhtE,YAC1E7C,EAAO0B,MAAMmB,SAAWiS,EAAK+6D,QAAQhtE,UAEpCvV,KAAKsO,mBAAmBkZ,EAAK+6D,QAAQssD,cACtCn8H,EAAOwB,MAAQsT,EAAK+6D,QAAQssD,WAAWlhI,MAAM3N,KAAKmQ,cAAc3E,KAAK,MAAQ,MAEtD,MAAvBgc,EAAK+6D,QAAQpuE,QACbnU,KAAK8uI,YAAYtnH,EAAK+6D,QAAQpuE,OAAQzB,EAAQ,cAAe,QAAS,QAE7C,MAAzB8U,EAAK+6D,QAAQwsD,UACbvnH,EAAK+6D,QAAQwsD,SAASnhI,SAAQ,SAACohI,GACL,MAAlBA,EAAQ76H,QACR,EAAK26H,YAAYE,EAAQ76H,OAAQzB,EAAQ,IAAK,IAAK,UAO/D,YAAA87H,oBAAR,SAA4BhnH,EAAW9U,GAAvC,WAkBI,GAjBAA,EAAOuB,YAAWuT,EAAKynH,eAAgBznH,EAAKynH,aAAaC,WACzDx8H,EAAO9U,KAAOoC,KAAKoS,kBAAkBoV,EAAKlnB,OAEpB,2BAAlBknB,EAAK2nH,UACLz8H,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,SACf,gCAAlB2R,EAAK2nH,UACZz8H,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,UACO,wBAAlB6K,EAAK2nH,UACZz8H,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAOmU,SAAW,IAAI,EAAAC,cAEtBpU,EAAO0B,MAAMoB,KAAOxV,KAAK4R,aAAa4V,EAAKm+B,UAGpB,MAAvBn+B,EAAK4nH,eAAwB,CAO7B,GAN2C,MAAvC5nH,EAAK4nH,eAAepoH,iBACpBhnB,KAAK4uI,qBAAqBpnH,EAAK4nH,eAAepoH,gBAAiBtU,GAE9D1S,KAAKsO,mBAAmBkZ,EAAK4nH,eAAeP,cAC7Cn8H,EAAOwB,MAAQsT,EAAK4nH,eAAeP,WAAWlhI,MAAM3N,KAAKmQ,cAAc3E,KAAK,MAAQ,MAEpFkH,EAAOxQ,OAAS,EAAAoS,WAAWC,QACtBvU,KAAKsO,mBAAmBkZ,EAAK4nH,eAAe75H,YAC7C7C,EAAO0B,MAAMmB,SAAWiS,EAAK4nH,eAAe75H,UAEhB,MAA5BiS,EAAK4nH,eAAeT,MAAc,CAClC,IAAM,EAAiB,GACvBnnH,EAAK4nH,eAAeT,KAAK/gI,SAAQ,SAACqE,GACzB,EAAK3D,mBAAmB2D,EAAEzF,MAC3B,EAAKlQ,KAAK2V,EAAEzF,QAGhB,EAAKxQ,OAAS,IACd0W,EAAO0B,MAAMoB,KAAOxV,KAAK4R,aAAa,IAIhB,MAA9B4V,EAAK4nH,eAAej7H,QACpBnU,KAAK8uI,YAAYtnH,EAAK4nH,eAAej7H,OAAQzB,EAAQ,cAAe,QAAS,QAE7C,MAAhC8U,EAAK4nH,eAAeL,UACpBvnH,EAAK4nH,eAAeL,SAASnhI,SAAQ,SAACohI,GACZ,MAAlBA,EAAQ76H,QACR,EAAK26H,YAAYE,EAAQ76H,OAAQzB,EAAQ,IAAK,IAAK,UAO/D,YAAAk8H,qBAAR,SAA6Bt/G,EAAc5c,GAA3C,WACU28H,EAAU//G,EAAMtzB,OAAS,EAAI,EAAIszB,EAAMtzB,OAC7C0W,EAAOsU,gBAAkBsI,EACpBxgB,QAAO,SAAC6qC,GAAW,OAAC,EAAKrrC,mBAAmBqrC,EAAEt7C,QAAoB,MAAVs7C,EAAEs8C,QAC1D39C,MAAK,SAACrqC,EAAGC,GAAM,OAAAA,EAAE+nF,KAAOhoF,EAAEgoF,QAC1B72F,MAAM,EAAGiwI,GACTtnI,KAAI,SAAC4xC,GACF,IAAMxpB,EAAK,IAAI,EAAA87B,oBAGf,OAFA97B,EAAG5a,SAAWokC,EAAEt7C,MAChB8xB,EAAGkV,aAAe,IAAI3T,MAAM,GAAKioB,EAAEs8C,MAAMj6F,QAAU,GAAK29C,EAAEs8C,KAAgB,IAATt8C,EAAEs8C,MAC5D9lE,MAIX,YAAA2+G,YAAR,SAAoB36H,EAAezB,EAAoB48H,EAAwBC,EAAkB/E,GAAjG,WACIr2H,EAAOvG,SAAQ,SAACgH,GACZ,GAAuB,MAAnBA,EAAM26H,IAA2D,KAAtC36H,EAAM26H,GAAUhlI,WAAWuC,OAA1D,CAIA,IAAMw7H,EAAa1zH,EAAM26H,GAAUhlI,WAC7BilI,EAA4C,MAAzB56H,EAAM06H,GAA0B16H,EAAM06H,GAAgB/kI,WAAa,KAE5F,GAAImI,EAAOxQ,OAAS,EAAAoS,WAAWC,MAAO,CAClC,GAAI,EAAKjG,mBAAmBoE,EAAO0B,MAAMkB,WAAkC,aAArBk6H,EAElD,YADA98H,EAAO0B,MAAMkB,SAAWgzH,GAErB,GAAI,EAAKh6H,mBAAmBoE,EAAO0B,MAAMmB,WAAkC,aAArBi6H,EAEzD,YADA98H,EAAO0B,MAAMmB,SAAW+yH,GAErB,GAAI,EAAKh6H,mBAAmBoE,EAAO0B,MAAMua,OAA6B,MAApB6gH,GACrDA,EAAiBziI,WAAW,SAE5B,YADA2F,EAAO0B,MAAMua,KAAO25G,QAGrB,GAAI51H,EAAOxQ,OAAS,EAAAoS,WAAW2K,KAAM,CACxC,GAAI,EAAK3Q,mBAAmBoE,EAAOI,KAAKiJ,SAAgC,UAArByzH,EAG/C,OAFA98H,EAAOI,KAAKiJ,OAASusH,OACrB51H,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAag2H,IAEnC,GAAI,EAAKh6H,mBAAmBoE,EAAOI,KAAK4I,OAA8B,QAArB8zH,EAEpD,YADA98H,EAAOI,KAAK4I,KAAO4sH,GAEhB,GAAI,EAAKh6H,mBAAmBoE,EAAOI,KAAK2I,iBAAwC,eAArB+zH,EAE9D,YADA98H,EAAOI,KAAK2I,eAAiB6sH,GAE1B,GAAI,EAAKh6H,mBAAmBoE,EAAOI,KAAKH,aAAoC,WAArB68H,GACpC,IAAtBlH,EAAWtsI,OAMX,OALA0W,EAAOI,KAAKC,SAAYu1H,EAAsBx+H,OAAO,EAAG,GACxB,MAA5B4I,EAAOI,KAAKC,SAAS,KACrBL,EAAOI,KAAKC,SAAWL,EAAOI,KAAKC,SAASjJ,OAAO,EAAG,SAE1D4I,EAAOI,KAAKE,QAAWs1H,EAAsBx+H,OAAO,EAAG,IAEpD,GAAyB,SAArB0lI,EAEP,YAED,GAAI98H,EAAOxQ,OAAS,EAAAoS,WAAW4K,SAAU,CAC5C,IAAM2H,EAAWnU,EAAOmU,SACxB,GAAI,EAAKvY,mBAAmBuY,EAASkC,YAAmC,cAArBymH,EAE/C,YADA3oH,EAASkC,UAAYu/G,GAElB,GAAI,EAAKh6H,mBAAmBuY,EAASmC,WAAkC,aAArBwmH,EAErD,YADA3oH,EAASmC,SAAWs/G,GAEjB,GAAI,EAAKh6H,mBAAmBuY,EAASoB,aAAoC,YAArBunH,EAEvD,YADA3oH,EAASoB,WAAaqgH,GAEnB,GAAI,EAAKh6H,mBAAmBuY,EAAS4B,QAA+B,aAArB+mH,EAElD,YADA3oH,EAAS4B,MAAQ6/G,GAEd,GAAI,EAAKh6H,mBAAmBuY,EAAS2B,UAAiC,YAArBgnH,EAEpD,YADA3oH,EAAS2B,QAAU8/G,GAEhB,GAAI,EAAKh6H,mBAAmBuY,EAAShK,QAA+B,UAArB2yH,EAElD,YADA3oH,EAAShK,MAAQyrH,GAEd,GAAI,EAAKh6H,mBAAmBuY,EAASvR,WAAkC,aAArBk6H,EAErD,YADA3oH,EAASvR,SAAWgzH,GAEjB,GAAyB,YAArBkH,EAAgC,CAEjC,MAAiC56H,EAAM26H,GAArCE,EAAM,SAAEpnH,EAAI,OAAEtG,EAAO,UAAEwqH,EAAG,MAOlC,OANA1lH,EAASqB,SAAW,EAAK9V,kBAAkBq9H,GAC3C5oH,EAASwB,KAAO,EAAKjW,kBAAkBiW,GAClC,EAAK/Z,mBAAmByT,KACzB8E,EAAS9E,QAAUA,EAAQze,oBAE/BujB,EAAS0B,WAAa,EAAKnW,kBAAkBm6H,KAKrD,IAAMhE,EAAY,EAAKj6H,mBAAmBsG,EAAM41H,IAAY,UAAY51H,EAAM41H,GAC9E,GAAkB,aAAdjC,GAAsD,MAA1B71H,EAAOsU,kBACnCtU,EAAOsU,gBAAgB8H,MAAK,SAAA6qB,GAAK,OAAAA,EAAEpkC,WAAa+yH,KADpD,CAKA,IAAMj9B,EAAwB,cAAZz2F,EAAM7F,EAAoB,EAAA2F,UAAU4kF,OAAS,EAAA5kF,UAAUC,KACzE,EAAKF,WAAW/B,EAAQ61H,EAAWD,EAAYj9B,SAG3D,EAxOA,CAA6C,EAAAv1F,cAAhC,EAAA8rH,2B,wdCdb,aAEA,QACA,QAEA,SAEA,2B,+CAqBA,OArB+C,OAC3C,YAAA1pC,cAAA,SAAc75F,EAAYqU,GAEtB,OADoB1S,KAAKoS,kBAAkBpS,KAAKg4F,QAAQ35F,EAAO,QAAS,UAEpE,IAAK,cACDqU,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,SAClB,EAAAi6E,kBAAkBt6F,KAAK,QACvB,MACJ,IAAK,WACDoW,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAOmU,SAAW,IAAI,EAAAC,aACtB,EAAA8vE,kBAAkBt6F,KAAK,QACvB,MACJ,IAAK,QACL,IAAK,cACD,EAAAs6F,kBAAkBt6F,KAAK,UAKvC,EArBA,CAA+C,EAAAk9F,wBAAlC,EAAAsoC,6B,2GCNb,MAEI,SAAmB7oC,EAA0Bl6F,EAAyB2T,GAAnD,KAAAumF,eAA0B,KAAAl6F,WAAyB,KAAA2T,SAClE1S,KAAKm5F,cAAgBp6F,EAASwE,eAHzB,EAAA80F,uB,wdCAb,aAEA,QACA,QAEA,SACA,SAEA,cACI,mBACI,cAAO,K,OACP,EAAKf,wBAAwBh7F,KAAK,EAAKozI,oB,EA0C/C,OA7C+C,OAM3C,YAAAx3C,cAAA,SAAc75F,EAAYqU,GACtBA,EAAOxQ,KAAO,EAAAoS,WAAWC,MACzB7B,EAAO0B,MAAQ,IAAI,EAAAC,UAEdrU,KAAKsO,mBAAmBtO,KAAK44F,gBAAgBv6F,EAAO,kBACpD2B,KAAKsO,mBAAmBtO,KAAK44F,gBAAgBv6F,EAAO,wBACrDqU,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,UAGjB3c,KAAKsO,mBAAmBtO,KAAK44F,gBAAgBv6F,EAAO,2BACpD2B,KAAKsO,mBAAmBtO,KAAK44F,gBAAgBv6F,EAAO,wBACpD2B,KAAKsO,mBAAmBtO,KAAK44F,gBAAgBv6F,EAAO,0BACpD2B,KAAKsO,mBAAmBtO,KAAK44F,gBAAgBv6F,EAAO,2BACrDqU,EAAOxQ,KAAO,EAAAoS,WAAW4K,SACzBxM,EAAOmU,SAAW,IAAI,EAAAC,eAI9B,YAAA4oH,mBAAA,SAAmBt3C,GACf,QAAIA,EAAQe,cAAczpF,MAAM,2BAC5B1P,KAAKyU,WAAW2jF,EAAQ1lF,OAAQ,UAAW0lF,EAAQa,aAAab,EAAQr5F,YACjE,IAKf,YAAAs4F,oBAAA,SAAoBe,GAChB,GAAIp4F,KAAKsO,mBAAmB8pF,EAAQ1lF,OAAOI,KAAKH,aAAeylF,EAAQe,cAAcroD,SAAS,eAAgB,CAC1G,IAAM6+F,EAAYv3C,EAAQa,aAAab,EAAQr5F,UAAqB4O,MAAM,KAM1E,OALAyqF,EAAQ1lF,OAAOI,KAAKC,SAAW48H,EAAS,GACA,MAApCv3C,EAAQ1lF,OAAOI,KAAKC,SAAS,IAAsD,IAAxCqlF,EAAQ1lF,OAAOI,KAAKC,SAAS/W,SACxEo8F,EAAQ1lF,OAAOI,KAAKC,SAAWqlF,EAAQ1lF,OAAOI,KAAKC,SAASjJ,OAAO,EAAG,IAE1EsuF,EAAQ1lF,OAAOI,KAAKE,QAAU28H,EAAS,GAAG3zI,OAAS,EAAI2zI,EAAS,GAAG7lI,OAAO,EAAG,GAAK6lI,EAAS,IACpF,EAEX,OAAO,GAEf,EA7CA,CAA+C,EAAAn2C,wBAAlC,EAAAqoC,6B,idCVb,YAGA,QAEA,SAGA,2B,+CA8EA,OA9EwC,OACpC,YAAAjyH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,GAAe,MAAXwxD,EAEA,OADAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAIgqG,EAAoB,KAmExB,OAlEA75C,EAAQp/C,SAAQ,SAAAvP,GACZ,GAAe,MAAXwoG,GAKJ,KAAIxoG,EAAMrC,OAAS,GAAKqC,EAAMrC,SAAW6qG,EAAQ7qG,QAAjD,CAIA,IAAK,EAAKsS,mBAAmBjQ,EAAM,IAC/B,GAAI,EAAKwhB,aAAc,EACb+vH,EAAQvxI,EAAM,GAAcsP,MAAM,MACnCC,SAAQ,SAAAiiI,GACTA,EAAMA,EAAI/iI,OAIV,IAHA,IAAIs4H,GAAgB,EAChBC,EAAkBxoI,EAAOuW,YAAYpX,OAEhCF,EAAI,EAAGA,EAAIe,EAAOuW,YAAYpX,OAAQF,IAC3C,GAAIe,EAAOuW,YAAYtX,GAAG8B,OAASiyI,EAAK,CACpCzK,GAAgB,EAChBC,EAAkBvpI,EAClB,MAIR,GAAIspI,EAAe,CACf,IAAM7xH,EAAa,IAAI,EAAAC,eACvBD,EAAW3V,KAAOiyI,EAClBhzI,EAAOuW,YAAY9W,KAAKiX,GAG5B1W,EAAOsW,wBAAwB7W,KAAK,CAACO,EAAOuY,QAAQpZ,OAAQqpI,WAE7D,CACH,IAAMuK,EACAC,GADAD,EAAQvxI,EAAM,GAAcsP,MAAM,MACvB3R,OAAS,EAAI4zI,EAAK,GAAG9iI,OAAS,KAC/C,EAAKgI,cAAcjY,EAAQgzI,GAInC,IAAMn9H,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAE/C,IAAK,IAAIvC,EAAI,EAAGA,EAAIuC,EAAMrC,OAAQF,IAAK,CACnC,IAAMkV,EAAS61F,EAAQ/qG,GAAGgR,OAAOvJ,cAC7B,EAAK+K,mBAAmBjQ,EAAMvC,KAAO,EAAKwS,mBAAmB0C,KAI7D,EAAKX,mBAAmBpD,QAAQ+D,IAAW,EAC3C0B,EAAO0B,MAAMkB,SAAWjX,EAAMvC,GACvB,EAAKsU,mBAAmBnD,QAAQ+D,IAAW,EAClD0B,EAAO0B,MAAMmB,SAAWlX,EAAMvC,GACvB,EAAKyU,cAActD,QAAQ+D,IAAW,EAC7C0B,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMvC,IAE5C,EAAK2Y,WAAW/B,EAAQm0F,EAAQ/qG,GAAIuC,EAAMvC,KAIlD,EAAK0Y,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,SA5DhBm0F,EAAUxoG,EAAM0J,KAAI,SAACsiE,GAAc,OAAAA,QA+D3CxtE,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EA9EA,CAAwC,EAAAiZ,cAA3B,EAAAsrH,sB,kdCRb,YAGA,QAEA,2B,+CAiCA,OAjCyC,OACrC,YAAAxxH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,EAAKyW,cAAcjY,EAAQ,EAAKizI,SAAS,WAAYzxI,IACrD,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAOwB,MAAQ,EAAK47H,SAAS,cAAezxI,GAC5CqU,EAAO9U,KAAO,EAAKwU,kBAAkB,EAAK09H,SAAS,QAASzxI,GAAQ,MACpEqU,EAAO0B,MAAMkB,SAAW,EAAKw6H,SAAS,WAAYzxI,GAClDqU,EAAO0B,MAAMmB,SAAW,EAAKu6H,SAAS,WAAYzxI,GAClDqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAa,EAAKk+H,SAAS,OAAQzxI,IAC5D,EAAKoW,WAAW/B,EAAQ,aAAc,EAAKo9H,SAAS,YAAazxI,IACjE,EAAKmW,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAGnB,YAAAizI,SAAR,SAAiBnxI,EAAaN,GAC1B,OAAO2B,KAAKoS,kBAAkB/T,EAAMM,GAAMqB,KAAKoS,kBAAkB/T,EAAO,IAAMM,MAEtF,EAjCA,CAAyC,EAAAmX,cAA5B,EAAAgtH,uB,kdCLb,YAGA,QAEA,2B,+CAuDA,OAvDyC,OACrC,YAAAlzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUilB,KAAKriE,MAAMpU,GAC3B,OAAe,MAAXwxD,GAAsC,IAAnBA,EAAQhxD,QAC3Ba,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAACy5H,GACb,GAAuB,MAAnBA,EAAWuI,MAAgBvI,EAAWuI,KAAK5zI,OAAS,EAAG,CACvD,IAAM+Y,EAAasyH,EAAWuI,KAAK,GAAGx+G,KACtC,EAAKtc,cAAcjY,EAAQkY,GAG/B,IAAMrC,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAOypI,EAAW3iH,MAEzBhS,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBi1H,EAAW/xH,UACtD,EAAKhH,mBAAmBoE,EAAO0B,MAAMkB,UACrC5C,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkBi1H,EAAWxqH,OAClD,EAAKvO,mBAAmB+4H,EAAWxqH,SAC3CnK,EAAOwB,MAAS,UAAYmzH,EAAWxqH,MAAQ,MAGnDnK,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkBi1H,EAAW9xH,UAC1D7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAay1H,EAAW76H,KACjDkG,EAAOwB,OAAS,EAAK9B,kBAAkBi1H,EAAWltF,YAAa,IACzC,MAAlBktF,EAAW3sG,MACXhoB,EAAO0B,MAAMua,KAAO,EAAKvc,kBAAkBi1H,EAAW3sG,IAAIxP,SAG9B,MAA5Bm8G,EAAW0I,eACX1I,EAAW0I,cAAcniI,SAAQ,SAACoiI,GAC9B,OAAQA,EAAYC,YAChB,IAAK,OACL,IAAK,WACD,EAAKx7H,WAAW/B,EAAQs9H,EAAYtrH,MAAOsrH,EAAY3xI,WAMvE,EAAKgX,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAvDA,CAAyC,EAAAiZ,cAA5B,EAAAotH,uB,kdCLb,YAGA,QAEA,SAEA,2B,+CAyFA,OAzFyC,OACrC,YAAAtzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAM6xI,EAAY,EAAK5hI,mBAAmBjQ,EAAM8xI,MAAiC,KAAzBl+D,KAAKriE,MAAMvR,EAAM8xI,MACnEP,EAA6B,MAAZM,GAAqC,MAAjBA,EAASN,MAAgBM,EAASN,KAAK5zI,OAAS,EACvFk0I,EAASN,KAAK7nI,KAAI,SAACqoI,GACf,IACI,IAAM9xI,EAAI2zE,KAAKriE,MAAMwgI,GACrB,OAAO,EAAKh+H,kBAAkB9T,EAAEuxI,KAClC,UAGF,OAAO,QACR/gI,QAAO,SAACxQ,GAAc,OAAC,EAAKgQ,mBAAmBhQ,MAAM,KAExD,EAAKuhB,cAAwB,MAAR+vH,GAAgBA,EAAK5zI,OAAS,EACnD4zI,EAAKhiI,SAAQ,SAAAiiI,GAIT,IAHA,IAAIzK,GAAgB,EAChBC,EAAkBxoI,EAAOuW,YAAYpX,OAEhCF,EAAI,EAAGA,EAAIe,EAAOuW,YAAYpX,OAAQF,IAC3C,GAAIe,EAAOuW,YAAYtX,GAAG8B,OAASiyI,EAAK,CACpCzK,GAAgB,EAChBC,EAAkBvpI,EAClB,MAIR,GAAIspI,EAAe,CACf,IAAM7xH,EAAa,IAAI,EAAAC,eACvBD,EAAW3V,KAAOiyI,EAClBhzI,EAAOuW,YAAY9W,KAAKiX,GAG5B1W,EAAOsW,wBAAwB7W,KAAK,CAACO,EAAOuY,QAAQpZ,OAAQqpI,QAExD,EAAKxlH,cAAwB,MAAR+vH,GAAgBA,EAAK5zI,OAAS,GAC3D,EAAK8Y,cAAcjY,EAAQ+yI,EAAK,IAGpC,IAAMl9H,EAAS,EAAKqB,kBACpBrB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM2pI,MAAO,IACnDt1H,EAAOwB,OAAU,OAAS,EAAK9B,kBAAkB/T,EAAM,gBAAiB,IAAM,KAC9EqU,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,cAAe,MAC1DqU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,YACrDqU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMsR,KAEhB,MAAxBtR,EAAMgyI,gBAA0BhyI,EAAMgyI,eAAer0I,OAAS,GAC9DqC,EAAMgyI,eAAeziI,SAAQ,SAAC+3H,GACrB,EAAKr3H,mBAAmBq3H,KACzBjzH,EAAOwB,OAAU,KAAOyxH,MAKpC,IAAM2K,EAAc,EAAKhiI,mBAAmBjQ,EAAM,iBACV,KAApC4zE,KAAKriE,MAAMvR,EAAM,iBACf8V,EAAuB,MAAdm8H,GAAgD,MAA1BA,EAAWC,aAC5CD,EAAWC,YAAYv0I,OAAS,EAAIs0I,EAAWC,YAAYxoI,KAAI,SAACyoI,GAC5D,IACI,OAAOv+D,KAAKriE,MAAM4gI,GACpB,UAGF,OAAO,QACN,KACK,MAAVr8H,GACAA,EAAOvG,SAAQ,SAAC0F,GACH,MAALA,GACA,EAAKmB,WAAW/B,EAAQY,EAAE1V,KAAM0V,EAAE9X,SAK9C,EAAKgZ,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAzFA,CAAyC,EAAAiZ,cAA5B,EAAAmtH,uB,udCPb,YAGA,QAEA,2B,+CA8CA,OA9C8C,OAC1C,YAAArzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,GAAe,MAAXwxD,EAEA,OADAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAI4zI,GAAa,EAmCjB,OAlCAzjF,EAAQp/C,SAAQ,SAAAvP,GACZ,KAAqB,IAAjBA,EAAMrC,QAAgBqC,EAAMrC,OAAS,GAAzC,CAGA,IAAM00I,EAA6B,KAAjBryI,EAAMrC,QAA8B,MAAbqC,EAAM,GACzCqU,EAAS,EAAKqB,kBAIpB,GAHArB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMqyI,EAAY,EAAI,GAAI,MAC/Dh+H,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMqyI,EAAY,EAAI,IACrEh+H,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMqyI,EAAY,EAAI,IAChD,IAAjBryI,EAAMrC,OACNy0I,GAAa,EACb/9H,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM,IAC5CqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,QACzC,CACH,IAAM40D,EAAS,EAAK7gD,kBAAkB/T,EAAMqyI,EAAY,EAAI,GAAI,UAC5D37H,EAAwB,WAAXk+C,EAAsBA,EAAOtlD,MAAM,MAAMnC,KAAK,KAAO,KACpD,MAAduJ,IACAA,EAAak+C,EAAOtlD,MAAM,OAAOnC,KAAK,KACtCuJ,EAAak+C,EAAOtlD,MAAM,KAAKnC,KAAK,MAExC,EAAKsJ,cAAcjY,EAAQkY,GAC3BrC,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMqyI,EAAY,EAAI,IAC5Dh+H,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,IAEhD,EAAKgX,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB+9H,GAAczwI,KAAK6f,cACnB7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EA9CA,CAA8C,EAAAiZ,cAAjC,EAAAktH,4B,udCLb,YAGA,QAEA,QACA,SAEA,QAEA,2B,+CAgHA,OAhH8C,OAC1C,YAAApzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUilB,KAAKriE,MAAMpU,GAC3B,GAAe,MAAXwxD,GAAoC,MAAjBA,EAAQ19B,MAE3B,OADAzyB,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAM4rI,EAAa,IAAIxkI,IACvB+oD,EAAQ35C,QAAQzF,SAAQ,SAACvP,GACrBoqI,EAAW/iI,IAAIrH,EAAMuB,GAAIvB,EAAMT,SAEnC,IAAM8qI,EAAkB,IAAIzkI,IAiG5B,OAhGAwkI,EAAW76H,SAAQ,SAAC2N,EAAK5c,GACrB+pI,EAAgBhjI,IAAI/G,EAAK9B,EAAOwW,QAAQrX,QACxC,IAAMsX,EAAI,IAAI,EAAA6B,WACd7B,EAAE1V,KAAO2d,EACT1e,EAAOwW,QAAQ/W,KAAKgX,MAGxB05C,EAAQ19B,MAAM1hB,SAAQ,SAACvP,GACnB,IAAMqU,EAAS,EAAKqB,kBAQpB,GAPArB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,KAAM,MACjD8U,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMsyI,WAExB,MAAhBtyI,EAAM40D,QAAkBy1E,EAAgB9iI,IAAIvH,EAAM40D,SAClDp2D,EAAOqW,oBAAoB5W,KAAK,CAACO,EAAOuY,QAAQpZ,OAAQ0sI,EAAgBzqI,IAAII,EAAM40D,UAG7D,MAArB50D,EAAMuyI,YAAV,CAaA,IAAK,IAAM7xI,KATN,EAAKuP,mBAAmBjQ,EAAMuyI,YAAY18H,SAC3CxB,EAAOwB,MAAQ7V,EAAMuyI,YAAY18H,MAAMvG,MAAM,UAAUnC,KAAK,MAAMmC,MAAM,OAAOnC,KAAK,OAGrE,eAAfnN,EAAM6D,OACNwQ,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOxQ,KAAO,EAAAoS,WAAW2K,MAGN5gB,EAAMuyI,YACzB,GAAKvyI,EAAMuyI,YAAYz0I,eAAe4C,GAAtC,CAGA,IAAM8xI,EAASxyI,EAAMuyI,YAAY7xI,GAC3Bwc,EAAgB,MAAVs1H,EAAiBA,EAAOtmI,WAAa,KACjD,IAAI,EAAK+D,mBAAmBiN,IAAqB,UAAbxc,GAAqC,8BAAbA,EAI5D,GAAiB,kBAAbA,EAAJ,CAOA,GAAI2T,EAAOxQ,OAAS,EAAAoS,WAAW2K,KAAM,CACjC,GAAiB,eAAblgB,EAA2B,CAC3B2T,EAAOI,KAAKiJ,OAASR,EACrB7I,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaiJ,GACtC,SACG,GAAiB,eAAbxc,EAA2B,CAClC2T,EAAOI,KAAK2I,eAAiBF,EAC7B,SACG,GAAiB,kBAAbxc,EAA8B,CACrC2T,EAAOI,KAAK4I,KAAOH,EACnB,SACG,GAAiB,YAAbxc,EAAwB,CAC/B,IACI,IAAM+xI,EAAU,IAAIp/G,KAAKnW,GACzB7I,EAAOI,KAAKE,QAAU89H,EAAQl/G,cAAcrnB,WAC5CmI,EAAOI,KAAKC,UAAY+9H,EAAQj/G,WAAa,GAAGtnB,WAClD,UAGF,SACG,GAAiB,aAAbxL,EACP,aAED,CACH,IAAkB,aAAbA,GAAwC,UAAbA,IAC5B,EAAKuP,mBAAmBoE,EAAO0B,MAAMkB,UAAW,CAChD5C,EAAO0B,MAAMkB,SAAWiG,EACxB,SACG,GAAiB,aAAbxc,EAAyB,CAChC2T,EAAO0B,MAAMmB,SAAWgG,EACxB,SACG,GAAiB,SAAbxc,EAAqB,CAC5B2T,EAAO0B,MAAMua,KAAOpT,EACpB,SACG,IAA0B,MAArB7I,EAAO0B,MAAMoB,MAA6C,IAA7B9C,EAAO0B,MAAMoB,KAAKxZ,SACvD,EAAKuU,cAActD,QAAQlO,IAAa,EAAG,CAC3C2T,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAa2J,GACtC,UAIR,EAAK9G,WAAW/B,EAAQ3T,EAAUwc,QA/C9Bs1H,EAAOjjI,SAAQ,SAACmjI,GACZ,EAAKt8H,WAAW/B,EAAQq+H,EAAGnzI,KAAMmzI,EAAG1yI,UAiDhD,EAAKgX,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EAhHA,CAA8C,EAAAiZ,cAAjC,EAAA6sH,4B,wdCVb,YAGA,QAEA,2B,+CAmDA,OAnD+C,OAC3C,YAAA/yH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbpF,EAAM5Q,KAAK2Q,SAASnV,GAC1B,GAAW,MAAPoV,EAEA,OADA/T,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAMm0I,EAAUpgI,EAAIlJ,iBAAiB,4BAwCrC,OAvCAF,MAAMC,KAAKupI,GAASpjI,SAAQ,SAAAggI,GACxB,IAAM1+E,EAAW,EAAKz7C,yBAAyBm6H,EAAQ,YACjDqD,EAA2B,MAAZ/hF,GAAqB,EAAK5gD,mBAAmB4gD,EAASZ,cAC9C,YAAzBY,EAASZ,YAAmD,KAAvBY,EAASZ,YAClD,EAAKx5C,cAAcjY,EAAQo0I,GAE3B,IAAMC,EAAc,EAAKz9H,yBAAyBm6H,EAAQ,gBACpDh+G,EAAS,EAAKnc,yBAAyBm6H,EAAQ,WAC/Cr4H,EAAW,EAAK9B,yBAAyBm6H,EAAQ,YACjDphI,EAAM,EAAKiH,yBAAyBm6H,EAAQ,OAC5C15H,EAAQ,EAAKT,yBAAyBm6H,EAAQ,SAC9Cl7H,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAsB,MAAfszI,EAAsB,EAAK9+H,kBAAkB8+H,EAAY5iF,YAAa,MAAQ,KAC5F57C,EAAOwB,MAAiB,MAATA,EAAgB,EAAK9B,kBAAkB8B,EAAMo6C,aAAe,GAC3E57C,EAAO0B,MAAMkB,SAAqB,MAAVsa,EAAiB,EAAKxd,kBAAkBwd,EAAO0+B,aAAe,KACtF57C,EAAO0B,MAAMmB,SAAuB,MAAZA,EAAmB,EAAKnD,kBAAkBmD,EAAS+4C,aAAe,KAC1F57C,EAAO0B,MAAMoB,KAAc,MAAPhJ,EAAc,EAAKoF,aAAapF,EAAI8hD,aAAe,KAGvE,IADA,IAAMo7E,EAAuB,GACpB5tI,EAAI,EAAGA,GAAK,GAAIA,IACrB4tI,EAAWptI,KAAK,aAAeR,GAGnC,EAAK+X,4BAA4B+5H,EAAQlE,EAAWl+H,KAAK,MAAMoC,SAAQ,SAAA+7H,GAC/D,EAAKr7H,mBAAmBq7H,EAAKr7E,cAAqC,SAArBq7E,EAAKr7E,aAGtD,EAAK75C,WAAW/B,EAAQi3H,EAAK1zB,QAAS0zB,EAAKr7E,gBAG/C,EAAK95C,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EAnDA,CAA+C,EAAAiZ,cAAlC,EAAAksH,6B,sdCLb,YAGA,QAEA,2B,+CAwDA,OAxD6C,OACzC,YAAApyH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbpF,EAAM5Q,KAAK2Q,SAASnV,GAC1B,GAAW,MAAPoV,EAEA,OADA/T,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAMs0I,EAAevgI,EAAI5J,cAAc,gBACvC,GAAoB,MAAhBmqI,EAGA,OAFAt0I,EAAOm9D,aAAe,+BACtBn9D,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAMu0I,EAAiBD,EAAaE,aAAa,aAC3C34C,EAAU9nF,EAAIlJ,iBAAiB,wBAqCrC,OApCAF,MAAMC,KAAKixF,GAAS9qF,SAAQ,SAAA46D,GACxB,IAAMvS,EAAQ,EAAKxiD,yBAAyB+0D,EAAO,SAC7C8oE,EAAqB,MAATr7E,GAAkB,EAAK3nD,mBAAmB2nD,EAAM3H,aACrB,KAAzC2H,EAAM3H,YAAY3gD,MAAM,KAAKnC,KAAK,KACtC,EAAKsJ,cAAcjY,EAAQy0I,GAE3B,IAAMhxI,EAAQ,EAAKmT,yBAAyB+0D,EAAO,SAC7ClzD,EAAW,EAAK7B,yBAAyB+0D,EAAO,YAChD3rD,EAAQ,EAAKpJ,yBAAyB+0D,EAAO,SAC7CjzD,EAAW,EAAK9B,yBAAyB+0D,EAAO,YAChDh8D,EAAM,EAAKiH,yBAAyB+0D,EAAO,OAC3Ct0D,EAAQ,EAAKT,yBAAyB+0D,EAAO,SAC7C91D,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAgB,MAAT0C,EAAgB,EAAK8R,kBAAkB9R,EAAMguD,YAAa,MAAQ,KAChF57C,EAAOwB,MAAiB,MAATA,EACX,EAAK9B,kBAAkB8B,EAAMo6C,YAAa,IAAI3gD,MAAMyjI,GAAgB5lI,KAAK,MAAQ,KACrFkH,EAAO0B,MAAMkB,SAAuB,MAAZA,EAAmB,EAAKlD,kBAAkBkD,EAASg5C,aAAe,KAC1F57C,EAAO0B,MAAMmB,SAAuB,MAAZA,EAAmB,EAAKnD,kBAAkBmD,EAAS+4C,aAAe,KAC1F57C,EAAO0B,MAAMoB,KAAc,MAAPhJ,EAAc,EAAKoF,aAAapF,EAAI8hD,aAAe,KAEnE,EAAKhgD,mBAAmBoE,EAAO0B,MAAMkB,WAAsB,MAATuH,EAClDnK,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkByK,EAAMyxC,aACrC,MAATzxC,GAAkB,EAAKvO,mBAAmBuO,EAAMyxC,eACvD57C,EAAOwB,MAAQ,EAAK5F,mBAAmBoE,EAAOwB,OAAS,UAAY2I,EAAMyxC,YAClE57C,EAAOwB,MAAPxB,YAAkCmK,EAAMyxC,aAGnD,EAAK95C,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EAxDA,CAA6C,EAAAiZ,cAAhC,EAAAqsH,2B,wdCLb,YAGA,QAEA,2B,+CAyCA,OAzC+C,OAC3C,YAAAvyH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,KAAIA,EAAMrC,OAAS,GAAnB,CAGIqC,EAAMrC,OAAS,GACf,EAAK8Y,cAAcjY,EAAQwB,EAAM,IAErC,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAC3CA,EAAMrC,OAAS,IACf0W,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM,GAAI,IAAIsP,MAAM,KAAKnC,KAAK,OAEpEnN,EAAMrC,OAAS,IACf0W,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,KAErDA,EAAMrC,OAAS,IACf0W,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM,KAErDA,EAAMrC,OAAS,IACf0W,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,KAEhD,EAAKmW,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAzCA,CAA+C,EAAAiZ,cAAlC,EAAA0tH,6B,mdCLb,YAGA,QAEA,QAEA,QAEA,2B,+CAmEA,OAnE0C,OACtC,YAAA5zH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,GAAoB,SAAhBA,EAAMkzI,MAAV,CAGA,IAAM7+H,EAAS,EAAKqB,kBAGpB,GAFArB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,MAC3C8U,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM6V,OACzB,cAAf7V,EAAM6D,KACNwQ,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM4mI,SAC5CvyH,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,eAClD,GAAmB,mBAAfjX,EAAM6D,KAA2B,CACxCwQ,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOI,KAAK2I,eAAiB,EAAKrJ,kBAAkB/T,EAAMmzI,YAC1D9+H,EAAOI,KAAKiJ,OAAS,EAAK3J,kBAAkB/T,EAAM0d,QAClDrJ,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,QAClDrJ,EAAOI,KAAK4I,KAAO,EAAKtJ,kBAAkB/T,EAAMozI,cAEhD,IACI,IAAM1+H,EAAW,EAAKX,kBAAkB/T,EAAMqzI,aAC9C,GAAgB,MAAZ3+H,EAAkB,CAClB,IAAM4+H,EAAiB9nI,SAASkJ,EAAU,MACpB,MAAlB4+H,GAA0BA,GAAkB,GAAKA,GAAkB,KACnEj/H,EAAOI,KAAKC,SAAW4+H,EAAepnI,aAGhD,UAGF,IACI,IAAMyI,EAAU,EAAKZ,kBAAkB/T,EAAMuzI,YAC7C,GAAe,MAAX5+H,EAAiB,CACjB,IAAM6+H,EAAgBhoI,SAASmJ,EAAS,MACnB,MAAjB6+H,IACAn/H,EAAOI,KAAKE,QAAU6+H,EAActnI,aAG9C,UAIF,IAAMk0F,EAAM,EAAKrsF,kBAAkB/T,EAAMogG,KAC9B,MAAPA,GACA,EAAKhqF,WAAW/B,EAAQ,MAAO+rF,GAEnC,IAAM8tC,EAAM,EAAKn6H,kBAAkB/T,EAAMsvI,SAC9B,MAAPpB,GACA,EAAK93H,WAAW/B,EAAQ,WAAY65H,GAG5C,EAAK/3H,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAnEA,CAA0C,EAAAiZ,cAA7B,EAAAytH,wB,kdCTb,YAGA,QAEA,2B,+CAyDA,OAzDyC,OACrC,YAAA3zH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,GAAe,MAAXwxD,EAEA,OADAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAIf,EAAI,EA8CR,OA7CAkxD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAM40D,GAAU,EAAK3kD,mBAAmBjQ,EAAMo4F,SAAWp4F,EAAMo4F,OAAO1pF,WAAW,KAC7E1O,EAAMo4F,OAAOzrF,QAAQ,IAAK,IAAM3M,EAAMo4F,OACpC1hF,EAAc,EAAKzG,mBAAmB2kD,GAAmB,KAATA,EACtD,EAAKn+C,cAAcjY,EAAQkY,GAE3B,IAAMrC,EAAS,EAAKqB,kBAOpB,GANArB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM+nI,MAC5C1zH,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMyzI,KAAM,MACjDp/H,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMkW,OACrD7B,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM0zI,KACrDr/H,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM6uI,MAEvC,EAAK5+H,mBAAmBjQ,EAAM2zI,WAAY,CAC3C,IAAI79H,EAAmB,CAAC9V,EAAM2zI,WACF,MAAxB3zI,EAAMgyI,gBAA0BhyI,EAAMgyI,eAAer0I,OAAS,IAC9DmY,EAASA,EAAOqW,OAAOnsB,EAAMgyI,iBAEjCl8H,EAAOvG,SAAQ,SAACgH,GACZ,IAAM9G,EAAQ8G,EAAMjH,MAAM,KAC1B,KAAIG,EAAM9R,OAAS,GAAnB,CAGA,IAAM2C,EAAmB,cAAbmP,EAAM,GAAqB,KAAOA,EAAM,GAC9CyN,EAAuB,IAAjBzN,EAAM9R,QAA6B,QAAb8R,EAAM,GAAeA,EAAM,GAAKA,EAAM,GACxE,EAAK2G,WAAW/B,EAAQ/T,EAAK4c,OAIrC,EAAKlG,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GAEf5W,IAAMkxD,EAAQhxD,QAA0B,OAAhB0W,EAAO9U,MAAiB,EAAK0Q,mBAAmBoE,EAAO0B,MAAMmB,YAIzF1Y,EAAOuY,QAAQ9Y,KAAKoW,GACpB5W,QAGAkE,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAE/B,EAzDA,CAAyC,EAAAiZ,cAA5B,EAAA2sH,uB,gdCLb,YAGA,QAEA,2B,+CAuBA,OAvBuC,OACnC,YAAA7yH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM8qB,MAAO,MAClDzW,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM2rB,UACrDtX,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM6uI,KAC5Cx6H,EAAO0B,MAAMua,KAAO,EAAKvc,kBAAkB/T,EAAM4zI,SACjD,EAAKz9H,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAvBA,CAAuC,EAAAiZ,cAA1B,EAAA4rH,qB,qdCLb,YAGA,QAEA,SACA,SAEA,QACA,SAEA,SAIA,2B,+CAwHA,OAxH4C,OACxC,YAAA9xH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbpF,EAAM5Q,KAAK2Q,SAASnV,GAC1B,GAAW,MAAPoV,EAEA,OADA/T,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAI3B,GAAU,MADC+T,EAAI5J,cAAc,YAIzB,OAFAnK,EAAOm9D,aAAe,2BACtBn9D,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAM4rI,EAAa,IAAIxkI,IA8EvB,OA5EAuD,MAAMC,KAAKmJ,EAAIlJ,iBAAiB,qBAAqBkG,SAAQ,SAAAskI,GACzD,IAAMt0I,EAAOs0I,EAAQb,aAAa,QAC5BzxI,EAAKsyI,EAAQb,aAAa,MAChC,IAAK,EAAK/iI,mBAAmB1Q,KAAU,EAAK0Q,mBAAmB1O,GAAK,CAChE6oI,EAAW/iI,IAAI9F,EAAI/C,EAAOwW,QAAQrX,QAClC,IAAMi3D,EAAS,IAAI,EAAA99C,WACnB89C,EAAOr1D,KAAOA,EACdf,EAAOwW,QAAQ/W,KAAK22D,OAI5BzrD,MAAMC,KAAKmJ,EAAIlJ,iBAAiB,oBAAoBkG,SAAQ,SAAAukI,GACxD,GAAwC,SAApCA,EAAOd,aAAa,aAA6D,SAAnCc,EAAOd,aAAa,WAAtE,CAIA,IAAMe,EAAY,EAAK3+H,yBAAyB0+H,EAAQ,YACxD,GAAiB,MAAbC,EAAmB,CACnB,IAAMC,EAAUD,EAAU9jF,aACrB,EAAKhgD,mBAAmB+jI,IAAY5J,EAAW7iI,IAAIysI,IACpDx1I,EAAOqW,oBAAoB5W,KAAK,CAACO,EAAOuY,QAAQpZ,OAAQysI,EAAWxqI,IAAIo0I,KAI/E,IAAM3/H,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB+/H,EAAOd,aAAa,SAAU,MAE/B,SAAhCc,EAAOd,aAAa,UACpB3+H,EAAOuB,UAAW,GAIL,SADAk+H,EAAOd,aAAa,SAEjC3+H,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,SAExCrO,MAAMC,KAAK,EAAKoM,4BAA4Bs+H,EAAQ,UAAUvkI,SAAQ,SAAA0kI,GAClE,IAAMlhH,EAAOkhH,EAAQhkF,YACrB,IAAI,EAAKhgD,mBAAmB8iB,GAA5B,CAGA,IAAMxzB,EAAO00I,EAAQjB,aAAa,QAC5BhmC,EAAY,EAAKj5F,kBAAkBkgI,EAAQjB,aAAa,QAAS,IAAI9tI,cACzD,UAAd8nG,EACA34F,EAAO0B,MAAMkB,SAAW8b,EACH,aAAdi6E,GAA0C,WAAdA,EAEnC,EAAK52F,WAAW/B,EAAQ9U,EAAMwzB,EAAM,EAAA1c,UAAU4kF,QACzB,sBAAd+R,EACP34F,EAAO0B,MAAMua,KAAOyC,EACC,UAAdi6E,EACP34F,EAAOwB,OAAUkd,EAAO,KACH,aAAdi6E,GAA0C,YAAdA,EACnC34F,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAawf,GAGtC,EAAK3c,WAAW/B,EAAQ9U,EAAMwzB,OAK1C5pB,MAAMC,KAAK,EAAKoM,4BAA4Bs+H,EAAQ,UAAUvkI,SAAQ,SAAA2kI,GAClE7/H,EAAOwB,OAAUq+H,EAAQjkF,YAAc,QAG3C,EAAKo1C,YAAYhxF,GACjB,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAK3B,YAAA6mG,YAAA,SAAYhxF,GACR,IAAM8/H,EAAa9/H,EAAOyB,OAAOrF,QAAO,SAAA8F,GAAS,OAAAA,EAAM1S,OAAS,EAAAwS,UAAU4kF,UAC1E,GAAKk5C,EAAWx2I,OAAhB,CAKA,IADA,IAAIy2I,EACgB,MAAAD,EAAA,eAAY,CAA3B,IAAM59H,EAAK,KACZ,GAAI5U,KAAKoQ,mBAAmB0gC,SAASl8B,EAAMhX,KAAK2F,eAAgB,CAC5DkvI,EAAS79H,EACTlC,EAAOyB,OAASzB,EAAOyB,OAAOrF,QAAO,SAAAwE,GAAK,OAAAA,IAAMm/H,KAChD,OAIHA,IACDA,EAASD,EAAW,IAGxB9/H,EAAO0B,MAAMmB,SAAWk9H,EAAOp0I,QAEvC,EAxHA,CAA4C,EAAAyX,cAA/B,EAAAqrH,0B,mdCfb,YAGA,QAEA,2B,+CAuBA,OAvB0C,OACtC,YAAAvxH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB,EAAKD,YAAY9T,EAAMmO,KAAM,MAClEkG,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM6V,OAC5CxB,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAMiX,UACrD5C,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmO,KAC5C,EAAKgI,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAvBA,CAA0C,EAAAiZ,cAA7B,EAAA2rH,wB,odCLb,YAGA,QAEA,2B,+CAuBA,OAvB2C,OACvC,YAAA7xH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM8qB,OAC3CzW,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMq0I,SAC5ChgI,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM6uI,KAC5Cx6H,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM2rB,UACrD,EAAKxV,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAvBA,CAA2C,EAAAiZ,cAA9B,EAAA4tH,yB,kdCLb,YAGA,QAGA,2B,+CAkDA,OAlDyC,OACrC,YAAA9zH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,KAAIA,EAAMrC,OAAS,GAAnB,CAIA,EAAK8Y,cAAcjY,EAAQ,EAAKuV,kBAAkB/T,EAAMA,EAAMrC,OAAS,KACvE,IAAM0W,EAAS,EAAKqB,kBACpBrB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMA,EAAMrC,OAAS,GAAI,IAC/D0W,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAE9B,eAAbA,EAAM,IAAoC,YAAbA,EAAM,IAAiC,mBAAbA,EAAM,IAC7DqU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,IAC5C,EAAKs0I,mBAAmBjgI,EAAQ,EAAGrU,IAEnC,EAAKs0I,mBAAmBjgI,EAAQ,EAAGrU,GAGvC,EAAKgX,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAGnB,YAAA81I,mBAAR,SAA2BjgI,EAAoBkgI,EAAoBv0I,GAE/D,IAAK,IAAIvC,EAAI82I,EAAY92I,EAAIuC,EAAMrC,OAAS,EAAGF,IACvCkE,KAAKsO,mBAAmBjQ,EAAMvC,MAGlC4W,EAAOwB,OAAU7V,EAAMvC,GAAK,OAGxC,EAlDA,CAAyC,EAAAga,cAA5B,EAAA+sH,uB,wdCNb,YAGA,QAEA,2B,+CAyEA,OAzE+C,OAC3C,YAAAjzH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbpF,EAAM5Q,KAAK2Q,SAASnV,GAC1B,GAAW,MAAPoV,EAEA,OADA/T,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,GAG3B,IAAMg2I,EAAajiI,EAAIlJ,iBAAiB,oCAkDxC,OAjDAF,MAAMC,KAAKorI,GAAYjlI,SAAQ,SAAAklI,GAC3B,IAAMC,EAAYD,EAAUzB,aAAa,MACzC,IAAI,EAAK/iI,mBAAmBykI,GAA5B,CAIA,IAAMC,EAAeF,EAAUzB,aAAa,QACtC4B,EAAeH,EAAUzB,aAAa,YACxC3jF,EAAoB,KACpBwlF,EAAmB,KACnBC,EAAoB,KACpB77G,EAAkB,KAClBg6G,EAAoB,KAElB8B,EAAexiI,EAAI5J,cAAc,4EACI+rI,EAAY,MACvD,GAAoB,MAAhBK,EAAsB,CACtB,IAAMC,EAAUD,EAAaE,cAAcA,cAC5B,MAAXD,IACA3lF,EAAY2lF,EAAQhC,aAAa,QACjC6B,EAAWG,EAAQhC,aAAa,QAChC/5G,EAAU+7G,EAAQhC,aAAa,YAC/B8B,EAAYE,EAAQhC,aAAa,YAC5B,EAAK/iI,mBAAmB6kI,KACzBA,EAAYA,EAAUxlI,MAAM,MAAMnC,KAAK,QAK9C,EAAK8C,mBAAmBgpB,KACzBg6G,EAAY,EAAKiC,eAAe3iI,EAAK0mB,EAAS,IAC9C,EAAKxiB,cAAcjY,EAAQy0I,IAG/B,IAAM5+H,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkBs7C,EAAW,MAChDh7C,EAAOwB,MAAQ,EAAK9B,kBAAkB+gI,GACtCzgI,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB4gI,GAC/CtgI,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB6gI,GAC/CvgI,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAashI,GACtC,EAAK1+H,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,IAG3B,YAAA02I,eAAA,SAAe3iI,EAAe0mB,EAAiBg6G,GAC3C,IAAMr7E,EAAQrlD,EAAI5J,cAAc,wCAA0CswB,EAAU,MACpF,OAAa,MAAT2+B,EACOq7E,GAENtxI,KAAKsO,mBAAmBgjI,KACzBA,EAAY,IAAMA,GAEtBA,EAAYr7E,EAAMo7E,aAAa,QAAUC,EAClCtxI,KAAKuzI,eAAe3iI,EAAKqlD,EAAMo7E,aAAa,YAAaC,KAExE,EAzEA,CAA+C,EAAAx7H,cAAlC,EAAAwsH,6B,idCLb,YAGA,QAEA,QACA,SAEA,QACA,SAEMkR,EAAqB,CAAC,OAAQ,YAAa,WAAY,WAAY,wBAAyB,gBAC9F,OAAQ,oBAAqB,OAAQ,QAAS,oBAGlD,2B,+CA4DA,OA5DwC,OACpC,YAAA5jI,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBAapB,GAZArB,EAAOuB,SAAwE,SAA7D,EAAK7B,kBAAkB/T,EAAM4V,SAAU,IAAI1Q,cAC7DmP,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMT,KAAM,MACjD8U,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMo1I,KAAM,IAClD/gI,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM+V,OACrD1B,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAMkX,UACrD7C,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMmO,KAEzB,UAAfnO,EAAMq1I,OACNhhI,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMiC,MAAO,MAClDoS,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMqmI,KAAM,KAGnC,OAAfrmI,EAAMq1I,MAMN,GALAhhI,EAAOxQ,KAAO,EAAAoS,WAAW2K,KACzBvM,EAAOI,KAAO,IAAI,EAAA6J,SAClBjK,EAAOI,KAAK2I,eAAiB,EAAKrJ,kBAAkB/T,EAAMmzI,YAC1D9+H,EAAOI,KAAKiJ,OAAS,EAAK3J,kBAAkB/T,EAAM0d,QAClDrJ,EAAOI,KAAKkJ,MAAQ,EAAK1J,aAAaI,EAAOI,KAAKiJ,SAC7C,EAAKzN,mBAAmBjQ,EAAMs1I,YAC/B,IACI,IAAM7C,EAAU,IAAIp/G,KAAKrzB,EAAMs1I,YAC/BjhI,EAAOI,KAAKE,QAAU89H,EAAQl/G,cAAcrnB,WAC5CmI,EAAOI,KAAKC,UAAY+9H,EAAQj/G,WAAa,GAAGtnB,WAClD,gBAIH,GAAmB,UAAflM,EAAMq1I,KAOb,IAAK,IAAM30I,KANX2T,EAAOxQ,KAAO,EAAAoS,WAAWmB,WACzB/C,EAAOgD,WAAa,IAAI,EAAAC,eACxBjD,EAAOgD,WAAWxT,KAAO,EAAA0T,eAAeC,QACnC,EAAKvH,mBAAmBoE,EAAOwB,SAChCxB,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAMu1I,iBAAkB,KAE3Cv1I,EACfA,EAAMlC,eAAe4C,IAAay0I,EAAmBvmI,QAAQlO,EAASwE,eAAiB,IACtF,EAAK+K,mBAAmBjQ,EAAMU,KAC/B,EAAK0V,WAAW/B,EAAQ3T,EAAUV,EAAMU,IAKpD,EAAKyV,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EA5DA,CAAwC,EAAAiZ,cAA3B,EAAAysH,sB,6cCfb,YAGA,QAEA,2B,+CA0BA,OA1BoC,OAChC,YAAA3yH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,GAAqB,IAAjBA,EAAMrC,OAAV,CAGA,IAAM0W,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAM,GAAI,MAC/CqU,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM,IAC5CqU,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM,IACrDqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAM,IAC5C,EAAKmW,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EA1BA,CAAoC,EAAAiZ,cAAvB,EAAA0rH,kB,8cCLb,YAGA,QAEA,2B,+CAsBA,OAtBqC,OACjC,YAAA5xH,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAMqU,EAAS,EAAKqB,kBACpBrB,EAAO9U,KAAO,EAAKwU,kBAAkB/T,EAAMyzI,KAAM,MACjDp/H,EAAO0B,MAAMkB,SAAW,EAAKlD,kBAAkB/T,EAAM,cACrDqU,EAAO0B,MAAMmB,SAAW,EAAKnD,kBAAkB/T,EAAM4wB,UACrDvc,EAAO0B,MAAMoB,KAAO,EAAK5D,aAAavT,EAAMsR,KAC5C,EAAK6E,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,MAGxB7V,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAE/B,EAtBA,CAAqC,EAAAiZ,cAAxB,EAAAkuH,mB,mdCLb,YAGA,QAGA,2B,+CA6DA,OA7D0C,OACtC,YAAAp0H,MAAA,SAAMpU,GAAN,WACUqB,EAAS,IAAI,EAAAmZ,aACbg3C,EAAUhtD,KAAK+Q,SAASvV,GAAM,GACpC,OAAe,MAAXwxD,GACAnwD,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAG3BmwD,EAAQp/C,SAAQ,SAAAvP,GACZ,IAAI,EAAKiQ,mBAAmBjQ,EAAM,oBAAqB,EAAKiQ,mBAAmBjQ,EAAM,gBAArF,CAGA,EAAKyW,cAAcjY,EAAQ,EAAKuV,kBAAkB/T,EAAMw1I,cACxD,IAAMnhI,EAAS,EAAKqB,kBACpBrB,EAAOuB,SAA2D,MAAhD,EAAK7B,kBAAkB/T,EAAM6nI,SAAU,KACzDxzH,EAAOwB,MAAQ,EAAK9B,kBAAkB/T,EAAM2pI,OAC5Ct1H,EAAO9U,KAAO,EAAKwU,kBACf/T,EAAM,iBAAkB,EAAK+T,kBAAkB/T,EAAM,eAAgB,OACzEqU,EAAO0B,MAAMoB,KAAO,EAAK5D,aACrB,EAAKQ,kBAAkB/T,EAAM,gBAAiB,EAAK+T,kBAAkB/T,EAAM,iBAC/E,EAAKy1I,UAAUphI,EAAQrU,EAAM01I,YAC7B,EAAKD,UAAUphI,EAAQrU,EAAM21I,YAC7B,EAAK3+H,sBAAsB3C,GAC3B,EAAK8B,cAAc9B,GACnB7V,EAAOuY,QAAQ9Y,KAAKoW,OAGpB1S,KAAK6f,cACL7f,KAAKiT,yBAAyBpW,GAGlCA,EAAOkZ,SAAU,EACVoF,QAAQC,QAAQve,KAGnB,YAAAi3I,UAAR,SAAkBphI,EAAoBlX,GAAtC,WACQwE,KAAKsO,mBAAmB9S,IAGVwE,KAAKmR,aAAa3V,GAC1BoS,SAAQ,SAAA0gI,GACd,IAAMhJ,EAAgBgJ,EAAKrhI,QAAQ,KACnC,KAAIq4H,EAAgB,GAApB,CAGA,IAAM1wH,EAAQ05H,EAAKp8H,UAAU,EAAGozH,GAC1BjnI,EAAQiwI,EAAKtyI,OAASspI,EAAgBgJ,EAAKp8H,UAAUozH,EAAgB,GAAK,KAChF,IAAI,EAAKh3H,mBAAmBsG,KAAU,EAAKtG,mBAAmBjQ,IAAoB,eAAVuW,EAAxE,CAGA,IAAM0vH,EAAa1vH,EAAMrR,cACI,MAAzBmP,EAAO0B,MAAMkB,UAAoB,EAAKjF,mBAAmBpD,QAAQq3H,IAAe,EAChF5xH,EAAO0B,MAAMkB,SAAWjX,EACQ,MAAzBqU,EAAO0B,MAAMmB,UAAoB,EAAKnF,mBAAmBnD,QAAQq3H,IAAe,EACvF5xH,EAAO0B,MAAMmB,SAAWlX,EAExB,EAAKoW,WAAW/B,EAAQkC,EAAOvW,SAI/C,EA7DA,CAA0C,EAAAyX,cAA7B,EAAA8sH,wB,0+CCEb,aAEA,QAEA,SAEA,SAEMtiC,EACgB,mBADhBA,EAE4B,+BAGlC,aAGI,WAAoB9oD,EAAwCla,EAChDtf,EAAsCiD,EACtCkzB,EAAoClzC,GAF5B,KAAAu2C,iBAAwC,KAAAla,cAChD,KAAAtf,gBAAsC,KAAAiD,aACtC,KAAAkzB,eAAoC,KAAAlzC,aAJxC,KAAA8pB,iBAA6B,KAyEzC,OAnEI,YAAAkpH,oBAAA,SAAoBlpH,GAEhB,OADA/qB,KAAK+qB,iBAAmBA,EACjB/qB,KAAKw3C,eAAe0iB,KAAKomC,EAAuBv1E,IAGrD,YAAAI,oBAAN,W,+GACgC,Q,EAArBnrB,KAAK+qB,wBAAgB,a,kBAAK,OAA1B,EAAA/qB,KAA0B,GAAMA,KAAKw3C,eAAev5C,IAAaqiG,I,WAA5Dv1E,iBAAqB,S,iBAAjC,MAAO,CAAP,aAGE,YAAAmpH,mBAAN,W,oGAEmC,OADzBC,EAAmBn0I,KAAKm0C,aAAaigG,gBACZ,GAAMp0I,KAAKijG,2B,OACN,OAD9BoxC,EAAiE,MAAxC,SACK,GAAMr0I,KAAKmrB,uB,OAE/C,OAFMmpH,GAA8B,SAE7B,CAAP,EAAOH,GAAoBE,GAA0BC,WAGnD,YAAAnxC,YAAN,W,oGACyB,SAAMnjG,KAAKijG,2B,OACpB,OADNpjF,EAAe,SACT,GAAM7f,KAAKge,cAAc6rE,U,OAA/BlrF,EAAM,S,iBAIR,O,sBADM4gD,EAAsB,IAAI,EAAAC,2BAA2B7gD,EAAIq+B,WAC/D,GAAMh9B,KAAKihB,WAAW0+B,0BAA0B9/B,EAAauzB,gBAAiBmM,I,cAA9E,S,aAEA,M,SAAM,IAAIp8C,MAAM,iC,OAGpB,SAAMnD,KAAKihB,WAAWg9F,6B,cAAtB,S,YAGE,YAAAn/D,aAAN,SAAmBtyC,G,sGAEa,O,sBAAA,GAAMxM,KAAKihB,WAAWikG,2BAA2B14G,I,OAGzE,OAHM+nI,EAAkB,SAClBC,EAAS,EAAAjsI,MAAMY,eAAeorI,EAAgB51I,KAC9CoQ,EAAI,IAAI,EAAAmuB,mBAAmBs3G,GACjC,GAAMx0I,KAAKge,cAAc4gC,OAAO7vC,I,cAAhC,S,aAGA,M,WADA/O,KAAKiB,WAAWW,MAAM,GAChB,IAAIuB,MAAM,iC,yBAIlB,YAAA8/F,wBAAN,W,0FACiB,SAAMjjG,KAAKs9B,YAAY8a,uB,OACpC,MAAO,CAAP,EADa,SACDrqB,MAAK,SAAAjwB,GACb,OAAAA,EAAEq1C,qBACFr1C,EAAEoE,OAAS,EAAA26B,qBAAqB2W,OAChC11C,EAAEoE,OAAS,EAAA26B,qBAAqBwW,QAC/Bv1C,EAAEi1C,2BAGL,YAAA2pD,0BAAN,SAAgC/2E,G,0FAC5B,SAAM3lB,KAAKw3C,eAAe0iB,KAAKomC,EAAmC36E,I,cAAlE,S,YAGE,YAAA4lE,0BAAN,W,0FACW,SAAMvrF,KAAKw3C,eAAev5C,IAAIqiG,I,OAArC,MAAO,CAAP,EAAO,kBAGL,YAAA8C,6BAAN,W,0FACI,SAAMpjG,KAAKw3C,eAAe3vC,OAAOy4F,I,cAAjC,S,YAGE,YAAArY,MAAN,W,0FACI,SAAMjoF,KAAKojG,gC,cAAX,S,YAER,EA1EA,GAAa,EAAAjpF,uB,2+CCrBb,YACA,UAEA,SAWA,UAOA,aAQI,WAAoBmjB,EAAkCD,EAC1Cid,EAAoCr5B,EACpCs5B,EAAkD/7B,EAClDk+F,EAA6Cz7G,GAHzD,WAAoB,KAAAq8B,cAAkC,KAAAD,cAC1C,KAAAid,eAAoC,KAAAr5B,aACpC,KAAAs5B,sBAAkD,KAAA/7B,qBAClD,KAAAk+F,iBAA6C,KAAAz7G,aARjD,KAAAwzI,WAAY,EACZ,KAAAjsI,QAAS,EACT,KAAAksI,UAAW,EACX,KAAAC,eAAsB,KAM1B30I,KAAKwe,mBAAmB+6E,KAAKjzF,WAAU,WAC9B,EAAKkC,QAIV,EAAKF,UAkLjB,OA9KU,YAAAA,KAAN,W,qGAMI,OALAtI,KAAKwI,QAAS,EACdxI,KAAKwM,IAAMxM,KAAKwe,mBAAmB87G,sBAIlB,cAAbt6H,KAAKwM,IACL,IAG0B,MAA1BxM,KAAK40I,kBAAL,OACA50I,KAAK40I,kBAAkBC,IAAI,kBAC3B70I,KAAK40I,kBAAkBC,IAAI,aAC3B,GAAM70I,KAAK40I,kBAAkBjzC,S,OAA7B,SACA3hG,KAAKy0I,WAAY,EACjBz0I,KAAK40I,kBAAoB,K,iBAsBzB,OAnBJ50I,KAAK40I,mBAAoB,IAAIE,EAAQC,sBAChCC,QAAQh1I,KAAKwM,IAAM,OAAQ,CACxByoI,mBAAoB,WAAM,SAAKh0H,WAAW2jG,wBAC1CswB,iBAAiB,EACjBC,UAAWL,EAAQM,kBAAkBC,aAExCC,gBAAgB,IAAIC,EAAeC,wBAEnCl/C,QAELt2F,KAAK40I,kBAAkBa,GAAG,kBACtB,SAACj6I,GAAc,SAAKk6I,oBAAoB,IAAI,EAAAC,qBAAqBn6I,OACrEwE,KAAK40I,kBAAkBa,GAAG,aACtB,SAACj6I,OACLwE,KAAK40I,kBAAkBgB,SAAQ,WAC3B,EAAKnB,WAAY,EACjB,EAAKoB,WAAU,MAEnB71I,KAAKwI,QAAS,EACV,GAAMxI,KAAK81I,uB,cAAX,SACA,GAAM91I,KAAK61I,WAAU,IADrB,M,OACA,S,mCAIF,YAAAx5C,iBAAN,SAAuB05C,G,YAAA,IAAAA,OAAA,G,yFACnB,IAAK/1I,KAAKwI,OACN,U,iBAGI,O,sBAAA,GAAMxI,KAAK81I,uB,cAAX,SACA,GAAM91I,KAAK61I,UAAUE,IADrB,M,cACA,S,aAEA,SAAM/1I,KAAK40I,kBAAkBjzC,Q,OAA7B,S,sDAGJ3hG,KAAKiB,WAAWW,MAAM,EAAE2I,Y,+BAI1B,YAAAszF,sBAAN,W,iGACI79F,KAAK00I,UAAW,GACZ10I,KAAKwI,QAAWxI,KAAKy0I,UAArB,MACA,GAAMz0I,KAAK61I,WAAU,I,OAArB,S,mCAIF,YAAAj4C,yBAAN,W,iGACI59F,KAAK00I,UAAW,EACZ10I,KAAKwI,QAAUxI,KAAKy0I,UACpB,GAAMz0I,KAAK40I,kBAAkBjzC,QAD7B,M,OACA,S,mCAIM,YAAA+zC,oBAAd,SAAkCM,G,sGAChB,SAAMh2I,KAAKs6C,aAAa4C,Y,OACtC,OADMC,EAAQ,SACM,MAAhB64F,GAAwBA,EAAaC,YAAc94F,EACnD,IAGoB,GAAMn9C,KAAKs9B,YAAY28B,mB,OAE9B,OAFXA,EAAkB,SAClBi8E,EAAgBF,EAAa7wH,QAAQyK,QAAUomH,EAAa7wH,QAAQgxH,OACzD,GAAMn2I,KAAKs9B,YAAYqhB,a,OACxC,GADMy3F,EAAW,SACbn8E,GAAoC,MAAjBi8E,GAAyBA,IAAkBE,EAC9D,U,OAGIJ,EAAa9zI,M,KACZ,EAAAu3F,iBAAiB48C,iB,KACjB,EAAA58C,iBAAiB68C,iBAAjB,Y,KAIA,EAAA78C,iBAAiB88C,iB,KACjB,EAAA98C,iBAAiB+8C,gBAAjB,Y,KAGA,EAAA/8C,iBAAiBg9C,iB,KACjB,EAAAh9C,iBAAiBi9C,iBAAjB,Y,KAIA,EAAAj9C,iBAAiBk9C,iBAAjB,a,KAGA,EAAAl9C,iBAAiBm9C,U,KACjB,EAAAn9C,iBAAiBo9C,Y,KACjB,EAAAp9C,iBAAiBq9C,aAAjB,a,KAKA,EAAAr9C,iBAAiBs9C,YAAjB,a,KAOA,EAAAt9C,iBAAiBu9C,OAAjB,a,KAKA,EAAAv9C,iBAAiBw9C,e,KACjB,EAAAx9C,iBAAiBy9C,eAAjB,a,KAIA,EAAAz9C,iBAAiB09C,eAAjB,a,oBAvCD,SAAMn3I,KAAKq9B,YAAY+5G,iBAAiBpB,EAAa7wH,QACjD6wH,EAAa9zI,OAAS,EAAAu3F,iBAAiB68C,mB,OAC3C,OAFA,SAEA,O,OAGA,SAAMt2I,KAAKq9B,YAAYg6G,iBAAiBrB,EAAa7wH,U,OACrD,OADA,SACA,O,OAGA,SAAMnlB,KAAKq9B,YAAYi6G,iBAAiBtB,EAAa7wH,QACjD6wH,EAAa9zI,OAAS,EAAAu3F,iBAAiBi9C,mB,OAC3C,OAFA,SAEA,O,QAEA,SAAM12I,KAAKq9B,YAAYk6G,iBAAiBvB,EAAa7wH,U,QACrD,OADA,SACA,O,eAII80C,EACA,GAAMj6D,KAAKq9B,YAAY2E,UAAS,IADhC,O,QACA,S,mBAEJ,a,eAEIi4B,EACA,GAAMj6D,KAAKq9B,YAAY2E,UAAS,IADhC,O,QAGA,OAFA,SAEA,GAAMhiC,KAAK40I,kBAAkBjzC,Q,QAA7B,S,mBAEJ,a,QAKA,OAHI1nC,GACAj6D,KAAK08G,iBAET,O,QAGA,SAAM18G,KAAKq9B,YAAYm6G,eAAexB,EAAa7wH,QAC/C6wH,EAAa9zI,OAAS,EAAAu3F,iBAAiBy9C,iB,QAC3C,OAFA,SAEA,O,QAEA,SAAMl3I,KAAKq9B,YAAYo6G,eAAezB,EAAa7wH,U,QAAnD,S,mBAEA,a,0BAIE,YAAA0wH,UAAd,SAAwBE,G,uGAKpB,OAJ2B,MAAvB/1I,KAAK20I,iBACLl+F,aAAaz2C,KAAK20I,gBAClB30I,KAAK20I,eAAiB,MAEtB30I,KAAKy0I,YAAcz0I,KAAKwI,QAAUxI,KAAK00I,SACvC,IAEsB,GAAM10I,KAAK81I,uB,OACrC,IAD0B,SAEtB,U,iBAIA,O,sBAAA,GAAM91I,KAAK40I,kBAAkB5iH,S,cAA7B,SACAhyB,KAAKy0I,WAAY,EACbsB,EACA,GAAM/1I,KAAKq9B,YAAY2E,UAAS,IADhC,M,OACA,S,sDAGJhiC,KAAKiB,WAAWW,MAAM,G,oBAGrB5B,KAAKy0I,YACNz0I,KAAK20I,eAAiB5wH,YAAW,WAAM,SAAK8xH,UAAUE,KAAO/1I,KAAKkM,OAAO,KAAQ,O,YAI3E,YAAA4pI,oBAAd,W,0FACQ,SAAM91I,KAAKs9B,YAAY28B,mB,cAAvB,SACe,GAAMj6D,KAAKu6C,oBAAoB8wC,YAD9C,M,OAEA,MAAO,CAAP,GADe,U,OAGnB,MAAO,CAAP,GAAO,WAGH,YAAAn/E,OAAR,SAAe+rH,EAAatiD,GAGxB,OAFAsiD,EAAMhsH,KAAKosH,KAAKJ,GAChBtiD,EAAM1pE,KAAKiuB,MAAMy7C,GACV1pE,KAAKiuB,MAAMjuB,KAAKC,UAAYypE,EAAMsiD,EAAM,IAAMA,GAE7D,EAnMA,GAAa,EAAAl+E,wB,ylBCrBb,YAEA,SAEA,cAKI,WAAYx4C,GAAZ,MACI,YAAMA,IAAS,KACf,EAAK00I,UAAY,EAAKjzI,oBAAoB,aAC1C,EAAKd,KAAO,EAAKc,oBAAoB,QAErC,IAAMmiB,EAAU,EAAKniB,oBAAoB,WACzC,OAAQ,EAAKd,MACT,KAAK,EAAAu3F,iBAAiB48C,iBACtB,KAAK,EAAA58C,iBAAiB88C,iBACtB,KAAK,EAAA98C,iBAAiB68C,iBACtB,KAAK,EAAA78C,iBAAiB+8C,gBAClB,EAAKrxH,QAAU,IAAIuyH,EAAuBvyH,GAC1C,MACJ,KAAK,EAAAs0E,iBAAiBg9C,iBACtB,KAAK,EAAAh9C,iBAAiBk9C,iBACtB,KAAK,EAAAl9C,iBAAiBi9C,iBAClB,EAAKvxH,QAAU,IAAIwyH,EAAuBxyH,GAC1C,MACJ,KAAK,EAAAs0E,iBAAiBm9C,UACtB,KAAK,EAAAn9C,iBAAiBo9C,YACtB,KAAK,EAAAp9C,iBAAiBs9C,YACtB,KAAK,EAAAt9C,iBAAiBq9C,aACtB,KAAK,EAAAr9C,iBAAiBu9C,OAClB,EAAK7xH,QAAU,IAAIyyH,EAAiBzyH,GACpC,MACJ,KAAK,EAAAs0E,iBAAiBw9C,eACtB,KAAK,EAAAx9C,iBAAiBy9C,eACtB,KAAK,EAAAz9C,iBAAiB09C,eAClB,EAAKhyH,QAAU,IAAI0yH,EAAqB1yH,G,SAKxD,OAtC0C,OAsC1C,EAtCA,CAA0C,EAAA3hB,cAA7B,EAAAmyI,uBAwCb,kBAOI,WAAYp0I,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAK4sB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAKiN,eAAiB,EAAKjN,oBAAoB,kBAC/C,EAAKikB,cAAgB,EAAKjkB,oBAAoB,iBAC9C,EAAKkkB,aAAe,IAAIwK,KAAK,EAAK1uB,oBAAoB,iB,EAE9D,OAf4C,OAe5C,EAfA,CAA4C,EAAAQ,cAA/B,EAAAk0I,yBAiBb,kBAKI,WAAYn2I,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAK4sB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAKkkB,aAAe,IAAIwK,KAAK,EAAK1uB,oBAAoB,iB,EAE9D,OAX4C,OAW5C,EAXA,CAA4C,EAAAQ,cAA/B,EAAAm0I,yBAab,kBAII,WAAYp2I,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAKquB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAK42B,KAAO,IAAIlI,KAAK,EAAK1uB,oBAAoB,S,EAEtD,OATsC,OAStC,EATA,CAAsC,EAAAQ,cAAzB,EAAAo0I,mBAWb,kBAKI,WAAYr2I,GAAZ,MACI,YAAMA,IAAS,K,OACf,EAAK3B,GAAK,EAAKoD,oBAAoB,MACnC,EAAK4sB,OAAS,EAAK5sB,oBAAoB,UACvC,EAAKkkB,aAAe,IAAIwK,KAAK,EAAK1uB,oBAAoB,iB,EAE9D,OAX0C,OAW1C,EAXA,CAA0C,EAAAQ,cAA7B,EAAAq0I,wB,g/CCrFb,cAEA,QACA,UACA,UAUA,SAEA,QAEMC,EAAiB,CACnB97I,OAAQ,GACR24G,WAAW,EACX54F,QAAQ,EACRg8H,UAAW,EACXl5E,WAAW,EACXm5E,aAAc,EACdl5E,WAAW,EACXm5E,aAAc,EACdj5E,SAAS,EACTnI,WAAY,EACZ30D,KAAM,WACNy3H,SAAU,EACVue,cAAe,IACfnhF,YAAY,EACZC,eAAe,GAGbspC,EACO,4BADPA,EAEO,2BAKb,aAII,WAAoBtiF,EAAsCw5B,EAC9ChmB,GADQ,KAAAxT,gBAAsC,KAAAw5B,iBAC9C,KAAAhmB,gBA+fhB,OA7fU,YAAAyb,iBAAN,SAAuBh8B,G,sHAInB,GAAe,gBAFTnT,EAAI7B,OAAOuS,OAAO,GAAIspI,EAAgB7mI,IAEtC/O,KACF,MAAO,CAAP,EAAOlC,KAAKm4I,mBAAmBlnI,IAYnC,GARAjR,KAAKo4I,uBAAuBt6I,GAAG,GAEzB23D,EAAoB33D,EAAEk6I,aAAel6I,EAAEm6I,aAAen6I,EAAEi6I,UAAYj6I,EAAE+4D,WACxE/4D,EAAE9B,OAASy5D,IACX33D,EAAE9B,OAASy5D,GAGT4iF,EAAsB,GACxBv6I,EAAEghE,WAAahhE,EAAEm6I,aAAe,EAChC,IAASn8I,EAAI,EAAGA,EAAIgC,EAAEm6I,aAAcn8I,IAChCu8I,EAAU/7I,KAAK,KAGvB,GAAIwB,EAAE+gE,WAAa/gE,EAAEk6I,aAAe,EAChC,IAASl8I,EAAI,EAAGA,EAAIgC,EAAEk6I,aAAcl8I,IAChCu8I,EAAU/7I,KAAK,KAGvB,GAAIwB,EAAEie,QAAUje,EAAEi6I,UAAY,EAC1B,IAASj8I,EAAI,EAAGA,EAAIgC,EAAEi6I,UAAWj8I,IAC7Bu8I,EAAU/7I,KAAK,KAGvB,GAAIwB,EAAEkhE,SAAWlhE,EAAE+4D,WAAa,EAC5B,IAAS/6D,EAAI,EAAGA,EAAIgC,EAAE+4D,WAAY/6D,IAC9Bu8I,EAAU/7I,KAAK,KAGvB,KAAO+7I,EAAUr8I,OAAS8B,EAAE9B,QACxBq8I,EAAU/7I,KAAK,KAInB,SAAM0D,KAAKs4I,aAAaD,I,OAAxB,SAGIE,EAAa,GAEbC,EAAmB,4BACnB16I,EAAE62G,YACF6jC,GAAoB,KAEpB16I,EAAEghE,YACFy5E,GAAcC,GAGdC,EAAmB,2BACnB36I,EAAE62G,YACF8jC,GAAoB,MAEpB36I,EAAE+gE,YACF05E,GAAcE,GAGdC,EAAgB,WAChB56I,EAAE62G,YACF+jC,GAAiB,MAEjB56I,EAAEie,SACFw8H,GAAcG,GAGZC,EAAiB,WACnB76I,EAAEkhE,UACFu5E,GAAcI,GAGdpjI,EAAW,GACNzZ,EAAI,E,sBAAGA,EAAIgC,EAAE9B,QAAM,YAExB,OADI48I,OAAa,EACTP,EAAUv8I,IACd,IAAK,IACD88I,EAAgBJ,EAChB,MACJ,IAAK,IACDI,EAAgBH,EAChB,MACJ,IAAK,IACDG,EAAgBF,EAChB,MACJ,IAAK,IACDE,EAAgBD,EAChB,MACJ,IAAK,IACDC,EAAgBL,EAMA,SAAMv4I,KAAKge,cAAcg6G,aAAa,EAAG4gB,EAAc58I,OAAS,I,OAAlF68I,EAAkB,SACxBtjI,GAAYqjI,EAAcv1I,OAAOw1I,G,wBAvBP/8I,I,aA0B9B,MAAO,CAAP,EAAOyZ,WAGL,YAAA4iI,mBAAN,SAAyBlnI,G,yGAGH,OAFZnT,EAAI7B,OAAOuS,OAAO,GAAIspI,EAAgB7mI,IAEtC0oH,UAAoB77H,EAAE67H,UAAY,KACpC77H,EAAE67H,SAAWme,EAAene,WAET,MAAnB77H,EAAEo6I,eAAoD,IAA3Bp6I,EAAEo6I,cAAcl8I,QAAgB8B,EAAEo6I,cAAcl8I,OAAS,KACpF8B,EAAEo6I,cAAgB,KAEF,MAAhBp6I,EAAEi5D,aACFj5D,EAAEi5D,YAAa,GAEI,MAAnBj5D,EAAEk5D,gBACFl5D,EAAEk5D,eAAgB,GAGhB8hF,EAAa,EAAAziD,gBAAgBr6F,OAAS,EACtC+8I,EAAW,IAAIvxI,MAAM1J,EAAE67H,UACpB79H,EAAI,E,wBAAGA,EAAIgC,EAAE67H,SACA,GAAM35H,KAAKge,cAAcg6G,aAAa,EAAG8gB,IADjC,M,OACpBE,EAAY,SACdl7I,EAAEi5D,WACFgiF,EAASj9I,GAAKkE,KAAK+2D,WAAW,EAAAs/B,gBAAgB2iD,IAE9CD,EAASj9I,GAAK,EAAAu6F,gBAAgB2iD,G,wBALNl9I,I,oBAS5BgC,EAAEk5D,cACF,GAAMh3D,KAAKi5I,+BAA+BF,IAD1C,M,OACA,S,iBAEJ,MAAO,CAAP,EAAOA,EAASvtI,KAAK1N,EAAEo6I,wBAGrB,YAAA/qG,WAAN,W,yGAC6B,MAArBntC,KAAKk5I,aAAL,MACgB,GAAMl5I,KAAKw3C,eAAev5C,IAAIqiG,I,OAAxCrvF,EAAU,SAEZjR,KAAKk5I,aADM,MAAXjoI,EACoB6mI,EAEA77I,OAAOuS,OAAO,GAAIspI,EAAgB7mI,G,iBAGtC,SAAMjR,KAAKm5I,0CAA0Cn5I,KAAKk5I,e,OAElF,OAFME,EAAkB,SACxBp5I,KAAKk5I,aAAeE,EAAgB,GAC7B,CAAC,EAAD,CAACp5I,KAAKk5I,aAAcE,EAAgB,aAGzC,YAAAD,0CAAN,SAAgDloI,G,gGAChB,SAAMjR,KAAKq5I,qC,OAuDvC,OAtD6B,OADzB52I,EAAwB,WAEpBwO,EAAQjV,OAASyG,EAAsBgzD,YACvCxkD,EAAQjV,OAASyG,EAAsBgzD,WAGvChzD,EAAsB62I,eACtBroI,EAAQ4tD,WAAY,GAGpBp8D,EAAsB82I,eACtBtoI,EAAQ6tD,WAAY,GAGpBr8D,EAAsBi0D,aACtBzlD,EAAQ8K,QAAS,GAGjB9K,EAAQ8mI,UAAYt1I,EAAsB+2I,cAC1CvoI,EAAQ8mI,UAAYt1I,EAAsB+2I,aAG1C/2I,EAAsBk0D,aACtB1lD,EAAQ+tD,SAAU,GAGlB/tD,EAAQ4lD,WAAap0D,EAAsBg3I,eAC3CxoI,EAAQ4lD,WAAap0D,EAAsBg3I,cAI3CxoI,EAAQ4lD,WAAa5lD,EAAQ8mI,UAAY9mI,EAAQjV,SACjDiV,EAAQ4lD,WAAa5lD,EAAQjV,OAASiV,EAAQ8mI,WAG9C9mI,EAAQ0oH,SAAWl3H,EAAsBq0D,iBACzC7lD,EAAQ0oH,SAAWl3H,EAAsBq0D,gBAGzCr0D,EAAsBs0D,aACtB9lD,EAAQ8lD,YAAa,GAGrBt0D,EAAsBu0D,gBACtB/lD,EAAQ+lD,eAAgB,GAIc,aAAtCv0D,EAAsB8zD,aACgB,eAAtC9zD,EAAsB8zD,cACtBtlD,EAAQ/O,KAAOO,EAAsB8zD,cAGzC9zD,EAAwB,IAAI,EAAAi3I,+BAEzB,CAAC,EAAD,CAACzoI,EAASxO,YAGf,YAAA42I,kCAAN,W,2GACqD,MAAtBr5I,KAAKwxB,cAAL,OAA6B,O,cACpD,SAAMxxB,KAAKwxB,cAAckG,OAAO,EAAApgB,WAAW8+C,oB,OAA3C,W,iBAGJ,OAFIgjF,EAAkD,KAEtC,OAJVzhH,EAAQ,IAI8B,IAApBA,EAAS37B,OACtB,CAAP,EAAOo9I,IAGXzhH,EAAS/pB,SAAQ,SAAA+rI,GACRA,EAAc55H,SAAiC,MAAtB45H,EAAcn+I,OAIrB,MAAnB49I,IACAA,EAAkB,IAAI,EAAAM,gCAIY,MAAlCC,EAAcn+I,KAAK+6D,aAAuD,aAAhC6iF,EAAgB7iF,cAC1D6iF,EAAgB7iF,YAAcojF,EAAcn+I,KAAK+6D,aAGjB,MAAhCojF,EAAcn+I,KAAKi6D,WAChBkkF,EAAcn+I,KAAKi6D,UAAY2jF,EAAgB3jF,YAClD2jF,EAAgB3jF,UAAYkkF,EAAcn+I,KAAKi6D,WAG/CkkF,EAAcn+I,KAAKg7D,WACnB4iF,EAAgBE,cAAe,GAG/BK,EAAcn+I,KAAKi7D,WACnB2iF,EAAgBG,cAAe,GAG/BI,EAAcn+I,KAAKk7D,aACnB0iF,EAAgB1iF,YAAa,GAGI,MAAjCijF,EAAcn+I,KAAKo7D,YAChB+iF,EAAcn+I,KAAKo7D,WAAawiF,EAAgBI,cACnDJ,EAAgBI,YAAcG,EAAcn+I,KAAKo7D,YAGjD+iF,EAAcn+I,KAAKm7D,aACnByiF,EAAgBziF,YAAa,GAGI,MAAjCgjF,EAAcn+I,KAAKq7D,YAChB8iF,EAAcn+I,KAAKq7D,WAAauiF,EAAgBK,eACnDL,EAAgBK,aAAeE,EAAcn+I,KAAKq7D,YAGb,MAArC8iF,EAAcn+I,KAAKs7D,gBAChB6iF,EAAcn+I,KAAKs7D,eAAiBsiF,EAAgBtiF,iBACvDsiF,EAAgBtiF,eAAiB6iF,EAAcn+I,KAAKs7D,gBAGpD6iF,EAAcn+I,KAAKu7D,aACnBqiF,EAAgBriF,YAAa,GAG7B4iF,EAAcn+I,KAAKw7D,gBACnBoiF,EAAgBpiF,eAAgB,OAIjC,CAAP,EAAOoiF,YAGL,YAAAtkC,YAAN,SAAkB7jG,G,0FACd,SAAMjR,KAAKw3C,eAAe0iB,KAAKomC,EAAcrvF,I,cAA7C,SACAjR,KAAKk5I,aAAejoI,E,YAGlB,YAAAikG,WAAN,W,kGACmB,SAAMl1G,KAAKge,cAAckwG,U,OACxC,OADe,SAKVluH,KAAKynF,QAAN,MACkB,GAAMznF,KAAKw3C,eAAev5C,IAAgCqiG,IAJrE,CAAP,EAAO,IAAI94F,O,OAKI,OADT80H,EAAY,SAClB,EAAAt8H,KAAe,GAAMA,KAAK45I,eAAetd,I,OAAzC,EAAK70C,QAAU,S,iBAGnB,MAAO,CAAP,EAAOznF,KAAKynF,SAAW,IAAIjgF,eAGzB,YAAAotG,WAAN,SAAiBr/F,G,kGAEE,SAAMvV,KAAKge,cAAckwG,U,OACxC,OADe,SAKQ,GAAMluH,KAAKk1G,cAH9B,I,OAMJ,OAHM2kC,EAAiB,SAGnB75I,KAAK85I,gBAAgBvkI,EAAUskI,GAC/B,KAGJA,EAAeE,QAAQ,IAAI,EAAAC,yBAAyBzkI,EAAUmc,KAAKyrE,QAG/D08C,EAAe79I,OAxUG,KAyUlB69I,EAAepzI,MAGA,GAAMzG,KAAKi6I,eAAeJ,K,OACtC,OADDK,EAAa,SACZ,GAAMl6I,KAAKw3C,eAAe0iB,KAAKomC,EAAc45C,I,OAApD,MAAO,CAAP,EAAO,kBAGL,YAAAjyD,MAAN,W,0FAEW,OADPjoF,KAAKynF,QAAU,GACR,GAAMznF,KAAKw3C,eAAe3vC,OAAOy4F,I,OAAxC,MAAO,CAAP,EAAO,kBAGX,YAAAlqD,iBAAA,SAAiB7gC,EAAkB4kI,GAC/B,QAD+B,IAAAA,MAAA,MACf,MAAZ5kI,GAAwC,IAApBA,EAASvZ,OAC7B,OAAO,KAEX,IAAIo+I,EAAmB,CAAC,YAAa,MAAO,UAC1B,MAAdD,GAAsBA,EAAWn+I,OAAS,IAC1Co+I,EAAmBA,EAAiB5vH,OAAO2vH,IAG/C,IAAME,EAAkB7yI,MAAMC,KAAK,IAAIsmG,IAAIqsC,IAE3C,OADeE,EAAO/kI,EAAU8kI,IAIpC,YAAArlC,iBAAA,SAAiB/jG,EAAcxO,GAC3BwO,EAAQgnI,aAAe,EACvBhnI,EAAQ+mI,aAAe,GAElB/mI,EAAQjV,QAAUiV,EAAQjV,OAAS,EACpCiV,EAAQjV,OAAS,EACViV,EAAQjV,OAAS,MACxBiV,EAAQjV,OAAS,KAGjBiV,EAAQjV,OAASyG,EAAsBgzD,YACvCxkD,EAAQjV,OAASyG,EAAsBgzD,WAGtCxkD,EAAQ8mI,UAEF9mI,EAAQ8mI,UAAY9mI,EAAQjV,OACnCiV,EAAQ8mI,UAAY9mI,EAAQjV,OACrBiV,EAAQ8mI,UAAY,IAC3B9mI,EAAQ8mI,UAAY,GAJpB9mI,EAAQ8mI,UAAY,EAOpB9mI,EAAQ8mI,UAAYt1I,EAAsB+2I,cAC1CvoI,EAAQ8mI,UAAYt1I,EAAsB+2I,aAGzCvoI,EAAQ4lD,WAEF5lD,EAAQ4lD,WAAa5lD,EAAQjV,OACpCiV,EAAQ4lD,WAAa5lD,EAAQjV,OACtBiV,EAAQ4lD,WAAa,IAC5B5lD,EAAQ4lD,WAAa,GAJrB5lD,EAAQ4lD,WAAa,EAOrB5lD,EAAQ4lD,WAAap0D,EAAsBg3I,eAC3CxoI,EAAQ4lD,WAAap0D,EAAsBg3I,cAG3CxoI,EAAQ4lD,WAAa5lD,EAAQ8mI,UAAY9mI,EAAQjV,SACjDiV,EAAQ4lD,WAAa5lD,EAAQjV,OAASiV,EAAQ8mI,WAG1B,MAApB9mI,EAAQ0oH,UAAoB1oH,EAAQjV,OAAS,EAC7CiV,EAAQ0oH,SAAW,EACZ1oH,EAAQ0oH,SAAW,KAC1B1oH,EAAQ0oH,SAAW,IAGnB1oH,EAAQ0oH,SAAWl3H,EAAsBq0D,iBACzC7lD,EAAQ0oH,SAAWl3H,EAAsBq0D,gBAGhB,MAAzB7lD,EAAQinI,eAAyBjnI,EAAQinI,cAAcl8I,OAAS,IAChEiV,EAAQinI,cAAgBjnI,EAAQinI,cAAc,IAGlDl4I,KAAKo4I,uBAAuBnnI,GAAS,IAGjC,YAAA8lD,WAAR,SAAmBr0D,GACf,OAAOA,EAAIW,OAAO,GAAGC,cAAgBZ,EAAItD,MAAM,IAGrC,YAAA65I,+BAAd,SAA6CF,G,kGACzC,OAAgB,MAAZA,GAAoBA,EAAS/8I,QAAU,EACvC,IAEU,GAAMgE,KAAKge,cAAcg6G,aAAa,EAAG+gB,EAAS/8I,OAAS,I,OAC7D,OADNimE,EAAQ,SACF,GAAMjiE,KAAKge,cAAcg6G,aAAa,EAAG,I,cAA/Ch+F,EAAM,SACZ++G,EAAS92E,GAAS82E,EAAS92E,GAASjoC,E,YAG1B,YAAAigH,eAAd,SAA6BxyD,G,uGACzB,OAAe,MAAXA,GAAsC,IAAnBA,EAAQzrF,OACpB,CAAP,EAAOmf,QAAQC,QAAQ,MAGrBJ,EAAWysE,EAAQ1/E,KAAI,SAAMyf,GAAI,qC,wDACjB,SAAMxnB,KAAKge,cAAcujB,QAAQ/Z,EAAKjS,W,OACxD,OADM+mH,EAAY,SACX,CAAP,EAAO,IAAI,EAAA0d,yBAAyB1d,EAAU1hH,gBAAiB4M,EAAKoS,iBAGjE,GAAMze,QAAQK,IAAIR,K,OAAzB,MAAO,CAAP,EAAO,kBAGG,YAAA4+H,eAAd,SAA6BnyD,G,uGACzB,OAAe,MAAXA,GAAsC,IAAnBA,EAAQzrF,OACpB,CAAP,EAAOmf,QAAQC,QAAQ,MAGrBJ,EAAWysE,EAAQ1/E,KAAI,SAAMyf,GAAI,qC,wDACjB,SAAMxnB,KAAKge,cAAcG,cAAc,IAAI,EAAA1D,UAAU+M,EAAKjS,Y,OAC5E,OADMglI,EAAY,SACX,CAAP,EAAO,IAAI,EAAAP,yBAAyBO,EAAW/yH,EAAKoS,iBAGjD,GAAMze,QAAQK,IAAIR,K,OAAzB,MAAO,CAAP,EAAO,kBAGH,YAAA8+H,gBAAR,SAAwBvkI,EAAkBkyE,GACtC,OAAe,MAAXA,GAAsC,IAAnBA,EAAQzrF,QAIxByrF,EAAQA,EAAQzrF,OAAS,GAAGuZ,WAAaA,GAItC,YAAA+iI,aAAd,SAA2BkC,G,oGACd1+I,EAAI0+I,EAAMx+I,OAAS,E,wBAAGF,EAAI,EACrB,GAAMkE,KAAKge,cAAcg6G,aAAa,EAAGl8H,IADnB,M,OAC1BkB,EAAI,SACV,EAAuB,CAACw9I,EAAMx9I,GAAIw9I,EAAM1+I,IAAvC0+I,EAAM1+I,GAAE,KAAE0+I,EAAMx9I,GAAE,K,wBAFelB,I,+BAMlC,YAAAs8I,uBAAR,SAA+BnnI,EAAcwpI,GACzC,IAAIC,EAAmB,EACnBC,EAAmB,EACnBC,EAAwB3pI,EAAQ8mI,UAChC8C,EAAyB5pI,EAAQ4lD,WAEjC5lD,EAAQ4tD,WAAa5tD,EAAQ+mI,cAAgB,EAC7C0C,EAAmB,EACXzpI,EAAQ4tD,YAChB67E,EAAmB,GAGnBzpI,EAAQ6tD,WAAa7tD,EAAQgnI,cAAgB,EAC7C0C,EAAmB,EACX1pI,EAAQ6tD,YAChB67E,EAAmB,GAGnB1pI,EAAQ8K,QAAU9K,EAAQ8mI,WAAa,EACvC6C,EAAgB,EACR3pI,EAAQ8K,SAChB6+H,EAAgB,GAGhB3pI,EAAQ+tD,SAAW/tD,EAAQ4lD,YAAc,EACzCgkF,EAAiB,EACT5pI,EAAQ+tD,UAChB67E,EAAiB,KAIhB5pI,EAAQjV,QAAUiV,EAAQjV,OAAS,KACpCiV,EAAQjV,OAAS,IAGrB,IAAMy5D,EAAoBilF,EAAmBC,EAAmBC,EAAgBC,EAE5E5pI,EAAQjV,OAASy5D,IACjBxkD,EAAQjV,OAASy5D,GAIjBglF,IACAxpI,EAAQ+mI,aAAe0C,EACvBzpI,EAAQgnI,aAAe0C,EACvB1pI,EAAQ8mI,UAAY6C,EACpB3pI,EAAQ4lD,WAAagkF,IAGjC,EApgBA,GAAa,EAAA5kI,6B,qHC3Cb,MAII,SAAYV,EAAkBqkB,GAC1B55B,KAAKuV,SAAWA,EAChBvV,KAAK45B,KAAOA,GANP,EAAAogH,4B,6dCAb,IAEA,yE,OACI,EAAAzjF,YAAsB,GACtB,EAAAd,UAAoB,EACpB,EAAA6jF,cAAwB,EACxB,EAAAC,cAAwB,EACxB,EAAA7iF,YAAsB,EACtB,EAAA8iF,YAAsB,EACtB,EAAA7iF,YAAsB,EACtB,EAAA8iF,aAAuB,EACvB,EAAA3iF,eAAyB,EACzB,EAAAC,YAAsB,EACtB,EAAAC,eAAyB,E,EAe7B,OA1BoD,OAahD,YAAA8jF,SAAA,WACI,MAA4B,KAArB96I,KAAKu2D,aACRv2D,KAAKy1D,UAAY,GACjBz1D,KAAKw5I,YAAc,GACnBx5I,KAAKy5I,aAAe,GACpBz5I,KAAKs5I,cACLt5I,KAAKu5I,cACLv5I,KAAK02D,YACL12D,KAAK22D,YACL32D,KAAK82D,eAAiB,GACtB92D,KAAK+2D,YACL/2D,KAAKg3D,eAEjB,EA1BA,CAFA,MAEoD,SAAvC,EAAA0iF,kC,o+CCEb,aAEA,SAEA,SACA,UAEA,SACA,SACA,QAMMp5C,EACc,YAGpB,aAGI,WAAoBhjE,EAAkCka,EAC1Cv2B,GADQ,KAAAqc,cAAkC,KAAAka,iBAC1C,KAAAv2B,aA+LhB,OA5LI,YAAAyrG,WAAA,WACI1sH,KAAK+6I,YAAc,MAGjB,YAAArjH,OAAN,SAAax1B,G,6GACe,MAApBlC,KAAK+6I,YAAL,MACe,GAAM/6I,KAAKs9B,YAAYqhB,a,OACrB,OADX/uB,EAAS,SACE,GAAM5vB,KAAKw3C,eAAev5C,IACvCqiG,EAAsB1wE,I,OAE1B,IAAWhwB,KAHL+3B,EAAW,SAEXp2B,EAAqB,GACVo2B,EACTA,EAASx7B,eAAeyD,IACxB2B,EAASjF,KAAK,IAAI,EAAA29C,OAAOtiB,EAAS/3B,KAG1CI,KAAK+6I,YAAcx5I,E,iBAEvB,OAAY,MAARW,EACO,CAAP,EAAOlC,KAAK+6I,YAAYjsI,QAAO,SAAA9P,GAAK,OAAAA,EAAEkD,OAASA,MAExC,CAAP,EAAOlC,KAAK+6I,qBAId,YAAA91E,yBAAN,SAA+BqH,EAAwBr8D,G,oGACvC,SAAMjQ,KAAKs9B,YAAYoF,gBAAgBzyB,I,cAC/CyoC,OADEA,EAAM,eACL,EAAHA,EAAK3F,gBACe,GAAM/yC,KAAKihB,WAAW2kB,YAAY31B,IADnC,M,OAInB,OAHM67D,EAAc,SAGN,OAFRprD,EAASorD,EAAYtwE,KAAKuyB,MAAK,SAAA/uB,GAAK,OAAAA,EAAEiR,iBAAmBA,MAGpD,CAAP,EAAO,MAGJ,CAAP,EAAO,IAAI,EAAAgqC,OAAO,IAAI,EAAA9E,WAAWz0B,K,OAGpB,SAAM1gB,KAAK03B,OAAO40C,I,OACnC,MAAO,CAAP,EADiB,SACDv+C,MAAK,SAAA/uB,GAAK,OAAAA,EAAEiR,iBAAmBA,cAG7C,YAAAjF,QAAN,SAAc2sB,G,gGACK,SAAM33B,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAsB1wE,EAAQ+H,I,cAA7D,SACA33B,KAAK+6I,YAAc,K,YAGjB,YAAA9yD,MAAN,SAAYr4D,G,0FACR,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAAsB1wE,I,cAAvD,SACA5vB,KAAK+6I,YAAc,K,YAGjB,YAAA3lG,+BAAN,SAAqCzd,G,uGAC7ByhH,EAA+C,KAEnC,MAAZzhH,EAAA,MACW,GAAM33B,KAAK03B,OAAO,EAAApgB,WAAW4U,iB,cAAxCyL,EAAW,S,aAEXA,EAAWA,EAAS7oB,QAAO,SAAA9P,GAAK,OAAAA,EAAEkD,OAAS,EAAAoV,WAAW4U,kB,iBAG1D,OAAgB,MAAZyL,GAAwC,IAApBA,EAAS37B,QAIjC27B,EAAS/pB,SAAQ,SAAA+rI,GACRA,EAAc55H,SAAiC,MAAtB45H,EAAcn+I,OAIrB,MAAnB49I,IACAA,EAAkB,IAAI,EAAAtjF,6BAGc,MAApC6jF,EAAcn+I,KAAKmH,eAChBg3I,EAAcn+I,KAAKmH,cAAgBy2I,EAAgBz2I,gBACtDy2I,EAAgBz2I,cAAgBg3I,EAAcn+I,KAAKmH,eAGnB,MAAhCg3I,EAAcn+I,KAAKi6D,WAChBkkF,EAAcn+I,KAAKi6D,UAAY2jF,EAAgB3jF,YAClD2jF,EAAgB3jF,UAAYkkF,EAAcn+I,KAAKi6D,WAG/CkkF,EAAcn+I,KAAKk6D,eACnB0jF,EAAgB1jF,cAAe,GAG/BikF,EAAcn+I,KAAKm6D,eACnByjF,EAAgBzjF,cAAe,GAG/BgkF,EAAcn+I,KAAKo6D,iBACnBwjF,EAAgBxjF,gBAAiB,GAGjC+jF,EAAcn+I,KAAKq6D,iBACnBujF,EAAgBvjF,gBAAiB,OAnC9B,CAAP,EAAOujF,WA0Cf,YAAA9iG,uBAAA,SAAuBF,EAA0B8yB,EAC7CzmE,GACA,OAA6B,MAAzBA,KAIAA,EAAsBE,cAAgB,GAAKF,EAAsBE,cAAgByzC,OAIjF3zC,EAAsBgzD,UAAY,GAAKhzD,EAAsBgzD,UAAYyT,EAAYltE,YAIrFyG,EAAsBizD,cAAgBwT,EAAY8xE,sBAAwB9xE,OAI1EzmE,EAAsBkzD,cAAgBuT,EAAY+xE,sBAAwB/xE,OAI1EzmE,EAAsBmzD,iBAAoB,QAAQvpD,KAAK68D,OAIvDzmE,EAAsBozD,iBAAoB,eAAexpD,KAAK68D,SAOtE,YAAAnO,8BAAA,SAA8BpjC,EAAoB5c,G,UACxCmgI,EAA6B,IAAI,EAAAC,2BAEvC,GAAgB,MAAZxjH,GAA6B,MAAT5c,EACpB,MAAO,CAACmgI,GAA4B,GAGxC,IAAMx6H,EAASiX,EAAS5J,MAAK,SAAA/uB,GAAK,OAAAA,EAAEiR,iBAAmB8K,GAAS/b,EAAEkD,OAAS,EAAAoV,WAAWkhC,eAAiBx5C,EAAE+gB,WAGzG,OAFAm7H,EAA2BviG,kBAAmD,QAAlC,EAAe,QAAf,EAAGj4B,aAAM,EAANA,EAAQllB,YAAI,eAAEm9C,yBAAiB,SAEvE,CAACuiG,EAA2C,QAAjB,EAAEx6H,aAAM,EAANA,EAAQX,eAAO,WAGvD,YAAA+6C,qBAAA,SAAqBsgF,GACjB,OAAwB,MAApBA,GAAqD,MAAzBA,EAAiB5/I,KACtC,KAGU4/I,EAAiB5/I,KAAKuM,KAAI,SAAA/I,GAAK,WAAI,EAAAm2C,WAAWn2C,MAC/C+I,KAAI,SAAA/I,GAAK,WAAI,EAAAi7C,OAAOj7C,OAGtC,YAAAkjC,oBAAN,SAA0BoqC,EAAwB+uE,G,6GAC7B,SAAMr7I,KAAK03B,OAAO40C,I,OACb,OADhB30C,EAAW,SACK,GAAM33B,KAAKs9B,YAAY8a,uB,OAY7C,OAZMG,EAAgB,SAIlB+iG,EADgB,MAAhBD,EACmB1jH,EAAS7oB,QAAO,SAAA9P,GAAK,OAAAA,EAAE+gB,SAAWs7H,EAAar8I,MAG/C24B,EAAS7oB,QAAO,SAAA9P,GAAK,OAAAA,EAAE+gB,WAGxCw7H,EAAY,IAAIxtC,IAAIutC,EAAiBvzI,KAAI,SAAA/I,GAAK,OAAAA,EAAEiR,mBAE/C,CAAP,EAAOsoC,EAAczpB,MAAK,SAAAhxB,GACtB,OAAAA,EAAEiiB,SACFjiB,EAAE6nB,QAAU,EAAA4L,2BAA2Bq3C,UACvC9qE,EAAE8zC,cACD,EAAK4pG,sBAAsB19I,EAAGwuE,IAC/BivE,EAAU31I,IAAI9H,EAAE8B,gBAGhB,YAAA47I,sBAAR,SAA8B37H,EAA4BysD,GACtD,OAAIA,IAAe,EAAAh1D,WAAW0gD,oBACnBn4C,EAAa3d,OAAS,EAAA26B,qBAAqBwW,MAG/CxzB,EAAa47H,sBAE5B,EAnMA,GAAa,EAAAh4I,iB,ydCvBb,IAEA,yE,OACI,EAAAk1C,mBAA6B,E,EACjC,OAFgD,OAEhD,EAFA,CAFA,MAEgD,SAAnC,EAAAwiG,8B,o+CCFb,cASA,QACA,SACA,SAGA,aAMI,WAAoB5vG,EAAsCtqC,EAC9CvB,GADQ,KAAA6rC,gBAAsC,KAAAtqC,aAC9C,KAAAvB,cANZ,KAAA+Z,gBAA2B,KACnB,KAAAiiI,UAAW,EACX,KAAAz5E,MAAoB,KACpB,KAAA05E,oBAAsB,GAI8B,IAApD,CAAC,QAAS,SAAS1uI,QAAQvN,EAAYulF,UACvCjlF,KAAK27I,oBAAsB,GAwPvC,OApPI,YAAAz+C,WAAA,WACIl9F,KAAKyZ,gBAAkB,KACvBzZ,KAAKiiE,MAAQ,MAGjB,YAAAD,aAAA,SAAaruD,GAGT,QAF+B,MAATA,GAAgC,MAAd3T,KAAKiiE,OAAiBtuD,EAAM3X,OAASgE,KAAK27I,qBAC/D,MAAd37I,KAAKiiE,OAAiBtuD,EAAM3X,OAASgE,KAAK27I,qBAA8C,IAAvBhoI,EAAM1G,QAAQ,OAIlF,YAAAyjD,aAAN,SAAmBj3C,EAA0BrE,G,yGACzC,OAAIpV,KAAK07I,SACL,KAGJ17I,KAAKiB,WAAWg1F,KAAK,mBACrBj2F,KAAK07I,UAAW,EAChB17I,KAAKyZ,gBAAkBA,EACvBzZ,KAAKiiE,MAAQ,MACP25E,EAAU,IAAIC,EAAKC,SACjBlyF,IAAI,MACZgyF,EAAQhnI,MAAM,UAAW,CAAEmnI,MAAO,IAAKC,UAAW,SAACt+I,GAAkB,OAAAA,EAAEkC,GAAGkK,OAAO,EAAG,MACpF8xI,EAAQhnI,MAAM,OAAQ,CAAEmnI,MAAO,KAC/BH,EAAQhnI,MAAM,WAAY,CACtBmnI,MAAO,EACPC,UAAW,SAACt+I,GACR,OAAkB,MAAdA,EAAE+pB,UAAoB/pB,EAAEwE,OAAS,EAAAoS,WAAW2K,KACrCvhB,EAAE+pB,SAASzc,QAAQ,MAAO,IAE9BtN,EAAE+pB,YAGjBm0H,EAAQhnI,MAAM,SACdgnI,EAAQhnI,MAAM,iBAAkB,CAC5BonI,UAAW,SAACt+I,GAAkB,OAAAA,EAAEwE,OAAS,EAAAoS,WAAWC,OAAoB,MAAX7W,EAAE0W,MAAgB1W,EAAE0W,MAAMkB,SAAW,QAEtGsmI,EAAQhnI,MAAM,aAAc,CAAEmnI,MAAO,EAAGC,UAAW,SAACt+I,GAAkB,SAAKu+I,aAAav+I,MACxFk+I,EAAQhnI,MAAM,SAAU,CAAEonI,UAAW,SAACt+I,GAAkB,SAAKw+I,eAAex+I,GAAG,MAC/Ek+I,EAAQhnI,MAAM,gBAAiB,CAAEonI,UAAW,SAACt+I,GAAkB,SAAKw+I,eAAex+I,GAAG,MACtFk+I,EAAQhnI,MAAM,cAAe,CAAEonI,UAAW,SAACt+I,GAAkB,SAAKy+I,oBAAoBz+I,GAAG,MACzFk+I,EAAQhnI,MAAM,qBACV,CAAEonI,UAAW,SAACt+I,GAAkB,SAAKy+I,oBAAoBz+I,GAAG,MAChEk+I,EAAQhnI,MAAM,iBAAkB,CAAEonI,UAAW,SAACt+I,GAAkB,OAAAA,EAAEuS,mBACxD,EAAAmF,GAAA,MAAW,GAAMpV,KAAKurC,cAAcmf,oB,SAAzB,S,wBAArBt1C,EAAU,GACFxH,SAAQ,SAAAlQ,GAAK,OAAAk+I,EAAQ90I,IAAIpJ,MACjCsC,KAAKiiE,MAAQ25E,EAAQtlD,QAErBt2F,KAAK07I,UAAW,EAEhB17I,KAAKiB,WAAWk1F,QAAQ,mB,YAGtB,YAAAjmD,cAAN,SAAoBv8B,EAChB7E,EACAsG,G,YADA,IAAAtG,MAAA,WACA,IAAAsG,MAAA,M,wGAEM43C,EAAwB,GACjB,MAATr5C,IACAA,EAAQA,EAAM7G,OAAOvJ,eAEX,KAAVoQ,IACAA,EAAQ,MAGG,MAAXyB,EAAA,MACU,GAAMpV,KAAKurC,cAAcmf,mB,OAAnCt1C,EAAU,S,iBASd,OANc,MAAVtG,GAAkBtH,MAAM40I,QAAQttI,IAAWA,EAAO9S,OAAS,EAC3DoZ,EAAUA,EAAQtG,QAAO,SAAApR,GAAK,OAAAoR,EAAOo8D,OAAM,SAAA53D,GAAK,OAAK,MAALA,GAAaA,EAAE5V,SAC9C,MAAVoR,IACPsG,EAAUA,EAAQtG,OAAOA,IAGxB9O,KAAKgiE,aAAaruD,GAInB3T,KAAK07I,SACL,GAAM,IAAIvgI,SAAQ,SAAAjd,GAAK,OAAA6lB,WAAW7lB,EAAG,SADrC,MAHO,CAAP,EAAOkX,G,cAIP,SACIpV,KAAK07I,SACL,GAAM,IAAIvgI,SAAQ,SAAAjd,GAAK,OAAA6lB,WAAW7lB,EAAG,SADrC,M,OACA,S,iBAKR,GAAa,OADP+jE,EAAQjiE,KAAKq8I,qBAGf,MAAO,CAAP,EAAOr8I,KAAKs8I,mBAAmBlnI,EAASzB,IAQ5C,GALM4oI,EAAa,IAAIt4I,IACvBmR,EAAQxH,SAAQ,SAAAlQ,GAAK,OAAA6+I,EAAW72I,IAAIhI,EAAEkC,GAAIlC,MAEtC8+I,EAAqC,KACV,MAAT7oI,GAAiBA,EAAM3X,OAAS,GAA4B,IAAvB2X,EAAM1G,QAAQ,KAErE,IACIuvI,EAAgBv6E,EAAMv0D,OAAOiG,EAAM7J,OAAO,GAAGgD,QAC/C,MAAOtL,GACLxB,KAAKiB,WAAWW,MAAMJ,QAIpB,EAASq6I,EAAKY,MAAMC,SAASC,QAAUd,EAAKY,MAAMC,SAASE,SACjEJ,EAAgBv6E,EAAMtuD,OAAM,SAAAkpI,GACxBhB,EAAKiB,UAAUnpI,GAAO/F,SAAQ,SAAAkY,GAC1B,IAAMxnB,EAAIwnB,EAAMvb,WAChBsyI,EAAEE,KAAKz+I,EAAG,CAAE6V,OAAQ,CAAC,QAASuoI,SAAU,IACxCG,EAAEE,KAAKz+I,EAAG,CAAE6V,OAAQ,CAAC,YAAauoI,SAAU,IAC5CG,EAAEE,KAAKz+I,EAAG,CAAE6V,OAAQ,CAAC,cAAeuoI,SAAU,IAC9CG,EAAEE,KAAKz+I,EAAG,UAYtB,OAPqB,MAAjBk+I,GACAA,EAAc5uI,SAAQ,SAAA1P,GACdq+I,EAAW32I,IAAI1H,EAAE0rD,MACjBoD,EAAQ1wD,KAAKigJ,EAAWt+I,IAAIC,EAAE0rD,SAInC,CAAP,EAAOoD,WAGX,YAAAsvF,mBAAA,SAAmBlnI,EAAuBzB,EAAeg8B,GAErD,YAFqD,IAAAA,OAAA,GACrDh8B,EAAQA,EAAM7G,OAAOvJ,cACd6R,EAAQtG,QAAO,SAAApR,GAClB,OAAIiyC,IAAYjyC,EAAE+yC,YAGJ,MAAV/yC,EAAEE,MAAgBF,EAAEE,KAAK2F,cAAc0J,QAAQ0G,IAAU,OAGzDA,EAAM3X,QAAU,GAAK0B,EAAEkC,GAAGmN,WAAW4G,MAGvB,MAAdjW,EAAE+pB,UAAoB/pB,EAAE+pB,SAASlkB,cAAc0J,QAAQ0G,IAAU,MAGjEjW,EAAE0W,OAAwB,MAAf1W,EAAE0W,MAAMvC,KAAenU,EAAE0W,MAAMvC,IAAItO,cAAc0J,QAAQ0G,IAAU,UAO1F,YAAAu7F,YAAA,SAAYxtB,EAAmB/tE,GAG3B,OAFAA,EAAQA,EAAM7G,OAAOkuI,oBAEdt5D,EAAM5yE,QAAO,SAAA1R,G,UAChB,OAAc,MAAVA,EAAEQ,MAAgBR,EAAEQ,KAAK2F,cAAc0J,QAAQ0G,IAAU,OAGzDA,EAAM3X,QAAU,IAAMoB,EAAEwC,GAAGmN,WAAW4G,IAAUvW,EAAEy3D,SAASmmF,oBAAoBjuI,WAAW4G,IAAyB,OAAR,QAAN,EAAAvW,EAAE4wD,YAAI,eAAEpuD,KAAcxC,EAAE4wD,KAAKpuD,GAAGmN,WAAW4G,OAGrI,MAAXvW,EAAE8W,OAAiB9W,EAAE8W,MAAM3Q,cAAc0J,QAAQ0G,IAAU,IAG3C,OAAV,QAAN,EAAAvW,EAAEg0B,YAAI,eAAEA,OAAgBh0B,EAAEg0B,KAAKA,KAAK7tB,cAAc0J,QAAQ0G,IAAU,IAGhD,OAAd,QAAN,EAAAvW,EAAE4wD,YAAI,eAAEzoB,WAAoBnoC,EAAE4wD,KAAKzoB,SAAShiC,cAAc0J,QAAQ0G,IAAU,QAAhF,UAMR,YAAA0oI,kBAAA,WACI,OAAOr8I,KAAKiiE,OAGR,YAAAi6E,eAAR,SAAuBx+I,EAAes/I,GAClC,IAAKt/I,EAAEmvH,UACH,OAAO,KAEX,IAAI14G,EAAmB,GAUvB,OATAzW,EAAEyW,OAAOvG,SAAQ,SAAA0F,GACC,MAAVA,EAAE1V,MACFuW,EAAO7X,KAAKgX,EAAE1V,MAEd0V,EAAEpR,OAAS,EAAAwS,UAAUC,MAAmB,MAAXrB,EAAEjV,OAC/B8V,EAAO7X,KAAKgX,EAAEjV,UAIA,KADtB8V,EAASA,EAAOrF,QAAO,SAAAwE,GAAK,MAAa,KAAbA,EAAExG,WACnB9Q,OACA,KAEJghJ,EAAS7oI,EAAO3I,KAAK,KAAO2I,GAG/B,YAAAgoI,oBAAR,SAA4Bz+I,EAAes/I,GACvC,IAAKt/I,EAAEgqB,eACH,OAAO,KAEX,IAAIX,EAAwB,GAW5B,OAVArpB,EAAEqpB,YAAYnZ,SAAQ,SAAAK,GACT,MAALA,GAA2B,MAAdA,EAAEs3B,WACXy3G,GAAU/uI,EAAEs3B,SAASt4B,QAAQ,MAAQ,EACrC8Z,EAAYzqB,KAAK2R,EAAEs3B,SAASz7B,OAAO,EAAGmE,EAAEs3B,SAASvU,YAAY,OAE7DjK,EAAYzqB,KAAK2R,EAAEs3B,cAKJ,KAD3Bxe,EAAcA,EAAYjY,QAAO,SAAAwE,GAAK,MAAa,KAAbA,EAAExG,WACxB9Q,OACL,KAEJghJ,EAASj2H,EAAYvb,KAAK,KAAOub,GAGpC,YAAAk1H,aAAR,SAAqBv+I,GACjB,GAAIA,EAAEwE,OAAS,EAAAoS,WAAWC,OAAoB,MAAX7W,EAAE0W,QAAkB1W,EAAE0W,MAAMya,QAC3D,OAAO,KAEX,IAAMrZ,EAAiB,GAsBvB,OArBA9X,EAAE0W,MAAMoB,KAAK5H,SAAQ,SAAAqE,GACjB,GAAa,MAATA,EAAEJ,KAAyB,KAAVI,EAAEJ,IAGvB,GAAkB,MAAdI,EAAEvF,SAAN,CAIA,IAAImF,EAAMI,EAAEJ,IACZ,GAAII,EAAEvC,QAAU,EAAA2nC,aAAaC,kBAAmB,CAC5C,IAAM2lG,EAAgBprI,EAAI5E,QAAQ,OAC9BgwI,GAAiB,IACjBprI,EAAMA,EAAI/H,OAAOmzI,EAAgB,IAErC,IAAMC,EAAarrI,EAAInE,OAAO,UAC1BwvI,GAAc,IACdrrI,EAAMA,EAAIK,UAAU,EAAGgrI,IAG/B1nI,EAAKlZ,KAAKuV,QAdN2D,EAAKlZ,KAAK2V,EAAEvF,aAgBb8I,EAAKxZ,OAAS,EAAIwZ,EAAO,MAExC,EAjQA,GAAa,EAAAkE,iB,g/CCdb,aAEA,SAEA,SAKA,UACA,SACA,SAIA,SAaA,QAEM4mF,EACW,SAGjB,aAGI,WAAoBtiF,EAAsCsf,EAC9Crc,EAAgC41F,EAChCr/D,EAAwC93C,EACxC86C,GAHQ,KAAAx8B,gBAAsC,KAAAsf,cAC9C,KAAArc,aAAgC,KAAA41F,oBAChC,KAAAr/D,iBAAwC,KAAA93C,cACxC,KAAA86C,wBAoPhB,OAlPI,YAAAkyE,WAAA,WACI1sH,KAAKm9I,mBAAqB,MAGxB,YAAA57G,QAAN,SAAc1F,EAAiBmyB,EAA0Bz4C,EACrD5W,G,6HACIy+I,EAA2B,MACzBvyG,EAAO,IAAI,EAAAwyG,MACZz9I,GAAKi8B,EAAMj8B,GAChBirC,EAAK3oC,KAAO25B,EAAM35B,KAClB2oC,EAAKxL,SAAWxD,EAAMwD,SACtBwL,EAAKqqB,UAAYr5B,EAAMq5B,UACvBrqB,EAAKiqB,eAAiBj5B,EAAMi5B,eACX,MAAbj5B,EAAMl9B,IAAN,OACA,EAAAk9B,EAAY,GAAM77B,KAAKw6C,sBAAsB8E,YAAY,M,OACvC,OADlB,EAAM3gD,IAAM,SACZ,EAAAk9B,EAAkB,GAAM77B,KAAKge,cAAcggE,YAAYniD,EAAMl9B,M,OAA7D,EAAMgjF,UAAY,S,wBAEN,MAAZpsE,EAAA,MACqB,GAAMvV,KAAKw6C,sBAAsBkjC,OAAOnoE,EAAUsmB,EAAMl9B,IAAK,SAAU,M,OAAtFg/E,EAAe,SACrB9yC,EAAKt1B,SAAW,EAAAhN,MAAM8B,gBAAgBszE,G,iBAE/B,OAAX,EAAA9yC,EAAW,GAAM7qC,KAAKge,cAAcujB,QAAQ1F,EAAMl9B,IAAKA,I,OAC3C,OADZ,EAAKA,IAAM,SACX,EAAAksC,EAAY,GAAM7qC,KAAKge,cAAcujB,QAAQ1F,EAAMj+B,KAAMi+B,EAAM8lD,Y,OAClD,OADb,EAAK/jF,KAAO,SACZ,EAAAitC,EAAa,GAAM7qC,KAAKge,cAAcujB,QAAQ1F,EAAM3nB,MAAO2nB,EAAM8lD,Y,cAAjE,EAAKztE,MAAQ,SACT22B,EAAK3oC,OAAS,EAAAouB,SAAS3b,KAAvB,QACAk2B,EAAKzZ,KAAO,IAAI,EAAA2hC,SAChB,EAAAloB,EAAKzZ,KAAY,GAAMpxB,KAAKge,cAAcujB,QAAQ1F,EAAMzK,KAAKA,KAAMyK,EAAM8lD,a,cAAzE,EAAUvwD,KAAO,SACjByZ,EAAKzZ,KAAK4mB,OAASnc,EAAMzK,KAAK4mB,O,sBACvBnN,EAAK3oC,OAAS,EAAAouB,SAAS2yD,KAAvB,QACPp4C,EAAKmjB,KAAO,IAAI,EAAA8E,SACJ,MAAR9E,EAAA,OACIA,aAAgBsvF,YACK,GAAMt9I,KAAKu9I,gBAAgB1hH,EAAMmyB,KAAKzoB,SAAUyoB,EAAMnyB,EAAM8lD,YADjF,Q,eACM,EAAe,SAAd,OAAMnmF,EAAI,KACjBqvC,EAAKmjB,KAAKzoB,SAAW,EACrB63G,EAAW5hJ,E,eAEA,SAAMwE,KAAKw9I,UAAU3yG,EAAMmjB,EAAMnyB,EAAM8lD,Y,QAAlDy7D,EAAW,S,mBAKvB,MAAO,CAAC,EAAD,CAACvyG,EAAMuyG,YAGZ,YAAAn/I,IAAN,SAAU2B,G,kGACS,SAAMI,KAAKs9B,YAAYqhB,a,OACxB,OADR/uB,EAAS,SACD,GAAM5vB,KAAKw3C,eAAev5C,IACpCqiG,EAAmB1wE,I,OACvB,OAAa,OAFP8xD,EAAQ,WAEQA,EAAMvlF,eAAeyD,GAIpC,CAAP,EAAO,IAAI,EAAAy9I,KAAK37D,EAAM9hF,KAHX,CAAP,EAAO,cAMT,YAAA83B,OAAN,W,sGACmB,SAAM13B,KAAKs9B,YAAYqhB,a,OACxB,OADR/uB,EAAS,SACD,GAAM5vB,KAAKw3C,eAAev5C,IACpCqiG,EAAmB1wE,I,OAEvB,IAAWhwB,KAHL8hF,EAAQ,SAERngF,EAAmB,GACRmgF,EACTA,EAAMvlF,eAAeyD,IACrB2B,EAASjF,KAAK,IAAI,EAAA+gJ,KAAK37D,EAAM9hF,KAGrC,MAAO,CAAP,EAAO2B,WAGL,YAAAmpD,gBAAN,W,kGACI,OAA+B,MAA3B1qD,KAAKm9I,mBACE,CAAP,EAAOn9I,KAAKm9I,oBAGD,GAAMn9I,KAAKge,cAAckwG,U,OACxC,IADe,SAEX,MAAM,IAAI/qH,MAAM,WAKN,OAFRs6I,EAAuB,GACvBziI,EAA2B,GACnB,GAAMhb,KAAK03B,U,OAKzB,OALc,SACR9pB,SAAQ,SAAAi9B,GACV7vB,EAAS1e,KAAKuuC,EAAKvvB,UAAUja,MAAK,SAAAiS,GAAK,OAAAmqI,EAASnhJ,KAAKgX,UAGzD,GAAM6H,QAAQK,IAAIR,I,OAIlB,OAJA,SACAyiI,EAASnlG,KAAK,EAAA/vC,MAAMwF,gBAAgB/N,KAAKN,YAAa,SAEtDM,KAAKm9I,mBAAqBM,EACnB,CAAP,EAAOz9I,KAAKm9I,4BAGV,YAAAhyC,eAAN,SAAqB6E,G,uHACXxvF,EAAU,IAAI,EAAA0iE,YAAY8sB,EAAS,GAAe,QAAb,EAAEA,EAAS,UAAE,eAAE1lG,OAAOG,YAE3C,MAAlBulG,EAAS,GAAGpwG,GAAZ,OACIowG,EAAS,GAAG9tG,OAAS,EAAAouB,SAAS3b,KAA9B,MACW,GAAM3U,KAAKihB,WAAW49F,SAASr+F,I,cAA1Cjf,EAAW,S,aAGoB,O,sBAAA,GAAMvB,KAAKihB,WAAW69F,iBAAiBt+F,I,OAGlE,OAHMowG,EAAqB,SAC3BrvH,EAAWqvH,EAAmBhzC,aAE9B,GAAM59E,KAAK62G,kBAAkB8mB,eAAe/M,EAAoB5gB,EAAS,GAAGhiD,KAAKzoB,SAAUyqE,EAAS,K,cAApG,S,0CAEiB,EAAAvuG,eAAqD,MAAnC,EAAoBmvB,WACxC,GAAM5wB,KAAK09I,2BAA2B1tC,EAAUxvF,IAD3D,M,cACAjf,EAAW,S,aACR,MAAI,aAAa,EAAAE,cACd,IAAI0B,MAAO,EAAoBtB,oBAE/B,E,iCAIlBmuG,EAAS,GAAGpwG,GAAK2B,EAAS3B,GAC1BowG,EAAS,GAAGn7C,SAAWtzD,EAASszD,S,eAErB,SAAM70D,KAAKihB,WAAWm+F,QAAQpP,EAAS,GAAGpwG,GAAI4gB,I,QAAzDjf,EAAW,S,mBAGA,SAAMvB,KAAKs9B,YAAYqhB,a,QAEtC,OAFM/uB,EAAS,SACTp0B,EAAO,IAAI,EAAAo+F,SAASr4F,EAAUquB,GACpC,GAAM5vB,KAAK2vH,OAAOn0H,I,eAAlB,S,YAOE,YAAAkiJ,2BAAN,SAAiC1tC,EAAkCxvF,G,kGAEzD8jB,EAAK,IAAIC,SACf,IACUs2E,EAAO,IAAII,KAAK,CAACjL,EAAS,GAAG1lG,QAAS,CAAEpI,KAAM,6BACpDoiC,EAAGE,OAAO,QAASytC,KAAKC,UAAU1xD,IAClC8jB,EAAGE,OAAO,OAAQq2E,EAAM7K,EAAS,GAAGhiD,KAAKzoB,SAAS3qB,iBACpD,MAAOpZ,GACL,IAAI,EAAA+G,MAAME,QAAW,EAAAF,MAAMK,UAOvB,MAAMpH,EANN8iC,EAAGE,OAAO,QAASytC,KAAKC,UAAU1xD,IAClC8jB,EAAGE,OAAO,OAAQn7B,EAAO5B,KAAKuoG,EAAS,GAAG1lG,QAAgB,CACtDymH,SAAU/gB,EAAS,GAAGhiD,KAAKzoB,SAAS3qB,gBACpCo2G,YAAa,6BAMlB,SAAMhxH,KAAKihB,WAAWk+F,mBAAmB76E,I,OAAhD,MAAO,CAAP,EAAO,kBAGL,YAAAqrF,OAAN,SAAa9kF,G,oGACM,SAAM7qC,KAAKs9B,YAAYqhB,a,OAC1B,OADN/uB,EAAS,SACH,GAAM5vB,KAAKw3C,eAAev5C,IAClCqiG,EAAmB1wE,I,OAcvB,OAba,OAFT8xD,EAAQ,YAGRA,EAAQ,IAGR72C,aAAgB,EAAA+uD,SAEhBlY,GADMtkF,EAAIytC,GACFjrC,IAAMxC,EAEbytC,EAAoBj9B,SAAQ,SAAAxQ,GACzBskF,EAAMtkF,EAAEwC,IAAMxC,KAItB,GAAM4C,KAAKw3C,eAAe0iB,KAAKomC,EAAmB1wE,EAAQ8xD,I,cAA1D,SACA1hF,KAAKm9I,mBAAqB,K,YAGxB,YAAAnyI,QAAN,SAAc02E,G,gGACK,SAAM1hF,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAmB1wE,EAAQ8xD,I,cAA1D,SACA1hF,KAAKm9I,mBAAqB,K,YAGxB,YAAAl1D,MAAN,SAAYr4D,G,0FACR,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAAmB1wE,I,cAApD,SACA5vB,KAAKm9I,mBAAqB,K,YAGxB,YAAA7sG,OAAN,SAAa1wC,G,kGACM,SAAMI,KAAKs9B,YAAYqhB,a,OACxB,OADR/uB,EAAS,SACD,GAAM5vB,KAAKw3C,eAAev5C,IACpCqiG,EAAmB1wE,I,OACvB,GAAa,OAFP8xD,EAAQ,UAGV,UAGJ,GAAkB,iBAAP9hF,EAAiB,CACxB,GAAiB,MAAb8hF,EAAM9hF,GACN,iBAEG8hF,EAAM9hF,QAEZA,EAAgBgO,SAAQ,SAAA9R,UACd4lF,EAAM5lF,MAIrB,SAAMkE,KAAKw3C,eAAe0iB,KAAKomC,EAAmB1wE,EAAQ8xD,I,cAA1D,SACA1hF,KAAKm9I,mBAAqB,K,YAGxB,YAAA5rG,iBAAN,SAAuB3xC,G,0FACnB,SAAMI,KAAKihB,WAAWq+F,WAAW1/G,I,OACjC,OADA,SACA,GAAMI,KAAKswC,OAAO1wC,I,cAAlB,S,YAGE,YAAAivG,yBAAN,SAA+BjvG,G,oGACV,SAAMI,KAAKihB,WAAWo+F,sBAAsBz/G,I,OAC9C,OADT2B,EAAW,SACF,GAAMvB,KAAKs9B,YAAYqhB,a,OAEtC,OAFM/uB,EAAS,SACTp0B,EAAO,IAAI,EAAAo+F,SAASr4F,EAAUquB,GACpC,GAAM5vB,KAAK2vH,OAAOn0H,I,cAAlB,S,YAGI,YAAAgiJ,UAAR,SAAkB3yG,EAAYmjB,EAAYrvD,GAA1C,WACI,OAAO,IAAIwc,SAAQ,SAACC,EAAS6J,GACzB,IAAMgpC,EAAS,IAAIC,WACnBD,EAAOkiE,kBAAkBniE,GACzBC,EAAOvrC,OAAS,SAAM0rC,GAAG,qC,8DAEI,O,sBAAA,GAAMpuD,KAAKu9I,gBAAgBvvF,EAAKpwD,KAAMwwD,EAAI3/C,OAAO5R,OAAuB8B,I,cAAvF,EAAe,SAAd,OAAMnD,EAAI,KACjBqvC,EAAKmjB,KAAKzoB,SAAW,EACrBnqB,EAAQ5f,G,+BAERypB,EAAO,G,+BAGfgpC,EAAOM,QAAU,SAAAH,GACbnpC,EAAO,4BAKL,YAAAs4H,gBAAd,SAA8Bh4G,EAAkB/pC,EAC5CmD,G,kGACoB,SAAMqB,KAAKge,cAAcujB,QAAQgE,EAAU5mC,I,OAC3C,OADd2xH,EAAc,SACA,GAAMtwH,KAAKge,cAAcwyG,eAAeh1H,EAAMmD,I,OAClE,OADMg/I,EAAc,SACb,CAAC,EAAD,CAACrtB,EAAaqtB,YAE7B,EA1PA,GAAa,EAAAh+H,gB,8HChCb,MAOI,SAAYnkB,GACI,MAARA,IAIJwE,KAAKJ,GAAKpE,EAAKoE,GACfI,KAAKulC,SAAW/pC,EAAK+pC,SACrBvlC,KAAKrB,IAAMnD,EAAKmD,IAChBqB,KAAK2kB,KAAOnpB,EAAKmpB,KACjB3kB,KAAK83C,SAAWt8C,EAAKs8C,WAhBhB,EAAA6hD,gB,oGCAb,MAII,SAAYn+F,GACI,MAARA,IAIJwE,KAAKoxB,KAAO51B,EAAK41B,KACjBpxB,KAAKg4C,OAASx8C,EAAKw8C,SAVd,EAAA0hD,gB,8zDCAb,aAEA,QAIA,SAEA,QAEA,SACA,SAEA,cAmBI,WAAY9qF,EAAgB0L,QAAA,IAAAA,OAAA,GAA5B,MACI,cAAO,KACP,GAAW,MAAP1L,E,SAuBJ,OAnBA,EAAKwL,iBAAiB,EAAMxL,EAAK,CAC7BhP,GAAI,KACJi1D,SAAU,KACVjlC,OAAQ,KACRhyB,KAAM,KACNsW,MAAO,KACPvV,IAAK,MACN2b,EAAkB,CAAC,KAAM,WAAY,WAExC,EAAKpY,KAAO0M,EAAI1M,KAChB,EAAK4yD,eAAiBlmD,EAAIkmD,eAC1B,EAAKC,YAAcnmD,EAAImmD,YACvB,EAAKx/C,SAAW3G,EAAI2G,SACpB,EAAK8pB,SAAWzwB,EAAIywB,SACpB,EAAKnY,aAAmC,MAApBtY,EAAIsY,aAAuB,IAAIwK,KAAK9iB,EAAIsY,cAAgB,KAC5E,EAAK+tC,aAAmC,MAApBrmD,EAAIqmD,aAAuB,IAAIvjC,KAAK9iB,EAAIqmD,cAAgB,KAC5E,EAAKD,eAAuC,MAAtBpmD,EAAIomD,eAAyB,IAAItjC,KAAK9iB,EAAIomD,gBAAkB,KAClF,EAAKE,UAAYtmD,EAAIsmD,UAEb,EAAKhzD,MACT,KAAK,EAAAouB,SAAS3b,KACV,EAAKyc,KAAO,IAAI,EAAA2hC,SAASnkD,EAAIwiB,KAAM9W,GACnC,MACJ,KAAK,EAAAgW,SAAS2yD,KACV,EAAKj1B,KAAO,IAAI,EAAA8E,SAASlkD,EAAIo/C,KAAM1zC,G,SA2CnD,OA5F0B,OAwDhB,YAAAgB,QAAN,W,4GAKI,GAJMugB,EAAQ,IAAI,EAAAgjD,SAAS7+E,QAGrB8d,EAAoB,EAAAvV,MAAMW,OAAe6U,2BAI3C,MAAM,IAAI5a,MAAM,qDAFhB6a,EAAgBF,EAAiBG,mB,iBAMrB,O,sBAAZ,EAAA4d,EAAY,GAAM7d,EAAcurD,eAAevpE,KAAKrB,IAAK,O,OACvC,OADlB,EAAMA,IAAM,SACZ,EAAAk9B,EAAkB,GAAM7d,EAAcggE,YAAYniD,EAAMl9B,M,cAAxD,EAAMgjF,UAAY,S,0CAKtB,SAAM3hF,KAAK6a,WAAWghB,EAAO,CACzBj+B,KAAM,KACNsW,MAAO,MACR,KAAM2nB,EAAM8lD,Y,cAHf,SAKQ3hF,KAAKkC,M,KACJ,EAAAouB,SAAS2yD,KAAT,Y,KAGA,EAAA3yD,SAAS3b,KAAT,Y,oBAFY,OAAb,EAAAknB,EAAa,GAAM77B,KAAKguD,KAAK1yC,QAAQugB,EAAM8lD,Y,OAC3C,OADA,EAAM3zB,KAAO,SACb,O,OAEa,OAAb,EAAAnyB,EAAa,GAAM77B,KAAKoxB,KAAK9V,QAAQugB,EAAM8lD,Y,QAC3C,OADA,EAAMvwD,KAAO,SACb,O,QAEA,a,QAGR,MAAO,CAAP,EAAOyK,WAEf,EA5FA,CAA0B,WAAb,EAAAwhH,Q,s+CCXb,IAAM/8C,EACc,YADdA,EAEiB,oBAGvB,aAGI,WAAoBhjE,EAAkCka,GAAlC,KAAAla,cAAkC,KAAAka,iBAiD1D,OA9CI,YAAAk1E,WAAA,WACI1sH,KAAK49I,cAAgB,MAGzB,YAAAnvB,qBAAA,WACI,OAAOzuH,KAAK69I,eAAev9C,IAGzB,YAAAw9C,qBAAN,SAA2Bj6D,G,0FACvB,SAAM7jF,KAAK+9I,eAAez9C,EAAwBzc,I,cAAlD,S,YAGE,YAAAoE,MAAN,SAAYr4D,G,0FACR,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAAsB1wE,I,cAAvD,SACA5vB,KAAK0sH,a,YAKK,YAAAsxB,YAAd,W,uGAC8B,MAAtBh+I,KAAK49I,cAAL,MACe,GAAM59I,KAAKs9B,YAAYqhB,a,OAAhC/uB,EAAS,SACf5vB,KAAK49I,cAAgB59I,KAAKw3C,eAAev5C,IAAIqiG,EAAsB1wE,G,iBAEvE,MAAO,CAAP,EAAO5vB,KAAK49I,uBAGF,YAAAC,eAAd,SAA6Bl/I,G,gGACR,SAAMqB,KAAKg+I,e,OAC5B,OAAgB,OADV7yB,EAAW,WACOA,EAASxsH,GACtB,CAAP,EAAOwsH,EAASxsH,IAEb,CAAP,EAAO,cAGG,YAAAo/I,eAAd,SAA6Bp/I,EAAaN,G,kGACvB,SAAM2B,KAAKs9B,YAAYqhB,a,OACvB,OADT/uB,EAAS,SACA,GAAM5vB,KAAKg+I,e,OAM1B,OANI7yB,EAAW,YAEXA,EAAW,IAGfA,EAASxsH,GAAON,EAChB,GAAM2B,KAAKw3C,eAAe0iB,KAAKomC,EAAsB1wE,EAAQu7F,I,cAA7D,SACAnrH,KAAK49I,cAAgBzyB,E,YAE7B,EApDA,GAAa,EAAAnxE,mB,oGCPb,8BACY,KAAA1xB,MAAa,GAuBzB,OArBI,YAAArqB,IAAA,SAAOU,GACH,OAAIqB,KAAKsoB,MAAMnsB,eAAewC,GACnBwc,QAAQC,QAAQpb,KAAKsoB,MAAM3pB,IAE/Bwc,QAAQC,QAAQ,OAG3B,YAAA8+C,KAAA,SAAKv7D,EAAaiQ,GAEd,OADA5O,KAAKsoB,MAAM3pB,GAAOiQ,EACXuM,QAAQC,WAGnB,YAAAvT,OAAA,SAAOlJ,GAEH,cADOqB,KAAKsoB,MAAM3pB,GACXwc,QAAQC,WAGnB,YAAA6hF,MAAA,WAEI,OADAj9F,KAAKsoB,MAAQ,GACNnN,QAAQC,WAEvB,EAxBA,GAAa,EAAAlF,gB,k+CCcb,aACA,SACA,SACA,UACA,SACA,UACA,SAeMoqF,EACc,YAGpB,aAGI,WAAoBhjE,EAAkCrc,EAC1Cg6E,EAA0CzvD,EAC1CD,EAAsCvtB,EACtC0tB,EAA8C8L,EAC9C3N,EAA4CrY,EAC5C0sD,EAAkCj9E,EAClCkzC,EAAoCtpB,EACpC6xF,GAPQ,KAAAp/E,cAAkC,KAAArc,aAC1C,KAAAg6E,kBAA0C,KAAAzvD,gBAC1C,KAAAD,gBAAsC,KAAAvtB,gBACtC,KAAA0tB,oBAA8C,KAAA8L,iBAC9C,KAAA3N,mBAA4C,KAAArY,gBAC5C,KAAA0sD,cAAkC,KAAAj9E,aAClC,KAAAkzC,eAAoC,KAAAtpB,sBACpC,KAAA6xF,iBATZ,KAAAuhC,gBAA0B,EA+V9B,OAnVU,YAAA3pG,YAAN,W,kGACmB,SAAMt0C,KAAKs9B,YAAYqhB,a,OACtC,OAAc,OADR/uB,EAAS,UAEJ,CAAP,EAAO,MAGM,GAAM5vB,KAAKw3C,eAAev5C,IAASqiG,EAAsB1wE,I,OAC1E,OADMsuH,EAAW,UAEN,CAAP,EAAO,IAAIxsH,KAAKwsH,IAGb,CAAP,EAAO,cAGL,YAAAphD,YAAN,SAAkBljE,G,gGACC,SAAM55B,KAAKs9B,YAAYqhB,a,OACtC,OAAc,OADR/uB,EAAS,UAEX,IAGJ,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAsB1wE,EAAQgK,EAAKukH,W,cAAlE,S,YAGE,YAAAn8G,SAAN,SAAeo8G,EAAoBC,G,YAAA,IAAAA,OAAA,G,mGAEP,OADxBr+I,KAAKs+I,cACmB,GAAMt+I,KAAKs9B,YAAY28B,mB,OAC/C,IADwB,SAEpB,MAAO,CAAP,EAAOj6D,KAAKu+I,eAAc,IAGxBphD,EAAM,IAAIzrE,KACZ8sH,GAAY,E,iBAEA,O,sBAAA,GAAMx+I,KAAKy+I,aAAaL,I,cAApCI,EAAY,S,aAEZ,G,WAAIH,EACA,MAAM,E,0BAITG,EAAD,MACA,GAAMx+I,KAAK88F,YAAYK,I,OACvB,OADA,SACO,CAAP,EAAOn9F,KAAKu+I,eAAc,I,OAGf,SAAMv+I,KAAKs9B,YAAYqhB,a,OAAhC/uB,EAAS,S,iBAEX,O,wBAAA,GAAM5vB,KAAKihB,WAAW8gB,wB,QACL,OADjB,SACiB,GAAM/hC,KAAKihB,WAAW2gG,W,QAEvC,OAFMrgH,EAAW,SAEjB,GAAMvB,KAAK0+I,YAAYn9I,EAAS4+E,U,QAChC,OADA,SACA,GAAMngF,KAAK2+I,YAAY/uH,EAAQruB,EAAS8R,U,QACxC,OADA,SACA,GAAMrT,KAAK4+I,gBAAgBr9I,EAAS6R,c,QACpC,OADA,SACA,GAAMpT,KAAK6+I,YAAYjvH,EAAQruB,EAAS6T,U,QACxC,OADA,SACA,GAAMpV,KAAK8+I,UAAUlvH,EAAQruB,EAASmgF,Q,QACtC,OADA,SACA,GAAM1hF,KAAK++I,aAAanvH,EAAQruB,EAASwiF,U,QACzC,OADA,SACA,GAAM/jF,KAAKg/I,aAAaz9I,EAASo2B,W,QAEjC,OAFA,SAEA,GAAM33B,KAAK88F,YAAYK,I,QACvB,OADA,SACO,CAAP,EAAOn9F,KAAKu+I,eAAc,I,QAE1B,G,WAAIF,EACA,MAAM,EAEN,MAAO,CAAP,EAAOr+I,KAAKu+I,eAAc,I,0BAKhC,YAAAjH,iBAAN,SAAuBtB,EAAsCiJ,G,sGAErD,OADJj/I,KAAKs+I,cACD,GAAMt+I,KAAKs9B,YAAY28B,mB,WAAvB,qB,iBAEwB,O,sBAAA,GAAMj6D,KAAKwrC,cAAcvtC,IAAI+3I,EAAap2I,K,cAAxDs/I,EAAc,UACdD,GAAyB,MAAfC,GACXD,GAAyB,MAAfC,GAAuBA,EAAYh4H,aAAe8uH,EAAa9uH,aACrD,GAAMlnB,KAAKihB,WAAWi9F,UAAU83B,EAAap2I,KAFlE,M,cAGoB,OADdu/I,EAAe,UACjB,MACe,GAAMn/I,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKwrC,cAAcmkF,OAAO,IAAI,EAAAh5B,WAAWwoD,EAAcvvH,K,OAE7D,OAFA,SACA5vB,KAAK6pC,iBAAiBgB,KAAK,uBAAwB,CAAEpkB,SAAUuvH,EAAap2I,KACrE,CAAP,EAAOI,KAAKu+I,eAAc,I,4CAIlCv+I,KAAKiB,WAAWW,MAAM,G,aAG9B,MAAO,CAAP,EAAO5B,KAAKu+I,eAAc,YAGxB,YAAAhH,iBAAN,SAAuBvB,G,0FAEf,OADJh2I,KAAKs+I,cACD,GAAMt+I,KAAKs9B,YAAY28B,mB,cAAvB,SACA,GAAMj6D,KAAKwrC,cAAc8E,OAAO0lG,EAAap2I,KAD7C,M,OAIA,OAHA,SACAI,KAAK6pC,iBAAiBgB,KAAK,sBAAuB,CAAEpkB,SAAUuvH,EAAap2I,KAC3EI,KAAKu+I,eAAc,GACZ,CAAP,GAAO,G,OAEX,MAAO,CAAP,EAAOv+I,KAAKu+I,eAAc,YAGxB,YAAAnH,iBAAN,SAAuBpB,EAAsCiJ,G,8GAErD,OADJj/I,KAAKs+I,cACD,GAAMt+I,KAAKs9B,YAAY28B,mB,WAAvB,sB,iBAGwB,O,wBADhBmlF,GAAe,EACC,GAAMp/I,KAAKurC,cAActtC,IAAI+3I,EAAap2I,K,cAC3C,OADby/I,EAAc,WACOA,EAAYn4H,cAAgB8uH,EAAa9uH,eAChEk4H,GAAe,GAGfE,GAAmB,EACnBF,IACIH,GACAG,EAA8B,MAAfC,EACfC,GAAmB,GAEe,MAA9BtJ,EAAa/uH,eAAwD,MAA/B+uH,EAAa/lI,eACnDmvI,EAA8B,MAAfC,GAEfD,GAAe,EACfE,GAAmB,KAK1BF,GAAgBE,GAAmD,MAA/BtJ,EAAa/lI,gBACpB,MAA9B+lI,EAAa/uH,eAAyB+uH,EAAa/uH,cAAcjrB,OAAS,EACtD,GAAMgE,KAAK0rC,kBAAkBhU,UAFjD,M,OAGA,GAAmB,OADbtkB,EAAc,UAEhB,IAAStX,EAAI,EAAGA,EAAIsX,EAAYpX,OAAQF,IACpC,GAAIk6I,EAAa/uH,cAAcha,QAAQmG,EAAYtX,GAAG8D,KAAO,EAAG,CAC5Dw/I,GAAe,EACf,M,wBAMZA,EACqB,GAAMp/I,KAAKihB,WAAWs+F,UAAUy2B,EAAap2I,KADlE,M,cAEoB,OADd2/I,EAAe,UACjB,MACe,GAAMv/I,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKurC,cAAcokF,OAAO,IAAI,EAAAt/F,WAAWkvH,EAAc3vH,K,OAE7D,OAFA,SACA5vB,KAAK6pC,iBAAiBgB,KAAK,uBAAwB,CAAE3T,SAAU8+G,EAAap2I,KACrE,CAAP,EAAOI,KAAKu+I,eAAc,I,mCAIzB,O,aAAyB,MAAjB,EAAE3tH,YAAsBquH,EACrC,GAAMj/I,KAAKurC,cAAc+E,OAAO0lG,EAAap2I,KAD7C,O,QAGA,OAFA,SACAI,KAAK6pC,iBAAiBgB,KAAK,sBAAuB,CAAE3T,SAAU8+G,EAAap2I,KACpE,CAAP,EAAOI,KAAKu+I,eAAc,I,6BAItC,MAAO,CAAP,EAAOv+I,KAAKu+I,eAAc,YAGxB,YAAAlH,iBAAN,SAAuBrB,G,0FAEf,OADJh2I,KAAKs+I,cACD,GAAMt+I,KAAKs9B,YAAY28B,mB,cAAvB,SACA,GAAMj6D,KAAKurC,cAAc+E,OAAO0lG,EAAap2I,KAD7C,M,OAGA,OAFA,SACAI,KAAK6pC,iBAAiBgB,KAAK,sBAAuB,CAAE3T,SAAU8+G,EAAap2I,KACpE,CAAP,EAAOI,KAAKu+I,eAAc,I,OAE9B,MAAO,CAAP,EAAOv+I,KAAKu+I,eAAc,YAGxB,YAAA/G,eAAN,SAAqBxB,EAAoCiJ,G,sGAEjD,OADJj/I,KAAKs+I,cACD,GAAMt+I,KAAKs9B,YAAY28B,mB,WAAvB,qB,iBAEsB,O,sBAAA,GAAMj6D,KAAKk+E,YAAYjgF,IAAI+3I,EAAap2I,K,cAApD4/I,EAAY,UACZP,GAAuB,MAAbO,GACXP,GAAuB,MAAbO,GAAqBA,EAAUt4H,aAAe8uH,EAAa9uH,aACnD,GAAMlnB,KAAKihB,WAAWq9F,QAAQ03B,EAAap2I,KAF9D,M,cAGkB,OADZ6/I,EAAa,UACf,MACe,GAAMz/I,KAAKs9B,YAAYqhB,a,OACtC,OADM/uB,EAAS,SACf,GAAM5vB,KAAKk+E,YAAYyxC,OAAO,IAAI,EAAA/1B,SAAS6lD,EAAY7vH,K,OAEvD,OAFA,SACA5vB,KAAK6pC,iBAAiBgB,KAAK,qBAAsB,CAAEqyC,OAAQ84D,EAAap2I,KACjE,CAAP,EAAOI,KAAKu+I,eAAc,I,4CAIlCv+I,KAAKiB,WAAWW,MAAM,G,aAG9B,MAAO,CAAP,EAAO5B,KAAKu+I,eAAc,YAGxB,YAAA9G,eAAN,SAAqBzB,G,0FAEb,OADJh2I,KAAKs+I,cACD,GAAMt+I,KAAKs9B,YAAY28B,mB,cAAvB,SACA,GAAMj6D,KAAKk+E,YAAY5tC,OAAO0lG,EAAap2I,KAD3C,M,OAIA,OAHA,SACAI,KAAK6pC,iBAAiBgB,KAAK,oBAAqB,CAAEqyC,OAAQ84D,EAAap2I,KACvEI,KAAKu+I,eAAc,GACZ,CAAP,GAAO,G,OAEX,MAAO,CAAP,EAAOv+I,KAAKu+I,eAAc,YAKtB,YAAAD,YAAR,WACIt+I,KAAKi+I,gBAAiB,EACtBj+I,KAAK6pC,iBAAiBgB,KAAK,gBAGvB,YAAA0zG,cAAR,SAAsBrmE,GAGlB,OAFAl4E,KAAKi+I,gBAAiB,EACtBj+I,KAAK6pC,iBAAiBgB,KAAK,gBAAiB,CAAEqtC,aAAcA,IACrDA,GAGG,YAAAumE,aAAd,SAA2BL,G,kGACvB,OAAIA,EACO,CAAP,GAAO,GAGM,GAAMp+I,KAAKs0C,e,OAC5B,OAAgB,OADV4pG,EAAW,WAC8B,IAAvBA,EAAS7rH,UACtB,CAAP,GAAO,GAGM,GAAMryB,KAAKihB,WAAW08F,0B,OACvC,OADMp8G,EAAW,SACb,IAAImwB,KAAKnwB,IAAa28I,EACf,CAAP,GAAO,GAEJ,CAAP,GAAO,WAGG,YAAAQ,YAAd,SAA0Bn9I,G,oGACR,SAAMvB,KAAKs9B,YAAYoiH,oB,cACxB,OADPC,EAAQ,WACOA,IAAUp+I,EAASizD,cAApC,MAC2B,MAAvBx0D,KAAK08G,eAAL,MACA,GAAM18G,KAAK08G,gBAAe,I,OAA1B,S,iBAGJ,MAAM,IAAIv5G,MAAM,qB,OAGpB,SAAMnD,KAAKge,cAAcihC,UAAU19C,EAAS5C,M,OAC5C,OADA,SACA,GAAMqB,KAAKge,cAAcqhC,iBAAiB99C,EAAS29C,a,OACnD,OADA,SACA,GAAMl/C,KAAKge,cAAcg2G,gBAAgBzyH,EAASqrB,Y,OAClD,OADA,SACA,GAAM5sB,KAAKge,cAAc61G,WAAWtyH,EAASg3C,cAAeh3C,EAAS4yD,wB,OACrE,OADA,SACA,GAAMn0D,KAAKs9B,YAAYsiH,iBAAiBr+I,EAASizD,gB,OACjD,OADA,SACA,GAAMx0D,KAAKs9B,YAAYuiH,iBAAiBt+I,EAAS6yD,gB,QACjD,OADA,SACA,GAAMp0D,KAAKs9B,YAAYwiH,sBAAsBv+I,EAAS88C,qB,QACtD,OADA,SACA,GAAMr+C,KAAK6qB,oBAAoBopH,oBAAoB1yI,EAASwpB,mB,QAmB5D,OAnBA,SAEMwtB,EAAqD,GAC3Dh3C,EAASg3C,cAAc3qC,SAAQ,SAAA9P,GAC3By6C,EAAcz6C,EAAE8B,IAAM,IAAI,EAAAmgJ,iBAAiBjiJ,MAGzC8uB,EAA6C,GACnDrrB,EAASqrB,UAAUhf,SAAQ,SAAA5O,GACvB4tB,EAAU5tB,EAAEY,IAAM,IAAI,EAAAogJ,aAAahhJ,MAGvCuC,EAAS4yD,sBAAsBvmD,SAAQ,SAAA9P,GACR,MAAvBy6C,EAAcz6C,EAAE8B,MAChB24C,EAAcz6C,EAAE8B,IAAM,IAAI,EAAAmgJ,iBAAiBjiJ,GAC3Cy6C,EAAcz6C,EAAE8B,IAAImzC,gBAAiB,MAI7C,GAAM53B,QAAQK,IAAI,CACdxb,KAAKs9B,YAAY2iH,qBAAqB1nG,GACtCv4C,KAAKs9B,YAAY4iH,iBAAiBtzH,M,QAGlC,OALJ,SAKI,GAAM5sB,KAAK6qB,oBAAoBqpH,sB,eAA/B,SACAl0I,KAAK6pC,iBAAiBgB,KAAK,gCAE3B7qC,KAAK6qB,oBAAoBu4E,+B,YAInB,YAAAu7C,YAAd,SAA0B/uH,EAAgBruB,G,gGAK/B,OAJD8R,EAAyC,GAC/C9R,EAASqM,SAAQ,SAAA0F,GACbD,EAAQC,EAAE1T,IAAM,IAAI,EAAA+2F,WAAWrjF,EAAGsc,MAE/B,GAAM5vB,KAAKwrC,cAAcxgC,QAAQqI,I,OAAxC,MAAO,CAAP,EAAO,kBAGG,YAAAurI,gBAAd,SAA8Br9I,G,gGAKnB,OAJD6R,EAAiD,GACvD7R,EAASqM,SAAQ,SAAAlQ,GACb0V,EAAY1V,EAAEkC,IAAM,IAAI,EAAA0xB,eAAe5zB,MAEpC,GAAMsC,KAAK0rC,kBAAkB1gC,QAAQoI,I,OAA5C,MAAO,CAAP,EAAO,kBAGG,YAAAyrI,YAAd,SAA0BjvH,EAAgBruB,G,gGAK/B,OAJD6T,EAAyC,GAC/C7T,EAASqM,SAAQ,SAAAlQ,GACb0X,EAAQ1X,EAAEkC,IAAM,IAAI,EAAAywB,WAAW3yB,EAAGkyB,MAE/B,GAAM5vB,KAAKurC,cAAcvgC,QAAQoK,I,OAAxC,MAAO,CAAP,EAAO,kBAGG,YAAA0pI,UAAd,SAAwBlvH,EAAgBruB,G,gGAK7B,OAJDmgF,EAAqC,GAC3CngF,EAASqM,SAAQ,SAAAxQ,GACbskF,EAAMtkF,EAAEwC,IAAM,IAAI,EAAAg6F,SAASx8F,EAAGwyB,MAE3B,GAAM5vB,KAAKk+E,YAAYlzE,QAAQ02E,I,OAAtC,MAAO,CAAP,EAAO,kBAGG,YAAAq9D,aAAd,SAA2BnvH,EAAgBruB,G,yEAcvC,OAbImtH,EAAwB,GACZ,MAAZntH,GAAkD,MAA9BA,EAASsiF,oBAC7B6qC,EAAYA,EAAUlkG,OAAOjpB,EAASsiF,oBAG1B,MAAZtiF,GAAwD,MAApCA,EAASuiF,yBAC7BviF,EAASuiF,wBAAwBl2E,SAAQ,SAAA1E,GACjCA,EAAO66E,QAAQ/nF,OAAS,GACxB0yH,EAAUpyH,KAAK4M,EAAO66E,YAK3B,CAAP,EAAO/jF,KAAKi7F,gBAAgB6iD,qBAAqBpvB,WAGvC,YAAAswB,aAAd,SAA2Bz9I,G,gGAOhB,OANDo2B,EAA0C,GAChC,MAAZp2B,GACAA,EAASqM,SAAQ,SAAA5O,GACb24B,EAAS34B,EAAEY,IAAM,IAAI,EAAAu1C,WAAWn2C,MAGjC,GAAMgB,KAAKwxB,cAAcxmB,QAAQ2sB,I,OAAxC,MAAO,CAAP,EAAO,kBAEf,EAhWA,GAAa,EAAAlhB,e,wGCjCb,MAoCI,SAAYlV,GACRvB,KAAKJ,GAAK2B,EAAS3B,GACnBI,KAAKpC,KAAO2D,EAAS3D,KACrBoC,KAAK2lB,OAASpkB,EAASokB,OACvB3lB,KAAKkC,KAAOX,EAASW,KACrBlC,KAAK+f,QAAUxe,EAASwe,QACxB/f,KAAK4xC,YAAcrwC,EAASqwC,YAC5B5xC,KAAK6xC,UAAYtwC,EAASswC,UAC1B7xC,KAAK8xC,aAAevwC,EAASuwC,aAC7B9xC,KAAK+xC,UAAYxwC,EAASwwC,UAC1B/xC,KAAK4qC,QAAUrpC,EAASqpC,QACxB5qC,KAAKgyC,OAASzwC,EAASywC,OACvBhyC,KAAKiyC,OAAS1wC,EAAS0wC,OACvBjyC,KAAKkyC,OAAS3wC,EAAS2wC,OACvBlyC,KAAKmyC,gBAAkB5wC,EAAS4wC,gBAChCnyC,KAAKoyC,iBAAmB7wC,EAAS6wC,iBACjCpyC,KAAKqyC,SAAW9wC,EAAS8wC,SACzBryC,KAAKsyC,gBAAkB/wC,EAAS+wC,gBAChCtyC,KAAKuyC,MAAQhxC,EAASgxC,MACtBvyC,KAAKwyC,eAAiBjxC,EAASixC,eAC/BxyC,KAAKyyC,aAAelxC,EAASkxC,aAC7BzyC,KAAK0yC,SAAWnxC,EAASmxC,SACzB1yC,KAAK2yC,WAAapxC,EAASoxC,WAC3B3yC,KAAK4yC,YAAcrxC,EAASqxC,YAC5B5yC,KAAK6yC,sBAAwBtxC,EAASsxC,sBACtC7yC,KAAK4vB,OAASruB,EAASquB,OACvB5vB,KAAK2iC,wBAA0BphC,EAASohC,wBACxC3iC,KAAK05B,WAAan4B,EAASm4B,WAC3B15B,KAAK8yC,aAAevxC,EAASuxC,aAC7B9yC,KAAKgzC,8BAAgCzxC,EAASyxC,8BAC9ChzC,KAAKizC,2BAA6B1xC,EAAS0xC,2BAC3CjzC,KAAKkzC,gBAAkB3xC,EAAS2xC,gBAChClzC,KAAKmzC,oBAAsB5xC,EAAS4xC,oBACpCnzC,KAAKozC,gBAAkB7xC,EAAS6xC,iBArE3B,EAAA2sG,oB,oGCHb,MASI,SAAYx+I,GACRvB,KAAKJ,GAAK2B,EAAS3B,GACnBI,KAAKpC,KAAO2D,EAAS3D,KACrBoC,KAAK2lB,OAASpkB,EAASokB,OACvB3lB,KAAKkC,KAAOX,EAASW,KACrBlC,KAAK+f,QAAUxe,EAASwe,QACxB/f,KAAK4vB,OAASruB,EAASquB,OACvB5vB,KAAK+xC,UAAYxwC,EAASwwC,WAhBrB,EAAAiuG,gB,m+CCLb,YAKA,QAEM1/C,EACW,cADXA,EAEY,eAFZA,EAGoB,kBAHpBA,EAIQ,kBAJRA,EAKY,sBAGlB,aAOI,WAAoB9oD,GAAA,KAAAA,iBAsPxB,OAnPU,YAAA+G,UAAN,SAAgBC,EAAqBC,EAAsBjB,G,0FACvD,SAAMx9C,KAAKmgJ,SAAS3hG,I,OACpB,OADA,SACA,GAAMx+C,KAAKogJ,gBAAgB3hG,I,cAA3B,SAC4B,MAAxBjB,EAAA,MACA,GAAMx9C,KAAKqgJ,YAAY7iG,EAAqB,K,OAC5C,OADA,SACA,GAAMx9C,KAAKsgJ,gBAAgB9iG,EAAqB,K,OAAhD,S,mCAIF,YAAA6iG,YAAN,SAAkB/kG,G,mEAEd,OADAt7C,KAAKs7C,SAAWA,EACT,CAAP,EAAOt7C,KAAKugJ,gBAAgBjgD,EAAehlD,WAGzC,YAAAwqE,YAAN,W,gGACI,OAAqB,MAAjB9lH,KAAKs7C,SACE,CAAP,EAAOt7C,KAAKs7C,WAGhB,EAAAt7C,KAAgB,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OACtD,OADA,EAAKhlD,SAAW,SACT,CAAP,EAAOt7C,KAAKs7C,kBAGV,YAAAglG,gBAAN,SAAsB96H,G,mEAElB,OADAxlB,KAAKwlB,aAAeA,EACb,CAAP,EAAOxlB,KAAKugJ,gBAAgBjgD,EAAmB96E,WAG7C,YAAAugG,gBAAN,W,gGACI,OAAyB,MAArB/lH,KAAKwlB,aACE,CAAP,EAAOxlB,KAAKwlB,eAGhB,EAAAxlB,KAAoB,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OAC1D,OADA,EAAK96E,aAAe,SACb,CAAP,EAAOxlB,KAAKwlB,sBAGV,YAAA26H,SAAN,SAAer6H,G,mEAGX,OAFA9lB,KAAK8lB,MAAQA,EACb9lB,KAAKkmH,aAAe,KACb,CAAP,EAAOlmH,KAAKugJ,gBAAgBjgD,EAAkBx6E,WAG5C,YAAAw/F,SAAN,W,gGACI,OAAkB,MAAdtlH,KAAK8lB,MACE,CAAP,EAAO9lB,KAAK8lB,QAGhB,EAAA9lB,KAAa,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OACnD,OADA,EAAKx6E,MAAQ,SACN,CAAP,EAAO9lB,KAAK8lB,eAGV,YAAAs6H,gBAAN,SAAsB3hG,G,mEAElB,OADAz+C,KAAKy+C,aAAeA,EACb,CAAP,EAAOz+C,KAAKugJ,gBAAgBjgD,EAAmB7hD,WAG7C,YAAAmnE,gBAAN,W,gGACI,OAAyB,MAArB5lH,KAAKy+C,aACE,CAAP,EAAOz+C,KAAKy+C,eAGhB,EAAAz+C,KAAoB,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OAC1D,OADA,EAAK7hD,aAAe,SACb,CAAP,EAAOz+C,KAAKy+C,sBAGV,YAAA+hG,aAAN,W,0GACkB,SAAMxgJ,KAAKslH,Y,OACJ,OADfx/F,EAAQ,SACO,GAAM9lB,KAAK4lH,mB,OACf,OADXnnE,EAAe,SACJ,GAAMz+C,KAAK8lH,e,OACP,OADfxqE,EAAW,SACI,GAAMt7C,KAAK+lH,mB,OAChB,OADVvgG,EAAe,SACL,GAAMxlB,KAAKw3C,eAAev5C,IAAI,EAAAuZ,iBAAiBU,kB,OAChD,OADTyS,EAAU,SACD,GAAM3qB,KAAKw3C,eAAev5C,IAAI,EAAAuZ,iBAAiBW,wB,cAAxDovC,EAAS,SACC,MAAX58B,GAA+B,IAAZA,GAA6B,WAAX48B,EAAtC,MAEA,GAAMvnD,KAAK+8F,c,OAKX,OALA,SACA/8F,KAAK8lB,MAAQA,EACb9lB,KAAKy+C,aAAeA,EACpBz+C,KAAKs7C,SAAWA,EAChBt7C,KAAKwlB,aAAeA,EACpB,I,OAGJ,SAAMxlB,KAAKmgJ,SAASr6H,I,OACpB,OADA,SACA,GAAM9lB,KAAKogJ,gBAAgB3hG,I,QAC3B,OADA,SACA,GAAMz+C,KAAKqgJ,YAAY/kG,I,QACvB,OADA,SACA,GAAMt7C,KAAKsgJ,gBAAgB96H,I,eAA3B,S,YAGJ,YAAA84B,kBAAA,SAAkBx4B,EAAejJ,GAC7B,OAAO7c,KAAKw3C,eAAe0iB,KAAKomC,EAA4BzjF,EAAOiJ,IAGvE,YAAAk3B,kBAAA,SAAkBngC,GACd,OAAO7c,KAAKw3C,eAAev5C,IAAYqiG,EAA4BzjF,IAGvE,YAAAugG,oBAAA,SAAoBvgG,GAChB,OAAO7c,KAAKw3C,eAAe3vC,OAAOy4F,EAA4BzjF,IAG5D,YAAAkgF,WAAN,W,0FAOI,OANA/8F,KAAK8lB,MAAQ,KACb9lB,KAAKkmH,aAAe,KACpBlmH,KAAKy+C,aAAe,KACpBz+C,KAAKs7C,SAAW,KAChBt7C,KAAKwlB,aAAe,KAEpB,GAAMxlB,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,cAAjC,S,YAMJ,YAAA6lB,YAAA,WACI,GAAInmH,KAAKkmH,aACL,OAAOlmH,KAAKkmH,aAGhB,GAAkB,MAAdlmH,KAAK8lB,MACL,MAAM,IAAI3iB,MAAM,oBAGpB,IAAM2K,EAAQ9N,KAAK8lB,MAAMnY,MAAM,KAC/B,GAAqB,IAAjBG,EAAM9R,OACN,MAAM,IAAImH,MAAM,yBAGpB,IAAMs9I,EAAU,EAAAl4I,MAAMoD,iBAAiBmC,EAAM,IAC7C,GAAe,MAAX2yI,EACA,MAAM,IAAIt9I,MAAM,2BAIpB,OADAnD,KAAKkmH,aAAej0C,KAAKriE,MAAM6wI,GACxBzgJ,KAAKkmH,cAGhB,YAAAw6B,uBAAA,WACI,IAAMD,EAAUzgJ,KAAKmmH,cACrB,QAA2B,IAAhBs6B,EAAQvkI,IACf,OAAO,KAGX,IAAMve,EAAI,IAAI+zB,KAAK,GAEnB,OADA/zB,EAAEgjJ,cAAcF,EAAQvkI,KACjBve,GAGX,YAAAijJ,sBAAA,SAAsBC,QAAA,IAAAA,MAAA,GAClB,IAAMljJ,EAAIqC,KAAK0gJ,yBACf,GAAS,MAAL/iJ,EACA,OAAO,EAGX,IAAMmjJ,EAAcnjJ,EAAEq1H,YAAa,IAAIthG,MAAOshG,UAA6B,IAAhB6tB,GAC3D,OAAO50I,KAAKiiC,MAAM4yG,EAAc,MAGpC,YAAAv7B,kBAAA,SAAkBtS,GAEd,YAFc,IAAAA,MAAA,GACKjzG,KAAK4gJ,wBACH,GAAK3tC,GAG9B,YAAAt0D,UAAA,WACI,IAAM8hG,EAAUzgJ,KAAKmmH,cACrB,QAA2B,IAAhBs6B,EAAQ1xE,IACf,MAAM,IAAI5rE,MAAM,oBAGpB,OAAOs9I,EAAQ1xE,KAGnB,YAAA16B,SAAA,WACI,IAAMosG,EAAUzgJ,KAAKmmH,cACrB,QAA6B,IAAlBs6B,EAAQ5jI,MACf,MAAM,IAAI1Z,MAAM,kBAGpB,OAAOs9I,EAAQ5jI,OAGnB,YAAA6pE,iBAAA,WACI,IAAM+5D,EAAUzgJ,KAAKmmH,cACrB,QAAsC,IAA3Bs6B,EAAQM,eACf,MAAM,IAAI59I,MAAM,+BAGpB,OAAOs9I,EAAQM,gBAGnB,YAAA3sG,QAAA,WACI,IAAMqsG,EAAUzgJ,KAAKmmH,cACrB,YAA4B,IAAjBs6B,EAAQ7iJ,KACR,KAGJ6iJ,EAAQ7iJ,MAGnB,YAAA6oF,WAAA,WACI,IAAMg6D,EAAUzgJ,KAAKmmH,cACrB,YAA+B,IAApBs6B,EAAQpmG,SAIZomG,EAAQpmG,SAGnB,YAAA2mG,UAAA,WACI,IAAMP,EAAUzgJ,KAAKmmH,cACrB,QAA2B,IAAhBs6B,EAAQQ,IACf,MAAM,IAAI99I,MAAM,mBAGpB,OAAOs9I,EAAQQ,KAGnB,YAAA7M,cAAA,WACI,IAAMqM,EAAUzgJ,KAAKmmH,cACrB,IAAK3+G,MAAM40I,QAAQqE,EAAQS,KACvB,MAAM,IAAI/9I,MAAM,gBAGpB,OAAOs9I,EAAQS,IAAIpwG,SAAS,aAGlB,YAAAyvG,gBAAd,SAA8B5hJ,EAAaN,G,0FACnC,SAAM2B,KAAKmhJ,oB,OAAf,OAAI,SAEA,IAGG,CAAP,EAAOnhJ,KAAKw3C,eAAe0iB,KAAKv7D,EAAKN,YAG3B,YAAA8iJ,iBAAd,W,kGACoB,SAAMnhJ,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBU,kB,OACxD,OADTyS,EAAU,SACD,GAAM3qB,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBW,wB,OACtE,OADMovC,EAAS,SACR,CAAP,EAAkB,MAAX58B,GAA8B,WAAX48B,WAElC,EA7PA,GAAa,EAAAhoC,gB,k+CCfb,YAOA,QAEM6hI,EAAW,mCACXC,EAAa,6BAEnB,aACI,WAAoB7pG,EAAwCgD,EACpDv5C,GADY,KAAAu2C,iBAAwC,KAAAgD,wBACpD,KAAAv5C,aA2JZ,OAzJU,YAAAusC,QAAN,SAAc7uC,G,sIACV,GAAW,MAAPA,EACA,MAAO,CAAP,EAAO,MAQX,GANI2iJ,EAAS,GACT/pB,EAAoC,OACpCgqB,EAAS,EACTC,EAAS7iJ,EACP8iJ,EAAwD,IAA5C9iJ,EAAI4E,cAAc0J,QAAQ,cACtCy0I,GAAeD,GAAuD,IAA1C9iJ,EAAI4E,cAAc0J,QAAQ,YACxDw0I,EAAW,CAEX,IADMj0H,EAAS,EAAAjlB,MAAMkF,eAAe9O,IACzBiH,IAAI,WAAqC,MAAxB4nB,EAAOvvB,IAAI,UACnC,KACU0jJ,EAAc93I,SAAS2jB,EAAOvvB,IAAI,UAAU6O,OAAQ,OACxC,GACdy0I,EAAS,GACFI,EAAc,IACrBJ,EAASI,GAEf,SACE3hJ,KAAKiB,WAAWW,MAAM,yBAG9B,GAAI4rB,EAAO5nB,IAAI,WAAqC,MAAxB4nB,EAAOvvB,IAAI,UACnC,KACU2jJ,EAAc/3I,SAAS2jB,EAAOvvB,IAAI,UAAU6O,OAAQ,OACxC,IACdw0I,EAASM,GAEf,SACE5hJ,KAAKiB,WAAWW,MAAM,yBAG1B4rB,EAAO5nB,IAAI,WAAqC,MAAxB4nB,EAAOvvB,IAAI,YACnCujJ,EAASh0H,EAAOvvB,IAAI,WAEpBuvB,EAAO5nB,IAAI,cAA2C,MAA3B4nB,EAAOvvB,IAAI,eAErB,UADX4jJ,EAAWr0H,EAAOvvB,IAAI,aAAasF,gBACD,WAAbs+I,GAAsC,WAAbA,IAChDtqB,EAAMsqB,SAGPH,IACPF,EAAS7iJ,EAAImL,OAAO,WAAW9N,QAC/BulJ,EAAS,GAQb,OALMtzG,EAAQhiC,KAAKiiC,OAAM,IAAIxc,MAAOW,UAAY,KAC1CyvH,EAAU9hJ,KAAK+hJ,QAAQ/hJ,KAAKgiJ,SAAS/1I,KAAKiuB,MAAM+T,EAAQqzG,IAAU,GAAI,KACtEW,EAAY,EAAA15I,MAAMqB,eAAek4I,IACjCI,EAAWliJ,KAAKmiJ,WAAWX,IAEnBxlJ,QAAWimJ,EAAUjmJ,OAItB,GAAMgE,KAAKoiJ,KAAKF,EAAUD,EAAW1qB,IAHvC,CAAP,EAAO,M,OAIX,GAAoB,KADdt4D,EAAO,UACJjjE,OACL,MAAO,CAAP,EAAO,MAUX,GANMqmJ,EAAkC,GAAxBpjF,EAAKA,EAAKjjE,OAAS,GAC7BwO,GAA0B,IAAfy0D,EAAKojF,KAAmB,IAA2B,IAAnBpjF,EAAKojF,EAAS,KAAc,IACpD,IAAnBpjF,EAAKojF,EAAS,KAAc,EAAyB,IAAnBpjF,EAAKojF,EAAS,GAGlD3nH,EAAM,GACNgnH,EAGA,IADIY,EAAoB,WAAT93I,EACN1O,EAAI,EAAGA,EAAIylJ,EAAQzlJ,IACxB4+B,GAAO2mH,EAAWiB,EAAWjB,EAAWrlJ,QACxCsmJ,EAAWr2I,KAAKs2I,MAAMD,EAAWjB,EAAWrlJ,aAGhD0+B,GAAOlwB,EAASyB,KAAKwsH,IAAI,GAAI8oB,IAASh3I,WACtCmwB,EAAM16B,KAAK+hJ,QAAQrnH,EAAK6mH,EAAQ,KAGpC,MAAO,CAAP,EAAO7mH,WAGX,YAAA2R,gBAAA,SAAgB1tC,GACZ,IAAI2iJ,EAAS,GACb,GAAW,MAAP3iJ,GAA2D,IAA5CA,EAAI4E,cAAc0J,QAAQ,cAAqB,CAC9D,IAAMugB,EAAS,EAAAjlB,MAAMkF,eAAe9O,GACpC,GAAI6uB,EAAO5nB,IAAI,WAAqC,MAAxB4nB,EAAOvvB,IAAI,UACnC,IACIqjJ,EAASz3I,SAAS2jB,EAAOvvB,IAAI,UAAU6O,OAAQ,MACjD,SACE9M,KAAKiB,WAAWW,MAAM,0BAIlC,OAAO0/I,GAGL,YAAAkB,kBAAN,W,0FACa,SAAMxiJ,KAAKw3C,eAAev5C,IAAa,EAAAuZ,iBAAiBM,yB,OAAjE,MAAO,CAAP,GAAS,kBAKL,YAAAiqI,QAAR,SAAgB3kJ,EAAWI,EAAWwB,GAIlC,OAHIxB,EAAI,GAAKJ,EAAEpB,SACXoB,EAAIoK,MAAMhK,EAAI,EAAIJ,EAAEpB,QAAQwP,KAAKxM,GAAK5B,GAEnCA,GAGH,YAAA4kJ,SAAR,SAAiBrkJ,GACb,OAAQA,EAAI,KAAO,IAAM,IAAMsO,KAAKiiC,MAAMvwC,GAAG4M,SAAS,KAGlD,YAAAk4I,SAAR,SAAiBrlJ,GACbA,EAAIA,EAAEkG,cAGN,IAFA,IAAIo/I,EAAe,GAEV5mJ,EAAI,EAAGA,EAAIsB,EAAEpB,OAAQF,IACtBslJ,EAASn0I,QAAQ7P,EAAEtB,IAAM,IAI7B4mJ,GAAgBtlJ,EAAEtB,IAEtBsB,EAAIslJ,EAEJ,IAAIC,EAAO,GACPC,EAAM,GACV,IAAS9mJ,EAAI,EAAGA,EAAIsB,EAAEpB,OAAQF,IAAK,CAC/B,IAAM+mJ,EAAYzB,EAASn0I,QAAQ7P,EAAEiG,OAAOvH,IACxC+mJ,EAAY,IAGhBF,GAAQ3iJ,KAAK+hJ,QAAQc,EAAUt4I,SAAS,GAAI,EAAG,MAEnD,IAASzO,EAAI,EAAGA,EAAI,GAAK6mJ,EAAK3mJ,OAAQF,GAAK,EAAG,CAC1C,IAAMgnJ,EAAQH,EAAK74I,OAAOhO,EAAG,GAC7B8mJ,GAAY/4I,SAASi5I,EAAO,GAAGv4I,SAAS,IAE5C,OAAOq4I,GAGH,YAAAT,WAAR,SAAmB/kJ,GACf,OAAO,EAAAmL,MAAMqB,eAAe5J,KAAKyiJ,SAASrlJ,KAGhC,YAAAglJ,KAAd,SAAmBF,EAAsBD,EAAuB1qB,G,gGAC1C,SAAMv3H,KAAKw6C,sBAAsBu+E,KAAKkpB,EAAU33I,OAAQ43I,EAAS53I,OAAQitH,I,OAC3F,OADMwrB,EAAY,SACX,CAAP,EAAO,IAAI35I,WAAW25I,YAE9B,EA7JA,GAAa,EAAArjI,e,k+CCPb,aAKA,UAEM4gF,EACM,SADNA,EAES,YAFTA,EAGK,gBAHLA,EAIG,MAJHA,EAKa,gBALbA,EAMmB,iBANnBA,EAOe,aAPfA,EAQa,gBARbA,EASkB,qBAGxB,aASI,WAAoBnsD,EAAoCqD,GAApC,KAAArD,eAAoC,KAAAqD,iBA4M5D,OA1MU,YAAAkH,eAAN,SAAqB9uB,EAAgB/S,EAAe04B,EAAcE,G,0FAM9D,OALAz1C,KAAK6c,MAAQA,EACb7c,KAAK4vB,OAASA,EACd5vB,KAAKu1C,IAAMA,EACXv1C,KAAKy1C,cAAgBA,EAErB,GAAMz1C,KAAKw3C,eAAe0iB,KAAKomC,EAAgBzjF,I,OAC/C,OADA,SACA,GAAM7c,KAAKw3C,eAAe0iB,KAAKomC,EAAa1wE,I,OAC5C,OADA,SACA,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAU/qD,I,OACzC,OADA,SACA,GAAMv1C,KAAKw3C,eAAe0iB,KAAKomC,EAAoB7qD,I,cAAnD,S,YAGJ,YAAAmqG,iBAAA,SAAiBD,GAEb,OADA3/I,KAAK2/I,MAAQA,EACN3/I,KAAKw3C,eAAe0iB,KAAKomC,EAAYq/C,IAGhD,YAAAE,iBAAA,SAAiBzrF,GAEb,OADAp0D,KAAKo0D,cAAgBA,EACdp0D,KAAKw3C,eAAe0iB,KAAKomC,EAAoBlsC,IAGxD,YAAA0rF,sBAAA,SAAsBzhG,GAElB,OADAr+C,KAAKq+C,mBAAqBA,EACnBr+C,KAAKw3C,eAAe0iB,KAAKomC,EAAyBjiD,IAGvD,YAAAM,UAAN,W,uGACuB,MAAf3+C,KAAK4vB,OAAL,OACA,EAAA5vB,KAAc,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OAApD,EAAK1wE,OAAS,S,iBAElB,MAAO,CAAP,EAAO5vB,KAAK4vB,gBAGV,YAAAykB,SAAN,W,uGACsB,MAAdr0C,KAAK6c,MAAL,OACA,EAAA7c,KAAa,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OAAnD,EAAKzjF,MAAQ,S,iBAEjB,MAAO,CAAP,EAAO7c,KAAK6c,eAGV,YAAA6iI,iBAAN,W,uGACsB,MAAd1/I,KAAK2/I,MAAL,OACA,EAAA3/I,KAAa,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OAAnD,EAAKq/C,MAAQ,S,iBAEjB,MAAO,CAAP,EAAO3/I,KAAK2/I,eAGV,YAAAnqG,OAAN,W,uGACoB,MAAZx1C,KAAKu1C,IAAL,OACA,EAAAv1C,KAAW,GAAMA,KAAKw3C,eAAev5C,IAAaqiG,K,OAAlD,EAAK/qD,IAAM,S,iBAEf,MAAO,CAAP,EAAOv1C,KAAKu1C,aAGV,YAAAG,iBAAN,W,uGAC8B,MAAtB11C,KAAKy1C,cAAL,OACA,EAAAz1C,KAAqB,GAAMA,KAAKw3C,eAAev5C,IAAYqiG,K,OAA3D,EAAK7qD,cAAgB,S,iBAEzB,MAAO,CAAP,EAAOz1C,KAAKy1C,uBAGV,YAAAixC,iBAAN,W,uGAC8B,MAAtB1mF,KAAKo0D,cAAL,OACA,EAAAp0D,KAAqB,GAAMA,KAAKw3C,eAAev5C,IAAaqiG,K,OAA5D,EAAKlsC,cAAgB,S,iBAEzB,MAAO,CAAP,EAAOp0D,KAAKo0D,uBAGV,YAAA4uF,sBAAN,W,uGACmC,MAA3BhjJ,KAAKq+C,mBAAL,OACA,EAAAr+C,KAA0B,GAAMA,KAAKw3C,eAAev5C,IAAaqiG,K,OAAjE,EAAKjiD,mBAAqB,S,iBAE9B,MAAO,CAAP,EAAOr+C,KAAKq+C,4BAGV,YAAA4pC,MAAN,W,gGACmB,SAAMjoF,KAAK2+C,a,OAE1B,OAFM/uB,EAAS,SAEf,GAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKw3C,eAAe3vC,OAAOy4F,I,OACjC,OADA,SACA,GAAMtgG,KAAKijJ,mBAAmBrzH,I,OAC9B,OADA,SACA,GAAM5vB,KAAKkjJ,eAAetzH,I,cAA1B,SAEA5vB,KAAK4vB,OAAS5vB,KAAK6c,MAAQ7c,KAAK2/I,MAAQ,KACxC3/I,KAAKu1C,IAAM,KACXv1C,KAAKy1C,cAAgB,K,YAGnB,YAAAwkB,gBAAN,W,0FACkB,SAAMj6D,KAAKm0C,aAAamxE,Y,OACtC,OAAa,MADC,SAEH,CAAP,GAAO,GAGI,GAAMtlH,KAAK2+C,a,OAC1B,MAAO,CAAP,EAAiB,MADF,kBAIb,YAAA7T,iBAAN,W,kGACmB,SAAM9qC,KAAKi6D,mB,OAC1B,OADe,SAKMj6D,KAAKm0C,aAAasyC,aAE5B,CAAP,GAAO,GAGE,GAAMzmF,KAAKo4C,uBARb,CAAP,GAAO,G,OASX,IADMC,EAAO,SACJv8C,EAAI,EAAGA,EAAIu8C,EAAKr8C,OAAQF,IAC7B,GAAIu8C,EAAKv8C,GAAGw2C,iBAAmB+F,EAAKv8C,GAAGikB,QACnC,MAAO,CAAP,GAAO,GAGf,MAAO,CAAP,GAAO,WAGL,YAAAgnE,sBAAN,W,0FACiB,SAAM/mF,KAAKo4C,uB,OACxB,MAAO,CAAP,EADa,SACDtpB,MAAK,SAAAhxB,GAAK,OAAAA,EAAEm1C,4BAAkE,OAApCn1C,EAAEk1C,0CAGtD,YAAAtQ,gBAAN,SAAsB9iC,G,kGACH,SAAMI,KAAK2+C,a,OACJ,OADhB/uB,EAAS,SACO,GAAM5vB,KAAKw3C,eAAev5C,IAC5CqiG,EAA2B1wE,I,OAC/B,OAAqB,OAFf2oB,EAAgB,WAEQA,EAAcp8C,eAAeyD,GAIpD,CAAP,EAAO,IAAI,EAAAq0C,aAAasE,EAAc34C,KAH3B,CAAP,EAAO,cAMT,YAAAujJ,4BAAN,SAAkCxwG,G,gGACR,SAAM3yC,KAAKo4C,uB,OACjC,OAAqB,OADfG,EAAgB,WACgC,IAAzBA,EAAcv8C,OAChC,CAAP,EAAO,MAGJ,CAAP,EAAOu8C,EAAcxqB,MAAK,SAAAjwB,GAAK,OAAAA,EAAE60C,aAAeA,cAG9C,YAAAyF,oBAAN,W,sGACmB,SAAMp4C,KAAK2+C,a,OACJ,OADhB/uB,EAAS,SACO,GAAM5vB,KAAKw3C,eAAev5C,IAC5CqiG,EAA2B1wE,I,OAE/B,IAAWhwB,KAHL24C,EAAgB,SAEhBh3C,EAA2B,GAChBg3C,EACTA,EAAcp8C,eAAeyD,KAAQ24C,EAAc34C,GAAImzC,gBACvDxxC,EAASjF,KAAK,IAAI,EAAA23C,aAAasE,EAAc34C,KAGrD,MAAO,CAAP,EAAO2B,WAGL,YAAA0+I,qBAAN,SAA2B1nG,G,gGACR,SAAMv4C,KAAK2+C,a,OAC1B,OADM/uB,EAAS,SACf,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAA2B1wE,EAAQ2oB,I,cAAlE,S,YAGE,YAAA0qG,mBAAN,SAAyBrzH,G,0FACrB,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAA2B1wE,I,cAA5D,S,YAGE,YAAAizC,YAAN,SAAkBjjE,G,kGACC,SAAMI,KAAK2+C,a,OACR,OADZ/uB,EAAS,SACG,GAAM5vB,KAAKw3C,eAAev5C,IACxCqiG,EAAuB1wE,I,OAC3B,OAAiB,OAFXhD,EAAY,WAEQA,EAAUzwB,eAAeyD,GAI5C,CAAP,EAAO,IAAI,EAAAwjJ,SAASx2H,EAAUhtB,KAHnB,CAAP,EAAO,cAMT,YAAA20C,gBAAN,W,sGACmB,SAAMv0C,KAAK2+C,a,OACR,OADZ/uB,EAAS,SACG,GAAM5vB,KAAKw3C,eAAev5C,IACxCqiG,EAAuB1wE,I,OAE3B,IAAWhwB,KAHLgtB,EAAY,SAEZrrB,EAAuB,GACZqrB,EACTA,EAAUzwB,eAAeyD,IACzB2B,EAASjF,KAAK,IAAI,EAAA8mJ,SAASx2H,EAAUhtB,KAG7C,MAAO,CAAP,EAAO2B,WAGL,YAAA2+I,iBAAN,SAAuBtzH,G,gGACJ,SAAM5sB,KAAK2+C,a,OAC1B,OADM/uB,EAAS,SACf,GAAM5vB,KAAKw3C,eAAe0iB,KAAKomC,EAAuB1wE,EAAQhD,I,cAA9D,S,YAGE,YAAAs2H,eAAN,SAAqBtzH,G,0FACjB,SAAM5vB,KAAKw3C,eAAe3vC,OAAOy4F,EAAuB1wE,I,cAAxD,S,YAER,EArNA,GAAa,EAAAnwB,e,gGCxBb,cACA,UAGA,aASI,WAAYmP,GACG,MAAPA,IAIJ5O,KAAKJ,GAAKgP,EAAIhP,GACdI,KAAKpC,KAAOgR,EAAIhR,KAChBoC,KAAK2lB,OAAS/W,EAAI+W,OAClB3lB,KAAKkC,KAAO0M,EAAI1M,KAChBlC,KAAK+f,QAAUnR,EAAImR,QACnB/f,KAAK4vB,OAAShhB,EAAIghB,OAClB5vB,KAAK+xC,UAAYnjC,EAAImjC,WAyB7B,OAtBI,sBAAI,wBAAS,C,IAAb,WACI,QAAI/xC,KAAKqjJ,iBAGFrjJ,KAAK+f,SAAW/f,KAAK2lB,SAAW,EAAA29H,uBAAuBhwG,W,gCAGlE,sBAAI,qCAAsB,C,IAA1B,WACI,OAAOtzC,KAAK+f,SAAW/f,KAAKqjJ,iB,gCAGhC,sBAAI,6BAAc,C,IAAlB,WACI,OAAOrjJ,KAAKqjJ,iB,gCAGhB,sBAAI,iCAAkB,C,IAAtB,WACI,OAAOrjJ,KAAKqjJ,iB,gCAGhB,sBAAI,8BAAe,C,IAAnB,WACI,OAAOrjJ,KAAKkC,OAAS,EAAAqhJ,iBAAiBC,e,gCAE9C,EA7CA,GAAa,EAAAJ,Y,8GCJb,SAAYE,GACR,yBACA,2BACA,6BAHJ,CAAY,EAAAA,yBAAA,EAAAA,uBAAsB,M,wGCAlC,SAAYC,GACR,qCACA,iCAFJ,CAAY,EAAAA,mBAAA,EAAAA,iBAAgB,M,8+CCM5B,aAEA,UACA,SAIA,aACI,WAAoBvlI,EAAsCte,EAC9CuhB,GADQ,KAAAjD,gBAAsC,KAAAte,cAC9C,KAAAuhB,aAqDhB,OAnDU,YAAAX,aAAN,SAAwDmxH,EACpD/nG,EAA4B+5G,G,2GAC5BzjJ,KAAK0jJ,cAAcjS,GAEbjxH,EAA0B,MAAhBkpB,EACV,IAAIA,EACJ,IAAI,EAAAprB,0BAENmzH,EAAavvI,OAAS,EAAA8pB,iBAAiBC,IAAvC,OACAzL,EAAQka,IAAM+2G,EAAavmH,O,qBAE3B,EAAA1K,EAA6BijI,GACvB,EAAAhS,EAAavmH,O,OADU,M,OAEvB,SAAMlrB,KAAKge,cAAc63B,aAAa47F,EAAavmH,OAAQ,O,OAA3D,W,iBAFN,EAAQuP,mBAAqB,E,iBAKjC,MAAO,CAAP,EAAOja,WAGL,YAAA+nF,WAAN,SAAiBkpC,G,mGACbzxI,KAAK0jJ,cAAcjS,GAEfA,EAAavvI,OAAS,EAAA8pB,iBAAiBC,IAAvC,YACMzL,EAAU,IAAI,EAAAmjI,iBAAiBlS,EAAavmH,Q,iBAE9C,O,sBAAA,GAAMlrB,KAAKihB,WAAW+8F,qBAAqBx9F,I,cAA3C,S,aAEA,M,SAAM,IAAIrd,MAAMnD,KAAKN,YAAYpB,EAAE,4B,0BAGjB,SAAM0B,KAAKge,cAAc+yE,wBAAwB0gD,EAAavmH,OAAQ,O,OAC5F,IADsB,SAElB,MAAM,IAAI/nB,MAAMnD,KAAKN,YAAYpB,EAAE,0B,iBAG3C,MAAO,CAAP,GAAO,WAGL,YAAAgtB,WAAN,W,0FACI,SAAMtrB,KAAKihB,WAAW88F,yB,cAAtB,S,YAGI,YAAA2lC,cAAR,SAAsBjS,GAClB,GAA4B,OAAxBA,aAAY,EAAZA,EAAcvmH,SAA0C,KAAxBumH,EAAavmH,OAC7C,MAAIumH,EAAavvI,OAAS,EAAA8pB,iBAAiBC,IACjC,IAAI9oB,MAAMnD,KAAKN,YAAYpB,EAAE,6BAE7B,IAAI6E,MAAMnD,KAAKN,YAAYpB,EAAE,wBAInD,EAvDA,GAAa,EAAAuY,2B,wGCbb,MAGI,SAAYoV,GACRjsB,KAAKisB,IAAMA,GAJN,EAAA03H,oB,0+CCAb,YAgBA,QAGA,aAOI,WAAoBp4G,EAAsCC,EAC9CE,EAA8C1tB,EAC5CgD,EAAoDw2B,EACtD3N,EAA4C2E,EAC5ClR,EAAkC6W,EAAoC3iB,EACtE3G,EACA+4H,EAAoDC,QAApD,IAAAD,MAAA,WAAoD,IAAAC,MAAA,MAN5C,KAAAt4G,gBAAsC,KAAAC,gBAC9C,KAAAE,oBAA8C,KAAA1tB,gBAC5C,KAAAgD,uBAAoD,KAAAw2B,iBACtD,KAAA3N,mBAA4C,KAAA2E,gBAC5C,KAAAlR,cAAkC,KAAA6W,eAAoC,KAAA3iB,gBACtE,KAAA3G,sBACA,KAAA+4H,iBAAoD,KAAAC,oBAZhE,KAAA/qI,gBAA6B,KAC7B,KAAAinC,iBAA2B,EAC3B,KAAAsgD,kBAA4B,EAEpB,KAAA73F,QAAS,EA2JrB,OAhJI,YAAAF,KAAA,SAAKgzH,GACGt7H,KAAKwI,SAITxI,KAAKwI,QAAS,EACV8yH,GACAt7H,KAAK8jJ,eAIb,YAAAA,WAAA,sBACI9jJ,KAAK+jJ,oBACLv3G,aAAY,WAAM,SAAKu3G,sBAAqB,MAI1C,YAAA14D,SAAN,W,0FAEQ,SAAMrrF,KAAKge,cAAcihF,aAAa,S,cAAtC,UAAkDj/F,KAAKqgG,iBAAvD,MACA,GAAMrgG,KAAKge,cAAc6rE,OAAO,S,OAAhC,S,iBAGJ,MAAO,CAAP,GAAQ7pF,KAAKge,cAAck3G,0BAGzB,YAAA6uB,kBAAN,W,oGACQ,SAAM/jJ,KAAKghB,qBAAqBy5F,c,OAApC,OAAI,SAEA,IAIW,GAAMz6G,KAAKs9B,YAAY28B,mB,OACtC,OADe,SAKX,GAAMj6D,KAAKqrF,YAHX,I,OAGJ,OAAI,SACA,IAGiB,GAAMrrF,KAAKqlF,mB,OAChC,OAAoB,OADdT,EAAe,WACOA,EAAe,EACvC,IAGe,GAAM5kF,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBY,gB,OAC1E,OAAkB,OADZ4rI,EAAa,UAEf,KAGEC,EAAqC,GAAfr/D,IACP,IAAKlzD,MAAQW,UAAY2xH,GAAc,KACzCC,EAEO,GAAMjkJ,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBW,wBAF7E,Q,aAGkB,WADI,SACtB,MAA6B,GAAMnY,KAAKy0C,U,cAAX,S,cAAsB,SAAMz0C,KAAKw0C,MAAK,I,OAAhB,S,wDAIrD,YAAAA,KAAN,SAAW0vG,G,YAAA,IAAAA,OAAA,G,6FACQ,SAAMlkJ,KAAKs9B,YAAY28B,mB,OACtC,OADe,SAKX,GAAMj6D,KAAK6qB,oBAAoBM,uBAH/B,I,cAGA,SACe,GAAMnrB,KAAK6+F,gBAD1B,M,cACMC,EAAS,SACTJ,EAAWI,EAAO,IAA8B,MAAxB9+F,KAAK8Y,iBAA4BgmF,EAAO,IAElE,GAACJ,GAAY,GAAM1+F,KAAKg/F,sBAAxB,M,OAAY,GAAC,S,0BACb,GAAMh/F,KAAKy0C,UADX,M,OACA,S,iBAMR,OAFAz0C,KAAK+/C,iBAAkB,EACvB//C,KAAKqgG,kBAAmB,EACxB,GAAMrgG,KAAKge,cAAcm3G,UAAS,I,OAClC,OADA,SACA,GAAMn1H,KAAKge,cAAc23G,cAAa,I,OACtC,OADA,SACA,GAAM31H,KAAKge,cAAc03G,cAAa,I,QACtC,OADA,SACA,GAAM11H,KAAKge,cAAcw3G,aAAY,I,eAArC,SAEAx1H,KAAKwrC,cAAckhF,aACnB1sH,KAAKurC,cAAcmhF,aACnB1sH,KAAK0rC,kBAAkBghF,aACvB1sH,KAAKwuC,cAAc0uD,aACnBl9F,KAAK6pC,iBAAiBgB,KAAK,UACA,MAAvB7qC,KAAK4jJ,eAAL,OACA,GAAM5jJ,KAAK4jJ,kB,QAAX,S,qCAIF,YAAAnvG,OAAN,W,iGACkC,MAA1Bz0C,KAAK6jJ,kBAAL,MACA,GAAM7jJ,KAAK6jJ,qB,OAAX,S,mCAIF,YAAAj+D,uBAAN,SAA6Bj7D,EAAiB48B,G,0FAC1C,SAAMvnD,KAAKw3C,eAAe0iB,KAAK,EAAA1iD,iBAAiBU,gBAAiByS,I,OACjE,OADA,SACA,GAAM3qB,KAAKw3C,eAAe0iB,KAAK,EAAA1iD,iBAAiBW,sBAAuBovC,I,OACvE,OADA,SACA,GAAMvnD,KAAKge,cAAc83G,a,OACzB,OADA,SACA,GAAM91H,KAAKm0C,aAAaqsG,gB,cAAxB,S,YAGE,YAAA3hD,aAAN,W,kGACyB,SAAM7+F,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBuB,e,OACpD,OADlBA,EAAe,SACG,GAAM/Y,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBsB,kB,OAC/E,OADMA,EAAkB,SACjB,CAAC,EAAD,CAAiB,MAAhBC,EAAyC,MAAnBD,YAG5B,YAAAkmF,mBAAN,W,0FACW,SAAMh/F,KAAKw3C,eAAev5C,IAAa,EAAAuZ,iBAAiB4B,qB,OAA/D,MAAO,CAAP,EAAO,kBAGL,YAAAisE,gBAAN,W,oGACyB,SAAMrlF,KAAKw3C,eAAev5C,IAAY,EAAAuZ,iBAAiBU,kB,OAExE,OAFE0sE,EAAe,SAEjB,GAAM5kF,KAAKwxB,cAAc0Q,oBAAoB,EAAA5qB,WAAW0gD,sB,cAAxD,SACe,GAAMh4D,KAAKwxB,cAAckG,OAAO,EAAApgB,WAAW0gD,sBAD1D,M,cACMt3C,EAAS,SAEXiK,EAAU1e,KAAKgsH,IAAIrzC,EAAclkE,EAAO,GAAGllB,KAAKy3G,UAEhC,MAAhBruB,GAAwBj6D,EAAU,KAClCA,EAAUjK,EAAO,GAAGllB,KAAKy3G,SAIzBruB,IAAiBj6D,EAAjB,MACA,GAAM3qB,KAAKw3C,eAAe0iB,KAAK,EAAA1iD,iBAAiBU,gBAAiByS,I,OAAjE,S,iBAGJ,MAAO,CAAP,EAAOA,G,OAGX,MAAO,CAAP,EAAOi6D,WAGX,YAAAqD,MAAA,WAGI,OAFAjoF,KAAKqgG,kBAAmB,EACxBrgG,KAAK8Y,gBAAkB,KAChB9Y,KAAKw3C,eAAe3vC,OAAO,EAAA2P,iBAAiBuB,eAE3D,EAhKA,GAAa,EAAAgE,uB,++CCnBb,cAKA,QAEA,UAGA,aAMI,WAAoB3N,EAAqB4R,GAArB,KAAA5R,MAAqB,KAAA4R,uBACrChhB,KAAKu8F,YAA+B,IAAfntF,EAAImtF,OAAyBntF,EAAImtF,OAAS,KAC/Dv8F,KAAKw8F,OAAYx8F,KAAKu8F,aAAuC,IAAtBntF,EAAImtF,OAAOC,OAA0BptF,EAAImtF,OAAOC,OAAS,KAChGx8F,KAAKyiG,KAAOzhF,EAAqByhF,OACjC,IAAM0hD,EAAK/0I,EAAIE,UAAUC,UACzBvP,KAAKokJ,YAAcpjI,EAAqBsuF,aACnC60C,EAAGl3I,QAAQ,iBAAmB,GAAKk3I,EAAGl3I,QAAQ,gBAAkB,GAqT7E,OAlTU,YAAAywE,OAAN,SAAanoE,EAAgCwgH,EAA4BsuB,EACrE7tB,G,gHACA,OAAIx2H,KAAKyiG,MAAQziG,KAAKokJ,aACZE,EAAyB,WAAdD,EAAyB,GAAK,GACzCE,EAAgBvkJ,KAAKwkJ,aAAajvI,GAClCkvI,EAAYzkJ,KAAKwkJ,aAAazuB,GAC9B2uB,EAAmBC,EAAcjnE,OAAO6mE,EAAeE,EAAWjuB,EAAY8tB,EAAUD,GACvF,CAAP,EAAO,EAAA97I,MAAM6B,sBAAsBs6I,GAAiBp6I,UAGlDs6I,EAAsB,WAAdP,EAAyB,IAAM,IACvCQ,EAAc7kJ,KAAK8kJ,MAAMvvI,GACzBwvI,EAAU/kJ,KAAK8kJ,MAAM/uB,GAErBivB,EAA6B,CAC/BpnJ,KAAM,SACNm4H,KAAMgvB,EACNvuB,WAAYA,EACZv3D,KAAM,CAAErhE,KAAMoC,KAAKilJ,qBAAqBZ,KAG7B,GAAMrkJ,KAAKw8F,OAAO0oD,UAAU,MAAOL,EAAa,CAAEjnJ,KAAM,WACnE,EAAO,CAAC,iB,OACL,OAFDunJ,EAAS,SAER,GAAMnlJ,KAAKw8F,OAAO4oD,WAAWJ,EAAcG,EAAQP,I,OAA1D,MAAO,CAAP,EAAO,kBAGL,YAAAvuB,KAAN,SAAWgvB,EAAkBtvB,EAA4B35D,EACrDkpF,EAAwBjB,G,sGAWT,OAVTU,EAAU/kJ,KAAK8kJ,MAAM/uB,GACrBwvB,EAAUvlJ,KAAK8kJ,MAAM1oF,GAErBopF,EAAyB,CAC3B5nJ,KAAM,OACNm4H,KAAMgvB,EACN3oF,KAAMmpF,EACNtmF,KAAM,CAAErhE,KAAMoC,KAAKilJ,qBAAqBZ,KAG7B,GAAMrkJ,KAAKw8F,OAAO0oD,UAAU,MAAOG,EAAK,CAAEznJ,KAAM,SAC3D,EAAO,CAAC,gB,OACL,OAFDunJ,EAAS,SAER,GAAMnlJ,KAAKw8F,OAAO4oD,WAAWI,EAAmBL,EAAyB,EAAjBG,I,OAA/D,MAAO,CAAP,EAAO,kBAIL,YAAAzwB,WAAN,SAAiB4wB,EAAkBrpF,EAA4BkpF,EAC3DjB,G,kHAEA,GAAIiB,EAAiB,KADfI,EAAwB,WAAdrB,EAAyB,GAAK,IAE1C,MAAM,IAAIlhJ,MAAM,gCAGpB,GADe,IAAIiG,WAAWq8I,GACnBzpJ,OAAS0pJ,EAChB,MAAM,IAAIviJ,MAAM,qBAEdoiJ,EAAUvlJ,KAAK8kJ,MAAM1oF,GACrBupF,EAAU,IAAIv8I,WAAWm8I,GAC3BK,EAAmB,EACnBC,EAAY,IAAIz8I,WAAW,GACzBvK,EAAIoN,KAAKosH,KAAKitB,EAAiBI,GAC/BI,EAAM,IAAI18I,WAAWvK,EAAI6mJ,GACtB5pJ,EAAI,E,wBAAGA,EAAI+C,IACVP,EAAI,IAAI8K,WAAWy8I,EAAU7pJ,OAAS2pJ,EAAQ3pJ,OAAS,IAC3D0J,IAAImgJ,GACNvnJ,EAAEoH,IAAIigJ,EAASE,EAAU7pJ,QACzBsC,EAAEoH,IAAI,CAAC5J,EAAI,GAAIwC,EAAEtC,OAAS,G,EACVoN,WAAU,KAAC,GAAMpJ,KAAK+4H,KAAKz6H,EAAEgM,OAAQm7I,EAAKpB,KALzC,M,OAQjB,GAHAwB,EAAY,YAAIz8I,WAAU,QAAC,YAC3B08I,EAAIpgJ,IAAImgJ,EAAWD,IACnBA,GAAoBC,EAAU7pJ,SACNspJ,EACpB,Y,wBATexpJ,I,aAYvB,MAAO,CAAP,EAAOgqJ,EAAI1mJ,MAAM,EAAGkmJ,GAAgBh7I,gBAGlC,YAAA20D,KAAN,SAAW5gE,EAA6BgmJ,G,oGACpC,OAAKrkJ,KAAKyiG,MAAsB,SAAd4hD,GAAuC,QAAdA,GACjC0B,EAAmB,QAAd1B,EAAsBM,EAAMoB,GAAGC,IAAItnJ,SAAWimJ,EAAMoB,GAAGE,KAAKvnJ,SACjEwnJ,EAAalmJ,KAAKwkJ,aAAanmJ,GACrC0nJ,EAAGI,OAAOD,EAAY,OACf,CAAP,EAAO,EAAA39I,MAAM6B,sBAAsB27I,EAAGK,SAAS5qJ,MAAM8O,UAGnD+7I,EAAWrmJ,KAAK8kJ,MAAMzmJ,GACrB,GAAM2B,KAAKw8F,OAAO4pD,OAAO,CAAExoJ,KAAMoC,KAAKilJ,qBAAqBZ,IAAcgC,K,OAAhF,MAAO,CAAP,EAAO,kBAGL,YAAAttB,KAAN,SAAW16H,EAAoBM,EAAkB0lJ,G,wGAC7C,OAAIrkJ,KAAKyiG,MAAsB,WAAd4hD,GACPtrB,EAAQ4rB,EAAc5rB,KAAKr6H,SAC3BwjJ,EAAWliJ,KAAKwkJ,aAAa7lJ,GAC7BunJ,EAAalmJ,KAAKwkJ,aAAanmJ,GACrC06H,EAAK/mG,MAAMqyH,EAAWnC,GACtBnpB,EAAKotB,OAAOD,EAAY,OACjB,CAAP,EAAO,EAAA39I,MAAM6B,sBAAsB2uH,EAAKqtB,SAAS5qJ,MAAM8O,UAGrDg8I,EAAmB,CACrB1oJ,KAAM,OACNqhE,KAAM,CAAErhE,KAAMoC,KAAKilJ,qBAAqBZ,KAG7B,GAAMrkJ,KAAKw8F,OAAO0oD,UAAU,MAAOvmJ,EAAK2nJ,GAAkB,EAAO,CAAC,W,OAC1E,OADDnB,EAAS,SACR,GAAMnlJ,KAAKw8F,OAAO4lD,KAAKkE,EAAkBnB,EAAQ9mJ,I,OAAxD,MAAO,CAAP,EAAO,kBAML,YAAA+P,QAAN,SAAcH,EAAgBC,G,8GACX,SAAMlO,KAAKs/C,YAAY,K,OAKvB,OALTxiB,EAAS,SACTwpH,EAAmB,CACrB1oJ,KAAM,OACNqhE,KAAM,CAAErhE,KAAM,YAEH,GAAMoC,KAAKw8F,OAAO0oD,UAAU,MAAOpoH,EAAQwpH,GAAkB,EAAO,CAAC,U,OACvE,OADPnB,EAAS,SACF,GAAMnlJ,KAAKw8F,OAAO4lD,KAAKkE,EAAkBnB,EAAQl3I,I,OACjD,OADPs4I,EAAO,SACA,GAAMvmJ,KAAKw8F,OAAO4lD,KAAKkE,EAAkBnB,EAAQj3I,I,OAE9D,GAFMs4I,EAAO,SAETD,EAAK97I,aAAe+7I,EAAK/7I,WACzB,MAAO,CAAP,GAAO,GAKX,IAFMg8I,EAAO,IAAIr9I,WAAWm9I,GACtBG,EAAO,IAAIt9I,WAAWo9I,GACnB1qJ,EAAI,EAAGA,EAAI4qJ,EAAK1qJ,OAAQF,IAC7B,GAAI2qJ,EAAK3qJ,KAAO4qJ,EAAK5qJ,GACjB,MAAO,CAAP,GAAO,GAIf,MAAO,CAAP,GAAO,WAGX,YAAAs9H,SAAA,SAAS/6H,EAAeM,EAAa0lJ,GACjC,IAAMtrB,EAAQ4rB,EAAc5rB,KAAKr6H,SACjCq6H,EAAK/mG,MAAMqyH,EAAW1lJ,GACtBo6H,EAAKotB,OAAO9nJ,GACZ,IAAMmL,EAAQuvH,EAAKqtB,SAASO,WAC5B,OAAOxrI,QAAQC,QAAQ5R,IAGrB,YAAA8vH,YAAN,SAAkBrrH,EAAWC,G,8GACZ,SAAMlO,KAAKs/C,YAAY,K,OAGpC,IAHMsnG,EAAO,SACPp9I,EAAQ,IAAIq9I,YAAYD,GACxBt8I,EAASq6I,EAAMmC,KAAKC,eACjBjrJ,EAAI,EAAGA,EAAI0N,EAAMxN,OAAQF,IAC9BwO,EAAO08I,SAASx9I,EAAM1N,IAc1B,OAZMghC,EAASxyB,EAAOq8I,YAEhB5tB,EAAQ4rB,EAAc5rB,KAAKr6H,UAC5BszB,MAAM,SAAU8K,GACrBi8F,EAAKotB,OAAOl4I,GACNs4I,EAAOxtB,EAAKqtB,SAASO,WAE3B5tB,EAAK/mG,MAAM,KAAM,MACjB+mG,EAAKotB,OAAOj4I,GACNs4I,EAAOztB,EAAKqtB,SAASO,WAGpB,CAAP,EADeJ,IAASC,WAItB,YAAA1vB,WAAN,SAAiBt7H,EAAmByhB,EAAiBte,G,gGAClC,SAAMqB,KAAKw8F,OAAO0oD,UAAU,MAAOvmJ,EAAK,CAAEf,KAAM,YAAoB,EAAO,CAAC,a,OACpF,OADDunJ,EAAS,SACR,GAAMnlJ,KAAKw8F,OAAOj7D,QAAQ,CAAE3jC,KAAM,UAAWqf,GAAIA,GAAMkoI,EAAQ3pJ,I,OAAtE,MAAO,CAAP,EAAO,kBAGX,YAAA29H,yBAAA,SAAyB39H,EAAcyhB,EAAYC,EAAave,GAE5D,IAAMK,EAAI,IAAI,EAAAioJ,kBA8Bd,OA7BgB,MAAZtoJ,EAAIuoJ,OACJloJ,EAAE48B,OAASj9B,EAAIuoJ,KAAKC,iBACpBnoJ,EAAE89B,OAASn+B,EAAIuoJ,KAAKE,kBAGR,MAAZpoJ,EAAE48B,SACF58B,EAAE48B,OAAS+oH,EAAMmC,KAAKO,SAAS1oJ,EAAIq+B,YAEvCh+B,EAAExD,KAAOmpJ,EAAMmC,KAAKO,SAAS7rJ,GAC7BwD,EAAEie,GAAK0nI,EAAMmC,KAAKO,SAASpqI,GAC3Bje,EAAE85H,QAAU95H,EAAEie,GAAKje,EAAExD,KACL,MAAZwD,EAAE89B,QAAmC,MAAjBn+B,EAAIs+B,YACxBj+B,EAAE89B,OAAS6nH,EAAMmC,KAAKO,SAAS1oJ,EAAIs+B,YAE5B,MAAP/f,IACAle,EAAEke,IAAMynI,EAAMmC,KAAKO,SAASnqI,IAIhB,MAAZve,EAAIuoJ,OACJvoJ,EAAIuoJ,KAAO,IAEkB,MAA7BvoJ,EAAIuoJ,KAAKC,mBACTxoJ,EAAIuoJ,KAAKC,iBAAmBnoJ,EAAE48B,QAElB,MAAZ58B,EAAE89B,QAA+C,MAA7Bn+B,EAAIuoJ,KAAKE,mBAC7BzoJ,EAAIuoJ,KAAKE,iBAAmBpoJ,EAAE89B,QAG3B99B,GAGX,YAAAu6H,eAAA,SAAe+tB,GACX,IAAMC,EAAc5C,EAAcmC,KAAKC,aAAaO,EAAW9rJ,MACzDk8H,EAAYitB,EAAcjyI,OAAO80I,eAAe,UAAWF,EAAW1rH,QAC5E87F,EAAS1lG,MAAM,CAAE/U,GAAIqqI,EAAWrqI,KAChCy6G,EAASyuB,OAAOoB,GAChB7vB,EAAS+vB,SACT,IAAMlsI,EAAMm8G,EAAShsH,OAAOnB,SAAS,QACrC,OAAO4Q,QAAQC,QAAQG,IAGrB,YAAAi+G,WAAN,SAAiBh+H,EAAmByhB,EAAiBte,G,gGAClC,SAAMqB,KAAKw8F,OAAO0oD,UAAU,MAAOvmJ,EAAK,CAAEf,KAAM,YAAoB,EAAO,CAAC,a,OACpF,OADDunJ,EAAS,SACR,GAAMnlJ,KAAKw8F,OAAOlhF,QAAQ,CAAE1d,KAAM,UAAWqf,GAAIA,GAAMkoI,EAAQ3pJ,I,OAAtE,MAAO,CAAP,EAAO,kBAGL,YAAA69C,WAAN,SAAiB79C,EAAmBw5C,EAAwBqvG,G,kGAOzC,OAJTqD,EAAY,CACd9pJ,KAAM,WACNqhE,KAAM,CAAErhE,KAAMoC,KAAKilJ,qBAAqBZ,KAE7B,GAAMrkJ,KAAKw8F,OAAO0oD,UAAU,OAAQlwG,EAAW0yG,GAAW,EAAO,CAAC,a,OAC1E,OADDvC,EAAS,SACR,GAAMnlJ,KAAKw8F,OAAOj7D,QAAQmmH,EAAWvC,EAAQ3pJ,I,OAApD,MAAO,CAAP,EAAO,kBAGL,YAAAiuE,WAAN,SAAiBjuE,EAAmB0jD,EAAyBmlG,G,kGAO1C,OAJTqD,EAAY,CACd9pJ,KAAM,WACNqhE,KAAM,CAAErhE,KAAMoC,KAAKilJ,qBAAqBZ,KAE7B,GAAMrkJ,KAAKw8F,OAAO0oD,UAAU,QAAShmG,EAAYwoG,GAAW,EAAO,CAAC,a,OAC5E,OADDvC,EAAS,SACR,GAAMnlJ,KAAKw8F,OAAOlhF,QAAQosI,EAAWvC,EAAQ3pJ,I,OAApD,MAAO,CAAP,EAAO,kBAGL,YAAAm5H,oBAAN,SAA0Bz1E,G,wGAMA,OALhBwoG,EAAY,CACd9pJ,KAAM,WAENqhE,KAAM,CAAErhE,KAAMoC,KAAKilJ,qBAAqB,UAEtB,GAAMjlJ,KAAKw8F,OAAO0oD,UAAU,QAAShmG,EAAYwoG,GAAW,EAAM,CAAC,a,OACnE,OADhBC,EAAgB,SACA,GAAM3nJ,KAAKw8F,OAAOorD,UAAU,MAAOD,I,OAQpC,OARfE,EAAgB,SAChBC,EAAqB,CACvBC,IAAK,MACLvmJ,EAAGqmJ,EAAcrmJ,EACjB3C,EAAGgpJ,EAAchpJ,EACjB04H,IAAK,WACLywB,KAAK,GAEY,GAAMhoJ,KAAKw8F,OAAO0oD,UAAU,MAAO4C,EAAoBJ,GAAW,EAAM,CAAC,a,OACvF,OADDO,EAAe,SACd,GAAMjoJ,KAAKw8F,OAAOorD,UAAU,OAAQK,I,OAA3C,MAAO,CAAP,EAAO,kBAGL,YAAAhyB,mBAAN,SAAyBj6H,G,sGAQJ,OAPX0rJ,EAAY,CACd9pJ,KAAM,WACNsqJ,cAAelsJ,EACfmsJ,eAAgB,IAAI/+I,WAAW,CAAC,EAAM,EAAM,IAE5C61D,KAAM,CAAErhE,KAAMoC,KAAKilJ,qBAAqB,UAE3B,GAAMjlJ,KAAKw8F,OAAO4rD,YAAYV,GAAW,EAAM,CAAC,UAAW,a,OAC1D,OADZvoG,EAAW,SACC,GAAMn/C,KAAKw8F,OAAOorD,UAAU,OAAQzoG,EAAQnK,Y,OAC3C,OADbA,EAAY,SACC,GAAMh1C,KAAKw8F,OAAOorD,UAAU,QAASzoG,EAAQD,a,OAChE,OADMA,EAAa,SACZ,CAAC,EAAD,CAAClK,EAAWkK,YAGvB,YAAAI,YAAA,SAAYtjD,GACR,IAAMmO,EAAM,IAAIf,WAAWpN,GAE3B,OADAgE,KAAKu8F,OAAO8rD,gBAAgBl+I,GACrBgR,QAAQC,QAAQjR,EAAIG,SAGvB,YAAAw6I,MAAR,SAAczmJ,GAOV,MALuB,iBAAZ,EACD,EAAAkK,MAAMwB,gBAAgB1L,GAAOiM,OAE7BjM,GAKN,YAAAmmJ,aAAR,SAAqBnmJ,GAOjB,MALuB,iBAAZ,EACCsmJ,EAAMmC,KAAKwB,WAAWjqJ,GAEtB,EAAAkK,MAAM8C,uBAAuBhN,IAKrC,YAAA4mJ,qBAAR,SAA6BZ,GACzB,GAAkB,QAAdA,EACA,MAAM,IAAIlhJ,MAAM,sCAEpB,MAAqB,SAAdkhJ,EAAuB,QAAwB,WAAdA,EAAyB,UAAY,WAErF,EAjUA,GAAa,EAAA1tC,4B,oHCVb,mBAAa,EAAAswC,qB,yGCKb,mBAAsB,EAAAnwC,qB,2cCLtB,WAMA,SACA,QAKA,GAHA,MAGA,OAEA,Q,eAEA,cAKI,WAAYlzG,EAAoDC,EAC5DC,EAA4B+lC,GADhC,MAEI,YAAMjmC,EAA0BC,EAAgBC,IAAS,K,OAD7B,EAAA+lC,mBAJhC,EAAAzpC,GAAU,KACV,EAAAmoJ,WAAqB,E,SAFS,OASpB,YAAA5hJ,cAAV,SAAwB7B,GAAxB,WACIA,EAASI,UAAUC,KAAK,EAAAC,SAASkB,WAAU,WACvC,IAAMkiJ,EAAShhJ,MAAMC,KAAKvD,SAASwD,iBAAiB,WAChD8gJ,EAAOxsJ,OAAS,IAChB,EAAKoE,GAAKu8F,EAAG6rD,EAAO,IACpB,EAAKpoJ,GAAGoqC,MAAM,QAEd,EAAKpqC,GAAGq1I,GAAG,iBAAiB,WACxB3wI,EAAS0iC,OACT,EAAKqC,iBAAiBgB,KAAK,gBAE/B,EAAKzqC,GAAGq1I,GAAG,kBAAkB,WACzB3wI,EAAS4iC,QACT,EAAKmC,iBAAiBgB,KAAK,cACtB,EAAAtiC,MAAMO,iBACP,EAAK1I,GAAG2tB,KAAK,mBAAmBjU,WAGxC,EAAK1Z,GAAGq1I,GAAG,iBAAiB,WACxB,EAAK5rG,iBAAiBgB,KAAK,iBAE/B,EAAKzqC,GAAGq1I,GAAG,mBAAmB,WAC1B3wI,EAAS8C,SACT,EAAKiiC,iBAAiBgB,KAAK,sBAKvC/lC,EAAS6C,QAAQxC,KAAK,EAAAC,SAASkB,WAAU,WACtB,MAAX,EAAKlG,IACL,EAAKA,GAAGoqC,MAAM,Y,iCAvCjBriC,GAAY,4H,oCAAZA,EAAY,QAAZA,EAAY,O,EADzB,CACkC,gBAArB,EAAAA,gB,+DAAAA,EAAY,E,KADxB,EAAAC,c,+OChBD,WACA,Q,eAEM41F,EAAiB,CACnB,CAAEC,KAAM,KAAME,WAAY,KAG9B,2B,wCAIavD,I,gCAAAA,I,oCAHA,CAAC,EAAAwD,aAAaoX,SAASxX,IACtB,EAAAI,gB,EAFd,GAIa,EAAAxD,yB,gEAAAA,EAAqB,mCAFpB,EAAAwD,iB,+DAEDxD,EAAqB,E,KAJjC,EAAAC,S,MAAS,CACNC,QAAS,CAAC,EAAAsD,aAAaoX,SAASxX,IAChC1gG,QAAS,CAAC,EAAA8gG,kB","file":"app/main.8e5494e39b48bad5e654.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([963,2]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export abstract class I18nService {\n    locale: string;\n    supportedTranslationLocales: string[];\n    translationLocale: string;\n    collator: Intl.Collator;\n    localeNames: Map<string, string>;\n    t: (id: string, p1?: string, p2?: string, p3?: string) => string;\n    translate: (id: string, p1?: string, p2?: string, p3?: string) => string;\n}\n","import { LogLevelType } from '../enums/logLevelType';\n\nexport abstract class LogService {\n    debug: (message: string) => void;\n    info: (message: string) => void;\n    warning: (message: string) => void;\n    error: (message: string) => void;\n    write: (level: LogLevelType, message: string) => void;\n    time: (label: string) => void;\n    timeEnd: (label: string) => [number, number];\n}\n","import { DeviceType } from '../enums/deviceType';\nimport { ThemeType } from '../enums/themeType';\n\nexport abstract class PlatformUtilsService {\n    identityClientId: string;\n    getDevice: () => DeviceType;\n    getDeviceString: () => string;\n    isFirefox: () => boolean;\n    isChrome: () => boolean;\n    isEdge: () => boolean;\n    isOpera: () => boolean;\n    isVivaldi: () => boolean;\n    isSafari: () => boolean;\n    isIE: () => boolean;\n    isMacAppStore: () => boolean;\n    isViewOpen: () => Promise<boolean>;\n    launchUri: (uri: string, options?: any) => void;\n    saveFile: (win: Window, blobData: any, blobOptions: any, fileName: string) => void;\n    getApplicationVersion: () => Promise<string>;\n    supportsWebAuthn: (win: Window) => boolean;\n    supportsDuo: () => boolean;\n    showToast: (type: 'error' | 'success' | 'warning' | 'info', title: string, text: string | string[],\n        options?: any) => void;\n    showDialog: (body: string, title?: string, confirmText?: string, cancelText?: string,\n        type?: string, bodyIsHtml?: boolean) => Promise<boolean>;\n    isDev: () => boolean;\n    isSelfHost: () => boolean;\n    copyToClipboard: (text: string, options?: any) => void | boolean;\n    readFromClipboard: (options?: any) => Promise<string>;\n    supportsBiometric: () => Promise<boolean>;\n    authenticateBiometric: () => Promise<boolean>;\n    getDefaultSystemTheme: () => Promise<ThemeType.Light | ThemeType.Dark>;\n    onDefaultSystemThemeChange: (callback: ((theme: ThemeType.Light | ThemeType.Dark) => unknown)) => unknown;\n    getEffectiveTheme: () => Promise<ThemeType>;\n    supportsSecureStorage: () => boolean;\n}\n","import { PolicyType } from '../enums/policyType';\nimport { SetKeyConnectorKeyRequest } from '../models/request/account/setKeyConnectorKeyRequest';\nimport { VerifyOTPRequest } from '../models/request/account/verifyOTPRequest';\n\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\n\nimport { BitPayInvoiceRequest } from '../models/request/bitPayInvoiceRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkRestoreRequest } from '../models/request/cipherBulkRestoreRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { DeleteRecoverRequest } from '../models/request/deleteRecoverRequest';\nimport { EmailRequest } from '../models/request/emailRequest';\nimport { EmailTokenRequest } from '../models/request/emailTokenRequest';\nimport { EmergencyAccessAcceptRequest } from '../models/request/emergencyAccessAcceptRequest';\nimport { EmergencyAccessConfirmRequest } from '../models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessInviteRequest } from '../models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessPasswordRequest } from '../models/request/emergencyAccessPasswordRequest';\nimport { EmergencyAccessUpdateRequest } from '../models/request/emergencyAccessUpdateRequest';\nimport { EventRequest } from '../models/request/eventRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { GroupRequest } from '../models/request/groupRequest';\nimport { IapCheckRequest } from '../models/request/iapCheckRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportDirectoryRequest } from '../models/request/importDirectoryRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KdfRequest } from '../models/request/kdfRequest';\nimport { KeyConnectorUserKeyRequest } from '../models/request/keyConnectorUserKeyRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { OrganizationSponsorshipCreateRequest } from '../models/request/organization/organizationSponsorshipCreateRequest';\nimport { OrganizationSponsorshipRedeemRequest } from '../models/request/organization/organizationSponsorshipRedeemRequest';\nimport { OrganizationSsoRequest } from '../models/request/organization/organizationSsoRequest';\nimport { OrganizationCreateRequest } from '../models/request/organizationCreateRequest';\nimport { OrganizationImportRequest } from '../models/request/organizationImportRequest';\nimport { OrganizationKeysRequest } from '../models/request/organizationKeysRequest';\nimport { OrganizationSubscriptionUpdateRequest } from '../models/request/organizationSubscriptionUpdateRequest';\nimport { OrganizationTaxInfoUpdateRequest } from '../models/request/organizationTaxInfoUpdateRequest';\nimport { OrganizationUpdateRequest } from '../models/request/organizationUpdateRequest';\nimport { OrganizationUpgradeRequest } from '../models/request/organizationUpgradeRequest';\nimport { OrganizationUserAcceptRequest } from '../models/request/organizationUserAcceptRequest';\nimport { OrganizationUserBulkConfirmRequest } from '../models/request/organizationUserBulkConfirmRequest';\nimport { OrganizationUserBulkRequest } from '../models/request/organizationUserBulkRequest';\nimport { OrganizationUserConfirmRequest } from '../models/request/organizationUserConfirmRequest';\nimport { OrganizationUserInviteRequest } from '../models/request/organizationUserInviteRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from '../models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { OrganizationUserResetPasswordRequest } from '../models/request/organizationUserResetPasswordRequest';\nimport { OrganizationUserUpdateGroupsRequest } from '../models/request/organizationUserUpdateGroupsRequest';\nimport { OrganizationUserUpdateRequest } from '../models/request/organizationUserUpdateRequest';\nimport { PasswordHintRequest } from '../models/request/passwordHintRequest';\nimport { PasswordRequest } from '../models/request/passwordRequest';\nimport { PaymentRequest } from '../models/request/paymentRequest';\nimport { PolicyRequest } from '../models/request/policyRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { ProviderAddOrganizationRequest } from '../models/request/provider/providerAddOrganizationRequest';\nimport { ProviderOrganizationCreateRequest } from '../models/request/provider/providerOrganizationCreateRequest';\nimport { ProviderSetupRequest } from '../models/request/provider/providerSetupRequest';\nimport { ProviderUpdateRequest } from '../models/request/provider/providerUpdateRequest';\nimport { ProviderUserAcceptRequest } from '../models/request/provider/providerUserAcceptRequest';\nimport { ProviderUserBulkConfirmRequest } from '../models/request/provider/providerUserBulkConfirmRequest';\nimport { ProviderUserBulkRequest } from '../models/request/provider/providerUserBulkRequest';\nimport { ProviderUserConfirmRequest } from '../models/request/provider/providerUserConfirmRequest';\nimport { ProviderUserInviteRequest } from '../models/request/provider/providerUserInviteRequest';\nimport { ProviderUserUpdateRequest } from '../models/request/provider/providerUserUpdateRequest';\nimport { RegisterRequest } from '../models/request/registerRequest';\nimport { SeatRequest } from '../models/request/seatRequest';\nimport { SecretVerificationRequest } from '../models/request/secretVerificationRequest';\nimport { SelectionReadOnlyRequest } from '../models/request/selectionReadOnlyRequest';\nimport { SendAccessRequest } from '../models/request/sendAccessRequest';\nimport { SendRequest } from '../models/request/sendRequest';\nimport { SetPasswordRequest } from '../models/request/setPasswordRequest';\nimport { StorageRequest } from '../models/request/storageRequest';\nimport { TaxInfoUpdateRequest } from '../models/request/taxInfoUpdateRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\nimport { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest';\nimport { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest';\nimport { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest';\nimport { UpdateDomainsRequest } from '../models/request/updateDomainsRequest';\nimport { UpdateKeyRequest } from '../models/request/updateKeyRequest';\nimport { UpdateProfileRequest } from '../models/request/updateProfileRequest';\nimport { UpdateTempPasswordRequest } from '../models/request/updateTempPasswordRequest';\nimport { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest';\nimport { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest';\nimport { UpdateTwoFactorEmailRequest } from '../models/request/updateTwoFactorEmailRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from '../models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from '../models/request/updateTwoFactorWebAuthnRequest';\nimport { UpdateTwoFactorYubioOtpRequest } from '../models/request/updateTwoFactorYubioOtpRequest';\nimport { VerifyBankRequest } from '../models/request/verifyBankRequest';\nimport { VerifyDeleteRecoverRequest } from '../models/request/verifyDeleteRecoverRequest';\nimport { VerifyEmailRequest } from '../models/request/verifyEmailRequest';\n\nimport { ApiKeyResponse } from '../models/response/apiKeyResponse';\nimport { AttachmentResponse } from '../models/response/attachmentResponse';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { BillingResponse } from '../models/response/billingResponse';\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport {\n    CollectionGroupDetailsResponse,\n    CollectionResponse,\n} from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport {\n    EmergencyAccessGranteeDetailsResponse,\n    EmergencyAccessGrantorDetailsResponse,\n    EmergencyAccessTakeoverResponse,\n    EmergencyAccessViewResponse\n} from '../models/response/emergencyAccessResponse';\nimport { EventResponse } from '../models/response/eventResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n    GroupDetailsResponse,\n    GroupResponse,\n} from '../models/response/groupResponse';\nimport { IdentityCaptchaResponse } from '../models/response/identityCaptchaResponse';\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\nimport { KeyConnectorUserKeyResponse } from '../models/response/keyConnectorUserKeyResponse';\nimport { ListResponse } from '../models/response/listResponse';\nimport { OrganizationSsoResponse } from '../models/response/organization/organizationSsoResponse';\nimport { OrganizationAutoEnrollStatusResponse } from '../models/response/organizationAutoEnrollStatusResponse';\nimport { OrganizationKeysResponse } from '../models/response/organizationKeysResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { OrganizationSubscriptionResponse } from '../models/response/organizationSubscriptionResponse';\nimport { OrganizationUserBulkPublicKeyResponse } from '../models/response/organizationUserBulkPublicKeyResponse';\nimport { OrganizationUserBulkResponse } from '../models/response/organizationUserBulkResponse';\nimport {\n    OrganizationUserDetailsResponse,\n    OrganizationUserResetPasswordDetailsReponse,\n    OrganizationUserUserDetailsResponse,\n} from '../models/response/organizationUserResponse';\nimport { PaymentResponse } from '../models/response/paymentResponse';\nimport { PlanResponse } from '../models/response/planResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { PreloginResponse } from '../models/response/preloginResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { ProviderOrganizationOrganizationDetailsResponse, ProviderOrganizationResponse } from '../models/response/provider/providerOrganizationResponse';\nimport { ProviderResponse } from '../models/response/provider/providerResponse';\nimport { ProviderUserBulkPublicKeyResponse } from '../models/response/provider/providerUserBulkPublicKeyResponse';\nimport { ProviderUserBulkResponse } from '../models/response/provider/providerUserBulkResponse';\nimport { ProviderUserResponse, ProviderUserUserDetailsResponse } from '../models/response/provider/providerUserResponse';\nimport { SelectionReadOnlyResponse } from '../models/response/selectionReadOnlyResponse';\nimport { SendAccessResponse } from '../models/response/sendAccessResponse';\nimport { SendFileDownloadDataResponse } from '../models/response/sendFileDownloadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\nimport { SendResponse } from '../models/response/sendResponse';\nimport { SubscriptionResponse } from '../models/response/subscriptionResponse';\nimport { SyncResponse } from '../models/response/syncResponse';\nimport { TaxInfoResponse } from '../models/response/taxInfoResponse';\nimport { TaxRateResponse } from '../models/response/taxRateResponse';\nimport { TwoFactorAuthenticatorResponse } from '../models/response/twoFactorAuthenticatorResponse';\nimport { TwoFactorDuoResponse } from '../models/response/twoFactorDuoResponse';\nimport { TwoFactorEmailResponse } from '../models/response/twoFactorEmailResponse';\nimport { TwoFactorProviderResponse } from '../models/response/twoFactorProviderResponse';\nimport { TwoFactorRecoverResponse } from '../models/response/twoFactorRescoverResponse';\nimport { ChallengeResponse, TwoFactorWebAuthnResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { TwoFactorYubiKeyResponse } from '../models/response/twoFactorYubiKeyResponse';\nimport { UserKeyResponse } from '../models/response/userKeyResponse';\n\nimport { SendAccessView } from '../models/view/sendAccessView';\n\nexport abstract class ApiService {\n    postIdentityToken: (request: TokenRequest) => Promise<IdentityTokenResponse | IdentityTwoFactorResponse | IdentityCaptchaResponse>;\n    refreshIdentityToken: () => Promise<any>;\n\n    getProfile: () => Promise<ProfileResponse>;\n    getUserBilling: () => Promise<BillingResponse>;\n    getUserSubscription: () => Promise<SubscriptionResponse>;\n    getTaxInfo: () => Promise<TaxInfoResponse>;\n    putProfile: (request: UpdateProfileRequest) => Promise<ProfileResponse>;\n    putTaxInfo: (request: TaxInfoUpdateRequest) => Promise<any>;\n    postPrelogin: (request: PreloginRequest) => Promise<PreloginResponse>;\n    postEmailToken: (request: EmailTokenRequest) => Promise<any>;\n    postEmail: (request: EmailRequest) => Promise<any>;\n    postPassword: (request: PasswordRequest) => Promise<any>;\n    setPassword: (request: SetPasswordRequest) => Promise<any>;\n    postSetKeyConnectorKey: (request: SetKeyConnectorKeyRequest) => Promise<any>;\n    postSecurityStamp: (request: SecretVerificationRequest) => Promise<any>;\n    deleteAccount: (request: SecretVerificationRequest) => Promise<any>;\n    getAccountRevisionDate: () => Promise<number>;\n    postPasswordHint: (request: PasswordHintRequest) => Promise<any>;\n    postRegister: (request: RegisterRequest) => Promise<any>;\n    postPremium: (data: FormData) => Promise<PaymentResponse>;\n    postIapCheck: (request: IapCheckRequest) => Promise<any>;\n    postReinstatePremium: () => Promise<any>;\n    postCancelPremium: () => Promise<any>;\n    postAccountStorage: (request: StorageRequest) => Promise<PaymentResponse>;\n    postAccountPayment: (request: PaymentRequest) => Promise<any>;\n    postAccountLicense: (data: FormData) => Promise<any>;\n    postAccountKey: (request: UpdateKeyRequest) => Promise<any>;\n    postAccountKeys: (request: KeysRequest) => Promise<any>;\n    postAccountVerifyEmail: () => Promise<any>;\n    postAccountVerifyEmailToken: (request: VerifyEmailRequest) => Promise<any>;\n    postAccountVerifyPassword: (request: SecretVerificationRequest) => Promise<any>;\n    postAccountRecoverDelete: (request: DeleteRecoverRequest) => Promise<any>;\n    postAccountRecoverDeleteToken: (request: VerifyDeleteRecoverRequest) => Promise<any>;\n    postAccountKdf: (request: KdfRequest) => Promise<any>;\n    postUserApiKey: (id: string, request: SecretVerificationRequest) => Promise<ApiKeyResponse>;\n    postUserRotateApiKey: (id: string, request: SecretVerificationRequest) => Promise<ApiKeyResponse>;\n    putUpdateTempPassword: (request: UpdateTempPasswordRequest) => Promise<any>;\n    postAccountRequestOTP: () => Promise<void>;\n    postAccountVerifyOTP: (request: VerifyOTPRequest) => Promise<void>;\n    postConvertToKeyConnector: () => Promise<void>;\n\n    getFolder: (id: string) => Promise<FolderResponse>;\n    postFolder: (request: FolderRequest) => Promise<FolderResponse>;\n    putFolder: (id: string, request: FolderRequest) => Promise<FolderResponse>;\n    deleteFolder: (id: string) => Promise<any>;\n\n    getSend: (id: string) => Promise<SendResponse>;\n    postSendAccess: (id: string, request: SendAccessRequest, apiUrl?: string) => Promise<SendAccessResponse>;\n    getSends: () => Promise<ListResponse<SendResponse>>;\n    postSend: (request: SendRequest) => Promise<SendResponse>;\n    postFileTypeSend: (request: SendRequest) => Promise<SendFileUploadDataResponse>;\n    postSendFile: (sendId: string, fileId: string, data: FormData) => Promise<any>;\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    postSendFileLegacy: (data: FormData) => Promise<SendResponse>;\n    putSend: (id: string, request: SendRequest) => Promise<SendResponse>;\n    putSendRemovePassword: (id: string) => Promise<SendResponse>;\n    deleteSend: (id: string) => Promise<any>;\n    getSendFileDownloadData: (send: SendAccessView, request: SendAccessRequest, apiUrl?: string) => Promise<SendFileDownloadDataResponse>;\n    renewSendFileUploadUrl: (sendId: string, fileId: string) => Promise<SendFileUploadDataResponse>;\n\n    getCipher: (id: string) => Promise<CipherResponse>;\n    getCipherAdmin: (id: string) => Promise<CipherResponse>;\n    getAttachmentData: (cipherId: string, attachmentId: string, emergencyAccessId?: string) => Promise<AttachmentResponse>;\n    getCiphersOrganization: (organizationId: string) => Promise<ListResponse<CipherResponse>>;\n    postCipher: (request: CipherRequest) => Promise<CipherResponse>;\n    postCipherCreate: (request: CipherCreateRequest) => Promise<CipherResponse>;\n    postCipherAdmin: (request: CipherCreateRequest) => Promise<CipherResponse>;\n    putCipher: (id: string, request: CipherRequest) => Promise<CipherResponse>;\n    putCipherAdmin: (id: string, request: CipherRequest) => Promise<CipherResponse>;\n    deleteCipher: (id: string) => Promise<any>;\n    deleteCipherAdmin: (id: string) => Promise<any>;\n    deleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise<any>;\n    deleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise<any>;\n    putMoveCiphers: (request: CipherBulkMoveRequest) => Promise<any>;\n    putShareCipher: (id: string, request: CipherShareRequest) => Promise<CipherResponse>;\n    putShareCiphers: (request: CipherBulkShareRequest) => Promise<any>;\n    putCipherCollections: (id: string, request: CipherCollectionsRequest) => Promise<any>;\n    putCipherCollectionsAdmin: (id: string, request: CipherCollectionsRequest) => Promise<any>;\n    postPurgeCiphers: (request: SecretVerificationRequest, organizationId?: string) => Promise<any>;\n    postImportCiphers: (request: ImportCiphersRequest) => Promise<any>;\n    postImportOrganizationCiphers: (organizationId: string, request: ImportOrganizationCiphersRequest) => Promise<any>;\n    putDeleteCipher: (id: string) => Promise<any>;\n    putDeleteCipherAdmin: (id: string) => Promise<any>;\n    putDeleteManyCiphers: (request: CipherBulkDeleteRequest) => Promise<any>;\n    putDeleteManyCiphersAdmin: (request: CipherBulkDeleteRequest) => Promise<any>;\n    putRestoreCipher: (id: string) => Promise<CipherResponse>;\n    putRestoreCipherAdmin: (id: string) => Promise<CipherResponse>;\n    putRestoreManyCiphers: (request: CipherBulkRestoreRequest) => Promise<ListResponse<CipherResponse>>;\n\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    postCipherAttachmentLegacy: (id: string, data: FormData) => Promise<CipherResponse>;\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    postCipherAttachmentAdminLegacy: (id: string, data: FormData) => Promise<CipherResponse>;\n    postCipherAttachment: (id: string, request: AttachmentRequest) => Promise<AttachmentUploadDataResponse>;\n    deleteCipherAttachment: (id: string, attachmentId: string) => Promise<any>;\n    deleteCipherAttachmentAdmin: (id: string, attachmentId: string) => Promise<any>;\n    postShareCipherAttachment: (id: string, attachmentId: string, data: FormData,\n        organizationId: string) => Promise<any>;\n    renewAttachmentUploadUrl: (id: string, attachmentId: string) => Promise<AttachmentUploadDataResponse>;\n    postAttachmentFile: (id: string, attachmentId: string, data: FormData) => Promise<any>;\n\n    getCollectionDetails: (organizationId: string, id: string) => Promise<CollectionGroupDetailsResponse>;\n    getUserCollections: () => Promise<ListResponse<CollectionResponse>>;\n    getCollections: (organizationId: string) => Promise<ListResponse<CollectionResponse>>;\n    getCollectionUsers: (organizationId: string, id: string) => Promise<SelectionReadOnlyResponse[]>;\n    postCollection: (organizationId: string, request: CollectionRequest) => Promise<CollectionResponse>;\n    putCollectionUsers: (organizationId: string, id: string, request: SelectionReadOnlyRequest[]) => Promise<any>;\n    putCollection: (organizationId: string, id: string, request: CollectionRequest) => Promise<CollectionResponse>;\n    deleteCollection: (organizationId: string, id: string) => Promise<any>;\n    deleteCollectionUser: (organizationId: string, id: string, organizationUserId: string) => Promise<any>;\n\n    getGroupDetails: (organizationId: string, id: string) => Promise<GroupDetailsResponse>;\n    getGroups: (organizationId: string) => Promise<ListResponse<GroupResponse>>;\n    getGroupUsers: (organizationId: string, id: string) => Promise<string[]>;\n    postGroup: (organizationId: string, request: GroupRequest) => Promise<GroupResponse>;\n    putGroup: (organizationId: string, id: string, request: GroupRequest) => Promise<GroupResponse>;\n    putGroupUsers: (organizationId: string, id: string, request: string[]) => Promise<any>;\n    deleteGroup: (organizationId: string, id: string) => Promise<any>;\n    deleteGroupUser: (organizationId: string, id: string, organizationUserId: string) => Promise<any>;\n\n    getPolicy: (organizationId: string, type: PolicyType) => Promise<PolicyResponse>;\n    getPolicies: (organizationId: string) => Promise<ListResponse<PolicyResponse>>;\n    getPoliciesByToken: (organizationId: string, token: string, email: string, organizationUserId: string) =>\n        Promise<ListResponse<PolicyResponse>>;\n    putPolicy: (organizationId: string, type: PolicyType, request: PolicyRequest) => Promise<PolicyResponse>;\n\n    getOrganizationUser: (organizationId: string, id: string) => Promise<OrganizationUserDetailsResponse>;\n    getOrganizationUserGroups: (organizationId: string, id: string) => Promise<string[]>;\n    getOrganizationUsers: (organizationId: string) => Promise<ListResponse<OrganizationUserUserDetailsResponse>>;\n    getOrganizationUserResetPasswordDetails: (organizationId: string, id: string)\n        => Promise<OrganizationUserResetPasswordDetailsReponse>;\n    postOrganizationUserInvite: (organizationId: string, request: OrganizationUserInviteRequest) => Promise<any>;\n    postOrganizationUserReinvite: (organizationId: string, id: string) => Promise<any>;\n    postManyOrganizationUserReinvite: (organizationId: string, request: OrganizationUserBulkRequest) => Promise<ListResponse<OrganizationUserBulkResponse>>;\n    postOrganizationUserAccept: (organizationId: string, id: string,\n        request: OrganizationUserAcceptRequest) => Promise<any>;\n    postOrganizationUserConfirm: (organizationId: string, id: string,\n        request: OrganizationUserConfirmRequest) => Promise<any>;\n    postOrganizationUsersPublicKey: (organizationId: string, request: OrganizationUserBulkRequest) =>\n        Promise<ListResponse<OrganizationUserBulkPublicKeyResponse>>;\n    postOrganizationUserBulkConfirm: (organizationId: string, request: OrganizationUserBulkConfirmRequest) => Promise<ListResponse<OrganizationUserBulkResponse>>;\n\n    putOrganizationUser: (organizationId: string, id: string, request: OrganizationUserUpdateRequest) => Promise<any>;\n    putOrganizationUserGroups: (organizationId: string, id: string,\n        request: OrganizationUserUpdateGroupsRequest) => Promise<any>;\n    putOrganizationUserResetPasswordEnrollment: (organizationId: string, userId: string,\n        request: OrganizationUserResetPasswordEnrollmentRequest) => Promise<any>;\n    putOrganizationUserResetPassword: (organizationId: string, id: string,\n        request: OrganizationUserResetPasswordRequest) => Promise<any>;\n    deleteOrganizationUser: (organizationId: string, id: string) => Promise<any>;\n    deleteManyOrganizationUsers: (organizationId: string, request: OrganizationUserBulkRequest) => Promise<ListResponse<OrganizationUserBulkResponse>>;\n\n    getSync: () => Promise<SyncResponse>;\n    postImportDirectory: (organizationId: string, request: ImportDirectoryRequest) => Promise<any>;\n    postPublicImportDirectory: (request: OrganizationImportRequest) => Promise<any>;\n\n    getSettingsDomains: () => Promise<DomainsResponse>;\n    putSettingsDomains: (request: UpdateDomainsRequest) => Promise<DomainsResponse>;\n\n    getTwoFactorProviders: () => Promise<ListResponse<TwoFactorProviderResponse>>;\n    getTwoFactorOrganizationProviders: (organizationId: string) => Promise<ListResponse<TwoFactorProviderResponse>>;\n    getTwoFactorAuthenticator: (request: SecretVerificationRequest) => Promise<TwoFactorAuthenticatorResponse>;\n    getTwoFactorEmail: (request: SecretVerificationRequest) => Promise<TwoFactorEmailResponse>;\n    getTwoFactorDuo: (request: SecretVerificationRequest) => Promise<TwoFactorDuoResponse>;\n    getTwoFactorOrganizationDuo: (organizationId: string,\n        request: SecretVerificationRequest) => Promise<TwoFactorDuoResponse>;\n    getTwoFactorYubiKey: (request: SecretVerificationRequest) => Promise<TwoFactorYubiKeyResponse>;\n    getTwoFactorWebAuthn: (request: SecretVerificationRequest) => Promise<TwoFactorWebAuthnResponse>;\n    getTwoFactorWebAuthnChallenge: (request: SecretVerificationRequest) => Promise<ChallengeResponse>;\n    getTwoFactorRecover: (request: SecretVerificationRequest) => Promise<TwoFactorRecoverResponse>;\n    putTwoFactorAuthenticator: (\n        request: UpdateTwoFactorAuthenticatorRequest) => Promise<TwoFactorAuthenticatorResponse>;\n    putTwoFactorEmail: (request: UpdateTwoFactorEmailRequest) => Promise<TwoFactorEmailResponse>;\n    putTwoFactorDuo: (request: UpdateTwoFactorDuoRequest) => Promise<TwoFactorDuoResponse>;\n    putTwoFactorOrganizationDuo: (organizationId: string,\n        request: UpdateTwoFactorDuoRequest) => Promise<TwoFactorDuoResponse>;\n    putTwoFactorYubiKey: (request: UpdateTwoFactorYubioOtpRequest) => Promise<TwoFactorYubiKeyResponse>;\n    putTwoFactorWebAuthn: (request: UpdateTwoFactorWebAuthnRequest) => Promise<TwoFactorWebAuthnResponse>;\n    deleteTwoFactorWebAuthn: (request: UpdateTwoFactorWebAuthnDeleteRequest) => Promise<TwoFactorWebAuthnResponse>;\n    putTwoFactorDisable: (request: TwoFactorProviderRequest) => Promise<TwoFactorProviderResponse>;\n    putTwoFactorOrganizationDisable: (organizationId: string,\n        request: TwoFactorProviderRequest) => Promise<TwoFactorProviderResponse>;\n    postTwoFactorRecover: (request: TwoFactorRecoveryRequest) => Promise<any>;\n    postTwoFactorEmailSetup: (request: TwoFactorEmailRequest) => Promise<any>;\n    postTwoFactorEmail: (request: TwoFactorEmailRequest) => Promise<any>;\n\n    getEmergencyAccessTrusted: () => Promise<ListResponse<EmergencyAccessGranteeDetailsResponse>>;\n    getEmergencyAccessGranted: () => Promise<ListResponse<EmergencyAccessGrantorDetailsResponse>>;\n    getEmergencyAccess: (id: string) => Promise<EmergencyAccessGranteeDetailsResponse>;\n    getEmergencyGrantorPolicies: (id: string) => Promise<ListResponse<PolicyResponse>>;\n    putEmergencyAccess: (id: string, request: EmergencyAccessUpdateRequest) => Promise<any>;\n    deleteEmergencyAccess: (id: string) => Promise<any>;\n    postEmergencyAccessInvite: (request: EmergencyAccessInviteRequest) => Promise<any>;\n    postEmergencyAccessReinvite: (id: string) => Promise<any>;\n    postEmergencyAccessAccept: (id: string, request: EmergencyAccessAcceptRequest) => Promise<any>;\n    postEmergencyAccessConfirm: (id: string, request: EmergencyAccessConfirmRequest) => Promise<any>;\n    postEmergencyAccessInitiate: (id: string) => Promise<any>;\n    postEmergencyAccessApprove: (id: string) => Promise<any>;\n    postEmergencyAccessReject: (id: string) => Promise<any>;\n    postEmergencyAccessTakeover: (id: string) => Promise<EmergencyAccessTakeoverResponse>;\n    postEmergencyAccessPassword: (id: string, request: EmergencyAccessPasswordRequest) => Promise<any>;\n    postEmergencyAccessView: (id: string) => Promise<EmergencyAccessViewResponse>;\n\n    getOrganization: (id: string) => Promise<OrganizationResponse>;\n    getOrganizationBilling: (id: string) => Promise<BillingResponse>;\n    getOrganizationSubscription: (id: string) => Promise<OrganizationSubscriptionResponse>;\n    getOrganizationLicense: (id: string, installationId: string) => Promise<any>;\n    getOrganizationTaxInfo: (id: string) => Promise<TaxInfoResponse>;\n    getOrganizationAutoEnrollStatus: (identifier: string) => Promise<OrganizationAutoEnrollStatusResponse>;\n    getOrganizationSso: (id: string) => Promise<OrganizationSsoResponse>;\n    postOrganization: (request: OrganizationCreateRequest) => Promise<OrganizationResponse>;\n    putOrganization: (id: string, request: OrganizationUpdateRequest) => Promise<OrganizationResponse>;\n    putOrganizationTaxInfo: (id: string, request: OrganizationTaxInfoUpdateRequest) => Promise<any>;\n    postLeaveOrganization: (id: string) => Promise<any>;\n    postOrganizationLicense: (data: FormData) => Promise<OrganizationResponse>;\n    postOrganizationLicenseUpdate: (id: string, data: FormData) => Promise<any>;\n    postOrganizationApiKey: (id: string, request: SecretVerificationRequest) => Promise<ApiKeyResponse>;\n    postOrganizationRotateApiKey: (id: string, request: SecretVerificationRequest) => Promise<ApiKeyResponse>;\n    postOrganizationSso: (id: string, request: OrganizationSsoRequest) => Promise<OrganizationSsoResponse>;\n    postOrganizationUpgrade: (id: string, request: OrganizationUpgradeRequest) => Promise<PaymentResponse>;\n    postOrganizationUpdateSubscription: (id: string, request: OrganizationSubscriptionUpdateRequest) => Promise<void>;\n    postOrganizationSeat: (id: string, request: SeatRequest) => Promise<PaymentResponse>;\n    postOrganizationStorage: (id: string, request: StorageRequest) => Promise<any>;\n    postOrganizationPayment: (id: string, request: PaymentRequest) => Promise<any>;\n    postOrganizationVerifyBank: (id: string, request: VerifyBankRequest) => Promise<any>;\n    postOrganizationCancel: (id: string) => Promise<any>;\n    postOrganizationReinstate: (id: string) => Promise<any>;\n    deleteOrganization: (id: string, request: SecretVerificationRequest) => Promise<any>;\n    getPlans: () => Promise<ListResponse<PlanResponse>>;\n    getTaxRates: () => Promise<ListResponse<TaxRateResponse>>;\n    getOrganizationKeys: (id: string) => Promise<OrganizationKeysResponse>;\n    postOrganizationKeys: (id: string, request: OrganizationKeysRequest) => Promise<OrganizationKeysResponse>;\n\n    postProviderSetup: (id: string, request: ProviderSetupRequest) => Promise<ProviderResponse>;\n    getProvider: (id: string) => Promise<ProviderResponse>;\n    putProvider: (id: string, request: ProviderUpdateRequest) => Promise<ProviderResponse>;\n\n    getProviderUsers: (providerId: string) => Promise<ListResponse<ProviderUserUserDetailsResponse>>;\n    getProviderUser: (providerId: string, id: string) => Promise<ProviderUserResponse>;\n    postProviderUserInvite: (providerId: string, request: ProviderUserInviteRequest) => Promise<any>;\n    postProviderUserReinvite: (providerId: string, id: string) => Promise<any>;\n    postManyProviderUserReinvite: (providerId: string, request: ProviderUserBulkRequest) => Promise<ListResponse<ProviderUserBulkResponse>>;\n    postProviderUserAccept: (providerId: string, id: string, request: ProviderUserAcceptRequest) => Promise<any>;\n    postProviderUserConfirm: (providerId: string, id: string, request: ProviderUserConfirmRequest) => Promise<any>;\n    postProviderUsersPublicKey: (providerId: string, request: ProviderUserBulkRequest) =>\n        Promise<ListResponse<ProviderUserBulkPublicKeyResponse>>;\n    postProviderUserBulkConfirm: (providerId: string, request: ProviderUserBulkConfirmRequest) => Promise<ListResponse<ProviderUserBulkResponse>>;\n    putProviderUser: (providerId: string, id: string, request: ProviderUserUpdateRequest) => Promise<any>;\n    deleteProviderUser: (organizationId: string, id: string) => Promise<any>;\n    deleteManyProviderUsers: (providerId: string, request: ProviderUserBulkRequest) => Promise<ListResponse<ProviderUserBulkResponse>>;\n    getProviderClients: (providerId: string) => Promise<ListResponse<ProviderOrganizationOrganizationDetailsResponse>>;\n    postProviderAddOrganization: (providerId: string, request: ProviderAddOrganizationRequest) => Promise<any>;\n    postProviderCreateOrganization: (providerId: string, request: ProviderOrganizationCreateRequest) => Promise<ProviderOrganizationResponse>;\n    deleteProviderOrganization: (providerId: string, organizationId: string) => Promise<any>;\n\n    getEvents: (start: string, end: string, token: string) => Promise<ListResponse<EventResponse>>;\n    getEventsCipher: (id: string, start: string, end: string, token: string) => Promise<ListResponse<EventResponse>>;\n    getEventsOrganization: (id: string, start: string, end: string,\n        token: string) => Promise<ListResponse<EventResponse>>;\n    getEventsOrganizationUser: (organizationId: string, id: string,\n        start: string, end: string, token: string) => Promise<ListResponse<EventResponse>>;\n    getEventsProvider: (id: string, start: string, end: string, token: string) => Promise<ListResponse<EventResponse>>;\n    getEventsProviderUser: (providerId: string, id: string, start: string, end: string, token: string) => Promise<ListResponse<EventResponse>>;\n    postEventsCollect: (request: EventRequest[]) => Promise<any>;\n\n    deleteSsoUser: (organizationId: string) => Promise<any>;\n    getSsoUserIdentifier: () => Promise<string>;\n\n    getUserPublicKey: (id: string) => Promise<UserKeyResponse>;\n\n    getHibpBreach: (username: string) => Promise<BreachAccountResponse[]>;\n\n    postBitPayInvoice: (request: BitPayInvoiceRequest) => Promise<string>;\n    postSetupPayment: () => Promise<string>;\n\n    getActiveBearerToken: () => Promise<string>;\n    fetch: (request: Request) => Promise<Response>;\n    nativeFetch: (request: Request) => Promise<Response>;\n\n    preValidateSso: (identifier: string) => Promise<boolean>;\n\n    postCreateSponsorship: (sponsorshipOrgId: string, request: OrganizationSponsorshipCreateRequest) => Promise<void>;\n    deleteRevokeSponsorship: (sponsoringOrganizationId: string) => Promise<void>;\n    deleteRemoveSponsorship: (sponsoringOrgId: string) => Promise<void>;\n    postPreValidateSponsorshipToken: (sponsorshipToken: string) => Promise<boolean>;\n    postRedeemSponsorship: (sponsorshipToken: string, request: OrganizationSponsorshipRedeemRequest) => Promise<void>;\n    postResendSponsorshipOffer: (sponsoringOrgId: string) => Promise<void>;\n\n    getUserKeyFromKeyConnector: (keyConnectorUrl: string) => Promise<KeyConnectorUserKeyResponse>;\n    postUserKeyToKeyConnector: (keyConnectorUrl: string, request: KeyConnectorUserKeyRequest) => Promise<void>;\n    getKeyConnectorAlive: (keyConnectorUrl: string) => Promise<void>;\n}\n","import { OrganizationData } from '../models/data/organizationData';\nimport { ProviderData } from '../models/data/providerData';\n\nimport { Organization } from '../models/domain/organization';\nimport { Provider } from '../models/domain/provider';\n\nimport { KdfType } from '../enums/kdfType';\n\nexport abstract class UserService {\n    setInformation: (userId: string, email: string, kdf: KdfType, kdfIterations: number) => Promise<any>;\n    setEmailVerified: (emailVerified: boolean) => Promise<any>;\n    setSecurityStamp: (stamp: string) => Promise<any>;\n    setForcePasswordReset: (forcePasswordReset: boolean) => Promise<any>;\n    getUserId: () => Promise<string>;\n    getEmail: () => Promise<string>;\n    getSecurityStamp: () => Promise<string>;\n    getKdf: () => Promise<KdfType>;\n    getKdfIterations: () => Promise<number>;\n    getEmailVerified: () => Promise<boolean>;\n    getForcePasswordReset: () => Promise<boolean>;\n    clear: () => Promise<any>;\n    isAuthenticated: () => Promise<boolean>;\n    canAccessPremium: () => Promise<boolean>;\n    canManageSponsorships: () => Promise<boolean>;\n    getOrganization: (id: string) => Promise<Organization>;\n    getOrganizationByIdentifier: (identifier: string) => Promise<Organization>;\n    getAllOrganizations: () => Promise<Organization[]>;\n    replaceOrganizations: (organizations: { [id: string]: OrganizationData; }) => Promise<any>;\n    clearOrganizations: (userId: string) => Promise<any>;\n    getProvider: (id: string) => Promise<Provider>;\n    getAllProviders: () => Promise<Provider[]>;\n    replaceProviders: (providers: { [id: string]: ProviderData; }) => Promise<any>;\n    clearProviders: (userId: string) => Promise<any>;\n}\n","import {\n    Pipe,\n    PipeTransform,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Pipe({\n    name: 'i18n',\n})\nexport class I18nPipe implements PipeTransform {\n    constructor(private i18nService: I18nService) { }\n\n    transform(id: string, p1?: string, p2?: string, p3?: string): string {\n        return this.i18nService.t(id, p1, p2, p3);\n    }\n}\n","export abstract class MessagingService {\n    send: (subscriber: string, arg?: any) => void;\n}\n","import {\n    Directive,\n    ElementRef,\n    Input,\n    Renderer2,\n} from '@angular/core';\n\n@Directive({\n    selector: '[appA11yTitle]',\n})\nexport class A11yTitleDirective {\n    @Input() set appA11yTitle(title: string) {\n        this.title = title;\n    }\n\n    private title: string;\n\n    constructor(private el: ElementRef, private renderer: Renderer2) { }\n\n    ngOnInit() {\n        if (!this.el.nativeElement.hasAttribute('title')) {\n            this.renderer.setAttribute(this.el.nativeElement, 'title', this.title);\n        }\n        if (!this.el.nativeElement.hasAttribute('aria-label')) {\n            this.renderer.setAttribute(this.el.nativeElement, 'aria-label', this.title);\n        }\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    Input,\n    OnChanges,\n} from '@angular/core';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { ErrorResponse } from 'jslib-common/models/response/errorResponse';\n\nimport { ValidationService } from '../services/validation.service';\n\n@Directive({\n    selector: '[appApiAction]',\n})\nexport class ApiActionDirective implements OnChanges {\n    @Input() appApiAction: Promise<any>;\n\n    constructor(private el: ElementRef, private validationService: ValidationService,\n        private logService: LogService) { }\n\n    ngOnChanges(changes: any) {\n        if (this.appApiAction == null || this.appApiAction.then == null) {\n            return;\n        }\n\n        this.el.nativeElement.loading = true;\n\n        this.appApiAction.then((response: any) => {\n            this.el.nativeElement.loading = false;\n        }, (e: any) => {\n            this.el.nativeElement.loading = false;\n\n            if ((e instanceof ErrorResponse || e.constructor.name === 'ErrorResponse') && (e as ErrorResponse).captchaRequired) {\n                this.logService.error('Captcha required error response: ' + e.getSingleMessage());\n                return;\n            }\n            this.logService?.error(`Received API exception: ${e}`);\n            this.validationService.showError(e);\n        });\n    }\n}\n","import { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';\nimport { ProfileProviderOrganizationResponse } from '../models/response/profileProviderOrganizationResponse';\nimport { ProfileProviderResponse } from '../models/response/profileProviderResponse';\n\nimport { HashPurpose } from '../enums/hashPurpose';\nimport { KdfType } from '../enums/kdfType';\n\nimport { KeySuffixOptions } from './storage.service';\n\nexport abstract class CryptoService {\n    setKey: (key: SymmetricCryptoKey) => Promise<any>;\n    setKeyHash: (keyHash: string) => Promise<{}>;\n    setEncKey: (encKey: string) => Promise<{}>;\n    setEncPrivateKey: (encPrivateKey: string) => Promise<{}>;\n    setOrgKeys: (orgs: ProfileOrganizationResponse[], providerOrgs: ProfileProviderOrganizationResponse[]) => Promise<{}>;\n    setProviderKeys: (orgs: ProfileProviderResponse[]) => Promise<{}>;\n    getKey: (keySuffix?: KeySuffixOptions) => Promise<SymmetricCryptoKey>;\n    getKeyFromStorage: (keySuffix: KeySuffixOptions) => Promise<SymmetricCryptoKey>;\n    getKeyHash: () => Promise<string>;\n    compareAndUpdateKeyHash: (masterPassword: string, key: SymmetricCryptoKey) => Promise<boolean>;\n    getEncKey: (key?: SymmetricCryptoKey) => Promise<SymmetricCryptoKey>;\n    getPublicKey: () => Promise<ArrayBuffer>;\n    getPrivateKey: () => Promise<ArrayBuffer>;\n    getFingerprint: (userId: string, publicKey?: ArrayBuffer) => Promise<string[]>;\n    getOrgKeys: () => Promise<Map<string, SymmetricCryptoKey>>;\n    getOrgKey: (orgId: string) => Promise<SymmetricCryptoKey>;\n    getProviderKey: (providerId: string) => Promise<SymmetricCryptoKey>;\n    hasKey: () => Promise<boolean>;\n    hasKeyInMemory: () => boolean;\n    hasKeyStored: (keySuffix?: KeySuffixOptions) => Promise<boolean>;\n    hasEncKey: () => Promise<boolean>;\n    clearKey: (clearSecretStorage?: boolean) => Promise<any>;\n    clearKeyHash: () => Promise<any>;\n    clearEncKey: (memoryOnly?: boolean) => Promise<any>;\n    clearKeyPair: (memoryOnly?: boolean) => Promise<any>;\n    clearOrgKeys: (memoryOnly?: boolean) => Promise<any>;\n    clearProviderKeys: (memoryOnly?: boolean) => Promise<any>;\n    clearPinProtectedKey: () => Promise<any>;\n    clearKeys: () => Promise<any>;\n    toggleKey: () => Promise<any>;\n    makeKey: (password: string, salt: string, kdf: KdfType, kdfIterations: number) => Promise<SymmetricCryptoKey>;\n    makeKeyFromPin: (pin: string, salt: string, kdf: KdfType, kdfIterations: number,\n        protectedKeyCs?: EncString) => Promise<SymmetricCryptoKey>;\n    makeShareKey: () => Promise<[EncString, SymmetricCryptoKey]>;\n    makeKeyPair: (key?: SymmetricCryptoKey) => Promise<[string, EncString]>;\n    makePinKey: (pin: string, salt: string, kdf: KdfType, kdfIterations: number) => Promise<SymmetricCryptoKey>;\n    makeSendKey: (keyMaterial: ArrayBuffer) => Promise<SymmetricCryptoKey>;\n    hashPassword: (password: string, key: SymmetricCryptoKey, hashPurpose?: HashPurpose) => Promise<string>;\n    makeEncKey: (key: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n    remakeEncKey: (key: SymmetricCryptoKey, encKey?: SymmetricCryptoKey) => Promise<[SymmetricCryptoKey, EncString]>;\n    encrypt: (plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey) => Promise<EncString>;\n    encryptToBytes: (plainValue: ArrayBuffer, key?: SymmetricCryptoKey) => Promise<EncArrayBuffer>;\n    rsaEncrypt: (data: ArrayBuffer, publicKey?: ArrayBuffer) => Promise<EncString>;\n    rsaDecrypt: (encValue: string, privateKeyValue?: ArrayBuffer) => Promise<ArrayBuffer>;\n    decryptToBytes: (encString: EncString, key?: SymmetricCryptoKey) => Promise<ArrayBuffer>;\n    decryptToUtf8: (encString: EncString, key?: SymmetricCryptoKey) => Promise<string>;\n    decryptFromBytes: (encBuf: ArrayBuffer, key: SymmetricCryptoKey) => Promise<ArrayBuffer>;\n    randomNumber: (min: number, max: number) => Promise<number>;\n    validateKey: (key: SymmetricCryptoKey) => Promise<boolean>;\n}\n","import { CipherType } from '../enums/cipherType';\nimport { UriMatchType } from '../enums/uriMatchType';\n\nimport { CipherData } from '../models/data/cipherData';\n\nimport { Cipher } from '../models/domain/cipher';\nimport { Field } from '../models/domain/field';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { FieldView } from '../models/view/fieldView';\n\nexport abstract class CipherService {\n    decryptedCipherCache: CipherView[];\n\n    clearCache: () => void;\n    encrypt: (model: CipherView, key?: SymmetricCryptoKey, originalCipher?: Cipher) => Promise<Cipher>;\n    encryptFields: (fieldsModel: FieldView[], key: SymmetricCryptoKey) => Promise<Field[]>;\n    encryptField: (fieldModel: FieldView, key: SymmetricCryptoKey) => Promise<Field>;\n    get: (id: string) => Promise<Cipher>;\n    getAll: () => Promise<Cipher[]>;\n    getAllDecrypted: () => Promise<CipherView[]>;\n    getAllDecryptedForGrouping: (groupingId: string, folder?: boolean) => Promise<CipherView[]>;\n    getAllDecryptedForUrl: (url: string, includeOtherTypes?: CipherType[],\n        defaultMatch?: UriMatchType) => Promise<CipherView[]>;\n    getAllFromApiForOrganization: (organizationId: string) => Promise<CipherView[]>;\n    getLastUsedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise<CipherView>;\n    getLastLaunchedForUrl: (url: string, autofillOnPageLoad: boolean) => Promise<CipherView>;\n    getNextCipherForUrl: (url: string) => Promise<CipherView>;\n    updateLastUsedIndexForUrl: (url: string) => void;\n    updateLastUsedDate: (id: string) => Promise<void>;\n    updateLastLaunchedDate: (id: string) => Promise<void>;\n    saveNeverDomain: (domain: string) => Promise<void>;\n    saveWithServer: (cipher: Cipher) => Promise<any>;\n    shareWithServer: (cipher: CipherView, organizationId: string, collectionIds: string[]) => Promise<any>;\n    shareManyWithServer: (ciphers: CipherView[], organizationId: string, collectionIds: string[]) => Promise<any>;\n    saveAttachmentWithServer: (cipher: Cipher, unencryptedFile: any, admin?: boolean) => Promise<Cipher>;\n    saveAttachmentRawWithServer: (cipher: Cipher, filename: string, data: ArrayBuffer,\n        admin?: boolean) => Promise<Cipher>;\n    saveCollectionsWithServer: (cipher: Cipher) => Promise<any>;\n    upsert: (cipher: CipherData | CipherData[]) => Promise<any>;\n    replace: (ciphers: { [id: string]: CipherData; }) => Promise<any>;\n    clear: (userId: string) => Promise<any>;\n    moveManyWithServer: (ids: string[], folderId: string) => Promise<any>;\n    delete: (id: string | string[]) => Promise<any>;\n    deleteWithServer: (id: string) => Promise<any>;\n    deleteManyWithServer: (ids: string[]) => Promise<any>;\n    deleteAttachment: (id: string, attachmentId: string) => Promise<void>;\n    deleteAttachmentWithServer: (id: string, attachmentId: string) => Promise<void>;\n    sortCiphersByLastUsed: (a: any, b: any) => number;\n    sortCiphersByLastUsedThenName: (a: any, b: any) => number;\n    getLocaleSortingFunction: () => (a: CipherView, b: CipherView) => number;\n    softDelete: (id: string | string[]) => Promise<any>;\n    softDeleteWithServer: (id: string) => Promise<any>;\n    softDeleteManyWithServer: (ids: string[]) => Promise<any>;\n    restore: (cipher: { id: string, revisionDate: string; } | { id: string, revisionDate: string; }[]) => Promise<any>;\n    restoreWithServer: (id: string) => Promise<any>;\n    restoreManyWithServer: (ids: string[]) => Promise<any>;\n}\n","import {\n    Component,\n    Input,\n    OnInit,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\n\n@Component({\n    selector: 'app-callout',\n    templateUrl: 'callout.component.html',\n})\nexport class CalloutComponent implements OnInit {\n    @Input() type = 'info';\n    @Input() icon: string;\n    @Input() title: string;\n    @Input() clickable: boolean;\n    @Input() enforcedPolicyOptions: MasterPasswordPolicyOptions;\n    @Input() enforcedPolicyMessage: string;\n    @Input() useAlertRole = false;\n\n    calloutStyle: string;\n\n    constructor(private i18nService: I18nService) { }\n\n    ngOnInit() {\n        this.calloutStyle = this.type;\n\n        if (this.enforcedPolicyMessage === undefined) {\n            this.enforcedPolicyMessage = this.i18nService.t('masterPasswordPolicyInEffect');\n        }\n\n        if (this.type === 'warning' || this.type === 'danger') {\n            if (this.type === 'danger') {\n                this.calloutStyle = 'danger';\n            }\n            if (this.title === undefined) {\n                this.title = this.i18nService.t('warning');\n            }\n            if (this.icon === undefined) {\n                this.icon = 'fa-warning';\n            }\n        } else if (this.type === 'error') {\n            this.calloutStyle = 'danger';\n            if (this.title === undefined) {\n                this.title = this.i18nService.t('error');\n            }\n            if (this.icon === undefined) {\n                this.icon = 'fa-bolt';\n            }\n        } else if (this.type === 'tip') {\n            this.calloutStyle = 'success';\n            if (this.title === undefined) {\n                this.title = this.i18nService.t('tip');\n            }\n            if (this.icon === undefined) {\n                this.icon = 'fa-lightbulb-o';\n            }\n        }\n    }\n\n    getPasswordScoreAlertDisplay() {\n        if (this.enforcedPolicyOptions == null) {\n            return '';\n        }\n\n        let str: string;\n        switch (this.enforcedPolicyOptions.minComplexity) {\n            case 4:\n                str = this.i18nService.t('strong');\n                break;\n            case 3:\n                str = this.i18nService.t('good');\n                break;\n            default:\n                str = this.i18nService.t('weak');\n                break;\n        }\n        return str + ' (' + this.enforcedPolicyOptions.minComplexity + ')';\n    }\n}\n","<div #callout class=\"callout callout-{{calloutStyle}}\" [ngClass]=\"{'clickable': clickable}\" [attr.role]=\"useAlertRole ? 'alert' : null\"> <h3 class=\"callout-heading\" *ngIf=\"title\"> <i class=\"fa {{icon}}\" *ngIf=\"icon\" aria-hidden=\"true\"></i> {{title}} </h3> <div class=\"enforced-policy-options\" *ngIf=\"enforcedPolicyOptions\"> {{enforcedPolicyMessage}} <ul> <li *ngIf=\"enforcedPolicyOptions?.minComplexity > 0\"> {{'policyInEffectMinComplexity' | i18n : getPasswordScoreAlertDisplay()}} </li> <li *ngIf=\"enforcedPolicyOptions?.minLength > 0\"> {{'policyInEffectMinLength' | i18n : enforcedPolicyOptions?.minLength.toString()}} </li> <li *ngIf=\"enforcedPolicyOptions?.requireUpper\"> {{'policyInEffectUppercase' | i18n}}</li> <li *ngIf=\"enforcedPolicyOptions?.requireLower\"> {{'policyInEffectLowercase' | i18n}}</li> <li *ngIf=\"enforcedPolicyOptions?.requireNumbers\"> {{'policyInEffectNumbers' | i18n}}</li> <li *ngIf=\"enforcedPolicyOptions?.requireSpecial\"> {{'policyInEffectSpecial' | i18n : '!@#$%^&*'}}</li> </ul> </div> <ng-content></ng-content> </div> ","export abstract class BaseResponse {\n    private response: any;\n\n    constructor(response: any) {\n        this.response = response;\n    }\n\n    protected getResponseProperty(propertyName: string, response: any = null, exactName = false): any {\n        if (propertyName == null || propertyName === '') {\n            throw new Error('propertyName must not be null/empty.');\n        }\n        if (response == null && this.response != null) {\n            response = this.response;\n        }\n        if (response == null) {\n            return null;\n        }\n        if (!exactName && response[propertyName] === undefined) {\n            let otherCasePropertyName: string = null;\n            if (propertyName.charAt(0) === propertyName.charAt(0).toUpperCase()) {\n                otherCasePropertyName = propertyName.charAt(0).toLowerCase();\n            } else {\n                otherCasePropertyName = propertyName.charAt(0).toUpperCase();\n            }\n            if (propertyName.length > 1) {\n                otherCasePropertyName += propertyName.slice(1);\n            }\n\n            propertyName = otherCasePropertyName;\n            if (response[propertyName] === undefined) {\n                propertyName = propertyName.toLowerCase();\n            }\n            if (response[propertyName] === undefined) {\n                propertyName = propertyName.toUpperCase();\n            }\n        }\n        return response[propertyName];\n    }\n}\n","import { PolicyData } from '../models/data/policyData';\n\nimport { MasterPasswordPolicyOptions } from '../models/domain/masterPasswordPolicyOptions';\nimport { Policy } from '../models/domain/policy';\nimport { ResetPasswordPolicyOptions } from '../models/domain/resetPasswordPolicyOptions';\n\nimport { ListResponse } from '../models/response/listResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\n\nimport { PolicyType } from '../enums/policyType';\n\nexport abstract class PolicyService {\n    policyCache: Policy[];\n\n    clearCache: () => void;\n    getAll: (type?: PolicyType) => Promise<Policy[]>;\n    getPolicyForOrganization: (policyType: PolicyType, organizationId: string) => Promise<Policy>;\n    replace: (policies: { [id: string]: PolicyData; }) => Promise<any>;\n    clear: (userId: string) => Promise<any>;\n    getMasterPasswordPolicyOptions: (policies?: Policy[]) => Promise<MasterPasswordPolicyOptions>;\n    evaluateMasterPassword: (passwordStrength: number, newPassword: string,\n        enforcedPolicyOptions?: MasterPasswordPolicyOptions) => boolean;\n    getResetPasswordPolicyOptions: (policies: Policy[], orgId: string) => [ResetPasswordPolicyOptions, boolean];\n    mapPoliciesFromToken: (policiesResponse: ListResponse<PolicyResponse>) => Policy[];\n    policyAppliesToUser: (policyType: PolicyType, policyFilter?: (policy: Policy) => boolean) => Promise<boolean>;\n}\n","import {\n    ApplicationRef,\n    ComponentFactory,\n    ComponentFactoryResolver,\n    ComponentRef,\n    EmbeddedViewRef,\n    Injectable,\n    Injector,\n    Type,\n    ViewContainerRef\n} from '@angular/core';\nimport { first } from 'rxjs/operators';\n\nimport { DynamicModalComponent } from '../components/modal/dynamic-modal.component';\nimport { ModalInjector } from '../components/modal/modal-injector';\nimport { ModalRef } from '../components/modal/modal.ref';\n\nexport class ModalConfig<D = any> {\n    data?: D;\n    allowMultipleModals: boolean = false;\n}\n\n@Injectable()\nexport class ModalService {\n    protected modalList: ComponentRef<DynamicModalComponent>[] = [];\n\n    // Lazy loaded modules are not available in componentFactoryResolver,\n    // therefore modules needs to manually initialize their resolvers.\n    private factoryResolvers: Map<Type<any>, ComponentFactoryResolver> = new Map();\n\n    constructor(private componentFactoryResolver: ComponentFactoryResolver, private applicationRef: ApplicationRef,\n        private injector: Injector) {\n        document.addEventListener('keyup', event => {\n            if (event.key === 'Escape' && this.modalCount > 0) {\n                this.topModal.instance.close();\n            }\n        });\n    }\n\n    get modalCount() {\n        return this.modalList.length;\n    }\n\n    private get topModal() {\n        return this.modalList[this.modalCount - 1];\n    }\n\n    async openViewRef<T>(componentType: Type<T>, viewContainerRef: ViewContainerRef,\n        setComponentParameters: (component: T) => void = null): Promise<[ModalRef, T]> {\n\n        const [modalRef, modalComponentRef] = this.openInternal(componentType, null, false);\n        modalComponentRef.instance.setComponentParameters = setComponentParameters;\n\n        viewContainerRef.insert(modalComponentRef.hostView);\n\n        await modalRef.onCreated.pipe(first()).toPromise();\n\n        return [modalRef, modalComponentRef.instance.componentRef.instance];\n    }\n\n    open(componentType: Type<any>, config?: ModalConfig) {\n        if (!(config?.allowMultipleModals ?? false) && this.modalCount > 0) {\n            return;\n        }\n\n        const [modalRef, _] = this.openInternal(componentType, config, true);\n\n        return modalRef;\n    }\n\n    registerComponentFactoryResolver<T>(componentType: Type<T>, componentFactoryResolver: ComponentFactoryResolver): void {\n        this.factoryResolvers.set(componentType, componentFactoryResolver);\n    }\n\n    resolveComponentFactory<T>(componentType: Type<T>): ComponentFactory<T> {\n        if (this.factoryResolvers.has(componentType)) {\n            return this.factoryResolvers.get(componentType).resolveComponentFactory(componentType);\n        }\n\n        return this.componentFactoryResolver.resolveComponentFactory(componentType);\n    }\n\n    protected openInternal(componentType: Type<any>, config?: ModalConfig, attachToDom?: boolean):\n        [ModalRef, ComponentRef<DynamicModalComponent>] {\n\n        const [modalRef, componentRef] = this.createModalComponent(config);\n        componentRef.instance.childComponentType = componentType;\n\n        if (attachToDom) {\n            this.applicationRef.attachView(componentRef.hostView);\n            const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n            document.body.appendChild(domElem);\n        }\n\n        modalRef.onClosed.pipe(first()).subscribe(() => {\n            if (attachToDom) {\n                this.applicationRef.detachView(componentRef.hostView);\n            }\n            componentRef.destroy();\n\n            this.modalList.pop();\n            if (this.modalCount > 0) {\n                this.topModal.instance.getFocus();\n            }\n        });\n\n        this.setupHandlers(modalRef);\n\n        this.modalList.push(componentRef);\n\n        return [modalRef, componentRef];\n    }\n\n    protected setupHandlers(modalRef: ModalRef) {\n        let backdrop: HTMLElement = null;\n\n        // Add backdrop, setup [data-dismiss] handler.\n        modalRef.onCreated.pipe(first()).subscribe(el => {\n            document.body.classList.add('modal-open');\n\n            const modalEl: HTMLElement = el.querySelector('.modal');\n            const dialogEl = modalEl.querySelector('.modal-dialog') as HTMLElement;\n\n            backdrop = document.createElement('div');\n            backdrop.className = 'modal-backdrop fade';\n            backdrop.style.zIndex = `${this.modalCount}040`;\n            modalEl.prepend(backdrop);\n\n            dialogEl.addEventListener('click', (e: Event) => {\n                e.stopPropagation();\n            });\n            dialogEl.style.zIndex = `${this.modalCount}050`;\n\n            const modals = Array.from(el.querySelectorAll('.modal-backdrop, .modal *[data-dismiss=\"modal\"]'));\n            for (const closeElement of modals) {\n                closeElement.addEventListener('click', event => {\n                    modalRef.close();\n                });\n            }\n        });\n\n        // onClose is used in Web to hook into bootstrap. On other projects we pipe it directly to closed.\n        modalRef.onClose.pipe(first()).subscribe(() => {\n            modalRef.closed();\n\n            if (this.modalCount === 0) {\n                document.body.classList.remove('modal-open');\n            }\n        });\n    }\n\n    protected createModalComponent(config: ModalConfig): [ModalRef, ComponentRef<DynamicModalComponent>] {\n        const modalRef = new ModalRef();\n\n        const map = new WeakMap();\n        map.set(ModalConfig, config);\n        map.set(ModalRef, modalRef);\n\n        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(DynamicModalComponent);\n        const componentRef = componentFactory.create(new ModalInjector(this.injector, map));\n\n        return [modalRef, componentRef];\n    }\n}\n","import * as tldjs from 'tldjs';\n\nimport { I18nService } from '../abstractions/i18n.service';\n\n// tslint:disable-next-line\nconst nodeURL = typeof window === 'undefined' ? require('url') : null;\n\nexport class Utils {\n    static inited = false;\n    static isNativeScript = false;\n    static isNode = false;\n    static isBrowser = true;\n    static isMobileBrowser = false;\n    static isAppleMobileBrowser = false;\n    static global: any = null;\n    static tldEndingRegex = /.*\\.(com|net|org|edu|uk|gov|ca|de|jp|fr|au|ru|ch|io|es|us|co|xyz|info|ly|mil)$/;\n    // Transpiled version of /\\p{Emoji_Presentation}/gu using https://mothereff.in/regexpu. Used for compatability in older browsers.\n    static regexpEmojiPresentation =  /(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])/g;\n\n    static init() {\n        if (Utils.inited) {\n            return;\n        }\n\n        Utils.inited = true;\n        Utils.isNode = typeof process !== 'undefined' && (process as any).release != null &&\n            (process as any).release.name === 'node';\n        Utils.isBrowser = typeof window !== 'undefined';\n        Utils.isNativeScript = !Utils.isNode && !Utils.isBrowser;\n        Utils.isMobileBrowser = Utils.isBrowser && this.isMobile(window);\n        Utils.isAppleMobileBrowser = Utils.isBrowser && this.isAppleMobile(window);\n        Utils.global = Utils.isNativeScript ? global : (Utils.isNode && !Utils.isBrowser ? global : window);\n    }\n\n    static fromB64ToArray(str: string): Uint8Array {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return new Uint8Array(Buffer.from(str, 'base64'));\n        } else {\n            const binaryString = window.atob(str);\n            const bytes = new Uint8Array(binaryString.length);\n            for (let i = 0; i < binaryString.length; i++) {\n                bytes[i] = binaryString.charCodeAt(i);\n            }\n            return bytes;\n        }\n    }\n\n    static fromUrlB64ToArray(str: string): Uint8Array {\n        return Utils.fromB64ToArray(Utils.fromUrlB64ToB64(str));\n    }\n\n    static fromHexToArray(str: string): Uint8Array {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return new Uint8Array(Buffer.from(str, 'hex'));\n        } else {\n            const bytes = new Uint8Array(str.length / 2);\n            for (let i = 0; i < str.length; i += 2) {\n                bytes[i / 2] = parseInt(str.substr(i, 2), 16);\n            }\n            return bytes;\n        }\n    }\n\n    static fromUtf8ToArray(str: string): Uint8Array {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return new Uint8Array(Buffer.from(str, 'utf8'));\n        } else {\n            const strUtf8 = unescape(encodeURIComponent(str));\n            const arr = new Uint8Array(strUtf8.length);\n            for (let i = 0; i < strUtf8.length; i++) {\n                arr[i] = strUtf8.charCodeAt(i);\n            }\n            return arr;\n        }\n    }\n\n    static fromByteStringToArray(str: string): Uint8Array {\n        const arr = new Uint8Array(str.length);\n        for (let i = 0; i < str.length; i++) {\n            arr[i] = str.charCodeAt(i);\n        }\n        return arr;\n    }\n\n    static fromBufferToB64(buffer: ArrayBuffer): string {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return Buffer.from(buffer).toString('base64');\n        } else {\n            let binary = '';\n            const bytes = new Uint8Array(buffer);\n            for (let i = 0; i < bytes.byteLength; i++) {\n                binary += String.fromCharCode(bytes[i]);\n            }\n            return window.btoa(binary);\n        }\n    }\n\n    static fromBufferToUrlB64(buffer: ArrayBuffer): string {\n        return Utils.fromB64toUrlB64(Utils.fromBufferToB64(buffer));\n    }\n\n    static fromB64toUrlB64(b64Str: string) {\n        return b64Str.replace(/\\+/g, '-')\n            .replace(/\\//g, '_')\n            .replace(/=/g, '');\n    }\n\n    static fromBufferToUtf8(buffer: ArrayBuffer): string {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return Buffer.from(buffer).toString('utf8');\n        } else {\n            const bytes = new Uint8Array(buffer);\n            const encodedString = String.fromCharCode.apply(null, bytes);\n            return decodeURIComponent(escape(encodedString));\n        }\n    }\n\n    static fromBufferToByteString(buffer: ArrayBuffer): string {\n        return String.fromCharCode.apply(null, new Uint8Array(buffer));\n    }\n\n    // ref: https://stackoverflow.com/a/40031979/1090359\n    static fromBufferToHex(buffer: ArrayBuffer): string {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return Buffer.from(buffer).toString('hex');\n        } else {\n            const bytes = new Uint8Array(buffer);\n            return Array.prototype.map.call(bytes, (x: number) => ('00' + x.toString(16)).slice(-2)).join('');\n        }\n    }\n\n    static fromUrlB64ToB64(urlB64Str: string): string {\n        let output = urlB64Str.replace(/-/g, '+').replace(/_/g, '/');\n        switch (output.length % 4) {\n            case 0:\n                break;\n            case 2:\n                output += '==';\n                break;\n            case 3:\n                output += '=';\n                break;\n            default:\n                throw new Error('Illegal base64url string!');\n        }\n\n        return output;\n    }\n\n    static fromUrlB64ToUtf8(urlB64Str: string): string {\n        return Utils.fromB64ToUtf8(Utils.fromUrlB64ToB64(urlB64Str));\n    }\n\n    static fromUtf8ToB64(utfStr: string): string {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return Buffer.from(utfStr, 'utf8').toString('base64');\n        } else {\n            return decodeURIComponent(escape(window.btoa(utfStr)));\n        }\n    }\n\n    static fromUtf8ToUrlB64(utfStr: string): string {\n        return Utils.fromBufferToUrlB64(Utils.fromUtf8ToArray(utfStr));\n    }\n\n    static fromB64ToUtf8(b64Str: string): string {\n        if (Utils.isNode || Utils.isNativeScript) {\n            return Buffer.from(b64Str, 'base64').toString('utf8');\n        } else {\n            return decodeURIComponent(escape(window.atob(b64Str)));\n        }\n    }\n\n    // ref: http://stackoverflow.com/a/2117523/1090359\n    static newGuid(): string {\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n            // tslint:disable-next-line\n            const r = Math.random() * 16 | 0;\n            // tslint:disable-next-line\n            const v = c === 'x' ? r : (r & 0x3 | 0x8);\n            return v.toString(16);\n        });\n    }\n\n    static isGuid(id: string) {\n        return RegExp(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/, 'i').test(id);\n    }\n\n    static getHostname(uriString: string): string {\n        const url = Utils.getUrl(uriString);\n        try {\n            return url != null && url.hostname !== '' ? url.hostname : null;\n        } catch {\n            return null;\n        }\n    }\n\n    static getHost(uriString: string): string {\n        const url = Utils.getUrl(uriString);\n        try {\n            return url != null && url.host !== '' ? url.host : null;\n        } catch {\n            return null;\n        }\n    }\n\n    static getDomain(uriString: string): string {\n        if (uriString == null) {\n            return null;\n        }\n\n        uriString = uriString.trim();\n        if (uriString === '') {\n            return null;\n        }\n\n        if (uriString.startsWith('data:')) {\n            return null;\n        }\n\n        let httpUrl = uriString.startsWith('http://') || uriString.startsWith('https://');\n        if (!httpUrl && uriString.indexOf('://') < 0 && Utils.tldEndingRegex.test(uriString) &&\n            uriString.indexOf('@') < 0) {\n            uriString = 'http://' + uriString;\n            httpUrl = true;\n        }\n\n        if (httpUrl) {\n            try {\n                const url = Utils.getUrlObject(uriString);\n                const validHostname = tldjs?.isValid != null ? tldjs.isValid(url.hostname) : true;\n                if (!validHostname) {\n                    return null;\n                }\n\n                if (url.hostname === 'localhost' || Utils.validIpAddress(url.hostname)) {\n                    return url.hostname;\n                }\n\n                const urlDomain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(url.hostname) : null;\n                return urlDomain != null ? urlDomain : url.hostname;\n            } catch (e) {\n                // Invalid domain, try another approach below.\n            }\n        }\n\n        try {\n            const domain = tldjs != null && tldjs.getDomain != null ? tldjs.getDomain(uriString) : null;\n\n            if (domain != null) {\n                return domain;\n            }\n        } catch {\n            return null;\n        }\n\n        return null;\n    }\n\n    static getQueryParams(uriString: string): Map<string, string> {\n        const url = Utils.getUrl(uriString);\n        if (url == null || url.search == null || url.search === '') {\n            return null;\n        }\n        const map = new Map<string, string>();\n        const pairs = (url.search[0] === '?' ? url.search.substr(1) : url.search).split('&');\n        pairs.forEach(pair => {\n            const parts = pair.split('=');\n            if (parts.length < 1) {\n                return;\n            }\n            map.set(decodeURIComponent(parts[0]).toLowerCase(), parts[1] == null ? '' : decodeURIComponent(parts[1]));\n        });\n        return map;\n    }\n\n    static getSortFunction(i18nService: I18nService, prop: string) {\n        return (a: any, b: any) => {\n            if (a[prop] == null && b[prop] != null) {\n                return -1;\n            }\n            if (a[prop] != null && b[prop] == null) {\n                return 1;\n            }\n            if (a[prop] == null && b[prop] == null) {\n                return 0;\n            }\n\n            return i18nService.collator ? i18nService.collator.compare(a[prop], b[prop]) :\n                a[prop].localeCompare(b[prop]);\n        };\n    }\n\n    static isNullOrWhitespace(str: string): boolean {\n        return str == null || typeof str !== 'string' || str.trim() === '';\n    }\n\n    static nameOf<T>(name: string & keyof T) {\n        return name;\n    }\n\n    static assign<T>(target: T, source: Partial<T>): T {\n        return Object.assign(target, source);\n    }\n\n    static iterateEnum<O extends object, K extends keyof O = keyof O>(obj: O) {\n        return (Object.keys(obj).filter(k => Number.isNaN(+k)) as K[]).map(k => obj[k]);\n    }\n\n\n    static getUrl(uriString: string): URL {\n        if (uriString == null) {\n            return null;\n        }\n\n        uriString = uriString.trim();\n        if (uriString === '') {\n            return null;\n        }\n\n        let url = Utils.getUrlObject(uriString);\n        if (url == null) {\n            const hasHttpProtocol = uriString.indexOf('http://') === 0 || uriString.indexOf('https://') === 0;\n            if (!hasHttpProtocol && uriString.indexOf('.') > -1) {\n                url = Utils.getUrlObject('http://' + uriString);\n            }\n        }\n        return url;\n    }\n\n    static camelToPascalCase(s: string) {\n        return s.charAt(0).toUpperCase() + s.slice(1);\n    }\n\n    private static validIpAddress(ipString: string): boolean {\n        // tslint:disable-next-line\n        const ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n        return ipRegex.test(ipString);\n    }\n\n    private static isMobile(win: Window) {\n        let mobile = false;\n        (a => {\n            // tslint:disable-next-line\n            if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) {\n                mobile = true;\n            }\n        })(win.navigator.userAgent || win.navigator.vendor || (win as any).opera);\n        return mobile || win.navigator.userAgent.match(/iPad/i) != null;\n    }\n\n    private static isAppleMobile(win: Window) {\n        return win.navigator.userAgent.match(/iPhone/i) != null || win.navigator.userAgent.match(/iPad/i) != null;\n    }\n\n    private static getUrlObject(uriString: string): URL {\n        try {\n            if (nodeURL != null) {\n                return nodeURL.URL ? new nodeURL.URL(uriString) : nodeURL.parse(uriString);\n            } else if (typeof URL === 'function') {\n                return new URL(uriString);\n            } else if (window != null) {\n                const hasProtocol = uriString.indexOf('://') > -1;\n                if (!hasProtocol && uriString.indexOf('.') > -1) {\n                    uriString = 'http://' + uriString;\n                } else if (!hasProtocol) {\n                    return null;\n                }\n                const anchor = window.document.createElement('a');\n                anchor.href = uriString;\n                return anchor as any;\n            }\n        } catch (e) {\n            // Ignore error\n        }\n\n        return null;\n    }\n}\n\nUtils.init();\n","import * as papa from 'papaparse';\n\nimport { LogService } from '../abstractions/log.service';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { LoginUriView } from '../models/view/loginUriView';\n\nimport { Utils } from '../misc/utils';\n\nimport { FieldView } from '../models/view/fieldView';\nimport { FolderView } from '../models/view/folderView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherRepromptType } from '../enums/cipherRepromptType';\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { ConsoleLogService } from '../services/consoleLog.service';\n\nexport abstract class BaseImporter {\n    organizationId: string = null;\n\n    protected logService: LogService = new ConsoleLogService(false);\n\n    protected newLineRegex = /(?:\\r\\n|\\r|\\n)/;\n\n    protected passwordFieldNames = [\n        'password', 'pass word', 'passphrase', 'pass phrase',\n        'pass', 'code', 'code word', 'codeword',\n        'secret', 'secret word', 'personpwd',\n        'key', 'keyword', 'key word', 'keyphrase', 'key phrase',\n        'form_pw', 'wppassword', 'pin', 'pwd', 'pw', 'pword', 'passwd',\n        'p', 'serial', 'serial#', 'license key', 'reg #',\n\n        // Non-English names\n        'passwort',\n    ];\n\n    protected usernameFieldNames = [\n        'user', 'name', 'user name', 'username', 'login name',\n        'email', 'e-mail', 'id', 'userid', 'user id',\n        'login', 'form_loginname', 'wpname', 'mail',\n        'loginid', 'login id', 'log', 'personlogin',\n        'first name', 'last name', 'card#', 'account #',\n        'member', 'member #',\n\n        // Non-English names\n        'nom', 'benutzername',\n    ];\n\n    protected notesFieldNames = [\n        'note', 'notes', 'comment', 'comments', 'memo',\n        'description', 'free form', 'freeform',\n        'free text', 'freetext', 'free',\n\n        // Non-English names\n        'kommentar',\n    ];\n\n    protected uriFieldNames: string[] = [\n        'url', 'hyper link', 'hyperlink', 'link',\n        'host', 'hostname', 'host name', 'server', 'address',\n        'hyper ref', 'href', 'web', 'website', 'web site', 'site',\n        'web-site', 'uri',\n\n        // Non-English names\n        'ort', 'adresse',\n    ];\n\n    protected parseCsvOptions = {\n        encoding: 'UTF-8',\n        skipEmptyLines: false,\n    };\n\n    protected get organization() {\n        return this.organizationId != null;\n    }\n\n    protected parseXml(data: string): Document {\n        const parser = new DOMParser();\n        const doc = parser.parseFromString(data, 'application/xml');\n        return doc != null && doc.querySelector('parsererror') == null ? doc : null;\n    }\n\n    protected parseCsv(data: string, header: boolean, options: any = {}): any[] {\n        const parseOptions = Object.assign({ header: header }, this.parseCsvOptions, options);\n        data = this.splitNewLine(data).join('\\n').trim();\n        const result = papa.parse(data, parseOptions);\n        if (result.errors != null && result.errors.length > 0) {\n            result.errors.forEach(e => {\n                if (e.row != null) {\n                    // tslint:disable-next-line\n                    this.logService.warning('Error parsing row ' + e.row + ': ' + e.message);\n                }\n            });\n        }\n        return result.data && result.data.length > 0 ? result.data : null;\n    }\n\n    protected parseSingleRowCsv(rowData: string) {\n        if (this.isNullOrWhitespace(rowData)) {\n            return null;\n        }\n        const parsedRow = this.parseCsv(rowData, false);\n        if (parsedRow != null && parsedRow.length > 0 && parsedRow[0].length > 0) {\n            return parsedRow[0];\n        }\n        return null;\n    }\n\n    protected makeUriArray(uri: string | string[]): LoginUriView[] {\n        if (uri == null) {\n            return null;\n        }\n\n        if (typeof uri === 'string') {\n            const loginUri = new LoginUriView();\n            loginUri.uri = this.fixUri(uri);\n            if (this.isNullOrWhitespace(loginUri.uri)) {\n                return null;\n            }\n            loginUri.match = null;\n            return [loginUri];\n        }\n\n        if (uri.length > 0) {\n            const returnArr: LoginUriView[] = [];\n            uri.forEach(u => {\n                const loginUri = new LoginUriView();\n                loginUri.uri = this.fixUri(u);\n                if (this.isNullOrWhitespace(loginUri.uri)) {\n                    return;\n                }\n                loginUri.match = null;\n                returnArr.push(loginUri);\n            });\n            return returnArr.length === 0 ? null : returnArr;\n        }\n\n        return null;\n    }\n\n    protected fixUri(uri: string) {\n        if (uri == null) {\n            return null;\n        }\n        uri = uri.trim();\n        if (uri.indexOf('://') === -1 && uri.indexOf('.') >= 0) {\n            uri = 'http://' + uri;\n        }\n        if (uri.length > 1000) {\n            return uri.substring(0, 1000);\n        }\n        return uri;\n    }\n\n    protected nameFromUrl(url: string) {\n        const hostname = Utils.getHostname(url);\n        if (this.isNullOrWhitespace(hostname)) {\n            return null;\n        }\n        return hostname.startsWith('www.') ? hostname.replace('www.', '') : hostname;\n    }\n\n    protected isNullOrWhitespace(str: string): boolean {\n        return Utils.isNullOrWhitespace(str);\n    }\n\n    protected getValueOrDefault(str: string, defaultValue: string = null): string {\n        if (this.isNullOrWhitespace(str)) {\n            return defaultValue;\n        }\n        return str;\n    }\n\n    protected splitNewLine(str: string): string[] {\n        return str.split(this.newLineRegex);\n    }\n\n    // ref https://stackoverflow.com/a/5911300\n    protected getCardBrand(cardNum: string) {\n        if (this.isNullOrWhitespace(cardNum)) {\n            return null;\n        }\n\n        // Visa\n        let re = new RegExp('^4');\n        if (cardNum.match(re) != null) {\n            return 'Visa';\n        }\n\n        // Mastercard\n        // Updated for Mastercard 2017 BINs expansion\n        if (/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/\n            .test(cardNum)) {\n            return 'Mastercard';\n        }\n\n        // AMEX\n        re = new RegExp('^3[47]');\n        if (cardNum.match(re) != null) {\n            return 'Amex';\n        }\n\n        // Discover\n        re = new RegExp('^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)');\n        if (cardNum.match(re) != null) {\n            return 'Discover';\n        }\n\n        // Diners\n        re = new RegExp('^36');\n        if (cardNum.match(re) != null) {\n            return 'Diners Club';\n        }\n\n        // Diners - Carte Blanche\n        re = new RegExp('^30[0-5]');\n        if (cardNum.match(re) != null) {\n            return 'Diners Club';\n        }\n\n        // JCB\n        re = new RegExp('^35(2[89]|[3-8][0-9])');\n        if (cardNum.match(re) != null) {\n            return 'JCB';\n        }\n\n        // Visa Electron\n        re = new RegExp('^(4026|417500|4508|4844|491(3|7))');\n        if (cardNum.match(re) != null) {\n            return 'Visa';\n        }\n\n        return null;\n    }\n\n    protected setCardExpiration(cipher: CipherView, expiration: string): boolean {\n        if (!this.isNullOrWhitespace(expiration)) {\n            expiration = expiration.replace(/\\s/g, '');\n            const parts = expiration.split('/');\n            if (parts.length === 2) {\n                let month: string = null;\n                let year: string = null;\n                if (parts[0].length === 1 || parts[0].length === 2) {\n                    month = parts[0];\n                    if (month.length === 2 && month[0] === '0') {\n                        month = month.substr(1, 1);\n                    }\n                }\n                if (parts[1].length === 2 || parts[1].length === 4) {\n                    year = month.length === 2 ? '20' + parts[1] : parts[1];\n                }\n                if (month != null && year != null) {\n                    cipher.card.expMonth = month;\n                    cipher.card.expYear = year;\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    protected moveFoldersToCollections(result: ImportResult) {\n        result.folderRelationships.forEach(r => result.collectionRelationships.push(r));\n        result.collections = result.folders.map(f => {\n            const collection = new CollectionView();\n            collection.name = f.name;\n            return collection;\n        });\n        result.folderRelationships = [];\n        result.folders = [];\n    }\n\n    protected querySelectorDirectChild(parentEl: Element, query: string) {\n        const els = this.querySelectorAllDirectChild(parentEl, query);\n        return els.length === 0 ? null : els[0];\n    }\n\n    protected querySelectorAllDirectChild(parentEl: Element, query: string) {\n        return Array.from(parentEl.querySelectorAll(query)).filter(el => el.parentNode === parentEl);\n    }\n\n    protected initLoginCipher() {\n        const cipher = new CipherView();\n        cipher.favorite = false;\n        cipher.notes = '';\n        cipher.fields = [];\n        cipher.login = new LoginView();\n        cipher.type = CipherType.Login;\n        return cipher;\n    }\n\n    protected cleanupCipher(cipher: CipherView) {\n        if (cipher == null) {\n            return;\n        }\n        if (cipher.type !== CipherType.Login) {\n            cipher.login = null;\n        }\n        if (this.isNullOrWhitespace(cipher.name)) {\n            cipher.name = '--';\n        }\n        if (this.isNullOrWhitespace(cipher.notes)) {\n            cipher.notes = null;\n        } else {\n            cipher.notes = cipher.notes.trim();\n        }\n        if (cipher.fields != null && cipher.fields.length === 0) {\n            cipher.fields = null;\n        }\n    }\n\n    protected processKvp(cipher: CipherView, key: string, value: string, type: FieldType = FieldType.Text) {\n        if (this.isNullOrWhitespace(value)) {\n            return;\n        }\n        if (this.isNullOrWhitespace(key)) {\n            key = '';\n        }\n        if (value.length > 200 || value.trim().search(this.newLineRegex) > -1) {\n            if (cipher.notes == null) {\n                cipher.notes = '';\n            }\n            cipher.notes += (key + ': ' + this.splitNewLine(value).join('\\n') + '\\n');\n        } else {\n            if (cipher.fields == null) {\n                cipher.fields = [];\n            }\n            const field = new FieldView();\n            field.type = type;\n            field.name = key;\n            field.value = value;\n            cipher.fields.push(field);\n        }\n    }\n\n    protected processFolder(result: ImportResult, folderName: string) {\n        let folderIndex = result.folders.length;\n        const hasFolder = !this.isNullOrWhitespace(folderName);\n        let addFolder = hasFolder;\n\n        if (hasFolder) {\n            for (let i = 0; i < result.folders.length; i++) {\n                if (result.folders[i].name === folderName) {\n                    addFolder = false;\n                    folderIndex = i;\n                    break;\n                }\n            }\n        }\n\n        if (addFolder) {\n            const f = new FolderView();\n            f.name = folderName;\n            result.folders.push(f);\n        }\n        if (hasFolder) {\n            result.folderRelationships.push([result.ciphers.length, folderIndex]);\n        }\n    }\n\n    protected convertToNoteIfNeeded(cipher: CipherView) {\n        if (cipher.type === CipherType.Login && this.isNullOrWhitespace(cipher.login.username) &&\n            this.isNullOrWhitespace(cipher.login.password) &&\n            (cipher.login.uris == null || cipher.login.uris.length === 0)) {\n            cipher.type = CipherType.SecureNote;\n            cipher.secureNote = new SecureNoteView();\n            cipher.secureNote.type = SecureNoteType.Generic;\n        }\n    }\n}\n","import { CipherView } from '../view/cipherView';\nimport { CollectionView } from '../view/collectionView';\nimport { FolderView } from '../view/folderView';\n\nexport class ImportResult {\n    success = false;\n    errorMessage: string;\n    ciphers: CipherView[] = [];\n    folders: FolderView[] = [];\n    folderRelationships: [number, number][] = [];\n    collections: CollectionView[] = [];\n    collectionRelationships: [number, number][] = [];\n}\n","import * as zxcvbn from 'zxcvbn';\n\nimport { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';\nimport { PasswordGeneratorPolicyOptions } from '../models/domain/passwordGeneratorPolicyOptions';\n\nexport abstract class PasswordGenerationService {\n    generatePassword: (options: any) => Promise<string>;\n    generatePassphrase: (options: any) => Promise<string>;\n    getOptions: () => Promise<[any, PasswordGeneratorPolicyOptions]>;\n    enforcePasswordGeneratorPoliciesOnOptions: (options: any) => Promise<[any, PasswordGeneratorPolicyOptions]>;\n    getPasswordGeneratorPolicyOptions: () => Promise<PasswordGeneratorPolicyOptions>;\n    saveOptions: (options: any) => Promise<any>;\n    getHistory: () => Promise<GeneratedPasswordHistory[]>;\n    addHistory: (password: string) => Promise<any>;\n    clear: () => Promise<any>;\n    passwordStrength: (password: string, userInputs?: string[]) => zxcvbn.ZXCVBNResult;\n    normalizeOptions: (options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) => void;\n}\n","export abstract class StateService {\n    get: <T>(key: string) => Promise<T>;\n    save: (key: string, obj: any) => Promise<any>;\n    remove: (key: string) => Promise<any>;\n    purge: () => Promise<any>;\n}\n","import {\n    Directive,\n    HostListener,\n} from '@angular/core';\n\n@Directive({\n    selector: '[appStopClick]',\n})\nexport class StopClickDirective {\n    @HostListener('click', ['$event']) onClick($event: MouseEvent) {\n        $event.preventDefault();\n    }\n}\n","export abstract class StorageService {\n    get: <T>(key: string, options?: StorageServiceOptions) => Promise<T>;\n    has: (key: string, options?: StorageServiceOptions) => Promise<boolean>;\n    save: (key: string, obj: any, options?: StorageServiceOptions) => Promise<any>;\n    remove: (key: string, options?: StorageServiceOptions) => Promise<any>;\n}\n\nexport interface StorageServiceOptions {\n    keySuffix: KeySuffixOptions;\n}\n\nexport type KeySuffixOptions = 'auto' | 'biometric';\n","export enum CipherType {\n    Login = 1,\n    SecureNote = 2,\n    Card = 3,\n    Identity = 4,\n}\n","import {\n    SyncCipherNotification,\n    SyncFolderNotification,\n    SyncSendNotification,\n} from '../models/response/notificationResponse';\n\nexport abstract class SyncService {\n    syncInProgress: boolean;\n\n    getLastSync: () => Promise<Date>;\n    setLastSync: (date: Date) => Promise<any>;\n    fullSync: (forceSync: boolean, allowThrowOnError?: boolean) => Promise<boolean>;\n    syncUpsertFolder: (notification: SyncFolderNotification, isEdit: boolean) => Promise<boolean>;\n    syncDeleteFolder: (notification: SyncFolderNotification) => Promise<boolean>;\n    syncUpsertCipher: (notification: SyncCipherNotification, isEdit: boolean) => Promise<boolean>;\n    syncDeleteCipher: (notification: SyncFolderNotification) => Promise<boolean>;\n    syncUpsertSend: (notification: SyncSendNotification, isEdit: boolean) => Promise<boolean>;\n    syncDeleteSend: (notification: SyncSendNotification) => Promise<boolean>;\n}\n","export abstract class PasswordRepromptService {\n    protectedFields: () => string[];\n    showPasswordPrompt: () => Promise<boolean>;\n    enabled: () => Promise<boolean>;\n}\n","import { CollectionData } from '../models/data/collectionData';\n\nimport { Collection } from '../models/domain/collection';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nexport abstract class CollectionService {\n    decryptedCollectionCache: CollectionView[];\n\n    clearCache: () => void;\n    encrypt: (model: CollectionView) => Promise<Collection>;\n    decryptMany: (collections: Collection[]) => Promise<CollectionView[]>;\n    get: (id: string) => Promise<Collection>;\n    getAll: () => Promise<Collection[]>;\n    getAllDecrypted: () => Promise<CollectionView[]>;\n    getAllNested: (collections?: CollectionView[]) => Promise<TreeNode<CollectionView>[]>;\n    getNested: (id: string) => Promise<TreeNode<CollectionView>>;\n    upsert: (collection: CollectionData | CollectionData[]) => Promise<any>;\n    replace: (collections: { [id: string]: CollectionData; }) => Promise<any>;\n    clear: (userId: string) => Promise<any>;\n    delete: (id: string | string[]) => Promise<any>;\n}\n","import { Observable } from 'rxjs';\n\nexport type Urls = {\n    base?: string;\n    webVault?: string;\n    api?: string;\n    identity?: string;\n    icons?: string;\n    notifications?: string;\n    events?: string;\n    keyConnector?: string;\n};\n\nexport type PayPalConfig = {\n    businessId?: string;\n    buttonAction?: string;\n};\n\nexport abstract class EnvironmentService {\n    urls: Observable<Urls>;\n\n    hasBaseUrl: () => boolean;\n    getNotificationsUrl: () => string;\n    getWebVaultUrl: () => string;\n    getSendUrl: () => string;\n    getIconsUrl: () => string;\n    getApiUrl: () => string;\n    getIdentityUrl: () => string;\n    getEventsUrl: () => string;\n    getKeyConnectorUrl: () => string;\n    setUrlsFromStorage: () => Promise<void>;\n    setUrls: (urls: any, saveSettings?: boolean) => Promise<Urls>;\n    getUrls: () => Urls;\n}\n","import { SecretVerificationRequest } from '../models/request/secretVerificationRequest';\n\nimport { Verification } from '../types/verification';\n\nexport abstract class UserVerificationService {\n    buildRequest: <T extends SecretVerificationRequest> (verification: Verification,\n        requestClass?: new () => T, alreadyHashed?: boolean) => Promise<T>;\n    verifyUser: (verification: Verification) => Promise<boolean>;\n    requestOTP: () => Promise<void>;\n}\n","import {\n    Directive,\n    ElementRef,\n    Input,\n    Renderer2,\n} from '@angular/core';\n\n@Directive({\n    selector: '[appInputVerbatim]',\n})\nexport class InputVerbatimDirective {\n    @Input() set appInputVerbatim(condition: boolean | string) {\n        this.disableComplete = condition === '' || condition === true;\n    }\n\n    private disableComplete: boolean;\n\n    constructor(private el: ElementRef, private renderer: Renderer2) { }\n\n    ngOnInit() {\n        if (this.disableComplete && !this.el.nativeElement.hasAttribute('autocomplete')) {\n            this.renderer.setAttribute(this.el.nativeElement, 'autocomplete', 'off');\n        }\n        if (!this.el.nativeElement.hasAttribute('autocapitalize')) {\n            this.renderer.setAttribute(this.el.nativeElement, 'autocapitalize', 'none');\n        }\n        if (!this.el.nativeElement.hasAttribute('autocorrect')) {\n            this.renderer.setAttribute(this.el.nativeElement, 'autocorrect', 'none');\n        }\n        if (!this.el.nativeElement.hasAttribute('spellcheck')) {\n            this.renderer.setAttribute(this.el.nativeElement, 'spellcheck', 'false');\n        }\n        if (!this.el.nativeElement.hasAttribute('inputmode')) {\n            this.renderer.setAttribute(this.el.nativeElement, 'inputmode', 'verbatim');\n        }\n    }\n}\n","import { TwoFactorProviderType } from '../enums/twoFactorProviderType';\n\nimport { AuthResult } from '../models/domain/authResult';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport abstract class AuthService {\n    email: string;\n    masterPasswordHash: string;\n    code: string;\n    codeVerifier: string;\n    ssoRedirectUrl: string;\n    clientId: string;\n    clientSecret: string;\n    twoFactorProvidersData: Map<TwoFactorProviderType, { [key: string]: string; }>;\n    selectedTwoFactorProviderType: TwoFactorProviderType;\n\n    logIn: (email: string, masterPassword: string, captchaToken?: string) => Promise<AuthResult>;\n    logInSso: (code: string, codeVerifier: string, redirectUrl: string, orgId: string) => Promise<AuthResult>;\n    logInApiKey: (clientId: string, clientSecret: string) => Promise<AuthResult>;\n    logInTwoFactor: (twoFactorProvider: TwoFactorProviderType, twoFactorToken: string,\n        remember?: boolean) => Promise<AuthResult>;\n    logInComplete: (email: string, masterPassword: string, twoFactorProvider: TwoFactorProviderType,\n        twoFactorToken: string, remember?: boolean, captchaToken?: string) => Promise<AuthResult>;\n    logInSsoComplete: (code: string, codeVerifier: string, redirectUrl: string,\n        twoFactorProvider: TwoFactorProviderType, twoFactorToken: string, remember?: boolean) => Promise<AuthResult>;\n    logInApiKeyComplete: (clientId: string, clientSecret: string, twoFactorProvider: TwoFactorProviderType,\n        twoFactorToken: string, remember?: boolean) => Promise<AuthResult>;\n    logOut: (callback: Function) => void;\n    getSupportedTwoFactorProviders: (win: Window) => any[];\n    getDefaultTwoFactorProvider: (webAuthnSupported: boolean) => TwoFactorProviderType;\n    makePreloginKey: (masterPassword: string, email: string) => Promise<SymmetricCryptoKey>;\n    authingWithApiKey: () => boolean;\n    authingWithSso: () => boolean;\n    authingWithPassword: () => boolean;\n}\n","import { FolderData } from '../models/data/folderData';\n\nimport { Folder } from '../models/domain/folder';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport abstract class FolderService {\n    decryptedFolderCache: FolderView[];\n\n    clearCache: () => void;\n    encrypt: (model: FolderView, key?: SymmetricCryptoKey) => Promise<Folder>;\n    get: (id: string) => Promise<Folder>;\n    getAll: () => Promise<Folder[]>;\n    getAllDecrypted: () => Promise<FolderView[]>;\n    getAllNested: () => Promise<TreeNode<FolderView>[]>;\n    getNested: (id: string) => Promise<TreeNode<FolderView>>;\n    saveWithServer: (folder: Folder) => Promise<any>;\n    upsert: (folder: FolderData | FolderData[]) => Promise<any>;\n    replace: (folders: { [id: string]: FolderData; }) => Promise<any>;\n    clear: (userId: string) => Promise<any>;\n    delete: (id: string | string[]) => Promise<any>;\n    deleteWithServer: (id: string) => Promise<any>;\n}\n","import {\n    Directive,\n    HostListener,\n} from '@angular/core';\n\n@Directive({\n    selector: '[appStopProp]',\n})\nexport class StopPropDirective {\n    @HostListener('click', ['$event']) onClick($event: MouseEvent) {\n        $event.stopPropagation();\n    }\n}\n","import { EventType } from '../enums/eventType';\n\nexport abstract class EventService {\n    collect: (eventType: EventType, cipherId?: string, uploadImmediately?: boolean) => Promise<any>;\n    uploadEvents: () => Promise<any>;\n    clearEvents: () => Promise<any>;\n}\n","export enum PolicyType {\n    TwoFactorAuthentication = 0, // Requires users to have 2fa enabled\n    MasterPassword = 1, // Sets minimum requirements for master password complexity\n    PasswordGenerator = 2, // Sets minimum requirements/default type for generated passwords/passphrases\n    SingleOrg = 3, // Allows users to only be apart of one organization\n    RequireSso = 4, // Requires users to authenticate with SSO\n    PersonalOwnership = 5, // Disables personal vault ownership for adding/cloning items\n    DisableSend = 6, // Disables the ability to create and edit Bitwarden Sends\n    SendOptions = 7, // Sets restrictions or defaults for Bitwarden Sends\n    ResetPassword = 8, // Allows orgs to use reset password : also can enable auto-enrollment during invite flow\n    MaximumVaultTimeout = 9, // Sets the maximum allowed vault timeout\n    DisablePersonalVaultExport = 10, // Disable personal vault export\n}\n","export class ConstantsService {\n    static readonly environmentUrlsKey: string = 'environmentUrls';\n    static readonly disableGaKey: string = 'disableGa';\n    static readonly disableAddLoginNotificationKey: string = 'disableAddLoginNotification';\n    static readonly disableChangedPasswordNotificationKey: string = 'disableChangedPasswordNotification';\n    static readonly disableContextMenuItemKey: string = 'disableContextMenuItem';\n    static readonly disableFaviconKey: string = 'disableFavicon';\n    static readonly disableBadgeCounterKey: string = 'disableBadgeCounter';\n    static readonly disableAutoTotpCopyKey: string = 'disableAutoTotpCopy';\n    static readonly disableAutoBiometricsPromptKey: string = 'noAutoPromptBiometrics';\n    static readonly enableAutoFillOnPageLoadKey: string = 'enableAutoFillOnPageLoad';\n    static readonly autoFillOnPageLoadDefaultKey: string = 'autoFillOnPageLoadDefault';\n    static readonly vaultTimeoutKey: string = 'lockOption';\n    static readonly vaultTimeoutActionKey: string = 'vaultTimeoutAction';\n    static readonly lastActiveKey: string = 'lastActive';\n    static readonly neverDomainsKey: string = 'neverDomains';\n    static readonly installedVersionKey: string = 'installedVersion';\n    static readonly localeKey: string = 'locale';\n    static readonly themeKey: string = 'theme';\n    static readonly collapsedGroupingsKey: string = 'collapsedGroupings';\n    static readonly autoConfirmFingerprints: string = 'autoConfirmFingerprints';\n    static readonly dontShowCardsCurrentTab: string = 'dontShowCardsCurrentTab';\n    static readonly dontShowIdentitiesCurrentTab: string = 'dontShowIdentitiesCurrentTab';\n    static readonly defaultUriMatch: string = 'defaultUriMatch';\n    static readonly pinProtectedKey: string = 'pinProtectedKey';\n    static readonly protectedPin: string = 'protectedPin';\n    static readonly clearClipboardKey: string = 'clearClipboardKey';\n    static readonly eventCollectionKey: string = 'eventCollection';\n    static readonly ssoCodeVerifierKey: string = 'ssoCodeVerifier';\n    static readonly ssoStateKey: string = 'ssoState';\n    static readonly biometricUnlockKey: string = 'biometric';\n    static readonly biometricText: string = 'biometricText';\n    static readonly biometricAwaitingAcceptance: string = 'biometricAwaitingAcceptance';\n    static readonly biometricFingerprintValidated: string = 'biometricFingerprintValidated';\n\n    readonly environmentUrlsKey: string = ConstantsService.environmentUrlsKey;\n    readonly disableGaKey: string = ConstantsService.disableGaKey;\n    readonly disableAddLoginNotificationKey: string = ConstantsService.disableAddLoginNotificationKey;\n    readonly disableContextMenuItemKey: string = ConstantsService.disableContextMenuItemKey;\n    readonly disableFaviconKey: string = ConstantsService.disableFaviconKey;\n    readonly disableBadgeCounterKey: string = ConstantsService.disableBadgeCounterKey;\n    readonly disableAutoTotpCopyKey: string = ConstantsService.disableAutoTotpCopyKey;\n    readonly disableAutoBiometricsPromptKey: string = ConstantsService.disableAutoBiometricsPromptKey;\n    readonly enableAutoFillOnPageLoadKey: string = ConstantsService.enableAutoFillOnPageLoadKey;\n    readonly autoFillOnPageLoadDefaultKey: string = ConstantsService.autoFillOnPageLoadDefaultKey;\n    readonly vaultTimeoutKey: string = ConstantsService.vaultTimeoutKey;\n    readonly vaultTimeoutActionKey: string = ConstantsService.vaultTimeoutActionKey;\n    readonly lastActiveKey: string = ConstantsService.lastActiveKey;\n    readonly neverDomainsKey: string = ConstantsService.neverDomainsKey;\n    readonly installedVersionKey: string = ConstantsService.installedVersionKey;\n    readonly localeKey: string = ConstantsService.localeKey;\n    readonly themeKey: string = ConstantsService.themeKey;\n    readonly collapsedGroupingsKey: string = ConstantsService.collapsedGroupingsKey;\n    readonly autoConfirmFingerprints: string = ConstantsService.autoConfirmFingerprints;\n    readonly dontShowCardsCurrentTab: string = ConstantsService.dontShowCardsCurrentTab;\n    readonly dontShowIdentitiesCurrentTab: string = ConstantsService.dontShowIdentitiesCurrentTab;\n    readonly defaultUriMatch: string = ConstantsService.defaultUriMatch;\n    readonly pinProtectedKey: string = ConstantsService.pinProtectedKey;\n    readonly protectedPin: string = ConstantsService.protectedPin;\n    readonly clearClipboardKey: string = ConstantsService.clearClipboardKey;\n    readonly eventCollectionKey: string = ConstantsService.eventCollectionKey;\n    readonly ssoCodeVerifierKey: string = ConstantsService.ssoCodeVerifierKey;\n    readonly ssoStateKey: string = ConstantsService.ssoStateKey;\n    readonly biometricUnlockKey: string = ConstantsService.biometricUnlockKey;\n    readonly biometricText: string = ConstantsService.biometricText;\n    readonly biometricAwaitingAcceptance: string = ConstantsService.biometricAwaitingAcceptance;\n    readonly biometricFingerprintValidated: string = ConstantsService.biometricFingerprintValidated;\n}\n","import { CipherView } from '../models/view/cipherView';\nimport { SendView } from '../models/view/sendView';\n\nexport abstract class SearchService {\n    indexedEntityId?: string = null;\n    clearIndex: () => void;\n    isSearchable: (query: string) => boolean;\n    indexCiphers: (indexedEntityGuid?: string, ciphersToIndex?: CipherView[]) => Promise<void>;\n    searchCiphers: (query: string,\n        filter?: ((cipher: CipherView) => boolean) | (((cipher: CipherView) => boolean)[]),\n        ciphers?: CipherView[]) => Promise<CipherView[]>;\n    searchCiphersBasic: (ciphers: CipherView[], query: string, deleted?: boolean) => CipherView[];\n    searchSends: (sends: SendView[], query: string) => SendView[];\n}\n","import {\n    Directive,\n    ElementRef,\n    Input,\n    NgZone,\n} from '@angular/core';\n\nimport { take } from 'rxjs/operators';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive({\n    selector: '[appAutofocus]',\n})\nexport class AutofocusDirective {\n    @Input() set appAutofocus(condition: boolean | string) {\n        this.autofocus = condition === '' || condition === true;\n    }\n\n    private autofocus: boolean;\n\n    constructor(private el: ElementRef, private ngZone: NgZone) { }\n\n    ngOnInit() {\n        if (!Utils.isMobileBrowser && this.autofocus) {\n            if (this.ngZone.isStable) {\n                this.el.nativeElement.focus();\n            } else {\n                this.ngZone.onStable.pipe(take(1)).subscribe(() => this.el.nativeElement.focus());\n            }\n        }\n    }\n}\n","import { Organization } from '../models/domain/organization';\n\nexport abstract class KeyConnectorService {\n    getAndSetKey: (url?: string) => Promise<void>;\n    getManagingOrganization: () => Promise<Organization>;\n    getUsesKeyConnector: () => Promise<boolean>;\n    migrateUser: () => Promise<void>;\n    userNeedsMigration: () => Promise<boolean>;\n    setUsesKeyConnector: (enabled: boolean) => Promise<void>;\n    setConvertAccountRequired: (status: boolean) => Promise<void>;\n    getConvertAccountRequired: () => Promise<boolean>;\n    removeConvertAccountRequired: () => Promise<void>;\n    clear: () => Promise<void>;\n}\n","import { EncString } from './encString';\n\nimport { View } from '../view/view';\n\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport default class Domain {\n    protected buildDomainModel<D extends Domain>(domain: D, dataObj: any, map: any,\n        alreadyEncrypted: boolean, notEncList: any[] = []) {\n        for (const prop in map) {\n            if (!map.hasOwnProperty(prop)) {\n                continue;\n            }\n\n            const objProp = dataObj[(map[prop] || prop)];\n            if (alreadyEncrypted === true || notEncList.indexOf(prop) > -1) {\n                (domain as any)[prop] = objProp ? objProp : null;\n            } else {\n                (domain as any)[prop] = objProp ? new EncString(objProp) : null;\n            }\n        }\n    }\n    protected buildDataModel<D extends Domain>(domain: D, dataObj: any, map: any, notEncStringList: any[] = []) {\n        for (const prop in map) {\n            if (!map.hasOwnProperty(prop)) {\n                continue;\n            }\n\n            const objProp = (domain as any)[(map[prop] || prop)];\n            if (notEncStringList.indexOf(prop) > -1) {\n                (dataObj as any)[prop] = objProp != null ? objProp : null;\n            } else {\n                (dataObj as any)[prop] = objProp != null ? (objProp as EncString).encryptedString : null;\n            }\n        }\n    }\n\n    protected async decryptObj<T extends View>(viewModel: T, map: any, orgId: string,\n        key: SymmetricCryptoKey = null): Promise<T> {\n        const promises = [];\n        const self: any = this;\n\n        for (const prop in map) {\n            if (!map.hasOwnProperty(prop)) {\n                continue;\n            }\n\n            // tslint:disable-next-line\n            (function (theProp) {\n                const p = Promise.resolve().then(() => {\n                    const mapProp = map[theProp] || theProp;\n                    if (self[mapProp]) {\n                        return self[mapProp].decrypt(orgId, key);\n                    }\n                    return null;\n                }).then((val: any) => {\n                    (viewModel as any)[theProp] = val;\n                });\n                promises.push(p);\n            })(prop);\n        }\n\n        await Promise.all(promises);\n        return viewModel;\n    }\n}\n","import { ItemView } from './itemView';\n\nimport { Card } from '../domain/card';\n\nimport { CardLinkedId as LinkedId } from '../../enums/linkedIdType';\n\nimport { linkedFieldOption } from '../../misc/linkedFieldOption.decorator';\n\nexport class CardView extends ItemView {\n    @linkedFieldOption(LinkedId.CardholderName)\n    cardholderName: string = null;\n    @linkedFieldOption(LinkedId.ExpMonth, 'expirationMonth')\n    expMonth: string = null;\n    @linkedFieldOption(LinkedId.ExpYear, 'expirationYear')\n    expYear: string = null;\n    @linkedFieldOption(LinkedId.Code, 'securityCode')\n    code: string = null;\n\n    // tslint:disable\n    private _brand: string = null;\n    private _number: string = null;\n    private _subTitle: string = null;\n    // tslint:enable\n\n    constructor(c?: Card) {\n        super();\n    }\n\n    get maskedCode(): string {\n        return this.code != null ? '•'.repeat(this.code.length) : null;\n    }\n\n    get maskedNumber(): string {\n        return this.number != null ? '•'.repeat(this.number.length) : null;\n    }\n\n    @linkedFieldOption(LinkedId.Brand)\n    get brand(): string {\n        return this._brand;\n    }\n    set brand(value: string) {\n        this._brand = value;\n        this._subTitle = null;\n    }\n\n    @linkedFieldOption(LinkedId.Number)\n    get number(): string {\n        return this._number;\n    }\n    set number(value: string) {\n        this._number = value;\n        this._subTitle = null;\n    }\n\n    get subTitle(): string {\n        if (this._subTitle == null) {\n            this._subTitle = this.brand;\n            if (this.number != null && this.number.length >= 4) {\n                if (this._subTitle != null && this._subTitle !== '') {\n                    this._subTitle += ', ';\n                } else {\n                    this._subTitle = '';\n                }\n\n                // Show last 5 on amex, last 4 for all others\n                const count = this.number.length >= 5 && this.number.match(new RegExp('^3[47]')) != null ? 5 : 4;\n                this._subTitle += ('*' + this.number.substr(this.number.length - count));\n            }\n        }\n        return this._subTitle;\n    }\n\n    get expiration(): string {\n        if (!this.expMonth && !this.expYear) {\n            return null;\n        }\n\n        let exp = this.expMonth != null ? ('0' + this.expMonth).slice(-2) : '__';\n        exp += (' / ' + (this.expYear != null ? this.formatYear(this.expYear) : '____'));\n        return exp;\n    }\n\n    private formatYear(year: string): string {\n        return year.length === 2 ? '20' + year : year;\n    }\n}\n","import {\n    Pipe,\n    PipeTransform,\n} from '@angular/core';\n\ninterface User {\n    name?: string;\n    email: string;\n}\n\n@Pipe({\n    name: 'userName',\n})\nexport class UserNamePipe implements PipeTransform {\n    transform(user?: User): string {\n        if (user == null) {\n            return null;\n        }\n\n        return user.name == null || user.name.trim() === '' ? user.email : user.name;\n    }\n}\n","import { EncString } from '../models/domain/encString';\n\nexport abstract class VaultTimeoutService {\n    biometricLocked: boolean;\n    everBeenUnlocked: boolean;\n    pinProtectedKey: EncString;\n    isLocked: () => Promise<boolean>;\n    checkVaultTimeout: () => Promise<void>;\n    lock: (allowSoftLock?: boolean) => Promise<void>;\n    logOut: () => Promise<void>;\n    setVaultTimeoutOptions: (vaultTimeout: number, vaultTimeoutAction: string) => Promise<void>;\n    getVaultTimeout: () => Promise<number>;\n    isPinLockSet: () => Promise<[boolean, boolean]>;\n    isBiometricLockSet: () => Promise<boolean>;\n    clear: () => Promise<any>;\n}\n","import { EncryptionType } from '../../enums/encryptionType';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\n\nimport { Utils } from '../../misc/utils';\n\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class EncString {\n    encryptedString?: string;\n    encryptionType?: EncryptionType;\n    decryptedValue?: string;\n    data?: string;\n    iv?: string;\n    mac?: string;\n\n    constructor(encryptedStringOrType: string | EncryptionType, data?: string, iv?: string, mac?: string) {\n        if (data != null) {\n            // data and header\n            const encType = encryptedStringOrType as EncryptionType;\n\n            if (iv != null) {\n                this.encryptedString = encType + '.' + iv + '|' + data;\n            } else {\n                this.encryptedString = encType + '.' + data;\n            }\n\n            // mac\n            if (mac != null) {\n                this.encryptedString += ('|' + mac);\n            }\n\n            this.encryptionType = encType;\n            this.data = data;\n            this.iv = iv;\n            this.mac = mac;\n\n            return;\n        }\n\n        this.encryptedString = encryptedStringOrType as string;\n        if (!this.encryptedString) {\n            return;\n        }\n\n        const headerPieces = this.encryptedString.split('.');\n        let encPieces: string[] = null;\n\n        if (headerPieces.length === 2) {\n            try {\n                this.encryptionType = parseInt(headerPieces[0], null);\n                encPieces = headerPieces[1].split('|');\n            } catch (e) {\n                return;\n            }\n        } else {\n            encPieces = this.encryptedString.split('|');\n            this.encryptionType = encPieces.length === 3 ? EncryptionType.AesCbc128_HmacSha256_B64 :\n                EncryptionType.AesCbc256_B64;\n        }\n\n        switch (this.encryptionType) {\n            case EncryptionType.AesCbc128_HmacSha256_B64:\n            case EncryptionType.AesCbc256_HmacSha256_B64:\n                if (encPieces.length !== 3) {\n                    return;\n                }\n\n                this.iv = encPieces[0];\n                this.data = encPieces[1];\n                this.mac = encPieces[2];\n                break;\n            case EncryptionType.AesCbc256_B64:\n                if (encPieces.length !== 2) {\n                    return;\n                }\n\n                this.iv = encPieces[0];\n                this.data = encPieces[1];\n                break;\n            case EncryptionType.Rsa2048_OaepSha256_B64:\n            case EncryptionType.Rsa2048_OaepSha1_B64:\n                if (encPieces.length !== 1) {\n                    return;\n                }\n\n                this.data = encPieces[0];\n                break;\n            default:\n                return;\n        }\n    }\n\n    async decrypt(orgId: string, key: SymmetricCryptoKey = null): Promise<string> {\n        if (this.decryptedValue != null) {\n            return this.decryptedValue;\n        }\n\n        let cryptoService: CryptoService;\n        const containerService = (Utils.global as any).bitwardenContainerService;\n        if (containerService) {\n            cryptoService = containerService.getCryptoService();\n        } else {\n            throw new Error('global bitwardenContainerService not initialized.');\n        }\n\n        try {\n            if (key == null) {\n                key = await cryptoService.getOrgKey(orgId);\n            }\n            this.decryptedValue = await cryptoService.decryptToUtf8(this, key);\n        } catch (e) {\n            this.decryptedValue = '[error: cannot decrypt]';\n        }\n        return this.decryptedValue;\n    }\n}\n","import { DecryptParameters } from '../models/domain/decryptParameters';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport abstract class CryptoFunctionService {\n    pbkdf2: (password: string | ArrayBuffer, salt: string | ArrayBuffer, algorithm: 'sha256' | 'sha512',\n        iterations: number) => Promise<ArrayBuffer>;\n    hkdf: (ikm: ArrayBuffer, salt: string | ArrayBuffer, info: string | ArrayBuffer,\n        outputByteSize: number, algorithm: 'sha256' | 'sha512') => Promise<ArrayBuffer>;\n    hkdfExpand: (prk: ArrayBuffer, info: string | ArrayBuffer, outputByteSize: number,\n        algorithm: 'sha256' | 'sha512') => Promise<ArrayBuffer>;\n    hash: (value: string | ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5') => Promise<ArrayBuffer>;\n    hmac: (value: ArrayBuffer, key: ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512') => Promise<ArrayBuffer>;\n    compare: (a: ArrayBuffer, b: ArrayBuffer) => Promise<boolean>;\n    hmacFast: (value: ArrayBuffer | string, key: ArrayBuffer | string, algorithm: 'sha1' | 'sha256' | 'sha512') =>\n        Promise<ArrayBuffer | string>;\n    compareFast: (a: ArrayBuffer | string, b: ArrayBuffer | string) => Promise<boolean>;\n    aesEncrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise<ArrayBuffer>;\n    aesDecryptFastParameters: (data: string, iv: string, mac: string, key: SymmetricCryptoKey) =>\n        DecryptParameters<ArrayBuffer | string>;\n    aesDecryptFast: (parameters: DecryptParameters<ArrayBuffer | string>) => Promise<string>;\n    aesDecrypt: (data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer) => Promise<ArrayBuffer>;\n    rsaEncrypt: (data: ArrayBuffer, publicKey: ArrayBuffer, algorithm: 'sha1' | 'sha256') => Promise<ArrayBuffer>;\n    rsaDecrypt: (data: ArrayBuffer, privateKey: ArrayBuffer, algorithm: 'sha1' | 'sha256') => Promise<ArrayBuffer>;\n    rsaExtractPublicKey: (privateKey: ArrayBuffer) => Promise<ArrayBuffer>;\n    rsaGenerateKeyPair: (length: 1024 | 2048 | 4096) => Promise<[ArrayBuffer, ArrayBuffer]>;\n    randomBytes: (length: number) => Promise<ArrayBuffer>;\n}\n","import { BreachAccountResponse } from '../models/response/breachAccountResponse';\n\nexport abstract class AuditService {\n    passwordLeaked: (password: string) => Promise<number>;\n    breachedAccounts: (username: string) => Promise<BreachAccountResponse[]>;\n}\n","export class SecretVerificationRequest {\n    masterPasswordHash: string;\n    otp: string;\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { ItemView } from './itemView';\n\nimport { SecureNote } from '../domain/secureNote';\n\nexport class SecureNoteView extends ItemView {\n    type: SecureNoteType = null;\n\n    constructor(n?: SecureNote) {\n        super();\n        if (!n) {\n            return;\n        }\n\n        this.type = n.type;\n    }\n\n    get subTitle(): string {\n        return null;\n    }\n}\n","export enum SecureNoteType {\n    Generic = 0,\n}\n","import {\n    Component,\n    Input,\n    OnChanges,\n} from '@angular/core';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nconst IconMap: any = {\n    'fa-globe': String.fromCharCode(0xf0ac),\n    'fa-sticky-note-o': String.fromCharCode(0xf24a),\n    'fa-id-card-o': String.fromCharCode(0xf2c3),\n    'fa-credit-card': String.fromCharCode(0xf09d),\n    'fa-android': String.fromCharCode(0xf17b),\n    'fa-apple': String.fromCharCode(0xf179),\n};\n\n@Component({\n    selector: 'app-vault-icon',\n    templateUrl: 'icon.component.html',\n})\nexport class IconComponent implements OnChanges {\n    @Input() cipher: CipherView;\n    icon: string;\n    image: string;\n    fallbackImage: string;\n    imageEnabled: boolean;\n\n    private iconsUrl: string;\n\n    constructor(environmentService: EnvironmentService, protected stateService: StateService) {\n        this.iconsUrl = environmentService.getIconsUrl();\n    }\n\n    async ngOnChanges() {\n        // Components may be re-used when using cdk-virtual-scroll. Which puts the component in a weird state,\n        // to avoid this we reset all state variables.\n        this.image = null;\n        this.fallbackImage = null;\n        this.imageEnabled = !(await this.stateService.get<boolean>(ConstantsService.disableFaviconKey));\n        this.load();\n    }\n\n    get iconCode(): string {\n        return IconMap[this.icon];\n    }\n\n    protected load() {\n        switch (this.cipher.type) {\n            case CipherType.Login:\n                this.icon = 'fa-globe';\n                this.setLoginIcon();\n                break;\n            case CipherType.SecureNote:\n                this.icon = 'fa-sticky-note-o';\n                break;\n            case CipherType.Card:\n                this.icon = 'fa-credit-card';\n                break;\n            case CipherType.Identity:\n                this.icon = 'fa-id-card-o';\n                break;\n            default:\n                break;\n        }\n    }\n\n    private setLoginIcon() {\n        if (this.cipher.login.uri) {\n            let hostnameUri = this.cipher.login.uri;\n            let isWebsite = false;\n\n            if (hostnameUri.indexOf('androidapp://') === 0) {\n                this.icon = 'fa-android';\n                this.image = null;\n            } else if (hostnameUri.indexOf('iosapp://') === 0) {\n                this.icon = 'fa-apple';\n                this.image = null;\n            } else if (this.imageEnabled && hostnameUri.indexOf('://') === -1 && hostnameUri.indexOf('.') > -1) {\n                hostnameUri = 'http://' + hostnameUri;\n                isWebsite = true;\n            } else if (this.imageEnabled) {\n                isWebsite = hostnameUri.indexOf('http') === 0 && hostnameUri.indexOf('.') > -1;\n            }\n\n            if (this.imageEnabled && isWebsite) {\n                try {\n                    this.image = this.iconsUrl + '/' + Utils.getHostname(hostnameUri) + '/icon.png';\n                    this.fallbackImage = 'images/fa-globe.png';\n                } catch (e) {\n                    // Ignore error since the fallback icon will be shown if image is null.\n                }\n            }\n        } else {\n            this.image = null;\n        }\n    }\n}\n","<div class=\"icon\" aria-hidden=\"true\"> <img [src]=\"image\" appFallbackSrc=\"{{fallbackImage}}\" *ngIf=\"imageEnabled && image\" alt=\"\"/> <i class=\"fa fa-fw fa-lg {{icon}}\" *ngIf=\"!imageEnabled || !image\"></i> </div> ","import { Injectable } from '@angular/core';\n\nimport { BroadcasterService as BaseBroadcasterService } from 'jslib-common/services/broadcaster.service';\n\n@Injectable()\nexport class BroadcasterService extends BaseBroadcasterService {\n}\n","export abstract class TokenService {\n    token: string;\n    decodedToken: any;\n    refreshToken: string;\n    setTokens: (accessToken: string, refreshToken: string, clientIdClientSecret: [string, string]) => Promise<any>;\n    setToken: (token: string) => Promise<any>;\n    getToken: () => Promise<string>;\n    setRefreshToken: (refreshToken: string) => Promise<any>;\n    getRefreshToken: () => Promise<string>;\n    setClientId: (clientId: string) => Promise<any>;\n    getClientId: () => Promise<string>;\n    setClientSecret: (clientSecret: string) => Promise<any>;\n    getClientSecret: () => Promise<string>;\n    toggleTokens: () => Promise<any>;\n    setTwoFactorToken: (token: string, email: string) => Promise<any>;\n    getTwoFactorToken: (email: string) => Promise<string>;\n    clearTwoFactorToken: (email: string) => Promise<any>;\n    clearToken: () => Promise<any>;\n    decodeToken: () => any;\n    getTokenExpirationDate: () => Date;\n    tokenSecondsRemaining: (offsetSeconds?: number) => number;\n    tokenNeedsRefresh: (minutes?: number) => boolean;\n    getUserId: () => string;\n    getEmail: () => string;\n    getEmailVerified: () => boolean;\n    getName: () => string;\n    getPremium: () => boolean;\n    getIssuer: () => string;\n    getIsExternal: () => boolean;\n}\n","<img [src]=\"sanitizer.bypassSecurityTrustResourceUrl(src)\" title=\"{{data}}\" [ngClass]=\"{'rounded-circle': circle}\">","export enum TwoFactorProviderType {\n    Authenticator = 0,\n    Email = 1,\n    Duo = 2,\n    Yubikey = 3,\n    U2f = 4,\n    Remember = 5,\n    OrganizationDuo = 6,\n    WebAuthn = 7,\n}\n","import { EventView } from '../models/view/eventView';\n\nexport abstract class ExportService {\n    getExport: (format?: 'csv' | 'json' | 'encrypted_json') => Promise<string>;\n    getOrganizationExport: (organizationId: string, format?: 'csv' | 'json' | 'encrypted_json') => Promise<string>;\n    getEventExport: (events: EventView[]) => Promise<string>;\n    getFileName: (prefix?: string, extension?: string) => string;\n}\n","export abstract class TotpService {\n    getCode: (key: string) => Promise<string>;\n    getTimeInterval: (key: string) => number;\n    isAutoCopyEnabled: () => Promise<boolean>;\n}\n","export enum FieldType {\n    Text = 0,\n    Hidden = 1,\n    Boolean = 2,\n    Linked = 3,\n}\n","import { SendData } from '../models/data/sendData';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { Send } from '../models/domain/send';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { SendView } from '../models/view/sendView';\n\nexport abstract class SendService {\n    decryptedSendCache: SendView[];\n\n    clearCache: () => void;\n    encrypt: (model: SendView, file: File | ArrayBuffer, password: string, key?: SymmetricCryptoKey) => Promise<[Send, EncArrayBuffer]>;\n    get: (id: string) => Promise<Send>;\n    getAll: () => Promise<Send[]>;\n    getAllDecrypted: () => Promise<SendView[]>;\n    saveWithServer: (sendData: [Send, EncArrayBuffer]) => Promise<any>;\n    upsert: (send: SendData | SendData[]) => Promise<any>;\n    replace: (sends: { [id: string]: SendData; }) => Promise<any>;\n    clear: (userId: string) => Promise<any>;\n    delete: (id: string | string[]) => Promise<any>;\n    deleteWithServer: (id: string) => Promise<any>;\n    removePasswordWithServer: (id: string) => Promise<any>;\n}\n","import {\n    Directive,\n    Input,\n    OnInit,\n} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { PolicyRequest } from 'jslib-common/models/request/policyRequest';\n\nimport { PolicyResponse } from 'jslib-common/models/response/policyResponse';\n\nexport abstract class BasePolicy {\n    abstract name: string;\n    abstract description: string;\n    abstract type: PolicyType;\n    abstract component: any;\n\n    display(organization: Organization) {\n        return true;\n    }\n}\n\n@Directive()\nexport abstract class BasePolicyComponent implements OnInit {\n    @Input() policyResponse: PolicyResponse;\n    @Input() policy: BasePolicy;\n\n    enabled = new FormControl(false);\n    data: FormGroup = null;\n\n    ngOnInit(): void {\n        this.enabled.setValue(this.policyResponse.enabled);\n\n        if (this.policyResponse.data != null) {\n            this.loadData();\n        }\n    }\n\n    loadData() {\n        this.data.patchValue(this.policyResponse.data ?? {});\n    }\n\n    buildRequestData() {\n        if (this.data != null) {\n            return this.data.value;\n        }\n\n        return null;\n    }\n\n    buildRequest(policiesEnabledMap: Map<PolicyType, boolean>) {\n        const request = new PolicyRequest();\n        request.enabled = this.enabled.value;\n        request.type = this.policy.type;\n        request.data = this.buildRequestData();\n\n        return Promise.resolve(request);\n    }\n}\n","import {\n    Component,\n    Input,\n    OnInit,\n} from '@angular/core';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { ThemeType } from 'jslib-common/enums/themeType';\n\nimport ThemeVariables from 'src/scss/export.module.scss';\n\nconst lightInputColor = ThemeVariables.lightInputColor;\nconst lightInputPlaceholderColor = ThemeVariables.lightInputPlaceholderColor;\nconst darkInputColor = ThemeVariables.darkInputColor;\nconst darkInputPlaceholderColor = ThemeVariables.darkInputPlaceholderColor;\n\n@Component({\n    selector: 'app-payment',\n    templateUrl: 'payment.component.html',\n})\nexport class PaymentComponent implements OnInit {\n    @Input() showMethods = true;\n    @Input() showOptions = true;\n    @Input() method = PaymentMethodType.Card;\n    @Input() hideBank = false;\n    @Input() hidePaypal = false;\n    @Input() hideCredit = false;\n\n    bank: any = {\n        routing_number: null,\n        account_number: null,\n        account_holder_name: null,\n        account_holder_type: '',\n        currency: 'USD',\n        country: 'US',\n    };\n\n    paymentMethodType = PaymentMethodType;\n\n    private btScript: HTMLScriptElement;\n    private btInstance: any = null;\n    private stripeScript: HTMLScriptElement;\n    private stripe: any = null;\n    private stripeElements: any = null;\n    private stripeCardNumberElement: any = null;\n    private stripeCardExpiryElement: any = null;\n    private stripeCardCvcElement: any = null;\n    private StripeElementStyle: any;\n    private StripeElementClasses: any;\n\n    constructor(private platformUtilsService: PlatformUtilsService, private apiService: ApiService,\n        private logService: LogService) {\n        this.stripeScript = window.document.createElement('script');\n        this.stripeScript.src = 'https://js.stripe.com/v3/';\n        this.stripeScript.async = true;\n        this.stripeScript.onload = () => {\n            this.stripe = (window as any).Stripe(process.env.STRIPE_KEY);\n            this.stripeElements = this.stripe.elements();\n            this.setStripeElement();\n        };\n        this.btScript = window.document.createElement('script');\n        this.btScript.src = `scripts/dropin.js?cache=${process.env.CACHE_TAG}`;\n        this.btScript.async = true;\n        this.StripeElementStyle = {\n            base: {\n                color: null,\n                fontFamily: '\"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif, ' +\n                    '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n                fontSize: '14px',\n                fontSmoothing: 'antialiased',\n                '::placeholder': {\n                    color: null,\n                },\n            },\n            invalid: {\n                color: null,\n\n            },\n        };\n        this.StripeElementClasses = {\n            focus: 'is-focused',\n            empty: 'is-empty',\n            invalid: 'is-invalid',\n        };\n    }\n\n    async ngOnInit() {\n        if (!this.showOptions) {\n            this.hidePaypal = this.method !== PaymentMethodType.PayPal;\n            this.hideBank = this.method !== PaymentMethodType.BankAccount;\n            this.hideCredit = this.method !== PaymentMethodType.Credit;\n        }\n        await this.setTheme();\n        window.document.head.appendChild(this.stripeScript);\n        if (!this.hidePaypal) {\n            window.document.head.appendChild(this.btScript);\n        }\n    }\n\n    ngOnDestroy() {\n        window.document.head.removeChild(this.stripeScript);\n        window.setTimeout(() => {\n            Array.from(window.document.querySelectorAll('iframe')).forEach(el => {\n                if (el.src != null && el.src.indexOf('stripe') > -1) {\n                    try {\n                        window.document.body.removeChild(el);\n                    } catch (e) {\n                        this.logService.error(e);\n                    }\n                }\n            });\n        }, 500);\n        if (!this.hidePaypal) {\n            window.document.head.removeChild(this.btScript);\n            window.setTimeout(() => {\n                Array.from(window.document.head.querySelectorAll('script')).forEach(el => {\n                    if (el.src != null && el.src.indexOf('paypal') > -1) {\n                        try {\n                            window.document.head.removeChild(el);\n                        } catch (e) {\n                            this.logService.error(e);\n                        }\n                    }\n                });\n                const btStylesheet = window.document.head.querySelector('#braintree-dropin-stylesheet');\n                if (btStylesheet != null) {\n                    try {\n                        window.document.head.removeChild(btStylesheet);\n                    } catch (e) {\n                        this.logService.error(e);\n                    }\n                }\n            }, 500);\n        }\n    }\n\n    changeMethod() {\n        this.btInstance = null;\n\n        if (this.method === PaymentMethodType.PayPal) {\n            window.setTimeout(() => {\n                (window as any).braintree.dropin.create({\n                    authorization: process.env.BRAINTREE_KEY,\n                    container: '#bt-dropin-container',\n                    paymentOptionPriority: ['paypal'],\n                    paypal: {\n                        flow: 'vault',\n                        buttonStyle: {\n                            label: 'pay',\n                            size: 'medium',\n                            shape: 'pill',\n                            color: 'blue',\n                            tagline: 'false',\n                        },\n                    },\n                }, (createErr: any, instance: any) => {\n                    if (createErr != null) {\n                        // tslint:disable-next-line\n                        console.error(createErr);\n                        return;\n                    }\n                    this.btInstance = instance;\n                });\n            }, 250);\n        } else {\n            this.setStripeElement();\n        }\n    }\n\n    createPaymentToken(): Promise<[string, PaymentMethodType]> {\n        return new Promise((resolve, reject) => {\n            if (this.method === PaymentMethodType.Credit) {\n                resolve([null, this.method]);\n            } else if (this.method === PaymentMethodType.PayPal) {\n                this.btInstance.requestPaymentMethod().then((payload: any) => {\n                    resolve([payload.nonce, this.method]);\n                }).catch((err: any) => {\n                    reject(err.message);\n                });\n            } else if (this.method === PaymentMethodType.Card || this.method === PaymentMethodType.BankAccount) {\n                if (this.method === PaymentMethodType.Card) {\n                    this.apiService.postSetupPayment().then(clientSecret =>\n                        this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement))\n                        .then((result: any) => {\n                            if (result.error) {\n                                reject(result.error.message);\n                            } else if (result.setupIntent && result.setupIntent.status === 'succeeded') {\n                                resolve([result.setupIntent.payment_method, this.method]);\n                            } else {\n                                reject();\n                            }\n                        });\n                } else {\n                    this.stripe.createToken('bank_account', this.bank).then((result: any) => {\n                        if (result.error) {\n                            reject(result.error.message);\n                        } else if (result.token && result.token.id != null) {\n                            resolve([result.token.id, this.method]);\n                        } else {\n                            reject();\n                        }\n                    });\n                }\n            }\n        });\n    }\n\n    handleStripeCardPayment(clientSecret: string, successCallback: () => Promise<any>): Promise<any> {\n        return new Promise<void>((resolve, reject) => {\n            if (this.showMethods && this.stripeCardNumberElement == null) {\n                reject();\n                return;\n            }\n            const handleCardPayment = () => this.showMethods ?\n                this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement) :\n                this.stripe.handleCardSetup(clientSecret);\n            return handleCardPayment().then(async (result: any) => {\n                if (result.error) {\n                    reject(result.error.message);\n                } else if (result.paymentIntent && result.paymentIntent.status === 'succeeded') {\n                    if (successCallback != null) {\n                        await successCallback();\n                    }\n                    resolve();\n                } else {\n                    reject();\n                }\n            });\n        });\n    }\n\n    private setStripeElement() {\n        window.setTimeout(() => {\n            if (this.showMethods && this.method === PaymentMethodType.Card) {\n                if (this.stripeCardNumberElement == null) {\n                    this.stripeCardNumberElement = this.stripeElements.create('cardNumber', {\n                        style: this.StripeElementStyle,\n                        classes: this.StripeElementClasses,\n                        placeholder: '',\n                    });\n                }\n                if (this.stripeCardExpiryElement == null) {\n                    this.stripeCardExpiryElement = this.stripeElements.create('cardExpiry', {\n                        style: this.StripeElementStyle,\n                        classes: this.StripeElementClasses,\n                    });\n                }\n                if (this.stripeCardCvcElement == null) {\n                    this.stripeCardCvcElement = this.stripeElements.create('cardCvc', {\n                        style: this.StripeElementStyle,\n                        classes: this.StripeElementClasses,\n                        placeholder: '',\n                    });\n                }\n                this.stripeCardNumberElement.mount('#stripe-card-number-element');\n                this.stripeCardExpiryElement.mount('#stripe-card-expiry-element');\n                this.stripeCardCvcElement.mount('#stripe-card-cvc-element');\n            }\n        }, 50);\n    }\n\n    private async setTheme() {\n        const theme = await this.platformUtilsService.getEffectiveTheme();\n        if (theme === ThemeType.Dark) {\n            this.StripeElementStyle.base.color = darkInputColor;\n            this.StripeElementStyle.base['::placeholder'].color = darkInputPlaceholderColor;\n            this.StripeElementStyle.invalid.color = darkInputColor;\n        } else {\n            this.StripeElementStyle.base.color = lightInputColor;\n            this.StripeElementStyle.base['::placeholder'].color = lightInputPlaceholderColor;\n            this.StripeElementStyle.invalid.color = lightInputColor;\n        }\n    }\n}\n","<div class=\"mb-4 text-lg\" *ngIf=\"showOptions && showMethods\"> <div class=\"form-check form-check-inline mr-4\"> <input class=\"form-check-input\" type=\"radio\" name=\"Method\" id=\"method-card\" [value]=\"paymentMethodType.Card\" [(ngModel)]=\"method\" (change)=\"changeMethod()\"> <label class=\"form-check-label\" for=\"method-card\"> <i class=\"fa fa-fw fa-credit-card\" aria-hidden=\"true\"></i> {{'creditCard' | i18n}}</label> </div> <div class=\"form-check form-check-inline mr-4\" *ngIf=\"!hideBank\"> <input class=\"form-check-input\" type=\"radio\" name=\"Method\" id=\"method-bank\" [value]=\"paymentMethodType.BankAccount\" [(ngModel)]=\"method\" (change)=\"changeMethod()\"> <label class=\"form-check-label\" for=\"method-bank\"> <i class=\"fa fa-fw fa-university\" aria-hidden=\"true\"></i> {{'bankAccount' | i18n}}</label> </div> <div class=\"form-check form-check-inline\" *ngIf=\"!hidePaypal\"> <input class=\"form-check-input\" type=\"radio\" name=\"Method\" id=\"method-paypal\" [value]=\"paymentMethodType.PayPal\" [(ngModel)]=\"method\" (change)=\"changeMethod()\"> <label class=\"form-check-label\" for=\"method-paypal\"> <i class=\"fa fa-fw fa-paypal\" aria-hidden=\"true\"></i> PayPal</label> </div> <div class=\"form-check form-check-inline\" *ngIf=\"!hideCredit\"> <input class=\"form-check-input\" type=\"radio\" name=\"Method\" id=\"method-credit\" [value]=\"paymentMethodType.Credit\" [(ngModel)]=\"method\" (change)=\"changeMethod()\"> <label class=\"form-check-label\" for=\"method-credit\"> <i class=\"fa fa-fw fa-dollar\" aria-hidden=\"true\"></i> {{'accountCredit' | i18n}}</label> </div> </div> <ng-container *ngIf=\"showMethods && method === paymentMethodType.Card\"> <div class=\"row\"> <div class=\"form-group col-4\"> <label for=\"stripe-card-number-element\">{{'number' | i18n}}</label> <div id=\"stripe-card-number-element\" class=\"form-control stripe-form-control\"></div> </div> <div class=\"form-group col-8 d-flex align-items-end\"> <img src=\"images/cards.png\" alt=\"Visa, MasterCard, Discover, AmEx, JCB, Diners Club, UnionPay\" width=\"323\" height=\"32\"> </div> <div class=\"form-group col-4\"> <label for=\"stripe-card-expiry-element\">{{'expiration' | i18n}}</label> <div id=\"stripe-card-expiry-element\" class=\"form-control stripe-form-control\"></div> </div> <div class=\"form-group col-4\"> <div class=\"d-flex\"> <label for=\"stripe-card-cvc-element\"> {{'securityCode' | i18n}} </label> <a href=\"https://www.cvvnumber.com/cvv.html\" tabindex=\"-1\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"ml-auto\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <div id=\"stripe-card-cvc-element\" class=\"form-control stripe-form-control\"></div> </div> </div> </ng-container> <ng-container *ngIf=\"showMethods && method === paymentMethodType.BankAccount\"> <app-callout type=\"warning\" title=\"{{'verifyBankAccount' | i18n}}\"> {{'verifyBankAccountInitialDesc' | i18n}} {{'verifyBankAccountFailureWarning' | i18n}} </app-callout> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"routing_number\">{{'routingNumber' | i18n}}</label> <input id=\"routing_number\" class=\"form-control\" type=\"text\" name=\"routing_number\" [(ngModel)]=\"bank.routing_number\" required appInputVerbatim> </div> <div class=\"form-group col-6\"> <label for=\"account_number\">{{'accountNumber' | i18n}}</label> <input id=\"account_number\" class=\"form-control\" type=\"text\" name=\"account_number\" [(ngModel)]=\"bank.account_number\" required appInputVerbatim> </div> <div class=\"form-group col-6\"> <label for=\"account_holder_name\">{{'accountHolderName' | i18n}}</label> <input id=\"account_holder_name\" class=\"form-control\" type=\"text\" name=\"account_holder_name\" [(ngModel)]=\"bank.account_holder_name\" required> </div> <div class=\"form-group col-6\"> <label for=\"account_holder_type\">{{'bankAccountType' | i18n}}</label> <select id=\"account_holder_type\" class=\"form-control\" name=\"account_holder_type\" [(ngModel)]=\"bank.account_holder_type\" required> <option value=\"\">-- {{'select' | i18n}} --</option> <option value=\"company\">{{'bankAccountTypeCompany' | i18n}}</option> <option value=\"individual\">{{'bankAccountTypeIndividual' | i18n}}</option> </select> </div> </div> </ng-container> <ng-container *ngIf=\"showMethods && method === paymentMethodType.PayPal\"> <div class=\"mb-3\"> <div id=\"bt-dropin-container\" class=\"mb-1\"></div> <small class=\"text-muted\">{{'paypalClickSubmit' | i18n}}</small> </div> </ng-container> <ng-container *ngIf=\"showMethods && method === paymentMethodType.Credit\"> <app-callout type=\"note\"> {{'makeSureEnoughCredit' | i18n}} </app-callout> </ng-container> ","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\nimport { LinkedIdType } from '../../enums/linkedIdType';\n\nimport { Cipher } from '../domain/cipher';\n\nimport { AttachmentView } from './attachmentView';\nimport { CardView } from './cardView';\nimport { FieldView } from './fieldView';\nimport { IdentityView } from './identityView';\nimport { ItemView } from './itemView';\nimport { LoginView } from './loginView';\nimport { PasswordHistoryView } from './passwordHistoryView';\nimport { SecureNoteView } from './secureNoteView';\nimport { View } from './view';\n\nexport class CipherView implements View {\n    id: string = null;\n    organizationId: string = null;\n    folderId: string = null;\n    name: string = null;\n    notes: string = null;\n    type: CipherType = null;\n    favorite = false;\n    organizationUseTotp = false;\n    edit = false;\n    viewPassword = true;\n    localData: any;\n    login = new LoginView();\n    identity = new IdentityView();\n    card = new CardView();\n    secureNote = new SecureNoteView();\n    attachments: AttachmentView[] = null;\n    fields: FieldView[] = null;\n    passwordHistory: PasswordHistoryView[] = null;\n    collectionIds: string[] = null;\n    revisionDate: Date = null;\n    deletedDate: Date = null;\n    reprompt: CipherRepromptType = CipherRepromptType.None;\n\n    constructor(c?: Cipher) {\n        if (!c) {\n            return;\n        }\n\n        this.id = c.id;\n        this.organizationId = c.organizationId;\n        this.folderId = c.folderId;\n        this.favorite = c.favorite;\n        this.organizationUseTotp = c.organizationUseTotp;\n        this.edit = c.edit;\n        this.viewPassword = c.viewPassword;\n        this.type = c.type;\n        this.localData = c.localData;\n        this.collectionIds = c.collectionIds;\n        this.revisionDate = c.revisionDate;\n        this.deletedDate = c.deletedDate;\n        // Old locally stored ciphers might have reprompt == null. If so set it to None.\n        this.reprompt = c.reprompt ?? CipherRepromptType.None;\n    }\n\n    private get item() {\n        switch (this.type) {\n            case CipherType.Login:\n                return this.login;\n            case CipherType.SecureNote:\n                return this.secureNote;\n            case CipherType.Card:\n                return this.card;\n            case CipherType.Identity:\n                return this.identity;\n            default:\n                break;\n        }\n\n        return null;\n    }\n\n    get subTitle(): string {\n        return this.item.subTitle;\n    }\n\n    get hasPasswordHistory(): boolean {\n        return this.passwordHistory && this.passwordHistory.length > 0;\n    }\n\n    get hasAttachments(): boolean {\n        return this.attachments && this.attachments.length > 0;\n    }\n\n    get hasOldAttachments(): boolean {\n        if (this.hasAttachments) {\n            for (let i = 0; i < this.attachments.length; i++) {\n                if (this.attachments[i].key == null) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    get hasFields(): boolean {\n        return this.fields && this.fields.length > 0;\n    }\n\n    get passwordRevisionDisplayDate(): Date {\n        if (this.type !== CipherType.Login || this.login == null) {\n            return null;\n        } else if (this.login.password == null || this.login.password === '') {\n            return null;\n        }\n        return this.login.passwordRevisionDate;\n    }\n\n    get isDeleted(): boolean {\n        return this.deletedDate != null;\n    }\n\n    get linkedFieldOptions() {\n        return this.item.linkedFieldOptions;\n    }\n\n    linkedFieldValue(id: LinkedIdType) {\n        const linkedFieldOption = this.linkedFieldOptions?.get(id);\n        if (linkedFieldOption == null) {\n            return null;\n        }\n\n        const item = this.item;\n        return this.item[linkedFieldOption.propertyKey as keyof typeof item];\n    }\n\n    linkedFieldI18nKey(id: LinkedIdType): string {\n        return this.linkedFieldOptions.get(id)?.i18nKey;\n    }\n}\n","import { ItemView } from './itemView';\n\nimport { Identity } from '../domain/identity';\n\nimport { Utils } from '../../misc/utils';\n\nimport { IdentityLinkedId as LinkedId } from '../../enums/linkedIdType';\n\nimport { linkedFieldOption } from '../../misc/linkedFieldOption.decorator';\n\nexport class IdentityView extends ItemView {\n    @linkedFieldOption(LinkedId.Title)\n    title: string = null;\n    @linkedFieldOption(LinkedId.MiddleName)\n    middleName: string = null;\n    @linkedFieldOption(LinkedId.Address1)\n    address1: string = null;\n    @linkedFieldOption(LinkedId.Address2)\n    address2: string = null;\n    @linkedFieldOption(LinkedId.Address3)\n    address3: string = null;\n    @linkedFieldOption(LinkedId.City, 'cityTown')\n    city: string = null;\n    @linkedFieldOption(LinkedId.State, 'stateProvince')\n    state: string = null;\n    @linkedFieldOption(LinkedId.PostalCode, 'zipPostalCode')\n    postalCode: string = null;\n    @linkedFieldOption(LinkedId.Country)\n    country: string = null;\n    @linkedFieldOption(LinkedId.Company)\n    company: string = null;\n    @linkedFieldOption(LinkedId.Email)\n    email: string = null;\n    @linkedFieldOption(LinkedId.Phone)\n    phone: string = null;\n    @linkedFieldOption(LinkedId.Ssn)\n    ssn: string = null;\n    @linkedFieldOption(LinkedId.Username)\n    username: string = null;\n    @linkedFieldOption(LinkedId.PassportNumber)\n    passportNumber: string = null;\n    @linkedFieldOption(LinkedId.LicenseNumber)\n    licenseNumber: string = null;\n\n    // tslint:disable\n    private _firstName: string = null;\n    private _lastName: string = null;\n    private _subTitle: string = null;\n    // tslint:enable\n\n    constructor(i?: Identity) {\n        super();\n    }\n\n    @linkedFieldOption(LinkedId.FirstName)\n    get firstName(): string {\n        return this._firstName;\n    }\n    set firstName(value: string) {\n        this._firstName = value;\n        this._subTitle = null;\n    }\n\n    @linkedFieldOption(LinkedId.LastName)\n    get lastName(): string {\n        return this._lastName;\n    }\n    set lastName(value: string) {\n        this._lastName = value;\n        this._subTitle = null;\n    }\n\n    get subTitle(): string {\n        if (this._subTitle == null && (this.firstName != null || this.lastName != null)) {\n            this._subTitle = '';\n            if (this.firstName != null) {\n                this._subTitle = this.firstName;\n            }\n            if (this.lastName != null) {\n                if (this._subTitle !== '') {\n                    this._subTitle += ' ';\n                }\n                this._subTitle += this.lastName;\n            }\n        }\n\n        return this._subTitle;\n    }\n\n    @linkedFieldOption(LinkedId.FullName)\n    get fullName(): string {\n        if (this.title != null || this.firstName != null || this.middleName != null || this.lastName != null) {\n            let name = '';\n            if (this.title != null) {\n                name += (this.title + ' ');\n            }\n            if (this.firstName != null) {\n                name += (this.firstName + ' ');\n            }\n            if (this.middleName != null) {\n                name += (this.middleName + ' ');\n            }\n            if (this.lastName != null) {\n                name += this.lastName;\n            }\n            return name.trim();\n        }\n\n        return null;\n    }\n\n    get fullAddress(): string {\n        let address = this.address1;\n        if (!Utils.isNullOrWhitespace(this.address2)) {\n            if (!Utils.isNullOrWhitespace(address)) {\n                address += ', ';\n            }\n            address += this.address2;\n        }\n        if (!Utils.isNullOrWhitespace(this.address3)) {\n            if (!Utils.isNullOrWhitespace(address)) {\n                address += ', ';\n            }\n            address += this.address3;\n        }\n        return address;\n    }\n\n    get fullAddressPart2(): string {\n        if (this.city == null && this.state == null && this.postalCode == null) {\n            return null;\n        }\n        const city = this.city || '-';\n        const state = this.state;\n        const postalCode = this.postalCode || '-';\n        let addressPart2 = city;\n        if (!Utils.isNullOrWhitespace(state)) {\n            addressPart2 += ', ' + state;\n        }\n        addressPart2 += ', ' + postalCode;\n        return addressPart2;\n    }\n}\n","import { View } from './view';\n\nimport { Folder } from '../domain/folder';\nimport { ITreeNodeObject } from '../domain/treeNode';\n\nexport class FolderView implements View, ITreeNodeObject {\n    id: string = null;\n    name: string = null;\n    revisionDate: Date = null;\n\n    constructor(f?: Folder) {\n        if (!f) {\n            return;\n        }\n\n        this.id = f.id;\n        this.revisionDate = f.revisionDate;\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { ErrorResponse } from 'jslib-common/models/response/errorResponse';\n\n@Injectable()\nexport class ValidationService {\n    constructor(private i18nService: I18nService, private platformUtilsService: PlatformUtilsService) { }\n\n    showError(data: any): string[] {\n        const defaultErrorMessage = this.i18nService.t('unexpectedError');\n        let errors: string[] = [];\n\n        if (data != null && typeof data === 'string') {\n            errors.push(data);\n        } else if (data == null || typeof data !== 'object') {\n            errors.push(defaultErrorMessage);\n        } else if (data.validationErrors != null) {\n            errors = errors.concat((data as ErrorResponse).getAllMessages());\n        } else {\n            errors.push(data.message ? data.message : defaultErrorMessage);\n        }\n\n        if (errors.length === 1) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), errors[0]);\n        } else if (errors.length > 1) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), errors, {\n                timeout: 5000 * errors.length,\n            });\n        }\n\n        return errors;\n    }\n}\n","import {\n    animate,\n    style,\n    transition,\n    trigger,\n} from '@angular/animations';\nimport {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport {\n    ControlValueAccessor,\n    FormControl,\n    NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { VerificationType } from 'jslib-common/enums/verificationType';\n\nimport { Verification } from 'jslib-common/types/verification';\n\n@Component({\n    selector: 'app-verify-master-password',\n    templateUrl: 'verify-master-password.component.html',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: VerifyMasterPasswordComponent,\n        },\n    ],\n    animations: [\n        trigger('sent', [\n            transition(':enter', [\n                style({ opacity: 0 }),\n                animate('100ms', style({ opacity: 1 })),\n            ]),\n        ]),\n    ],\n})\nexport class VerifyMasterPasswordComponent implements ControlValueAccessor, OnInit {\n    usesKeyConnector: boolean = false;\n    disableRequestOTP: boolean = false;\n    sentCode: boolean = false;\n\n    secret = new FormControl('');\n\n    private onChange: (value: Verification) => void;\n\n    constructor(private keyConnectorService: KeyConnectorService,\n        private userVerificationService: UserVerificationService) { }\n\n    async ngOnInit() {\n        this.usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n        this.processChanges(this.secret.value);\n\n        this.secret.valueChanges.subscribe(secret => this.processChanges(secret));\n    }\n\n    async requestOTP() {\n        if (this.usesKeyConnector) {\n            this.disableRequestOTP = true;\n            try {\n                await this.userVerificationService.requestOTP();\n                this.sentCode = true;\n            } finally {\n                this.disableRequestOTP = false;\n            }\n        }\n    }\n\n    writeValue(obj: any): void {\n        this.secret.setValue(obj);\n    }\n\n    registerOnChange(fn: any): void {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n        // Not implemented\n    }\n\n    setDisabledState?(isDisabled: boolean): void {\n        this.disableRequestOTP = isDisabled;\n        if (isDisabled) {\n            this.secret.disable();\n        } else {\n            this.secret.enable();\n        }\n    }\n\n    private processChanges(secret: string) {\n        if (this.onChange == null) {\n            return;\n        }\n\n        this.onChange({\n            type: this.usesKeyConnector ? VerificationType.OTP : VerificationType.MasterPassword,\n            secret: secret,\n        });\n    }\n}\n","<ng-container *ngIf=\"!usesKeyConnector\"> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <input id=\"masterPassword\" type=\"password\" name=\"MasterPasswordHash\" class=\"form-control\" [formControl]=\"secret\" required appAutofocus appInputVerbatim> <small class=\"form-text text-muted\">{{'confirmIdentity' | i18n}}</small> </ng-container> <ng-container *ngIf=\"usesKeyConnector\"> <div class=\"form-group\"> <label class=\"d-block\">{{'sendVerificationCode' | i18n}}</label> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"requestOTP()\" [disabled]=\"disableRequestOTP\"> {{'sendCode' | i18n}} </button> <span class=\"ml-2 text-success\" role=\"alert\" @sent *ngIf=\"sentCode\"> <i class=\"fa fa-check-circle-o\" aria-hidden=\"true\"></i> {{'codeSent' | i18n}} </span> </div> <div class=\"form-group\"> <label for=\"verificationCode\">{{'verificationCode' | i18n}}</label> <input id=\"verificationCode\" type=\"input\" name=\"verificationCode\" class=\"form-control\" [formControl]=\"secret\" required appAutofocus appInputVerbatim> <small class=\"form-text text-muted\">{{'confirmIdentity' | i18n}}</small> </div> </ng-container> ","import {\n    Component,\n    EventEmitter,\n    Output,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { OrganizationTaxInfoUpdateRequest } from 'jslib-common/models/request/organizationTaxInfoUpdateRequest';\nimport { TaxInfoUpdateRequest } from 'jslib-common/models/request/taxInfoUpdateRequest';\nimport { TaxRateResponse } from 'jslib-common/models/response/taxRateResponse';\n\n@Component({\n    selector: 'app-tax-info',\n    templateUrl: 'tax-info.component.html',\n})\nexport class TaxInfoComponent {\n    @Output() onCountryChanged = new EventEmitter();\n\n    loading: boolean = true;\n    organizationId: string;\n    taxInfo: any = {\n        taxId: null,\n        line1: null,\n        line2: null,\n        city: null,\n        state: null,\n        postalCode: null,\n        country: 'US',\n        includeTaxId: false,\n    };\n\n    taxRates: TaxRateResponse[];\n\n    private pristine: any = {\n        taxId: null,\n        line1: null,\n        line2: null,\n        city: null,\n        state: null,\n        postalCode: null,\n        country: 'US',\n        includeTaxId: false,\n    };\n\n    constructor(private apiService: ApiService, private route: ActivatedRoute, private logService: LogService) { }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            if (this.organizationId) {\n                try {\n                    const taxInfo = await this.apiService.getOrganizationTaxInfo(this.organizationId);\n                    if (taxInfo) {\n                        this.taxInfo.taxId = taxInfo.taxId;\n                        this.taxInfo.state = taxInfo.state;\n                        this.taxInfo.line1 = taxInfo.line1;\n                        this.taxInfo.line2 = taxInfo.line2;\n                        this.taxInfo.city = taxInfo.city;\n                        this.taxInfo.state = taxInfo.state;\n                        this.taxInfo.postalCode = taxInfo.postalCode;\n                        this.taxInfo.country = taxInfo.country || 'US';\n                        this.taxInfo.includeTaxId = this.taxInfo.country !== 'US' && (\n                            !!taxInfo.taxId\n                            || !!taxInfo.line1\n                            || !!taxInfo.line2\n                            || !!taxInfo.city\n                            || !!taxInfo.state);\n                    }\n                }  catch (e) {\n                    this.logService.error(e);\n                }\n            } else {\n                const taxInfo = await this.apiService.getTaxInfo();\n                if (taxInfo) {\n                    this.taxInfo.postalCode = taxInfo.postalCode;\n                    this.taxInfo.country = taxInfo.country || 'US';\n                }\n            }\n            this.pristine = Object.assign({}, this.taxInfo);\n            // If not the default (US) then trigger onCountryChanged\n            if (this.taxInfo.country !== 'US') {\n                this.onCountryChanged.emit();\n            }\n        });\n\n        const taxRates = await this.apiService.getTaxRates();\n        this.taxRates = taxRates.data;\n        this.loading = false;\n    }\n\n    get taxRate() {\n        if (this.taxRates != null) {\n            const localTaxRate = this.taxRates.find(x =>\n                x.country === this.taxInfo.country &&\n                x.postalCode === this.taxInfo.postalCode\n            );\n            return localTaxRate?.rate ?? null;\n        }\n    }\n\n    getTaxInfoRequest(): TaxInfoUpdateRequest {\n        if (this.organizationId) {\n            const request = new OrganizationTaxInfoUpdateRequest();\n            request.taxId = this.taxInfo.taxId;\n            request.state = this.taxInfo.state;\n            request.line1 = this.taxInfo.line1;\n            request.line2 = this.taxInfo.line2;\n            request.city = this.taxInfo.city;\n            request.state = this.taxInfo.state;\n            request.postalCode = this.taxInfo.postalCode;\n            request.country = this.taxInfo.country;\n            return request;\n        } else {\n            const request = new TaxInfoUpdateRequest();\n            request.postalCode = this.taxInfo.postalCode;\n            request.country = this.taxInfo.country;\n            return request;\n        }\n    }\n\n    submitTaxInfo(): Promise<any> {\n        if (!this.hasChanged()) {\n            return new Promise<void>(resolve => { resolve(); });\n        }\n        const request = this.getTaxInfoRequest();\n        return this.organizationId ? this.apiService.putOrganizationTaxInfo(this.organizationId,\n            request as OrganizationTaxInfoUpdateRequest) : this.apiService.putTaxInfo(request);\n    }\n\n    changeCountry() {\n        if (this.taxInfo.country === 'US') {\n            this.taxInfo.includeTaxId = false;\n            this.taxInfo.taxId = null;\n            this.taxInfo.line1 = null;\n            this.taxInfo.line2 = null;\n            this.taxInfo.city = null;\n            this.taxInfo.state = null;\n        }\n        this.onCountryChanged.emit();\n    }\n\n    private hasChanged(): boolean {\n        for (const key in this.taxInfo) {\n            if (this.pristine.hasOwnProperty(key) && this.pristine[key] !== this.taxInfo[key]) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n","<div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"addressCountry\">{{'country' | i18n}}</label> <select id=\"addressCountry\" class=\"form-control\" [(ngModel)]=\"taxInfo.country\" required name=\"addressCountry\" autocomplete=\"country\" (change)=\"changeCountry()\"> <option value=\"\">-- Select --</option> <option value=\"US\">United States</option> <option value=\"CN\">China</option> <option value=\"FR\">France</option> <option value=\"DE\">Germany</option> <option value=\"CA\">Canada</option> <option value=\"GB\">United Kingdom</option> <option value=\"AU\">Australia</option> <option value=\"IN\">India</option> <option value=\"-\" disabled=\"disabled\"></option> <option value=\"AF\">Afghanistan</option> <option value=\"AX\">Åland Islands</option> <option value=\"AL\">Albania</option> <option value=\"DZ\">Algeria</option> <option value=\"AS\">American Samoa</option> <option value=\"AD\">Andorra</option> <option value=\"AO\">Angola</option> <option value=\"AI\">Anguilla</option> <option value=\"AQ\">Antarctica</option> <option value=\"AG\">Antigua and Barbuda</option> <option value=\"AR\">Argentina</option> <option value=\"AM\">Armenia</option> <option value=\"AW\">Aruba</option> <option value=\"AT\">Austria</option> <option value=\"AZ\">Azerbaijan</option> <option value=\"BS\">Bahamas</option> <option value=\"BH\">Bahrain</option> <option value=\"BD\">Bangladesh</option> <option value=\"BB\">Barbados</option> <option value=\"BY\">Belarus</option> <option value=\"BE\">Belgium</option> <option value=\"BZ\">Belize</option> <option value=\"BJ\">Benin</option> <option value=\"BM\">Bermuda</option> <option value=\"BT\">Bhutan</option> <option value=\"BO\">Bolivia, Plurinational State of</option> <option value=\"BQ\">Bonaire, Sint Eustatius and Saba</option> <option value=\"BA\">Bosnia and Herzegovina</option> <option value=\"BW\">Botswana</option> <option value=\"BV\">Bouvet Island</option> <option value=\"BR\">Brazil</option> <option value=\"IO\">British Indian Ocean Territory</option> <option value=\"BN\">Brunei Darussalam</option> <option value=\"BG\">Bulgaria</option> <option value=\"BF\">Burkina Faso</option> <option value=\"BI\">Burundi</option> <option value=\"KH\">Cambodia</option> <option value=\"CM\">Cameroon</option> <option value=\"CV\">Cape Verde</option> <option value=\"KY\">Cayman Islands</option> <option value=\"CF\">Central African Republic</option> <option value=\"TD\">Chad</option> <option value=\"CL\">Chile</option> <option value=\"CX\">Christmas Island</option> <option value=\"CC\">Cocos (Keeling) Islands</option> <option value=\"CO\">Colombia</option> <option value=\"KM\">Comoros</option> <option value=\"CG\">Congo</option> <option value=\"CD\">Congo, the Democratic Republic of the</option> <option value=\"CK\">Cook Islands</option> <option value=\"CR\">Costa Rica</option> <option value=\"CI\">Côte d'Ivoire</option> <option value=\"HR\">Croatia</option> <option value=\"CU\">Cuba</option> <option value=\"CW\">Curaçao</option> <option value=\"CY\">Cyprus</option> <option value=\"CZ\">Czech Republic</option> <option value=\"DK\">Denmark</option> <option value=\"DJ\">Djibouti</option> <option value=\"DM\">Dominica</option> <option value=\"DO\">Dominican Republic</option> <option value=\"EC\">Ecuador</option> <option value=\"EG\">Egypt</option> <option value=\"SV\">El Salvador</option> <option value=\"GQ\">Equatorial Guinea</option> <option value=\"ER\">Eritrea</option> <option value=\"EE\">Estonia</option> <option value=\"ET\">Ethiopia</option> <option value=\"FK\">Falkland Islands (Malvinas)</option> <option value=\"FO\">Faroe Islands</option> <option value=\"FJ\">Fiji</option> <option value=\"FI\">Finland</option> <option value=\"GF\">French Guiana</option> <option value=\"PF\">French Polynesia</option> <option value=\"TF\">French Southern Territories</option> <option value=\"GA\">Gabon</option> <option value=\"GM\">Gambia</option> <option value=\"GE\">Georgia</option> <option value=\"GH\">Ghana</option> <option value=\"GI\">Gibraltar</option> <option value=\"GR\">Greece</option> <option value=\"GL\">Greenland</option> <option value=\"GD\">Grenada</option> <option value=\"GP\">Guadeloupe</option> <option value=\"GU\">Guam</option> <option value=\"GT\">Guatemala</option> <option value=\"GG\">Guernsey</option> <option value=\"GN\">Guinea</option> <option value=\"GW\">Guinea-Bissau</option> <option value=\"GY\">Guyana</option> <option value=\"HT\">Haiti</option> <option value=\"HM\">Heard Island and McDonald Islands</option> <option value=\"VA\">Holy See (Vatican City State)</option> <option value=\"HN\">Honduras</option> <option value=\"HK\">Hong Kong</option> <option value=\"HU\">Hungary</option> <option value=\"IS\">Iceland</option> <option value=\"ID\">Indonesia</option> <option value=\"IR\">Iran, Islamic Republic of</option> <option value=\"IQ\">Iraq</option> <option value=\"IE\">Ireland</option> <option value=\"IM\">Isle of Man</option> <option value=\"IL\">Israel</option> <option value=\"IT\">Italy</option> <option value=\"JM\">Jamaica</option> <option value=\"JP\">Japan</option> <option value=\"JE\">Jersey</option> <option value=\"JO\">Jordan</option> <option value=\"KZ\">Kazakhstan</option> <option value=\"KE\">Kenya</option> <option value=\"KI\">Kiribati</option> <option value=\"KP\">Korea, Democratic People's Republic of</option> <option value=\"KR\">Korea, Republic of</option> <option value=\"KW\">Kuwait</option> <option value=\"KG\">Kyrgyzstan</option> <option value=\"LA\">Lao People's Democratic Republic</option> <option value=\"LV\">Latvia</option> <option value=\"LB\">Lebanon</option> <option value=\"LS\">Lesotho</option> <option value=\"LR\">Liberia</option> <option value=\"LY\">Libya</option> <option value=\"LI\">Liechtenstein</option> <option value=\"LT\">Lithuania</option> <option value=\"LU\">Luxembourg</option> <option value=\"MO\">Macao</option> <option value=\"MK\">Macedonia, the former Yugoslav Republic of</option> <option value=\"MG\">Madagascar</option> <option value=\"MW\">Malawi</option> <option value=\"MY\">Malaysia</option> <option value=\"MV\">Maldives</option> <option value=\"ML\">Mali</option> <option value=\"MT\">Malta</option> <option value=\"MH\">Marshall Islands</option> <option value=\"MQ\">Martinique</option> <option value=\"MR\">Mauritania</option> <option value=\"MU\">Mauritius</option> <option value=\"YT\">Mayotte</option> <option value=\"MX\">Mexico</option> <option value=\"FM\">Micronesia, Federated States of</option> <option value=\"MD\">Moldova, Republic of</option> <option value=\"MC\">Monaco</option> <option value=\"MN\">Mongolia</option> <option value=\"ME\">Montenegro</option> <option value=\"MS\">Montserrat</option> <option value=\"MA\">Morocco</option> <option value=\"MZ\">Mozambique</option> <option value=\"MM\">Myanmar</option> <option value=\"NA\">Namibia</option> <option value=\"NR\">Nauru</option> <option value=\"NP\">Nepal</option> <option value=\"NL\">Netherlands</option> <option value=\"NC\">New Caledonia</option> <option value=\"NZ\">New Zealand</option> <option value=\"NI\">Nicaragua</option> <option value=\"NE\">Niger</option> <option value=\"NG\">Nigeria</option> <option value=\"NU\">Niue</option> <option value=\"NF\">Norfolk Island</option> <option value=\"MP\">Northern Mariana Islands</option> <option value=\"NO\">Norway</option> <option value=\"OM\">Oman</option> <option value=\"PK\">Pakistan</option> <option value=\"PW\">Palau</option> <option value=\"PS\">Palestinian Territory, Occupied</option> <option value=\"PA\">Panama</option> <option value=\"PG\">Papua New Guinea</option> <option value=\"PY\">Paraguay</option> <option value=\"PE\">Peru</option> <option value=\"PH\">Philippines</option> <option value=\"PN\">Pitcairn</option> <option value=\"PL\">Poland</option> <option value=\"PT\">Portugal</option> <option value=\"PR\">Puerto Rico</option> <option value=\"QA\">Qatar</option> <option value=\"RE\">Réunion</option> <option value=\"RO\">Romania</option> <option value=\"RU\">Russian Federation</option> <option value=\"RW\">Rwanda</option> <option value=\"BL\">Saint Barthélemy</option> <option value=\"SH\">Saint Helena, Ascension and Tristan da Cunha</option> <option value=\"KN\">Saint Kitts and Nevis</option> <option value=\"LC\">Saint Lucia</option> <option value=\"MF\">Saint Martin (French part)</option> <option value=\"PM\">Saint Pierre and Miquelon</option> <option value=\"VC\">Saint Vincent and the Grenadines</option> <option value=\"WS\">Samoa</option> <option value=\"SM\">San Marino</option> <option value=\"ST\">Sao Tome and Principe</option> <option value=\"SA\">Saudi Arabia</option> <option value=\"SN\">Senegal</option> <option value=\"RS\">Serbia</option> <option value=\"SC\">Seychelles</option> <option value=\"SL\">Sierra Leone</option> <option value=\"SG\">Singapore</option> <option value=\"SX\">Sint Maarten (Dutch part)</option> <option value=\"SK\">Slovakia</option> <option value=\"SI\">Slovenia</option> <option value=\"SB\">Solomon Islands</option> <option value=\"SO\">Somalia</option> <option value=\"ZA\">South Africa</option> <option value=\"GS\">South Georgia and the South Sandwich Islands</option> <option value=\"SS\">South Sudan</option> <option value=\"ES\">Spain</option> <option value=\"LK\">Sri Lanka</option> <option value=\"SD\">Sudan</option> <option value=\"SR\">Suriname</option> <option value=\"SJ\">Svalbard and Jan Mayen</option> <option value=\"SZ\">Swaziland</option> <option value=\"SE\">Sweden</option> <option value=\"CH\">Switzerland</option> <option value=\"SY\">Syrian Arab Republic</option> <option value=\"TW\">Taiwan</option> <option value=\"TJ\">Tajikistan</option> <option value=\"TZ\">Tanzania, United Republic of</option> <option value=\"TH\">Thailand</option> <option value=\"TL\">Timor-Leste</option> <option value=\"TG\">Togo</option> <option value=\"TK\">Tokelau</option> <option value=\"TO\">Tonga</option> <option value=\"TT\">Trinidad and Tobago</option> <option value=\"TN\">Tunisia</option> <option value=\"TR\">Turkey</option> <option value=\"TM\">Turkmenistan</option> <option value=\"TC\">Turks and Caicos Islands</option> <option value=\"TV\">Tuvalu</option> <option value=\"UG\">Uganda</option> <option value=\"UA\">Ukraine</option> <option value=\"AE\">United Arab Emirates</option> <option value=\"UM\">United States Minor Outlying Islands</option> <option value=\"UY\">Uruguay</option> <option value=\"UZ\">Uzbekistan</option> <option value=\"VU\">Vanuatu</option> <option value=\"VE\">Venezuela, Bolivarian Republic of</option> <option value=\"VN\">Viet Nam</option> <option value=\"VG\">Virgin Islands, British</option> <option value=\"VI\">Virgin Islands, U.S.</option> <option value=\"WF\">Wallis and Futuna</option> <option value=\"EH\">Western Sahara</option> <option value=\"YE\">Yemen</option> <option value=\"ZM\">Zambia</option> <option value=\"ZW\">Zimbabwe</option> </select> </div> </div> <div class=\"col-3\"> <div class=\"form-group\"> <label for=\"addressPostalCode\">{{'zipPostalCode' | i18n}}</label> <input id=\"addressPostalCode\" class=\"form-control\" type=\"text\" name=\"addressPostalCode\" [(ngModel)]=\"taxInfo.postalCode\" [required]=\"taxInfo.country === 'US'\" autocomplete=\"postal-code\"> </div> </div> <div class=\"col-6\" *ngIf=\"organizationId && taxInfo.country !== 'US'\"> <div class=\"form-group form-check\"> <input class=\"form-check-input\" id=\"addressIncludeTaxId\" name=\"addressIncludeTaxId\" type=\"checkbox\" [(ngModel)]=\"taxInfo.includeTaxId\"> <label class=\"form-check-label\" for=\"addressIncludeTaxId\">{{'includeVAT' | i18n}}</label> </div> </div> </div> <div class=\"row\" *ngIf=\"organizationId && taxInfo.includeTaxId\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"taxId\">{{'taxIdNumber' | i18n}}</label> <input id=\"taxId\" class=\"form-control\" type=\"text\" name=\"taxId\" [(ngModel)]=\"taxInfo.taxId\"> </div> </div> </div> <div class=\"row\" *ngIf=\"organizationId && taxInfo.includeTaxId\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"addressLine1\">{{'address1' | i18n}}</label> <input id=\"addressLine1\" class=\"form-control\" type=\"text\" name=\"addressLine1\" [(ngModel)]=\"taxInfo.line1\" autocomplete=\"address-line1\"> </div> </div> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"addressLine2\">{{'address2' | i18n}}</label> <input id=\"addressLine2\" class=\"form-control\" type=\"text\" name=\"addressLine2\" [(ngModel)]=\"taxInfo.line2\" autocomplete=\"address-line2\"> </div> </div> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"addressCity\">{{'cityTown' | i18n}}</label> <input id=\"addressCity\" class=\"form-control\" type=\"text\" name=\"addressCity\" [(ngModel)]=\"taxInfo.city\" autocomplete=\"address-level2\"> </div> </div> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"addressState\">{{'stateProvince' | i18n}}</label> <input id=\"addressState\" class=\"form-control\" type=\"text\" name=\"addressState\" [(ngModel)]=\"taxInfo.state\" autocomplete=\"address-level1\"> </div> </div> </div> ","import { ItemView } from './itemView';\nimport { LoginUriView } from './loginUriView';\n\nimport { Utils } from '../../misc/utils';\n\nimport { Login } from '../domain/login';\n\nimport { LoginLinkedId as LinkedId } from '../../enums/linkedIdType';\n\nimport { linkedFieldOption } from '../../misc/linkedFieldOption.decorator';\n\nexport class LoginView extends ItemView {\n    @linkedFieldOption(LinkedId.Username)\n    username: string = null;\n    @linkedFieldOption(LinkedId.Password)\n    password: string = null;\n\n    passwordRevisionDate?: Date = null;\n    totp: string = null;\n    uris: LoginUriView[] = null;\n    autofillOnPageLoad: boolean = null;\n\n    constructor(l?: Login) {\n        super();\n        if (!l) {\n            return;\n        }\n\n        this.passwordRevisionDate = l.passwordRevisionDate;\n        this.autofillOnPageLoad = l.autofillOnPageLoad;\n    }\n\n    get uri(): string {\n        return this.hasUris ? this.uris[0].uri : null;\n    }\n\n    get maskedPassword(): string {\n        return this.password != null ? '••••••••' : null;\n    }\n\n    get subTitle(): string {\n        return this.username;\n    }\n\n    get canLaunch(): boolean {\n        return this.hasUris && this.uris.some(u => u.canLaunch);\n    }\n\n    get hasTotp(): boolean {\n        return !Utils.isNullOrWhitespace(this.totp);\n    }\n\n    get launchUri(): string {\n        if (this.hasUris) {\n            const uri = this.uris.find(u => u.canLaunch);\n            if (uri != null) {\n                return uri.launchUri;\n            }\n        }\n        return null;\n    }\n\n    get hasUris(): boolean {\n        return this.uris != null && this.uris.length > 0;\n    }\n}\n","import { CollectionData } from '../data/collectionData';\n\nimport { CollectionView } from '../view/collectionView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nexport class Collection extends Domain {\n    id: string;\n    organizationId: string;\n    name: EncString;\n    externalId: string;\n    readOnly: boolean;\n    hidePasswords: boolean;\n\n    constructor(obj?: CollectionData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            id: null,\n            organizationId: null,\n            name: null,\n            externalId: null,\n            readOnly: null,\n            hidePasswords: null,\n        }, alreadyEncrypted, ['id', 'organizationId', 'externalId', 'readOnly', 'hidePasswords']);\n    }\n\n    decrypt(): Promise<CollectionView> {\n        return this.decryptObj(new CollectionView(this), {\n            name: null,\n        }, this.organizationId);\n    }\n}\n","import { View } from './view';\n\nimport { Collection } from '../domain/collection';\nimport { ITreeNodeObject } from '../domain/treeNode';\n\nimport { CollectionGroupDetailsResponse } from '../response/collectionResponse';\n\nexport class CollectionView implements View, ITreeNodeObject {\n    id: string = null;\n    organizationId: string = null;\n    name: string = null;\n    externalId: string = null;\n    readOnly: boolean = null;\n    hidePasswords: boolean = null;\n\n    constructor(c?: Collection | CollectionGroupDetailsResponse) {\n        if (!c) {\n            return;\n        }\n\n        this.id = c.id;\n        this.organizationId = c.organizationId;\n        this.externalId = c.externalId;\n        if (c instanceof Collection) {\n            this.readOnly = c.readOnly;\n            this.hidePasswords = c.hidePasswords;\n        }\n    }\n}\n","import {\n    Pipe,\n    PipeTransform,\n} from '@angular/core';\n\n@Pipe({\n    name: 'search',\n})\nexport class SearchPipe implements PipeTransform {\n    transform(items: any[], searchText: string, prop1?: string, prop2?: string, prop3?: string): any[] {\n        if (items == null || items.length === 0) {\n            return [];\n        }\n\n        if (searchText == null || searchText.length < 2) {\n            return items;\n        }\n\n        searchText = searchText.trim().toLowerCase();\n        return items.filter(i => {\n            if (prop1 != null && i[prop1] != null && i[prop1].toString().toLowerCase().indexOf(searchText) > -1) {\n                return true;\n            }\n            if (prop2 != null && i[prop2] != null && i[prop2].toString().toLowerCase().indexOf(searchText) > -1) {\n                return true;\n            }\n            if (prop3 != null && i[prop3] != null && i[prop3].toString().toLowerCase().indexOf(searchText) > -1) {\n                return true;\n            }\n            return false;\n        });\n    }\n}\n","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\n\nimport { AttachmentData } from './attachmentData';\nimport { CardData } from './cardData';\nimport { FieldData } from './fieldData';\nimport { IdentityData } from './identityData';\nimport { LoginData } from './loginData';\nimport { PasswordHistoryData } from './passwordHistoryData';\nimport { SecureNoteData } from './secureNoteData';\n\nimport { CipherResponse } from '../response/cipherResponse';\n\nexport class CipherData {\n    id: string;\n    organizationId: string;\n    folderId: string;\n    userId: string;\n    edit: boolean;\n    viewPassword: boolean;\n    organizationUseTotp: boolean;\n    favorite: boolean;\n    revisionDate: string;\n    type: CipherType;\n    sizeName: string;\n    name: string;\n    notes: string;\n    login?: LoginData;\n    secureNote?: SecureNoteData;\n    card?: CardData;\n    identity?: IdentityData;\n    fields?: FieldData[];\n    attachments?: AttachmentData[];\n    passwordHistory?: PasswordHistoryData[];\n    collectionIds?: string[];\n    deletedDate: string;\n    reprompt: CipherRepromptType;\n\n    constructor(response?: CipherResponse, userId?: string, collectionIds?: string[]) {\n        if (response == null) {\n            return;\n        }\n\n        this.id = response.id;\n        this.organizationId = response.organizationId;\n        this.folderId = response.folderId;\n        this.userId = userId;\n        this.edit = response.edit;\n        this.viewPassword = response.viewPassword;\n        this.organizationUseTotp = response.organizationUseTotp;\n        this.favorite = response.favorite;\n        this.revisionDate = response.revisionDate;\n        this.type = response.type;\n        this.name = response.name;\n        this.notes = response.notes;\n        this.collectionIds = collectionIds != null ? collectionIds : response.collectionIds;\n        this.deletedDate = response.deletedDate;\n        this.reprompt = response.reprompt;\n\n        switch (this.type) {\n            case CipherType.Login:\n                this.login = new LoginData(response.login);\n                break;\n            case CipherType.SecureNote:\n                this.secureNote = new SecureNoteData(response.secureNote);\n                break;\n            case CipherType.Card:\n                this.card = new CardData(response.card);\n                break;\n            case CipherType.Identity:\n                this.identity = new IdentityData(response.identity);\n                break;\n            default:\n                break;\n        }\n\n        if (response.fields != null) {\n            this.fields = response.fields.map(f => new FieldData(f));\n        }\n        if (response.attachments != null) {\n            this.attachments = response.attachments.map(a => new AttachmentData(a));\n        }\n        if (response.passwordHistory != null) {\n            this.passwordHistory = response.passwordHistory.map(ph => new PasswordHistoryData(ph));\n        }\n    }\n}\n","export enum CipherRepromptType {\n    None = 0,\n    Password = 1,\n}\n","export enum SendType {\n    Text = 0,\n    File = 1,\n}\n","import { Utils } from '../../misc/utils';\n\nimport { BaseResponse } from './baseResponse';\n\nexport class ErrorResponse extends BaseResponse {\n    message: string;\n    validationErrors: { [key: string]: string[]; };\n    statusCode: number;\n    captchaRequired: boolean;\n    captchaSiteKey: string;\n\n    constructor(response: any, status: number, identityResponse?: boolean) {\n        super(response);\n        let errorModel = null;\n        if (response != null) {\n            const responseErrorModel = this.getResponseProperty('ErrorModel');\n            if (responseErrorModel && identityResponse) {\n                errorModel = responseErrorModel;\n            } else {\n                errorModel = response;\n            }\n        }\n\n        if (errorModel) {\n            this.message = this.getResponseProperty('Message', errorModel);\n            this.validationErrors = this.getResponseProperty('ValidationErrors', errorModel);\n            this.captchaSiteKey = this.validationErrors?.HCaptcha_SiteKey?.[0];\n            this.captchaRequired = !Utils.isNullOrWhitespace(this.captchaSiteKey);\n        } else {\n            if (status === 429) {\n                this.message = 'Rate limit exceeded. Try again later.';\n            }\n        }\n        this.statusCode = status;\n    }\n\n    getSingleMessage(): string {\n        if (this.validationErrors == null) {\n            return this.message;\n        }\n        for (const key in this.validationErrors) {\n            if (!this.validationErrors.hasOwnProperty(key)) {\n                continue;\n            }\n            if (this.validationErrors[key].length) {\n                return this.validationErrors[key][0];\n            }\n        }\n        return this.message;\n    }\n\n    getAllMessages(): string[] {\n        const messages: string[] = [];\n        if (this.validationErrors == null) {\n            return messages;\n        }\n        for (const key in this.validationErrors) {\n            if (!this.validationErrors.hasOwnProperty(key)) {\n                continue;\n            }\n            this.validationErrors[key].forEach((item: string) => {\n                let prefix = '';\n                if (key.indexOf('[') > -1 && key.indexOf(']') > -1) {\n                    const lastSep = key.lastIndexOf('.');\n                    prefix = key.substr(0, lastSep > -1 ? lastSep : key.length) + ': ';\n                }\n                messages.push(prefix + item);\n            });\n        }\n        return messages;\n    }\n}\n","import {\n    Component,\n    Input,\n    OnChanges,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Component({\n    selector: 'app-password-strength',\n    templateUrl: 'password-strength.component.html',\n})\nexport class PasswordStrengthComponent implements OnChanges {\n    @Input() score?: number;\n    @Input() showText = false;\n\n    scoreWidth = 0;\n    color = 'bg-danger';\n    text: string;\n\n    constructor(private i18nService: I18nService) { }\n\n    ngOnChanges(): void {\n        this.scoreWidth = this.score == null ? 0 : (this.score + 1) * 20;\n        switch (this.score) {\n            case 4:\n                this.color = 'bg-success';\n                this.text = this.i18nService.t('strong');\n                break;\n            case 3:\n                this.color = 'bg-primary';\n                this.text = this.i18nService.t('good');\n                break;\n            case 2:\n                this.color = 'bg-warning';\n                this.text = this.i18nService.t('weak');\n                break;\n            default:\n                this.color = 'bg-danger';\n                this.text = this.score != null ? this.i18nService.t('weak') : null;\n                break;\n        }\n    }\n}\n","<div class=\"progress\"> <div class=\"progress-bar {{color}}\" role=\"progressbar\" [ngStyle]=\"{width: (scoreWidth + '%')}\" attr.aria-valuenow=\"{{scoreWidth}}\" aria-valuemin=\"0\" aria-valuemax=\"100\"> <ng-container *ngIf=\"showText && text\"> {{text}} </ng-container> </div> </div> ","import { CollectionDetailsResponse } from '../response/collectionResponse';\n\nexport class CollectionData {\n    id: string;\n    organizationId: string;\n    name: string;\n    externalId: string;\n    readOnly: boolean;\n\n    constructor(response: CollectionDetailsResponse) {\n        this.id = response.id;\n        this.organizationId = response.organizationId;\n        this.name = response.name;\n        this.externalId = response.externalId;\n        this.readOnly = response.readOnly;\n    }\n}\n","export enum OrganizationUserStatusType {\n    Invited = 0,\n    Accepted = 1,\n    Confirmed = 2,\n}\n","import { Injectable } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\n\nimport { DeviceType } from 'jslib-common/enums/deviceType';\nimport { EventType } from 'jslib-common/enums/eventType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { EventResponse } from 'jslib-common/models/response/eventResponse';\n\n\n@Injectable()\nexport class EventService {\n    constructor(private i18nService: I18nService, private policyService: PolicyService) { }\n\n    getDefaultDateFilters() {\n        const d = new Date();\n        const end = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59);\n        d.setDate(d.getDate() - 30);\n        const start = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0);\n        return [this.toDateTimeLocalString(start), this.toDateTimeLocalString(end)];\n    }\n\n    formatDateFilters(filterStart: string, filterEnd: string) {\n        const start: Date = new Date(filterStart);\n        const end: Date = new Date(filterEnd + ':59.999');\n        if (isNaN(start.getTime()) || isNaN(end.getTime()) || end < start) {\n            throw new Error('Invalid date range.');\n        }\n        return [start.toISOString(), end.toISOString()];\n    }\n\n    async getEventInfo(ev: EventResponse, options = new EventOptions()): Promise<EventInfo> {\n        const appInfo = this.getAppInfo(ev.deviceType);\n        const { message, humanReadableMessage } = await this.getEventMessage(ev, options);\n        return {\n            message: message,\n            humanReadableMessage: humanReadableMessage,\n            appIcon: appInfo[0],\n            appName: appInfo[1],\n        };\n    }\n\n    private async getEventMessage(ev: EventResponse, options: EventOptions) {\n        let msg = '';\n        let humanReadableMsg = '';\n        switch (ev.type) {\n            // User\n            case EventType.User_LoggedIn:\n                msg = humanReadableMsg = this.i18nService.t('loggedIn');\n                break;\n            case EventType.User_ChangedPassword:\n                msg = humanReadableMsg = this.i18nService.t('changedPassword');\n                break;\n            case EventType.User_Updated2fa:\n                msg = humanReadableMsg = this.i18nService.t('enabledUpdated2fa');\n                break;\n            case EventType.User_Disabled2fa:\n                msg = humanReadableMsg = this.i18nService.t('disabled2fa');\n                break;\n            case EventType.User_Recovered2fa:\n                msg = humanReadableMsg = this.i18nService.t('recovered2fa');\n                break;\n            case EventType.User_FailedLogIn:\n                msg = humanReadableMsg = this.i18nService.t('failedLogin');\n                break;\n            case EventType.User_FailedLogIn2fa:\n                msg = humanReadableMsg = this.i18nService.t('failedLogin2fa');\n                break;\n            case EventType.User_ClientExportedVault:\n                msg = humanReadableMsg = this.i18nService.t('exportedVault');\n                break;\n            case EventType.User_UpdatedTempPassword:\n                msg = humanReadableMsg = this.i18nService.t('updatedMasterPassword');\n                break;\n            case EventType.User_MigratedKeyToKeyConnector:\n                msg = humanReadableMsg = this.i18nService.t('migratedKeyConnector');\n                break;\n            // Cipher\n            case EventType.Cipher_Created:\n                msg = this.i18nService.t('createdItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('createdItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_Updated:\n                msg = this.i18nService.t('editedItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('editedItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_Deleted:\n                msg = this.i18nService.t('permanentlyDeletedItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('permanentlyDeletedItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_SoftDeleted:\n                msg = this.i18nService.t('deletedItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('deletedItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_Restored:\n                msg = this.i18nService.t('restoredItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('restoredItemId', this.formatCipherId(ev, options));\n                break;\n            case EventType.Cipher_AttachmentCreated:\n                msg = this.i18nService.t('createdAttachmentForItem', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('createdAttachmentForItem', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_AttachmentDeleted:\n                msg = this.i18nService.t('deletedAttachmentForItem', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('deletedAttachmentForItem', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_Shared:\n                msg = this.i18nService.t('movedItemIdToOrg', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('movedItemIdToOrg', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientViewed:\n                msg = this.i18nService.t('viewedItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('viewedItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientToggledPasswordVisible:\n                msg = this.i18nService.t('viewedPasswordItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('viewedPasswordItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientToggledHiddenFieldVisible:\n                msg = this.i18nService.t('viewedHiddenFieldItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('viewedHiddenFieldItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientToggledCardCodeVisible:\n                msg = this.i18nService.t('viewedSecurityCodeItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('viewedSecurityCodeItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientCopiedHiddenField:\n                msg = this.i18nService.t('copiedHiddenFieldItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('copiedHiddenFieldItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientCopiedPassword:\n                msg = this.i18nService.t('copiedPasswordItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('copiedPasswordItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientCopiedCardCode:\n                msg = this.i18nService.t('copiedSecurityCodeItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('copiedSecurityCodeItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_ClientAutofilled:\n                msg = this.i18nService.t('autofilledItemId', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('autofilledItemId', this.getShortId(ev.cipherId));\n                break;\n            case EventType.Cipher_UpdatedCollections:\n                msg = this.i18nService.t('editedCollectionsForItem', this.formatCipherId(ev, options));\n                humanReadableMsg = this.i18nService.t('editedCollectionsForItem', this.getShortId(ev.cipherId));\n                break;\n            // Collection\n            case EventType.Collection_Created:\n                msg = this.i18nService.t('createdCollectionId', this.formatCollectionId(ev));\n                humanReadableMsg = this.i18nService.t('createdCollectionId', this.getShortId(ev.collectionId));\n                break;\n            case EventType.Collection_Updated:\n                msg = this.i18nService.t('editedCollectionId', this.formatCollectionId(ev));\n                humanReadableMsg = this.i18nService.t('editedCollectionId', this.getShortId(ev.collectionId));\n                break;\n            case EventType.Collection_Deleted:\n                msg = this.i18nService.t('deletedCollectionId', this.formatCollectionId(ev));\n                humanReadableMsg = this.i18nService.t('deletedCollectionId', this.getShortId(ev.collectionId));\n                break;\n            // Group\n            case EventType.Group_Created:\n                msg = this.i18nService.t('createdGroupId', this.formatGroupId(ev));\n                humanReadableMsg = this.i18nService.t('createdGroupId', this.getShortId(ev.groupId));\n                break;\n            case EventType.Group_Updated:\n                msg = this.i18nService.t('editedGroupId', this.formatGroupId(ev));\n                humanReadableMsg = this.i18nService.t('editedGroupId', this.getShortId(ev.groupId));\n                break;\n            case EventType.Group_Deleted:\n                msg = this.i18nService.t('deletedGroupId', this.formatGroupId(ev));\n                humanReadableMsg = this.i18nService.t('deletedGroupId', this.getShortId(ev.groupId));\n                break;\n            // Org user\n            case EventType.OrganizationUser_Invited:\n                msg = this.i18nService.t('invitedUserId', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('invitedUserId', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_Confirmed:\n                msg = this.i18nService.t('confirmedUserId', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('confirmedUserId', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_Updated:\n                msg = this.i18nService.t('editedUserId', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('editedUserId', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_Removed:\n                msg = this.i18nService.t('removedUserId', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('removedUserId', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_UpdatedGroups:\n                msg = this.i18nService.t('editedGroupsForUser', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('editedGroupsForUser', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_UnlinkedSso:\n                msg = this.i18nService.t('unlinkedSsoUser', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('unlinkedSsoUser', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_ResetPassword_Enroll:\n                msg = this.i18nService.t('eventEnrollPasswordReset', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('eventEnrollPasswordReset', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_ResetPassword_Withdraw:\n                msg = this.i18nService.t('eventWithdrawPasswordReset', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('eventWithdrawPasswordReset', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_AdminResetPassword:\n                msg = this.i18nService.t('eventAdminPasswordReset', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('eventAdminPasswordReset', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_ResetSsoLink:\n                msg = this.i18nService.t('eventResetSsoLink', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('eventResetSsoLink', this.getShortId(ev.organizationUserId));\n                break;\n            case EventType.OrganizationUser_FirstSsoLogin:\n                msg = this.i18nService.t('firstSsoLogin', this.formatOrgUserId(ev));\n                humanReadableMsg = this.i18nService.t('firstSsoLogin', this.getShortId(ev.organizationUserId));\n                break;\n            // Org\n            case EventType.Organization_Updated:\n                msg = humanReadableMsg = this.i18nService.t('editedOrgSettings');\n                break;\n            case EventType.Organization_PurgedVault:\n                msg = humanReadableMsg = this.i18nService.t('purgedOrganizationVault');\n                break;\n            /*\n            case EventType.Organization_ClientExportedVault:\n                msg = this.i18nService.t('exportedOrganizationVault');\n                break;\n            */\n            case EventType.Organization_VaultAccessed:\n                msg = humanReadableMsg = this.i18nService.t('vaultAccessedByProvider');\n                break;\n            case EventType.Organization_EnabledSso:\n                msg = humanReadableMsg = this.i18nService.t('enabledSso');\n                break;\n            case EventType.Organization_DisabledSso:\n                msg = humanReadableMsg = this.i18nService.t('disabledSso');\n                break;\n            case EventType.Organization_EnabledKeyConnector:\n                msg = humanReadableMsg = this.i18nService.t('enabledKeyConnector');\n                break;\n            case EventType.Organization_DisabledKeyConnector:\n                msg = humanReadableMsg = this.i18nService.t('disabledKeyConnector');\n                break;\n            // Policies\n            case EventType.Policy_Updated:\n                msg = this.i18nService.t('modifiedPolicyId', this.formatPolicyId(ev));\n\n                const policies = await this.policyService.getAll();\n                const policy = policies.filter(p => p.id === ev.policyId)[0];\n                let p1 = this.getShortId(ev.policyId);\n                if (policy != null) {\n                    p1 = PolicyType[policy.type];\n                }\n\n                humanReadableMsg = this.i18nService.t('modifiedPolicyId', p1);\n                break;\n            // Provider users:\n            case EventType.ProviderUser_Invited:\n                msg = this.i18nService.t('invitedUserId', this.formatProviderUserId(ev));\n                humanReadableMsg = this.i18nService.t('invitedUserId', this.getShortId(ev.providerUserId));\n                break;\n            case EventType.ProviderUser_Confirmed:\n                msg = this.i18nService.t('confirmedUserId', this.formatProviderUserId(ev));\n                humanReadableMsg = this.i18nService.t('confirmedUserId', this.getShortId(ev.providerUserId));\n                break;\n            case EventType.ProviderUser_Updated:\n                msg = this.i18nService.t('editedUserId', this.formatProviderUserId(ev));\n                humanReadableMsg = this.i18nService.t('editedUserId', this.getShortId(ev.providerUserId));\n                break;\n            case EventType.ProviderUser_Removed:\n                msg = this.i18nService.t('removedUserId', this.formatProviderUserId(ev));\n                humanReadableMsg = this.i18nService.t('removedUserId', this.getShortId(ev.providerUserId));\n                break;\n            case EventType.ProviderOrganization_Created:\n                msg = this.i18nService.t('createdOrganizationId', this.formatProviderOrganizationId(ev));\n                humanReadableMsg = this.i18nService.t('createdOrganizationId', this.getShortId(ev.providerOrganizationId));\n                break;\n            case EventType.ProviderOrganization_Added:\n                msg = this.i18nService.t('addedOrganizationId', this.formatProviderOrganizationId(ev));\n                humanReadableMsg = this.i18nService.t('addedOrganizationId', this.getShortId(ev.providerOrganizationId));\n                break;\n            case EventType.ProviderOrganization_Removed:\n                msg = this.i18nService.t('removedOrganizationId', this.formatProviderOrganizationId(ev));\n                humanReadableMsg = this.i18nService.t('removedOrganizationId', this.getShortId(ev.providerOrganizationId));\n                break;\n            case EventType.ProviderOrganization_VaultAccessed:\n                msg = this.i18nService.t('accessedClientVault', this.formatProviderOrganizationId(ev));\n                humanReadableMsg = this.i18nService.t('accessedClientVault', this.getShortId(ev.providerOrganizationId));\n                break;\n            default:\n                break;\n        }\n        return {\n            message: msg === '' ? null : msg,\n            humanReadableMessage: humanReadableMsg === '' ? null : humanReadableMsg,\n        };\n    }\n\n    private getAppInfo(deviceType: DeviceType): [string, string] {\n        switch (deviceType) {\n            case DeviceType.Android:\n                return ['fa-android', this.i18nService.t('mobile') + ' - Android'];\n            case DeviceType.iOS:\n                return ['fa-apple', this.i18nService.t('mobile') + ' - iOS'];\n            case DeviceType.UWP:\n                return ['fa-windows', this.i18nService.t('mobile') + ' - Windows'];\n            case DeviceType.ChromeExtension:\n                return ['fa-chrome', this.i18nService.t('extension') + ' - Chrome'];\n            case DeviceType.FirefoxExtension:\n                return ['fa-firefox', this.i18nService.t('extension') + ' - Firefox'];\n            case DeviceType.OperaExtension:\n                return ['fa-opera', this.i18nService.t('extension') + ' - Opera'];\n            case DeviceType.EdgeExtension:\n                return ['fa-edge', this.i18nService.t('extension') + ' - Edge'];\n            case DeviceType.VivaldiExtension:\n                return ['fa-puzzle-piece', this.i18nService.t('extension') + ' - Vivaldi'];\n            case DeviceType.SafariExtension:\n                return ['fa-safari', this.i18nService.t('extension') + ' - Safari'];\n            case DeviceType.WindowsDesktop:\n                return ['fa-windows', this.i18nService.t('desktop') + ' - Windows'];\n            case DeviceType.MacOsDesktop:\n                return ['fa-apple', this.i18nService.t('desktop') + ' - macOS'];\n            case DeviceType.LinuxDesktop:\n                return ['fa-linux', this.i18nService.t('desktop') + ' - Linux'];\n            case DeviceType.ChromeBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - Chrome'];\n            case DeviceType.FirefoxBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - Firefox'];\n            case DeviceType.OperaBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - Opera'];\n            case DeviceType.SafariBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - Safari'];\n            case DeviceType.VivaldiBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - Vivaldi'];\n            case DeviceType.EdgeBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - Edge'];\n            case DeviceType.IEBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - IE'];\n            case DeviceType.UnknownBrowser:\n                return ['fa-globe', this.i18nService.t('webVault') + ' - ' + this.i18nService.t('unknown')];\n            default:\n                return ['fa-globe', this.i18nService.t('unknown')];\n        }\n    }\n\n    private formatCipherId(ev: EventResponse, options: EventOptions) {\n        const shortId = this.getShortId(ev.cipherId);\n        if (ev.organizationId == null || !options.cipherInfo) {\n            return '<code>' + shortId + '</code>';\n        }\n        const a = this.makeAnchor(shortId);\n        a.setAttribute('href', '#/organizations/' + ev.organizationId + '/vault?search=' + shortId +\n            '&viewEvents=' + ev.cipherId);\n        return a.outerHTML;\n    }\n\n    private formatGroupId(ev: EventResponse) {\n        const shortId = this.getShortId(ev.groupId);\n        const a = this.makeAnchor(shortId);\n        a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/groups?search=' + shortId);\n        return a.outerHTML;\n    }\n\n    private formatCollectionId(ev: EventResponse) {\n        const shortId = this.getShortId(ev.collectionId);\n        const a = this.makeAnchor(shortId);\n        a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/collections?search=' + shortId);\n        return a.outerHTML;\n    }\n\n    private formatOrgUserId(ev: EventResponse) {\n        const shortId = this.getShortId(ev.organizationUserId);\n        const a = this.makeAnchor(shortId);\n        a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/people?search=' + shortId +\n            '&viewEvents=' + ev.organizationUserId);\n        return a.outerHTML;\n    }\n\n    private formatProviderUserId(ev: EventResponse) {\n        const shortId = this.getShortId(ev.providerUserId);\n        const a = this.makeAnchor(shortId);\n        a.setAttribute('href', '#/providers/' + ev.providerId + '/manage/people?search=' + shortId +\n            '&viewEvents=' + ev.providerUserId);\n        return a.outerHTML;\n    }\n\n    private formatProviderOrganizationId(ev: EventResponse) {\n        const shortId = this.getShortId(ev.providerOrganizationId);\n        const a = this.makeAnchor(shortId);\n        a.setAttribute('href', '#/providers/' + ev.providerId + '/clients?search=' + shortId);\n        return a.outerHTML;\n    }\n\n    private formatPolicyId(ev: EventResponse) {\n        const shortId = this.getShortId(ev.policyId);\n        const a = this.makeAnchor(shortId);\n        a.setAttribute('href', '#/organizations/' + ev.organizationId + '/manage/policies?policyId=' + ev.policyId);\n        return a.outerHTML;\n    }\n\n    private makeAnchor(shortId: string) {\n        const a = document.createElement('a');\n        a.title = this.i18nService.t('view');\n        a.innerHTML = '<code>' + shortId + '</code>';\n        return a;\n    }\n\n    private getShortId(id: string) {\n        return id?.substring(0, 8);\n    }\n\n    private toDateTimeLocalString(date: Date) {\n        return date.getFullYear() +\n            '-' + this.pad(date.getMonth() + 1) +\n            '-' + this.pad(date.getDate()) +\n            'T' + this.pad(date.getHours()) +\n            ':' + this.pad(date.getMinutes());\n    }\n\n    private pad(num: number) {\n        const norm = Math.floor(Math.abs(num));\n        return (norm < 10 ? '0' : '') + norm;\n    }\n}\n\nexport class EventInfo {\n    message: string;\n    humanReadableMessage: string;\n    appIcon: string;\n    appName: string;\n}\n\nexport class EventOptions {\n    cipherInfo = true;\n}\n","export enum EventType {\n    User_LoggedIn = 1000,\n    User_ChangedPassword = 1001,\n    User_Updated2fa = 1002,\n    User_Disabled2fa = 1003,\n    User_Recovered2fa = 1004,\n    User_FailedLogIn = 1005,\n    User_FailedLogIn2fa = 1006,\n    User_ClientExportedVault = 1007,\n    User_UpdatedTempPassword = 1008,\n    User_MigratedKeyToKeyConnector = 1009,\n\n    Cipher_Created = 1100,\n    Cipher_Updated = 1101,\n    Cipher_Deleted = 1102,\n    Cipher_AttachmentCreated = 1103,\n    Cipher_AttachmentDeleted = 1104,\n    Cipher_Shared = 1105,\n    Cipher_UpdatedCollections = 1106,\n    Cipher_ClientViewed = 1107,\n    Cipher_ClientToggledPasswordVisible = 1108,\n    Cipher_ClientToggledHiddenFieldVisible = 1109,\n    Cipher_ClientToggledCardCodeVisible = 1110,\n    Cipher_ClientCopiedPassword = 1111,\n    Cipher_ClientCopiedHiddenField = 1112,\n    Cipher_ClientCopiedCardCode = 1113,\n    Cipher_ClientAutofilled = 1114,\n    Cipher_SoftDeleted = 1115,\n    Cipher_Restored = 1116,\n    Cipher_ClientToggledCardNumberVisible = 1117,\n\n    Collection_Created = 1300,\n    Collection_Updated = 1301,\n    Collection_Deleted = 1302,\n\n    Group_Created = 1400,\n    Group_Updated = 1401,\n    Group_Deleted = 1402,\n\n    OrganizationUser_Invited = 1500,\n    OrganizationUser_Confirmed = 1501,\n    OrganizationUser_Updated = 1502,\n    OrganizationUser_Removed = 1503,\n    OrganizationUser_UpdatedGroups = 1504,\n    OrganizationUser_UnlinkedSso = 1505,\n    OrganizationUser_ResetPassword_Enroll = 1506,\n    OrganizationUser_ResetPassword_Withdraw = 1507,\n    OrganizationUser_AdminResetPassword = 1508,\n    OrganizationUser_ResetSsoLink = 1509,\n    OrganizationUser_FirstSsoLogin = 1510,\n\n    Organization_Updated = 1600,\n    Organization_PurgedVault = 1601,\n    // Organization_ClientExportedVault = 1602,\n    Organization_VaultAccessed = 1603,\n    Organization_EnabledSso = 1604,\n    Organization_DisabledSso = 1605,\n    Organization_EnabledKeyConnector = 1606,\n    Organization_DisabledKeyConnector = 1607,\n\n    Policy_Updated = 1700,\n\n    ProviderUser_Invited = 1800,\n    ProviderUser_Confirmed = 1801,\n    ProviderUser_Updated = 1802,\n    ProviderUser_Removed = 1803,\n\n    ProviderOrganization_Created = 1900,\n    ProviderOrganization_Added = 1901,\n    ProviderOrganization_Removed = 1902,\n    ProviderOrganization_VaultAccessed = 1903,\n}\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\nimport { VerificationType } from 'jslib-common/enums/verificationType';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { Verification } from 'jslib-common/types/verification';\n\nimport { TwoFactorAuthenticatorResponse } from 'jslib-common/models/response/twoFactorAuthenticatorResponse';\nimport { TwoFactorDuoResponse } from 'jslib-common/models/response/twoFactorDuoResponse';\nimport { TwoFactorEmailResponse } from 'jslib-common/models/response/twoFactorEmailResponse';\nimport { TwoFactorRecoverResponse } from 'jslib-common/models/response/twoFactorRescoverResponse';\nimport { TwoFactorWebAuthnResponse } from 'jslib-common/models/response/twoFactorWebAuthnResponse';\nimport { TwoFactorYubiKeyResponse } from 'jslib-common/models/response/twoFactorYubiKeyResponse';\n\nimport { SecretVerificationRequest } from 'jslib-common/models/request/secretVerificationRequest';\n\ntype TwoFactorResponse = TwoFactorRecoverResponse | TwoFactorDuoResponse | TwoFactorEmailResponse |\n    TwoFactorWebAuthnResponse | TwoFactorAuthenticatorResponse | TwoFactorYubiKeyResponse;\n\n@Component({\n    selector: 'app-two-factor-verify',\n    templateUrl: 'two-factor-verify.component.html',\n})\nexport class TwoFactorVerifyComponent {\n    @Input() type: TwoFactorProviderType;\n    @Input() organizationId: string;\n    @Output() onAuthed = new EventEmitter<any>();\n\n    secret: Verification;\n    formPromise: Promise<TwoFactorResponse>;\n\n    constructor(private apiService: ApiService, private logService: LogService,\n        private userVerificationService: UserVerificationService) { }\n\n    async submit() {\n        let hashedSecret: string;\n\n        try {\n            this.formPromise = this.userVerificationService.buildRequest(this.secret)\n                .then(request => {\n                    hashedSecret = this.secret.type === VerificationType.MasterPassword\n                        ? request.masterPasswordHash\n                        : request.otp;\n                    return this.apiCall(request);\n                });\n\n            const response = await this.formPromise;\n            this.onAuthed.emit({\n                response: response,\n                secret: hashedSecret,\n                verificationType: this.secret.type,\n            });\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    private apiCall(request: SecretVerificationRequest): Promise<TwoFactorResponse> {\n        switch (this.type) {\n            case -1:\n                return this.apiService.getTwoFactorRecover(request);\n            case TwoFactorProviderType.Duo:\n            case TwoFactorProviderType.OrganizationDuo:\n                if (this.organizationId != null) {\n                    return this.apiService.getTwoFactorOrganizationDuo(this.organizationId, request);\n                } else {\n                    return this.apiService.getTwoFactorDuo(request);\n                }\n            case TwoFactorProviderType.Email:\n                return this.apiService.getTwoFactorEmail(request);\n            case TwoFactorProviderType.WebAuthn:\n                return this.apiService.getTwoFactorWebAuthn(request);\n            case TwoFactorProviderType.Authenticator:\n                return this.apiService.getTwoFactorAuthenticator(request);\n            case TwoFactorProviderType.Yubikey:\n                return this.apiService.getTwoFactorYubiKey(request);\n        }\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-body\"> <p>{{'twoStepLoginAuthDesc' | i18n}}</p> <app-verify-master-password [(ngModel)]=\"secret\" ngDefaultControl name=\"secret\"> </app-verify-master-password> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'continue' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> ","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\n\nimport { CipherData } from '../data/cipherData';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Attachment } from './attachment';\nimport { Card } from './card';\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { Password } from './password';\nimport { SecureNote } from './secureNote';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Cipher extends Domain {\n    id: string;\n    organizationId: string;\n    folderId: string;\n    name: EncString;\n    notes: EncString;\n    type: CipherType;\n    favorite: boolean;\n    organizationUseTotp: boolean;\n    edit: boolean;\n    viewPassword: boolean;\n    revisionDate: Date;\n    localData: any;\n    login: Login;\n    identity: Identity;\n    card: Card;\n    secureNote: SecureNote;\n    attachments: Attachment[];\n    fields: Field[];\n    passwordHistory: Password[];\n    collectionIds: string[];\n    deletedDate: Date;\n    reprompt: CipherRepromptType;\n\n    constructor(obj?: CipherData, alreadyEncrypted: boolean = false, localData: any = null) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            id: null,\n            userId: null,\n            organizationId: null,\n            folderId: null,\n            name: null,\n            notes: null,\n        }, alreadyEncrypted, ['id', 'userId', 'organizationId', 'folderId']);\n\n        this.type = obj.type;\n        this.favorite = obj.favorite;\n        this.organizationUseTotp = obj.organizationUseTotp;\n        this.edit = obj.edit;\n        if (obj.viewPassword != null) {\n            this.viewPassword = obj.viewPassword;\n        } else {\n            this.viewPassword = true; // Default for already synced Ciphers without viewPassword\n        }\n        this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n        this.collectionIds = obj.collectionIds;\n        this.localData = localData;\n        this.deletedDate = obj.deletedDate != null ? new Date(obj.deletedDate) : null;\n        this.reprompt = obj.reprompt;\n\n        switch (this.type) {\n            case CipherType.Login:\n                this.login = new Login(obj.login, alreadyEncrypted);\n                break;\n            case CipherType.SecureNote:\n                this.secureNote = new SecureNote(obj.secureNote, alreadyEncrypted);\n                break;\n            case CipherType.Card:\n                this.card = new Card(obj.card, alreadyEncrypted);\n                break;\n            case CipherType.Identity:\n                this.identity = new Identity(obj.identity, alreadyEncrypted);\n                break;\n            default:\n                break;\n        }\n\n        if (obj.attachments != null) {\n            this.attachments = obj.attachments.map(a => new Attachment(a, alreadyEncrypted));\n        } else {\n            this.attachments = null;\n        }\n\n        if (obj.fields != null) {\n            this.fields = obj.fields.map(f => new Field(f, alreadyEncrypted));\n        } else {\n            this.fields = null;\n        }\n\n        if (obj.passwordHistory != null) {\n            this.passwordHistory = obj.passwordHistory.map(ph => new Password(ph, alreadyEncrypted));\n        } else {\n            this.passwordHistory = null;\n        }\n    }\n\n    async decrypt(encKey?: SymmetricCryptoKey): Promise<CipherView> {\n        const model = new CipherView(this);\n\n        await this.decryptObj(model, {\n            name: null,\n            notes: null,\n        }, this.organizationId, encKey);\n\n        switch (this.type) {\n            case CipherType.Login:\n                model.login = await this.login.decrypt(this.organizationId, encKey);\n                break;\n            case CipherType.SecureNote:\n                model.secureNote = await this.secureNote.decrypt(this.organizationId, encKey);\n                break;\n            case CipherType.Card:\n                model.card = await this.card.decrypt(this.organizationId, encKey);\n                break;\n            case CipherType.Identity:\n                model.identity = await this.identity.decrypt(this.organizationId, encKey);\n                break;\n            default:\n                break;\n        }\n\n        const orgId = this.organizationId;\n\n        if (this.attachments != null && this.attachments.length > 0) {\n            const attachments: any[] = [];\n            await this.attachments.reduce((promise, attachment) => {\n                return promise.then(() => {\n                    return attachment.decrypt(orgId, encKey);\n                }).then(decAttachment => {\n                    attachments.push(decAttachment);\n                });\n            }, Promise.resolve());\n            model.attachments = attachments;\n        }\n\n        if (this.fields != null && this.fields.length > 0) {\n            const fields: any[] = [];\n            await this.fields.reduce((promise, field) => {\n                return promise.then(() => {\n                    return field.decrypt(orgId, encKey);\n                }).then(decField => {\n                    fields.push(decField);\n                });\n            }, Promise.resolve());\n            model.fields = fields;\n        }\n\n        if (this.passwordHistory != null && this.passwordHistory.length > 0) {\n            const passwordHistory: any[] = [];\n            await this.passwordHistory.reduce((promise, ph) => {\n                return promise.then(() => {\n                    return ph.decrypt(orgId, encKey);\n                }).then(decPh => {\n                    passwordHistory.push(decPh);\n                });\n            }, Promise.resolve());\n            model.passwordHistory = passwordHistory;\n        }\n\n        return model;\n    }\n\n    toCipherData(userId: string): CipherData {\n        const c = new CipherData();\n        c.id = this.id;\n        c.organizationId = this.organizationId;\n        c.folderId = this.folderId;\n        c.userId = this.organizationId != null ? userId : null;\n        c.edit = this.edit;\n        c.viewPassword = this.viewPassword;\n        c.organizationUseTotp = this.organizationUseTotp;\n        c.favorite = this.favorite;\n        c.revisionDate = this.revisionDate != null ? this.revisionDate.toISOString() : null;\n        c.type = this.type;\n        c.collectionIds = this.collectionIds;\n        c.deletedDate = this.deletedDate != null ? this.deletedDate.toISOString() : null;\n        c.reprompt = this.reprompt;\n\n        this.buildDataModel(this, c, {\n            name: null,\n            notes: null,\n        });\n\n        switch (c.type) {\n            case CipherType.Login:\n                c.login = this.login.toLoginData();\n                break;\n            case CipherType.SecureNote:\n                c.secureNote = this.secureNote.toSecureNoteData();\n                break;\n            case CipherType.Card:\n                c.card = this.card.toCardData();\n                break;\n            case CipherType.Identity:\n                c.identity = this.identity.toIdentityData();\n                break;\n            default:\n                break;\n        }\n\n        if (this.fields != null) {\n            c.fields = this.fields.map(f => f.toFieldData());\n        }\n        if (this.attachments != null) {\n            c.attachments = this.attachments.map(a => a.toAttachmentData());\n        }\n        if (this.passwordHistory != null) {\n            c.passwordHistory = this.passwordHistory.map(ph => ph.toPasswordHistoryData());\n        }\n        return c;\n    }\n}\n","export enum OrganizationUserType {\n    Owner = 0,\n    Admin = 1,\n    User = 2,\n    Manager = 3,\n    Custom = 4,\n}\n","import { EncryptionType } from '../../enums/encryptionType';\n\nimport { Utils } from '../../misc/utils';\n\nexport class SymmetricCryptoKey {\n    key: ArrayBuffer;\n    encKey?: ArrayBuffer;\n    macKey?: ArrayBuffer;\n    encType: EncryptionType;\n\n    keyB64: string;\n    encKeyB64: string;\n    macKeyB64: string;\n\n    meta: any;\n\n    constructor(key: ArrayBuffer, encType?: EncryptionType) {\n        if (key == null) {\n            throw new Error('Must provide key');\n        }\n\n        if (encType == null) {\n            if (key.byteLength === 32) {\n                encType = EncryptionType.AesCbc256_B64;\n            } else if (key.byteLength === 64) {\n                encType = EncryptionType.AesCbc256_HmacSha256_B64;\n            } else {\n                throw new Error('Unable to determine encType.');\n            }\n        }\n\n        this.key = key;\n        this.encType = encType;\n\n        if (encType === EncryptionType.AesCbc256_B64 && key.byteLength === 32) {\n            this.encKey = key;\n            this.macKey = null;\n        } else if (encType === EncryptionType.AesCbc128_HmacSha256_B64 && key.byteLength === 32) {\n            this.encKey = key.slice(0, 16);\n            this.macKey = key.slice(16, 32);\n        } else if (encType === EncryptionType.AesCbc256_HmacSha256_B64 && key.byteLength === 64) {\n            this.encKey = key.slice(0, 32);\n            this.macKey = key.slice(32, 64);\n        } else {\n            throw new Error('Unsupported encType/key length.');\n        }\n\n        if (this.key != null) {\n            this.keyB64 = Utils.fromBufferToB64(this.key);\n        }\n        if (this.encKey != null) {\n            this.encKeyB64 = Utils.fromBufferToB64(this.encKey);\n        }\n        if (this.macKey != null) {\n            this.macKeyB64 = Utils.fromBufferToB64(this.macKey);\n        }\n    }\n}\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n    ViewChild,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\nimport { PlanType } from 'jslib-common/enums/planType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { ProductType } from 'jslib-common/enums/productType';\n\nimport { OrganizationCreateRequest } from 'jslib-common/models/request/organizationCreateRequest';\nimport { OrganizationKeysRequest } from 'jslib-common/models/request/organizationKeysRequest';\nimport { OrganizationUpgradeRequest } from 'jslib-common/models/request/organizationUpgradeRequest';\nimport { ProviderOrganizationCreateRequest } from 'jslib-common/models/request/provider/providerOrganizationCreateRequest';\n\nimport { PlanResponse } from 'jslib-common/models/response/planResponse';\n\n@Component({\n    selector: 'app-organization-plans',\n    templateUrl: 'organization-plans.component.html',\n})\nexport class OrganizationPlansComponent implements OnInit {\n    @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n    @ViewChild(TaxInfoComponent) taxComponent: TaxInfoComponent;\n\n    @Input() organizationId: string;\n    @Input() showFree = true;\n    @Input() showCancel = false;\n    @Input() acceptingSponsorship = false;\n    @Input() product: ProductType = ProductType.Free;\n    @Input() plan: PlanType = PlanType.Free;\n    @Input() providerId: string;\n    @Output() onSuccess = new EventEmitter();\n    @Output() onCanceled = new EventEmitter();\n\n    loading: boolean = true;\n    selfHosted: boolean = false;\n    ownedBusiness: boolean = false;\n    premiumAccessAddon: boolean = false;\n    additionalStorage: number = 0;\n    additionalSeats: number = 0;\n    name: string;\n    billingEmail: string;\n    clientOwnerEmail: string;\n    businessName: string;\n    productTypes = ProductType;\n    formPromise: Promise<any>;\n    singleOrgPolicyBlock: boolean = false;\n    discount = 0;\n\n    plans: PlanResponse[];\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n        private cryptoService: CryptoService, private router: Router, private syncService: SyncService,\n        private policyService: PolicyService, private userService: UserService, private logService: LogService) {\n        this.selfHosted = platformUtilsService.isSelfHost();\n    }\n\n    async ngOnInit() {\n        if (!this.selfHosted) {\n            const plans = await this.apiService.getPlans();\n            this.plans = plans.data;\n            if (this.product === ProductType.Enterprise || this.product === ProductType.Teams) {\n                this.ownedBusiness = true;\n            }\n        }\n\n        if (this.providerId) {\n            this.ownedBusiness = true;\n            this.changedOwnedBusiness();\n        }\n\n        this.loading = false;\n    }\n\n    get createOrganization() {\n        return this.organizationId == null;\n    }\n\n    get selectedPlan() {\n        return this.plans.find(plan => plan.type === this.plan);\n    }\n\n    get selectedPlanInterval() {\n        return this.selectedPlan.isAnnual\n            ? 'year'\n            : 'month';\n    }\n\n    get selectableProducts() {\n        let validPlans = this.plans.filter(plan => plan.type !== PlanType.Custom);\n\n        if (this.ownedBusiness) {\n            validPlans = validPlans.filter(plan => plan.canBeUsedByBusiness);\n        }\n\n        if (!this.showFree) {\n            validPlans = validPlans.filter(plan => plan.product !== ProductType.Free);\n        }\n\n        validPlans = validPlans\n        .filter(plan => !plan.legacyYear\n            && !plan.disabled\n            && (plan.isAnnual || plan.product === this.productTypes.Free));\n\n        if (this.acceptingSponsorship) {\n            const familyPlan = this.plans.find(plan => plan.type === PlanType.FamiliesAnnually);\n            this.discount = familyPlan.basePrice;\n            validPlans = [\n                familyPlan,\n            ];\n        }\n\n        return validPlans;\n    }\n\n    get selectablePlans() {\n        return this.plans.filter(plan => !plan.legacyYear && !plan.disabled && plan.product === this.product);\n    }\n\n    additionalStoragePriceMonthly(selectedPlan: PlanResponse) {\n        if (!selectedPlan.isAnnual) {\n            return selectedPlan.additionalStoragePricePerGb;\n        }\n        return selectedPlan.additionalStoragePricePerGb / 12;\n    }\n\n    seatPriceMonthly(selectedPlan: PlanResponse) {\n        if (!selectedPlan.isAnnual) {\n            return selectedPlan.seatPrice;\n        }\n        return selectedPlan.seatPrice / 12;\n    }\n\n    additionalStorageTotal(plan: PlanResponse): number {\n        if (!plan.hasAdditionalStorageOption) {\n            return 0;\n        }\n\n        return plan.additionalStoragePricePerGb * Math.abs(this.additionalStorage || 0);\n    }\n\n    seatTotal(plan: PlanResponse): number {\n        if (!plan.hasAdditionalSeatsOption) {\n            return 0;\n        }\n\n        return plan.seatPrice * Math.abs(this.additionalSeats || 0);\n    }\n\n    get subtotal() {\n        let subTotal = this.selectedPlan.basePrice;\n        if (this.selectedPlan.hasAdditionalSeatsOption && this.additionalSeats) {\n            subTotal += this.seatTotal(this.selectedPlan);\n        }\n        if (this.selectedPlan.hasAdditionalStorageOption && this.additionalStorage) {\n            subTotal += this.additionalStorageTotal(this.selectedPlan);\n        }\n        if (this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon) {\n            subTotal += this.selectedPlan.premiumAccessOptionPrice;\n        }\n        return subTotal - this.discount;\n    }\n\n    get freeTrial() {\n        return this.selectedPlan.trialPeriodDays != null;\n    }\n\n    get taxCharges() {\n        return this.taxComponent != null && this.taxComponent.taxRate != null ?\n            (this.taxComponent.taxRate / 100) * this.subtotal :\n            0;\n    }\n\n    get total() {\n        return (this.subtotal + this.taxCharges) || 0;\n    }\n\n    get paymentDesc() {\n        if (this.acceptingSponsorship) {\n            return this.i18nService.t('paymentSponsored');\n        } else if (this.freeTrial && this.createOrganization) {\n            return this.i18nService.t('paymentChargedWithTrial');\n        } else {\n            return this.i18nService.t('paymentCharged', this.i18nService.t(this.selectedPlanInterval));\n        }\n    }\n\n    changedProduct() {\n        this.plan = this.selectablePlans[0].type;\n        if (!this.selectedPlan.hasPremiumAccessOption) {\n            this.premiumAccessAddon = false;\n        }\n        if (!this.selectedPlan.hasAdditionalStorageOption) {\n            this.additionalStorage = 0;\n        }\n        if (!this.selectedPlan.hasAdditionalSeatsOption) {\n            this.additionalSeats = 0;\n        } else if (!this.additionalSeats && !this.selectedPlan.baseSeats &&\n            this.selectedPlan.hasAdditionalSeatsOption) {\n            this.additionalSeats = 1;\n        }\n    }\n\n    changedOwnedBusiness() {\n        if (!this.ownedBusiness || this.selectedPlan.canBeUsedByBusiness) {\n            return;\n        }\n        this.product = ProductType.Teams;\n        this.plan = PlanType.TeamsAnnually;\n    }\n\n    changedCountry() {\n        this.paymentComponent.hideBank = this.taxComponent.taxInfo.country !== 'US';\n        // Bank Account payments are only available for US customers\n        if (this.paymentComponent.hideBank &&\n            this.paymentComponent.method === PaymentMethodType.BankAccount) {\n            this.paymentComponent.method = PaymentMethodType.Card;\n            this.paymentComponent.changeMethod();\n        }\n    }\n\n    cancel() {\n        this.onCanceled.emit();\n    }\n\n    async submit() {\n        this.singleOrgPolicyBlock = await this.userHasBlockingSingleOrgPolicy();\n\n        if (this.singleOrgPolicyBlock) {\n            return;\n        }\n\n        try {\n            const doSubmit = async (): Promise<string> => {\n                let orgId: string = null;\n                if (this.createOrganization) {\n                    const shareKey = await this.cryptoService.makeShareKey();\n                    const key = shareKey[0].encryptedString;\n                    const collection = await this.cryptoService.encrypt(\n                        this.i18nService.t('defaultCollection'), shareKey[1]);\n                    const collectionCt = collection.encryptedString;\n                    const orgKeys = await this.cryptoService.makeKeyPair(shareKey[1]);\n\n                    if (this.selfHosted) {\n                        orgId = await this.createSelfHosted(key, collectionCt, orgKeys);\n                    } else {\n                        orgId = await this.createCloudHosted(key, collectionCt, orgKeys, shareKey[1]);\n                    }\n\n                    this.toasterService.popAsync('success', this.i18nService.t('organizationCreated'), this.i18nService.t('organizationReadyToGo'));\n                } else {\n                    orgId = await this.updateOrganization(orgId);\n                    this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpgraded'));\n                }\n\n                await this.apiService.refreshIdentityToken();\n                await this.syncService.fullSync(true);\n                if (!this.acceptingSponsorship) {\n                    this.router.navigate(['/organizations/' + orgId]);\n                }\n\n                return orgId;\n            };\n\n            this.formPromise = doSubmit();\n            const orgId = await this.formPromise;\n            this.onSuccess.emit({ organizationId: orgId });\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    private async userHasBlockingSingleOrgPolicy() {\n        return this.policyService.policyAppliesToUser(PolicyType.SingleOrg);\n    }\n\n    private async updateOrganization(orgId: string) {\n        const request = new OrganizationUpgradeRequest();\n        request.businessName = this.ownedBusiness ? this.businessName : null;\n        request.additionalSeats = this.additionalSeats;\n        request.additionalStorageGb = this.additionalStorage;\n        request.premiumAccessAddon = this.selectedPlan.hasPremiumAccessOption && this.premiumAccessAddon;\n        request.planType = this.selectedPlan.type;\n        request.billingAddressCountry = this.taxComponent.taxInfo.country;\n        request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n\n        // Retrieve org info to backfill pub/priv key if necessary\n        const org = await this.userService.getOrganization(this.organizationId);\n        if (!org.hasPublicAndPrivateKeys) {\n            const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n            const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n            request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n        }\n\n        const result = await this.apiService.postOrganizationUpgrade(this.organizationId, request);\n        if (!result.success && result.paymentIntentClientSecret != null) {\n            await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n        }\n        return this.organizationId;\n    }\n\n    private async createCloudHosted(key: string, collectionCt: string, orgKeys: [string, EncString], orgKey: SymmetricCryptoKey) {\n        const request = new OrganizationCreateRequest();\n        request.key = key;\n        request.collectionName = collectionCt;\n        request.name = this.name;\n        request.billingEmail = this.billingEmail;\n        request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n\n        if (this.selectedPlan.type === PlanType.Free) {\n            request.planType = PlanType.Free;\n        } else {\n            const tokenResult = await this.paymentComponent.createPaymentToken();\n\n            request.paymentToken = tokenResult[0];\n            request.paymentMethodType = tokenResult[1];\n            request.businessName = this.ownedBusiness ? this.businessName : null;\n            request.additionalSeats = this.additionalSeats;\n            request.additionalStorageGb = this.additionalStorage;\n            request.premiumAccessAddon = this.selectedPlan.hasPremiumAccessOption &&\n                this.premiumAccessAddon;\n            request.planType = this.selectedPlan.type;\n            request.billingAddressPostalCode = this.taxComponent.taxInfo.postalCode;\n            request.billingAddressCountry = this.taxComponent.taxInfo.country;\n            if (this.taxComponent.taxInfo.includeTaxId) {\n                request.taxIdNumber = this.taxComponent.taxInfo.taxId;\n                request.billingAddressLine1 = this.taxComponent.taxInfo.line1;\n                request.billingAddressLine2 = this.taxComponent.taxInfo.line2;\n                request.billingAddressCity = this.taxComponent.taxInfo.city;\n                request.billingAddressState = this.taxComponent.taxInfo.state;\n            }\n        }\n\n        if (this.providerId) {\n            const providerRequest = new ProviderOrganizationCreateRequest(this.clientOwnerEmail, request);\n            const providerKey = await this.cryptoService.getProviderKey(this.providerId);\n            providerRequest.organizationCreateRequest.key = (await this.cryptoService.encrypt(orgKey.key, providerKey)).encryptedString;\n            const orgId = (await this.apiService.postProviderCreateOrganization(this.providerId, providerRequest)).organizationId;\n\n            return orgId;\n        } else {\n            return (await this.apiService.postOrganization(request)).id;\n        }\n    }\n\n    private async createSelfHosted(key: string, collectionCt: string, orgKeys: [string, EncString]) {\n        const fileEl = document.getElementById('file') as HTMLInputElement;\n        const files = fileEl.files;\n        if (files == null || files.length === 0) {\n            throw new Error(this.i18nService.t('selectFile'));\n        }\n\n        const fd = new FormData();\n        fd.append('license', files[0]);\n        fd.append('key', key);\n        fd.append('collectionName', collectionCt);\n        const response = await this.apiService.postOrganizationLicense(fd);\n        const orgId = response.id;\n\n        // Org Keys live outside of the OrganizationLicense - add the keys to the org here\n        const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n        await this.apiService.postOrganizationKeys(orgId, request);\n\n        return orgId;\n    }\n}\n","<ng-container *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"createOrganization && selfHosted\"> <p>{{'uploadLicenseFileOrg' | i18n}}</p> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"form-group\"> <label for=\"file\">{{'licenseFile' | i18n}}</label> <input type=\"file\" id=\"file\" class=\"form-control-file\" name=\"file\" required> <small class=\"form-text text-muted\">{{'licenseFileDesc' | i18n : 'bitwarden_organization_license.json'}}</small> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> </form> </ng-container> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"!loading && !selfHosted && this.plans\"> <h2 class=\"mt-5\">{{'generalInformation' | i18n}}</h2> <div class=\"row\" *ngIf=\"createOrganization\"> <div class=\"form-group col-6\"> <label for=\"name\">{{'organizationName' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"name\" required> </div> <div class=\"form-group col-6\"> <label for=\"billingEmail\">{{'billingEmail' | i18n}}</label> <input id=\"billingEmail\" class=\"form-control\" type=\"text\" name=\"BillingEmail\" [(ngModel)]=\"billingEmail\" required> </div> <div class=\"form-group col-6\" *ngIf=\"!!providerId\"> <label for=\"email\">{{'clientOwnerEmail' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"clientOwnerEmail\" required> <small class=\"text-muted\">{{'clientOwnerDesc' | i18n : '20'}}</small> </div> </div> <div *ngIf=\"!providerId && !acceptingSponsorship\"> <div class=\"form-group form-check\"> <input id=\"ownedBusiness\" class=\"form-check-input\" type=\"checkbox\" name=\"OwnedBusiness\" [(ngModel)]=\"ownedBusiness\" (change)=\"changedOwnedBusiness()\"> <label for=\"ownedBusiness\" class=\"form-check-label\">{{'accountOwnedBusiness' | i18n}}</label> </div> <div class=\"row\" *ngIf=\"ownedBusiness\"> <div class=\"form-group col-6\"> <label for=\"businessName\">{{'businessName' | i18n}}</label> <input id=\"businessName\" class=\"form-control\" type=\"text\" name=\"BusinessName\" [(ngModel)]=\"businessName\"> </div> </div> </div> <h2 class=\"mt-5\">{{'chooseYourPlan' | i18n}}</h2> <div *ngFor=\"let selectableProduct of selectableProducts\" class=\"form-check form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"product\" id=\"product{{selectableProduct.product}}\" [value]=\"selectableProduct.product\" [(ngModel)]=\"product\" (change)=\"changedProduct()\"> <label class=\"form-check-label\" for=\"product{{selectableProduct.product}}\"> {{ selectableProduct.nameLocalizationKey | i18n}} <small class=\"mb-1\">{{ selectableProduct.descriptionLocalizationKey | i18n : '1'}}</small> <ng-container *ngIf=\"selectableProduct.product === productTypes.Enterprise; else fullFeatureList\"> <small>• {{'includeAllTeamsFeatures' | i18n}}</small> <small *ngIf=\"selectableProduct.hasSelfHost\">• {{'onPremHostingOptional' | i18n}}</small> <small *ngIf=\"selectableProduct.hasSso\">• {{'includeSsoAuthentication' | i18n}}</small> <small *ngIf=\"selectableProduct.hasPolicies\">• {{'includeEnterprisePolicies' | i18n}}</small> <small *ngIf=\"selectableProduct.trialPeriodDays && createOrganization\">• {{'xDayFreeTrial' | i18n : selectableProduct.trialPeriodDays }} </small> </ng-container> <ng-template #fullFeatureList> <small *ngIf=\"selectableProduct.product == productTypes.Free\">• {{'limitedUsers' | i18n : selectableProduct.maxUsers }}</small> <small *ngIf=\"selectableProduct.product != productTypes.Free && selectableProduct.maxUsers\">• {{'addShareLimitedUsers' | i18n : selectableProduct.maxUsers}}</small> <small *ngIf=\"!selectableProduct.maxUsers\">• {{'addShareUnlimitedUsers' | i18n}}</small> <small *ngIf=\"selectableProduct.maxCollections\">• {{'limitedCollections' | i18n : selectableProduct.maxCollections }}</small> <small *ngIf=\"selectableProduct.maxAdditionalSeats\">• {{'addShareLimitedUsers' | i18n : selectableProduct.maxAdditionalSeats }}</small> <small *ngIf=\"!selectableProduct.maxCollections\">• {{'createUnlimitedCollections' | i18n}}</small> <small *ngIf=\"selectableProduct.baseStorageGb\">• {{'gbEncryptedFileStorage' | i18n : selectableProduct.baseStorageGb + 'GB'}}</small> <small *ngIf=\"selectableProduct.hasGroups\">• {{'controlAccessWithGroups' | i18n}}</small> <small *ngIf=\"selectableProduct.hasApi\">• {{'trackAuditLogs' | i18n}}</small> <small *ngIf=\"selectableProduct.hasDirectory\">• {{'syncUsersFromDirectory' | i18n}}</small> <small *ngIf=\"selectableProduct.hasSelfHost\">• {{'onPremHostingOptional' | i18n}}</small> <small *ngIf=\"selectableProduct.usersGetPremium\">• {{'usersGetPremium' | i18n}}</small> <small *ngIf=\"selectableProduct.product != productTypes.Free\">• {{'priorityCustomerSupport' | i18n}}</small> <small *ngIf=\"selectableProduct.trialPeriodDays && createOrganization\">• {{'xDayFreeTrial' | i18n : selectableProduct.trialPeriodDays }} </small> </ng-template> <span *ngIf=\"selectableProduct.product != productTypes.Free\"> <ng-container *ngIf=\"selectableProduct.basePrice && !acceptingSponsorship\"> {{selectableProduct.basePrice / 12 | currency:'$'}} /{{'month' | i18n}}, {{'includesXUsers' | i18n : selectableProduct.baseSeats}} <ng-container *ngIf=\"selectableProduct.hasAdditionalSeatsOption\"> {{('additionalUsers' | i18n).toLowerCase()}} {{selectableProduct.seatPrice / 12 | currency:'$'}} /{{'month' | i18n}} </ng-container> </ng-container> </span> <span *ngIf=\"!selectableProduct.basePrice && selectableProduct.hasAdditionalSeatsOption\"> {{'costPerUser' | i18n : (selectableProduct.seatPrice / 12 | currency:'$')}} /{{'month' | i18n}} </span> <span *ngIf=\"selectableProduct.product == productTypes.Free\">{{'freeForever' | i18n}}</span> </label> </div> <div *ngIf=\"product !== productTypes.Free\"> <ng-container *ngIf=\"selectedPlan.hasAdditionalSeatsOption && !selectedPlan.baseSeats\"> <h2 class=\"mt-5\">{{'users' | i18n}}</h2> <div class=\"row\"> <div class=\"col-6\"> <label for=\"additionalSeats\">{{'userSeats' | i18n}}</label> <input id=\"additionalSeats\" class=\"form-control\" type=\"number\" name=\"AdditionalSeats\" [(ngModel)]=\"additionalSeats\" min=\"1\" max=\"100000\" placeholder=\"{{'userSeatsDesc' | i18n}}\" required> <small class=\"text-muted form-text\">{{'userSeatsHowManyDesc' | i18n}}</small> </div> </div> </ng-container> <h2 class=\"mt-5\">{{'addons' | i18n}}</h2> <div class=\"row\" *ngIf=\"selectedPlan.hasAdditionalSeatsOption && selectedPlan.baseSeats\"> <div class=\"form-group col-6\"> <label for=\"additionalSeats\">{{'additionalUserSeats' | i18n}}</label> <input id=\"additionalSeats\" class=\"form-control\" type=\"number\" name=\"AdditionalSeats\" [(ngModel)]=\"additionalSeats\" min=\"0\" max=\"100000\" placeholder=\"{{'userSeatsDesc' | i18n}}\"> <small class=\"text-muted form-text\">{{'userSeatsAdditionalDesc' | i18n : selectedPlan.baseSeats : (seatPriceMonthly(selectedPlan) | currency:'$')}}</small> </div> </div> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"additionalStorage\">{{'additionalStorageGb' | i18n}}</label> <input id=\"additionalStorage\" class=\"form-control\" type=\"number\" name=\"AdditionalStorageGb\" [(ngModel)]=\"additionalStorage\" min=\"0\" max=\"99\" step=\"1\" placeholder=\"{{'additionalStorageGbDesc' | i18n}}\"> <small class=\"text-muted form-text\">{{'additionalStorageIntervalDesc' | i18n : '1 GB' : (additionalStoragePriceMonthly(selectedPlan) | currency:'$') : ('month' | i18n)}}</small> </div> </div> <div class=\"row\"> <div class=\"form-group col-6\" *ngIf=\"selectedPlan.hasPremiumAccessOption\"> <div class=\"form-check\"> <input id=\"premiumAccess\" class=\"form-check-input\" type=\"checkbox\" name=\"PremiumAccessAddon\" [(ngModel)]=\"premiumAccessAddon\"> <label for=\"premiumAccess\" class=\"form-check-label bold\">{{'premiumAccess' | i18n}}</label> </div> <small class=\"text-muted form-text\">{{'premiumAccessDesc' | i18n : (3.33 | currency:'$') : ('month' | i18n)}}</small> </div> </div> <h2 class=\"spaced-header\">{{'summary' | i18n}}</h2> <div class=\"form-check form-check-block\" *ngFor=\"let selectablePlan of selectablePlans\"> <input class=\"form-check-input\" type=\"radio\" name=\"BillingInterval\" id=\"interval{{selectablePlan.type}}\" [value]=\"selectablePlan.type\" [(ngModel)]=\"plan\"> <label class=\"form-check-label\" for=\"interval{{selectablePlan.type}}\"> <ng-container *ngIf=\"selectablePlan.isAnnual\"> {{'annually' | i18n}} <small *ngIf=\"selectablePlan.basePrice\"> {{'basePrice' | i18n}}: {{ selectablePlan.basePrice / 12 | currency:'$'}} &times; 12 {{'monthAbbr' | i18n}} = <ng-container *ngIf=\"acceptingSponsorship; else notAcceptingSponsorship\"> <span style=\"text-decoration:line-through\">{{selectablePlan.basePrice | currency:'$'}}</span> {{'freeWithSponsorship' | i18n}} </ng-container> <ng-template #notAcceptingSponsorship> {{selectablePlan.basePrice | currency:'$'}} /{{'year' | i18n}} </ng-template> </small> <small *ngIf=\"selectablePlan.hasAdditionalSeatsOption\"> <span *ngIf=\"selectablePlan.baseSeats\">{{'additionalUsers' | i18n}}:</span> <span *ngIf=\"!selectablePlan.baseSeats\">{{'users' | i18n}}:</span> {{additionalSeats || 0}} &times; {{selectablePlan.seatPrice / 12 | currency:'$'}} &times; 12 {{'monthAbbr' | i18n}} = {{seatTotal(selectablePlan) | currency:'$'}} /{{'year' | i18n}} </small> <small *ngIf=\"selectablePlan.hasAdditionalStorageOption\"> {{'additionalStorageGb' | i18n}}: {{additionalStorage || 0}} &times; {{selectablePlan.additionalStoragePricePerGb / 12 | currency:'$'}} &times; 12 {{'monthAbbr' | i18n}} = {{additionalStorageTotal(selectablePlan) | currency:'$'}} /{{'year' | i18n}} </small> <small *ngIf=\"selectablePlan.hasPremiumAccessOption && premiumAccessAddon\"> {{'premiumAccess' | i18n}}: {{selectablePlan.premiumAccessOptionCost / 12 | currency:'$'}} &times; 12 {{'monthAbbr' | i18n}} = {{40 | currency:'$'}} /{{'year' | i18n}} </small> </ng-container> <ng-container *ngIf=\"!selectablePlan.isAnnual\"> {{'monthly' | i18n}} <small *ngIf=\"selectablePlan.basePrice\"> {{'basePrice' | i18n}}: {{selectablePlan.basePrice | currency:'$'}} {{'monthAbbr' | i18n}} = {{selectablePlan.basePrice | currency:'$'}} /{{'month' | i18n}} </small> <small *ngIf=\"selectablePlan.hasAdditionalSeatsOption\"> <span *ngIf=\"selectablePlan.baseSeats\">{{'additionalUsers' | i18n}}:</span> <span *ngIf=\"!selectablePlan.baseSeats\">{{'users' | i18n}}:</span> {{additionalSeats || 0}} &times; {{selectablePlan.seatPrice | currency:'$'}} {{'monthAbbr' | i18n}} = {{seatTotal(selectablePlan) | currency:'$'}} /{{'month' | i18n}} </small> <small *ngIf=\"selectablePlan.hasAdditionalStorageOption\"> {{'additionalStorageGb' | i18n}}: {{additionalStorage || 0}} &times; {{selectablePlan.additionalStoragePricePerGb | currency:'$'}} {{'monthAbbr' | i18n}} = {{additionalStorageTotal(selectablePlan) | currency:'$'}} /{{'month' | i18n}} </small> <small *ngIf=\"selectablePlan.hasPremiumAccessOption && premiumAccessAddon\"> {{'premiumAccess' | i18n}}: {{selectablePlan.premiumAccessOptionCost | currency:'$'}} {{'monthAbbr' | i18n}} = {{40 | currency:'$'}} /{{'month' | i18n}} </small> </ng-container> </label> </div> <hr class=\"my-3\"> <h2 class=\"spaced-header mb-4\">{{ (createOrganization ? 'paymentInformation' : 'billingInformation') | i18n}} </h2> <small class=\"text-muted font-italic mb-3 d-block\"> {{paymentDesc}} </small> <app-payment *ngIf=\"createOrganization\" [hideCredit]=\"true\"></app-payment> <app-tax-info (onCountryChanged)=\"changedCountry()\"></app-tax-info> <div id=\"price\" class=\"my-4\"> <div class=\"text-muted text-sm\"> {{ 'planPrice' | i18n }}: {{ subtotal | currency: 'USD $' }} <br/> <ng-container> {{ 'estimatedTax' | i18n }}: {{ taxCharges | currency: 'USD $' }} </ng-container> </div> <hr class=\"my-1 col-3 ml-0\"> <p class=\"text-lg\"><strong>{{'total' | i18n}}:</strong> {{total | currency:'USD $'}}/{{selectedPlanInterval | i18n}}</p> </div> <ng-container *ngIf=\"!createOrganization\"> <app-payment [showMethods]=\"false\"></app-payment> </ng-container> </div> <div *ngIf=\"singleOrgPolicyBlock\" class=\"mt-4\"> <app-callout [type]=\"'error'\">{{'singleOrgBlockCreateMessage' | i18n}}</app-callout> </div> <div class=\"mt-4\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"cancel()\" *ngIf=\"showCancel\"> {{'cancel' | i18n}} </button> </div> </form> ","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\n\nimport { Cipher } from '../domain/cipher';\n\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { LoginUriApi } from '../api/loginUriApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nimport { AttachmentRequest } from './attachmentRequest';\nimport { PasswordHistoryRequest } from './passwordHistoryRequest';\n\nexport class CipherRequest {\n    type: CipherType;\n    folderId: string;\n    organizationId: string;\n    name: string;\n    notes: string;\n    favorite: boolean;\n    login: LoginApi;\n    secureNote: SecureNoteApi;\n    card: CardApi;\n    identity: IdentityApi;\n    fields: FieldApi[];\n    passwordHistory: PasswordHistoryRequest[];\n    // Deprecated, remove at some point and rename attachments2 to attachments\n    attachments: { [id: string]: string; };\n    attachments2: { [id: string]: AttachmentRequest; };\n    lastKnownRevisionDate: Date;\n    reprompt: CipherRepromptType;\n\n    constructor(cipher: Cipher) {\n        this.type = cipher.type;\n        this.folderId = cipher.folderId;\n        this.organizationId = cipher.organizationId;\n        this.name = cipher.name ? cipher.name.encryptedString : null;\n        this.notes = cipher.notes ? cipher.notes.encryptedString : null;\n        this.favorite = cipher.favorite;\n        this.lastKnownRevisionDate = cipher.revisionDate;\n        this.reprompt = cipher.reprompt;\n\n        switch (this.type) {\n            case CipherType.Login:\n                this.login = new LoginApi();\n                this.login.uris = null;\n                this.login.username = cipher.login.username ? cipher.login.username.encryptedString : null;\n                this.login.password = cipher.login.password ? cipher.login.password.encryptedString : null;\n                this.login.passwordRevisionDate = cipher.login.passwordRevisionDate != null ?\n                    cipher.login.passwordRevisionDate.toISOString() : null;\n                this.login.totp = cipher.login.totp ? cipher.login.totp.encryptedString : null;\n                this.login.autofillOnPageLoad = cipher.login.autofillOnPageLoad;\n\n                if (cipher.login.uris != null) {\n                    this.login.uris = cipher.login.uris.map(u => {\n                        const uri = new LoginUriApi();\n                        uri.uri = u.uri != null ? u.uri.encryptedString : null;\n                        uri.match = u.match != null ? u.match : null;\n                        return uri;\n                    });\n                }\n                break;\n            case CipherType.SecureNote:\n                this.secureNote = new SecureNoteApi();\n                this.secureNote.type = cipher.secureNote.type;\n                break;\n            case CipherType.Card:\n                this.card = new CardApi();\n                this.card.cardholderName = cipher.card.cardholderName != null ?\n                    cipher.card.cardholderName.encryptedString : null;\n                this.card.brand = cipher.card.brand != null ? cipher.card.brand.encryptedString : null;\n                this.card.number = cipher.card.number != null ? cipher.card.number.encryptedString : null;\n                this.card.expMonth = cipher.card.expMonth != null ? cipher.card.expMonth.encryptedString : null;\n                this.card.expYear = cipher.card.expYear != null ? cipher.card.expYear.encryptedString : null;\n                this.card.code = cipher.card.code != null ? cipher.card.code.encryptedString : null;\n                break;\n            case CipherType.Identity:\n                this.identity = new IdentityApi();\n                this.identity.title = cipher.identity.title != null ? cipher.identity.title.encryptedString : null;\n                this.identity.firstName = cipher.identity.firstName != null ?\n                    cipher.identity.firstName.encryptedString : null;\n                this.identity.middleName = cipher.identity.middleName != null ?\n                    cipher.identity.middleName.encryptedString : null;\n                this.identity.lastName = cipher.identity.lastName != null ?\n                    cipher.identity.lastName.encryptedString : null;\n                this.identity.address1 = cipher.identity.address1 != null ?\n                    cipher.identity.address1.encryptedString : null;\n                this.identity.address2 = cipher.identity.address2 != null ?\n                    cipher.identity.address2.encryptedString : null;\n                this.identity.address3 = cipher.identity.address3 != null ?\n                    cipher.identity.address3.encryptedString : null;\n                this.identity.city = cipher.identity.city != null ? cipher.identity.city.encryptedString : null;\n                this.identity.state = cipher.identity.state != null ? cipher.identity.state.encryptedString : null;\n                this.identity.postalCode = cipher.identity.postalCode != null ?\n                    cipher.identity.postalCode.encryptedString : null;\n                this.identity.country = cipher.identity.country != null ?\n                    cipher.identity.country.encryptedString : null;\n                this.identity.company = cipher.identity.company != null ?\n                    cipher.identity.company.encryptedString : null;\n                this.identity.email = cipher.identity.email != null ? cipher.identity.email.encryptedString : null;\n                this.identity.phone = cipher.identity.phone != null ? cipher.identity.phone.encryptedString : null;\n                this.identity.ssn = cipher.identity.ssn != null ? cipher.identity.ssn.encryptedString : null;\n                this.identity.username = cipher.identity.username != null ?\n                    cipher.identity.username.encryptedString : null;\n                this.identity.passportNumber = cipher.identity.passportNumber != null ?\n                    cipher.identity.passportNumber.encryptedString : null;\n                this.identity.licenseNumber = cipher.identity.licenseNumber != null ?\n                    cipher.identity.licenseNumber.encryptedString : null;\n                break;\n            default:\n                break;\n        }\n\n        if (cipher.fields != null) {\n            this.fields = cipher.fields.map(f => {\n                const field = new FieldApi();\n                field.type = f.type;\n                field.name = f.name ? f.name.encryptedString : null;\n                field.value = f.value ? f.value.encryptedString : null;\n                field.linkedId = f.linkedId;\n                return field;\n            });\n        }\n\n        if (cipher.passwordHistory != null) {\n            this.passwordHistory = [];\n            cipher.passwordHistory.forEach(ph => {\n                this.passwordHistory.push({\n                    lastUsedDate: ph.lastUsedDate,\n                    password: ph.password ? ph.password.encryptedString : null,\n                });\n            });\n        }\n\n        if (cipher.attachments != null) {\n            this.attachments = {};\n            this.attachments2 = {};\n            cipher.attachments.forEach(attachment => {\n                const fileName = attachment.fileName ? attachment.fileName.encryptedString : null;\n                this.attachments[attachment.id] = fileName;\n                const attachmentRequest = new AttachmentRequest();\n                attachmentRequest.fileName = fileName;\n                if (attachment.key != null) {\n                    attachmentRequest.key = attachment.key.encryptedString;\n                }\n                this.attachments2[attachment.id] = attachmentRequest;\n            });\n        }\n    }\n}\n","import { BasePolicy } from '../organizations/policies/base-policy.component';\n\nexport class PolicyListService {\n    private policies: BasePolicy[] = [];\n\n    addPolicies(policies: BasePolicy[]) {\n        this.policies.push(...policies);\n    }\n\n    getPolicies(): BasePolicy[] {\n        return this.policies;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n    ActivatedRoute,\n    NavigationEnd,\n    Router,\n} from '@angular/router';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Injectable()\nexport class RouterService {\n    private previousUrl: string = undefined;\n    private currentUrl: string = undefined;\n\n    constructor(private router: Router, private activatedRoute: ActivatedRoute,\n        private titleService: Title, i18nService: I18nService) {\n        this.currentUrl = this.router.url;\n        router.events.subscribe(event => {\n            if (event instanceof NavigationEnd) {\n                this.previousUrl = this.currentUrl;\n                this.currentUrl = event.url;\n\n                let title = i18nService.t('pageTitle', 'Bitwarden');\n                let titleId: string = null;\n                let rawTitle: string = null;\n                let child = this.activatedRoute.firstChild;\n                while (child != null) {\n                    if (child.firstChild != null) {\n                        child = child.firstChild;\n                    } else if (child.snapshot.data != null && child.snapshot.data.title != null) {\n                        rawTitle = child.snapshot.data.title;\n                        break;\n                    } else if (child.snapshot.data != null && child.snapshot.data.titleId != null) {\n                        titleId = child.snapshot.data.titleId;\n                        break;\n                    } else {\n                        titleId = null;\n                        rawTitle = null;\n                        break;\n                    }\n                }\n\n                if (titleId != null || rawTitle != null) {\n                    const newTitle = rawTitle != null ? rawTitle : i18nService.t(titleId);\n                    if (newTitle != null && newTitle !== '') {\n                        title = (newTitle + ' | ' + title);\n                    }\n                }\n                this.titleService.setTitle(title);\n            }\n        });\n    }\n\n    getPreviousUrl() {\n        return this.previousUrl;\n    }\n\n    setPreviousUrl(url: string) {\n        this.previousUrl = url;\n    }\n}\n","export enum KdfType {\n    PBKDF2_SHA256 = 0,\n}\n","import { Observable, Subject } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nexport class ModalRef {\n\n    onCreated: Observable<HTMLElement>; // Modal added to the DOM.\n    onClose: Observable<any>;           // Initiated close.\n    onClosed: Observable<any>;          // Modal was closed (Remove element from DOM)\n    onShow: Observable<any>;            // Start showing modal\n    onShown: Observable<any>;           // Modal is fully visible\n\n    private readonly _onCreated = new Subject<HTMLElement>();\n    private readonly _onClose = new Subject<any>();\n    private readonly _onClosed = new Subject<any>();\n    private readonly _onShow = new Subject<any>();\n    private readonly _onShown = new Subject<any>();\n    private lastResult: any;\n\n    constructor() {\n        this.onCreated = this._onCreated.asObservable();\n        this.onClose = this._onClose.asObservable();\n        this.onClosed = this._onClosed.asObservable();\n        this.onShow = this._onShow.asObservable();\n        this.onShown = this._onShow.asObservable();\n    }\n\n    show() {\n        this._onShow.next();\n    }\n\n    shown() {\n        this._onShown.next();\n    }\n\n    close(result?: any) {\n        this.lastResult = result;\n        this._onClose.next(result);\n    }\n\n    closed() {\n        this._onClosed.next(this.lastResult);\n    }\n\n    created(el: HTMLElement) {\n        this._onCreated.next(el);\n    }\n\n    onClosedPromise(): Promise<any> {\n        return this.onClosed.pipe(first()).toPromise();\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class PermissionsApi extends BaseResponse {\n    accessEventLogs: boolean;\n    accessImportExport: boolean;\n    accessReports: boolean;\n    /**\n     * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n     * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n     */\n    manageAllCollections: boolean;\n    createNewCollections: boolean;\n    editAnyCollection: boolean;\n    deleteAnyCollection: boolean;\n    /**\n     * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n     * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n     */\n    manageAssignedCollections: boolean;\n    editAssignedCollections: boolean;\n    deleteAssignedCollections: boolean;\n    manageCiphers: boolean;\n    manageGroups: boolean;\n    manageSso: boolean;\n    managePolicies: boolean;\n    manageUsers: boolean;\n    manageResetPassword: boolean;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return this;\n        }\n        this.accessEventLogs = this.getResponseProperty('AccessEventLogs');\n        this.accessImportExport = this.getResponseProperty('AccessImportExport');\n        this.accessReports = this.getResponseProperty('AccessReports');\n\n        // For backwards compatibility with Server <= 1.43.0\n        this.manageAllCollections = this.getResponseProperty('ManageAllCollections');\n        this.manageAssignedCollections = this.getResponseProperty('ManageAssignedCollections');\n\n        this.createNewCollections = this.getResponseProperty('CreateNewCollections');\n        this.editAnyCollection = this.getResponseProperty('EditAnyCollection');\n        this.deleteAnyCollection = this.getResponseProperty('DeleteAnyCollection');\n        this.editAssignedCollections = this.getResponseProperty('EditAssignedCollections');\n        this.deleteAssignedCollections = this.getResponseProperty('DeleteAssignedCollections');\n\n        this.manageCiphers = this.getResponseProperty('ManageCiphers');\n        this.manageGroups = this.getResponseProperty('ManageGroups');\n        this.manageSso = this.getResponseProperty('ManageSso');\n        this.managePolicies = this.getResponseProperty('ManagePolicies');\n        this.manageUsers = this.getResponseProperty('ManageUsers');\n        this.manageResetPassword = this.getResponseProperty('ManageResetPassword');\n    }\n}\n","export enum PaymentMethodType {\n    Card = 0,\n    BankAccount = 1,\n    PayPal = 2,\n    BitPay = 3,\n    Credit = 4,\n    WireTransfer = 5,\n    AppleInApp = 6,\n    GoogleInApp = 7,\n    Check = 8,\n}\n","export enum PlanType {\n    Free = 0,\n    FamiliesAnnually2019 = 1,\n    TeamsMonthly2019 = 2,\n    TeamsAnnually2019 = 3,\n    EnterpriseMonthly2019 = 4,\n    EnterpriseAnnually2019 = 5,\n    Custom = 6,\n    FamiliesAnnually = 7,\n    TeamsMonthly = 8,\n    TeamsAnnually = 9,\n    EnterpriseMonthly = 10,\n    EnterpriseAnnually = 11,\n}\n","import {\n    Directive,\n    EventEmitter,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\nimport { VerificationType } from 'jslib-common/enums/verificationType';\n\nimport { SecretVerificationRequest } from 'jslib-common/models/request/secretVerificationRequest';\nimport { TwoFactorProviderRequest } from 'jslib-common/models/request/twoFactorProviderRequest';\n\n@Directive()\nexport abstract class TwoFactorBaseComponent {\n    @Output() onUpdated = new EventEmitter<boolean>();\n\n    type: TwoFactorProviderType;\n    organizationId: string;\n    twoFactorProviderType = TwoFactorProviderType;\n    enabled = false;\n    authed = false;\n\n    protected hashedSecret: string;\n    protected verificationType: VerificationType;\n\n    constructor(protected apiService: ApiService, protected i18nService: I18nService,\n        protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService,\n        protected logService: LogService, protected userVerificationService: UserVerificationService) { }\n\n    protected auth(authResponse: any) {\n        this.hashedSecret = authResponse.secret;\n        this.verificationType = authResponse.verificationType;\n        this.authed = true;\n    }\n\n    protected async enable(enableFunction: () => Promise<void>) {\n        try {\n            await enableFunction();\n            this.onUpdated.emit(true);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    protected async disable(promise: Promise<any>) {\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('twoStepDisableDesc'),\n            this.i18nService.t('disable'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return;\n        }\n\n        try {\n            const request = await this.buildRequestModel(TwoFactorProviderRequest);\n            request.type = this.type;\n            if (this.organizationId != null) {\n                promise = this.apiService.putTwoFactorOrganizationDisable(this.organizationId, request);\n            } else {\n                promise = this.apiService.putTwoFactorDisable(request);\n            }\n            await promise;\n            this.enabled = false;\n            this.toasterService.popAsync('success', null, this.i18nService.t('twoStepDisabled'));\n            this.onUpdated.emit(false);\n        }  catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    protected async buildRequestModel<T extends SecretVerificationRequest>(requestClass: new() => T)  {\n        return this.userVerificationService.buildRequest({\n            secret: this.hashedSecret,\n            type: this.verificationType,\n        }, requestClass, true);\n    }\n}\n","import {\n    Directive,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { AddEditComponent as OrgAddEditComponent } from '../organizations/vault/add-edit.component';\nimport { AddEditComponent } from '../vault/add-edit.component';\n\nimport { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\n@Directive()\nexport class CipherReportComponent {\n    @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n\n    loading = false;\n    hasLoaded = false;\n    ciphers: CipherView[] = [];\n    organization: Organization;\n\n    constructor(private modalService: ModalService, protected userService: UserService,\n        protected messagingService: MessagingService, protected passwordRepromptService: PasswordRepromptService,\n        public requiresPaid: boolean) { }\n\n    async load() {\n        this.loading = true;\n        await this.setCiphers();\n        this.loading = false;\n        this.hasLoaded = true;\n    }\n\n    async selectCipher(cipher: CipherView) {\n        if (!await this.repromptCipher(cipher)) {\n            return;\n        }\n\n        const type = this.organization != null ? OrgAddEditComponent : AddEditComponent;\n\n        const [modal, childComponent] = await this.modalService.openViewRef(type, this.cipherAddEditModalRef, (comp: OrgAddEditComponent | AddEditComponent) => {\n            if (this.organization != null) {\n                (comp as OrgAddEditComponent).organization = this.organization;\n                comp.organizationId = this.organization.id;\n            }\n\n            comp.cipherId = cipher == null ? null : cipher.id;\n            comp.onSavedCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.load();\n            });\n            comp.onDeletedCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.load();\n            });\n            comp.onRestoredCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.load();\n            });\n\n        });\n\n        return childComponent;\n    }\n\n    protected async checkAccess(): Promise<boolean> {\n        if (this.organization != null) {\n            // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n            // since all paid plans include useTotp\n            if (this.requiresPaid && !this.organization.useTotp) {\n                this.messagingService.send('upgradeOrganization', { organizationId: this.organization.id });\n                return false;\n            }\n        } else {\n            const accessPremium = await this.userService.canAccessPremium();\n            if (this.requiresPaid && !accessPremium) {\n                this.messagingService.send('premiumRequired');\n                this.loading = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    protected async setCiphers() {\n        this.ciphers = [];\n    }\n\n    protected async repromptCipher(c: CipherView) {\n        return c.reprompt === CipherRepromptType.None || await this.passwordRepromptService.showPasswordPrompt();\n    }\n}\n","import { FieldType } from '../../enums/fieldType';\nimport { LinkedIdType } from '../../enums/linkedIdType';\n\nimport { View } from './view';\n\nimport { Field } from '../domain/field';\n\nexport class FieldView implements View {\n    name: string = null;\n    value: string = null;\n    type: FieldType = null;\n    newField: boolean = false; // Marks if the field is new and hasn't been saved\n    showValue: boolean = false;\n    linkedId: LinkedIdType = null;\n\n    constructor(f?: Field) {\n        if (!f) {\n            return;\n        }\n\n        this.type = f.type;\n        this.linkedId = f.linkedId;\n    }\n\n    get maskedValue(): string {\n        return this.value != null ? '••••••••' : null;\n    }\n}\n","import { Component } from '@angular/core';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\nimport { EventType } from 'jslib-common/enums/eventType';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AddEditComponent as BaseAddEditComponent } from 'jslib-angular/components/add-edit.component';\nimport { LoginUriView } from 'jslib-common/models/view/loginUriView';\n\n@Component({\n    selector: 'app-vault-add-edit',\n    templateUrl: 'add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n    canAccessPremium: boolean;\n    totpCode: string;\n    totpCodeFormatted: string;\n    totpDash: number;\n    totpSec: number;\n    totpLow: boolean;\n    showRevisionDate = false;\n    hasPasswordHistory = false;\n    viewingPasswordHistory = false;\n    viewOnly = false;\n\n    protected totpInterval: number;\n\n    constructor(cipherService: CipherService, folderService: FolderService,\n        i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n        auditService: AuditService, stateService: StateService,\n        userService: UserService, collectionService: CollectionService,\n        protected totpService: TotpService, protected passwordGenerationService: PasswordGenerationService,\n        protected messagingService: MessagingService, eventService: EventService,\n        protected policyService: PolicyService, passwordRepromptService: PasswordRepromptService,\n        logService: LogService) {\n        super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n            userService, collectionService, messagingService, eventService, policyService, passwordRepromptService,\n            logService);\n    }\n\n    async ngOnInit() {\n        await super.ngOnInit();\n        await this.load();\n        this.showRevisionDate = this.cipher.passwordRevisionDisplayDate != null;\n        this.hasPasswordHistory = this.cipher.hasPasswordHistory;\n        this.cleanUp();\n\n        this.canAccessPremium = await this.userService.canAccessPremium();\n        if (this.cipher.type === CipherType.Login && this.cipher.login.totp &&\n            (this.cipher.organizationUseTotp || this.canAccessPremium)) {\n            await this.totpUpdateCode();\n            const interval = this.totpService.getTimeInterval(this.cipher.login.totp);\n            await this.totpTick(interval);\n\n            this.totpInterval = window.setInterval(async () => {\n                await this.totpTick(interval);\n            }, 1000);\n        }\n    }\n\n    toggleFavorite() {\n        this.cipher.favorite = !this.cipher.favorite;\n    }\n\n    launch(uri: LoginUriView) {\n        if (!uri.canLaunch) {\n            return;\n        }\n\n        this.platformUtilsService.launchUri(uri.launchUri);\n    }\n\n    copy(value: string, typeI18nKey: string, aType: string) {\n        if (value == null) {\n            return;\n        }\n\n        this.platformUtilsService.copyToClipboard(value, { window: window });\n        this.platformUtilsService.showToast('info', null,\n            this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));\n\n        if (this.editMode) {\n            if (typeI18nKey === 'password') {\n                this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipherId);\n            } else if (typeI18nKey === 'securityCode') {\n                this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, this.cipherId);\n            } else if (aType === 'H_Field') {\n                this.eventService.collect(EventType.Cipher_ClientCopiedHiddenField, this.cipherId);\n            }\n        }\n    }\n\n    async generatePassword(): Promise<boolean> {\n        const confirmed = await super.generatePassword();\n        if (confirmed) {\n            const options = (await this.passwordGenerationService.getOptions())[0];\n            this.cipher.login.password = await this.passwordGenerationService.generatePassword(options);\n        }\n        return confirmed;\n    }\n\n    premiumRequired() {\n        if (!this.canAccessPremium) {\n            this.messagingService.send('premiumRequired');\n            return;\n        }\n    }\n\n    upgradeOrganization() {\n        this.messagingService.send('upgradeOrganization', { organizationId: this.cipher.organizationId });\n    }\n\n    viewHistory() {\n        this.viewingPasswordHistory = !this.viewingPasswordHistory;\n    }\n\n    protected cleanUp() {\n        if (this.totpInterval) {\n            window.clearInterval(this.totpInterval);\n        }\n    }\n\n    protected async totpUpdateCode() {\n        if (this.cipher == null || this.cipher.type !== CipherType.Login || this.cipher.login.totp == null) {\n            if (this.totpInterval) {\n                window.clearInterval(this.totpInterval);\n            }\n            return;\n        }\n\n        this.totpCode = await this.totpService.getCode(this.cipher.login.totp);\n        if (this.totpCode != null) {\n            if (this.totpCode.length > 4) {\n                const half = Math.floor(this.totpCode.length / 2);\n                this.totpCodeFormatted = this.totpCode.substring(0, half) + ' ' + this.totpCode.substring(half);\n            } else {\n                this.totpCodeFormatted = this.totpCode;\n            }\n        } else {\n            this.totpCodeFormatted = null;\n            if (this.totpInterval) {\n                window.clearInterval(this.totpInterval);\n            }\n        }\n    }\n\n    protected allowOwnershipAssignment() {\n        return (!this.editMode || this.cloneMode) && this.ownershipOptions != null\n            && (this.ownershipOptions.length > 1 || !this.allowPersonal);\n    }\n\n    private async totpTick(intervalSeconds: number) {\n        const epoch = Math.round(new Date().getTime() / 1000.0);\n        const mod = epoch % intervalSeconds;\n\n        this.totpSec = intervalSeconds - mod;\n        this.totpDash = +(Math.round((((78.6 / intervalSeconds) * mod) + 'e+2') as any) + 'e-2');\n        this.totpLow = this.totpSec <= 7;\n        if (mod === 0) {\n            await this.totpUpdateCode();\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"cipherAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate autocomplete=\"off\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"cipherAddEditTitle\">{{title}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"cipher\"> <app-callout type=\"info\" *ngIf=\"allowOwnershipAssignment() && !allowPersonal\"> {{'personalOwnershipPolicyInEffect' | i18n}} </app-callout> <div class=\"row\" *ngIf=\"!editMode && !viewOnly\"> <div class=\"col-6 form-group\"> <label for=\"type\">{{'whatTypeOfItem' | i18n}}</label> <select id=\"type\" name=\"Type\" [(ngModel)]=\"cipher.type\" class=\"form-control\" [disabled]=\"cipher.isDeleted\" appAutofocus> <option *ngFor=\"let o of typeOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"name\">{{'name' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"cipher.name\" required [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-6 form-group\" *ngIf=\"!organization\"> <label for=\"folder\">{{'folder' | i18n}}</label> <select id=\"folder\" name=\"FolderId\" [(ngModel)]=\"cipher.folderId\" class=\"form-control\" [disabled]=\"cipher.isDeleted || viewOnly\"> <option *ngFor=\"let f of folders\" [ngValue]=\"f.id\">{{f.name}}</option> </select> </div> </div> <ng-container *ngIf=\"cipher.type === cipherType.Login\"> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"loginUsername\">{{'username' | i18n}}</label> <div class=\"input-group\"> <input id=\"loginUsername\" class=\"form-control\" type=\"text\" name=\"Login.Username\" [(ngModel)]=\"cipher.login.username\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> <div class=\"input-group-append\" *ngIf=\"!cipher.isDeleted\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'copyUsername' | i18n}}\" (click)=\"copy(cipher.login.username, 'username', 'Username')\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> </div> <div class=\"col-6 form-group\"> <div class=\"d-flex\"> <label for=\"loginPassword\">{{'password' | i18n}}</label> <div class=\"ml-auto d-flex\" *ngIf=\"!cipher.isDeleted && !viewOnly\"> <a href=\"#\" class=\"d-block mr-2 fa-icon-above-input\" appStopClick appA11yTitle=\"{{'generatePassword' | i18n}}\" (click)=\"generatePassword()\" *ngIf=\"cipher.viewPassword\"> <i class=\"fa fa-lg fa-fw fa-refresh\" aria-hidden=\"true\"></i> </a> <a href=\"#\" class=\"d-block fa-icon-above-input\" #checkPasswordBtn appStopClick appA11yTitle=\"{{'checkPassword' | i18n}}\" (click)=\"checkPassword()\" [appApiAction]=\"checkPasswordPromise\"> <i class=\"fa fa-lg fa-fw fa-check-circle\" [hidden]=\"checkPasswordBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-lg fa-fw fa-spinner fa-spin\" aria-hidden=\"true\" [hidden]=\"!checkPasswordBtn.loading\" title=\"{{'loading' | i18n}}\"></i> </a> </div> </div> <div class=\"input-group\"> <input id=\"loginPassword\" class=\"form-control text-monospace\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"Login.Password\" [(ngModel)]=\"cipher.login.password\" appInputVerbatim autocomplete=\"new-password\" [disabled]=\"cipher.isDeleted || !cipher.viewPassword || viewOnly\"> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword()\" [disabled]=\"!cipher.viewPassword\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'copyPassword' | i18n}}\" (click)=\"copy(cipher.login.password, 'password', 'Password')\" [disabled]=\"!cipher.viewPassword\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"loginTotp\">{{'authenticatorKeyTotp' | i18n}}</label> <input id=\"loginTotp\" type=\"{{cipher.viewPassword ? 'text' : 'password'}}\" name=\"Login.Totp\" class=\"form-control text-monospace\" [(ngModel)]=\"cipher.login.totp\" appInputVerbatim [disabled]=\"cipher.isDeleted || !cipher.viewPassword || viewOnly\"> </div> <div class=\"col-6 form-group totp d-flex align-items-end\" [ngClass]=\"{'low': totpLow}\"> <div *ngIf=\"!cipher.login.totp || !totpCode\"> <img src=\"images/totp-countdown.png\" id=\"totpImage\" title=\"{{'verificationCodeTotp' | i18n}}\" class=\"ml-2\"> <a href=\"#\" appStopClick class=\"badge badge-primary ml-3\" (click)=\"premiumRequired()\" *ngIf=\"!organization && !cipher.organizationId && !canAccessPremium\"> {{'premium' | i18n}} </a> <a href=\"#\" appStopClick class=\"badge badge-primary ml-3\" (click)=\"upgradeOrganization()\" *ngIf=\"(organization && !organization.useTotp) || (!organization && !canAccessPremium && cipher.organizationId && !cipher.organizationUseTotp)\"> {{'upgrade' | i18n}} </a> </div> <div *ngIf=\"cipher.login.totp && totpCode\" class=\"d-flex align-items-center\"> <span class=\"totp-countdown mr-3 ml-2\"> <span class=\"totp-sec\">{{totpSec}}</span> <svg> <g> <circle class=\"totp-circle inner\" r=\"12.6\" cy=\"16\" cx=\"16\" [ngStyle]=\"{'stroke-dashoffset.px': totpDash}\"></circle> <circle class=\"totp-circle outer\" r=\"14\" cy=\"16\" cx=\"16\"></circle> </g> </svg> </span> <span class=\"totp-code mr-2\" title=\"{{'verificationCodeTotp' | i18n}}\">{{totpCodeFormatted}}</span> <button type=\"button\" class=\"btn btn-link\" appA11yTitle=\"{{'copyVerificationCode' | i18n}}\" (click)=\"copy(totpCode, 'verificationCodeTotp', 'TOTP')\"> <i class=\"fa fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> </div> <ng-container *ngIf=\"cipher.login.hasUris\"> <div class=\"row\" *ngFor=\"let u of cipher.login.uris; let i = index; trackBy:trackByFunction\"> <div class=\"col-7 form-group\"> <label for=\"loginUri{{i}}\">{{'uriPosition' | i18n : (i + 1)}}</label> <div class=\"input-group\"> <input class=\"form-control\" id=\"loginUri{{i}}\" type=\"text\" name=\"Login.Uris[{{i}}].Uri\" [(ngModel)]=\"u.uri\" [disabled]=\"cipher.isDeleted || viewOnly\" placeholder=\"{{'ex' | i18n}} https://google.com\" appInputVerbatim> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'launch' | i18n}}\" (click)=\"launch(u)\" [disabled]=\"!u.canLaunch\"> <i class=\"fa fa-lg fa-share\" aria-hidden=\"true\"></i> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'copyUri' | i18n}}\" (click)=\"copy(u.uri, 'uri', 'URI')\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> </div> <div class=\"col-5 form-group\"> <div class=\"d-flex\"> <label for=\"loginUriMatch{{i}}\"> {{'matchDetection' | i18n}} </label> <a class=\"ml-auto\" href=\"https://help.bitwarden.com/article/uri-match-detection/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <div class=\"d-flex\"> <select class=\"form-control overflow-hidden\" id=\"loginUriMatch{{i}}\" name=\"Login.Uris[{{i}}].Match\" [(ngModel)]=\"u.match\" (change)=\"loginUriMatchChanged(u)\" [disabled]=\"cipher.isDeleted || viewOnly\"> <option *ngFor=\"let o of uriMatchOptions\" [ngValue]=\"o.value\">{{o.name}} </option> </select> <button type=\"button\" class=\"btn btn-link text-danger ml-2\" (click)=\"removeUri(u)\" appA11yTitle=\"{{'remove' | i18n}}\" *ngIf=\"!cipher.isDeleted && !viewOnly\"> <i class=\"fa fa-minus-circle fa-lg\" aria-hidden=\"true\"></i> </button> </div> </div> </div> </ng-container> <a href=\"#\" appStopClick (click)=\"addUri()\" class=\"d-inline-block mb-3\" *ngIf=\"!cipher.isDeleted && !viewOnly\"> <i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{'newUri' | i18n}} </a> </ng-container> <ng-container *ngIf=\"cipher.type === cipherType.Card\"> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"cardCardholderName\">{{'cardholderName' | i18n}}</label> <input id=\"cardCardholderName\" class=\"form-control\" type=\"text\" name=\"Card.CardCardholderName\" [(ngModel)]=\"cipher.card.cardholderName\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-6 form-group\"> <label for=\"cardBrand\">{{'brand' | i18n}}</label> <select id=\"cardBrand\" class=\"form-control\" name=\"Card.Brand\" [(ngModel)]=\"cipher.card.brand\" [disabled]=\"cipher.isDeleted || viewOnly\"> <option *ngFor=\"let o of cardBrandOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"cardNumber\">{{'number' | i18n}}</label> <div class=\"input-group\"> <input id=\"cardNumber\" class=\"form-control text-monospace\" type=\"{{showCardNumber ? 'text' : 'password'}}\" name=\"Card.Number\" [(ngModel)]=\"cipher.card.number\" appInputVerbatim autocomplete=\"new-password\" [disabled]=\"cipher.isDeleted || viewOnly\"> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"toggleCardNumber()\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showCardNumber, 'fa-eye-slash': showCardNumber}\"></i> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'copyNumber' | i18n}}\" (click)=\"copy(cipher.card.number, 'number', 'Number')\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> </div> <div class=\"col form-group\"> <label for=\"cardExpMonth\">{{'expirationMonth' | i18n}}</label> <select id=\"cardExpMonth\" class=\"form-control\" name=\"Card.ExpMonth\" [(ngModel)]=\"cipher.card.expMonth\" [disabled]=\"cipher.isDeleted || viewOnly\"> <option *ngFor=\"let o of cardExpMonthOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> <div class=\"col form-group\"> <label for=\"cardExpYear\">{{'expirationYear' | i18n}}</label> <input id=\"cardExpYear\" class=\"form-control\" type=\"text\" name=\"Card.ExpYear\" [(ngModel)]=\"cipher.card.expYear\" placeholder=\"{{'ex' | i18n}} 2019\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"cardCode\">{{'securityCode' | i18n}}</label> <div class=\"input-group\"> <input id=\"cardCode\" class=\"form-control text-monospace\" type=\"{{showCardCode ? 'text' : 'password'}}\" name=\"Card.Code\" [(ngModel)]=\"cipher.card.code\" appInputVerbatim autocomplete=\"new-password\" [disabled]=\"cipher.isDeleted || viewOnly\"> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"toggleCardCode()\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showCardCode, 'fa-eye-slash': showCardCode}\"></i> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'securityCode' | i18n}}\" (click)=\"copy(cipher.card.code, 'securityCode', 'Security Code')\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> </div> </div> </ng-container> <ng-container *ngIf=\"cipher.type === cipherType.Identity\"> <div class=\"row\"> <div class=\"col-4 form-group\"> <label for=\"idTitle\">{{'title' | i18n}}</label> <select id=\"idTitle\" class=\"form-control\" name=\"Identity.Title\" [(ngModel)]=\"cipher.identity.title\" [disabled]=\"cipher.isDeleted || viewOnly\"> <option *ngFor=\"let o of identityTitleOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> </div> <div class=\"row\"> <div class=\"col-4 form-group\"> <label for=\"idFirstName\">{{'firstName' | i18n}}</label> <input id=\"idFirstName\" class=\"form-control\" type=\"text\" name=\"Identity.FirstName\" [(ngModel)]=\"cipher.identity.firstName\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-4 form-group\"> <label for=\"idMiddleName\">{{'middleName' | i18n}}</label> <input id=\"idMiddleName\" class=\"form-control\" type=\"text\" name=\"Identity.MiddleName\" [(ngModel)]=\"cipher.identity.middleName\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-4 form-group\"> <label for=\"idLastName\">{{'lastName' | i18n}}</label> <input id=\"idLastName\" class=\"form-control\" type=\"text\" name=\"Identity.LastName\" [(ngModel)]=\"cipher.identity.lastName\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-4 form-group\"> <label for=\"idUsername\">{{'username' | i18n}}</label> <input id=\"idUsername\" class=\"form-control\" type=\"text\" name=\"Identity.Username\" [(ngModel)]=\"cipher.identity.username\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-4 form-group\"> <label for=\"idCompany\">{{'company' | i18n}}</label> <input id=\"idCompany\" class=\"form-control\" type=\"text\" name=\"Identity.Company\" [(ngModel)]=\"cipher.identity.company\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-4 form-group\"> <label for=\"idSsn\">{{'ssn' | i18n}}</label> <input id=\"idSsn\" class=\"form-control\" type=\"text\" name=\"Identity.SSN\" [(ngModel)]=\"cipher.identity.ssn\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-4 form-group\"> <label for=\"idPassportNumber\">{{'passportNumber' | i18n}}</label> <input id=\"idPassportNumber\" class=\"form-control\" type=\"text\" name=\"Identity.PassportNumber\" [(ngModel)]=\"cipher.identity.passportNumber\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-4 form-group\"> <label for=\"idLicenseNumber\">{{'licenseNumber' | i18n}}</label> <input id=\"idLicenseNumber\" class=\"form-control\" type=\"text\" name=\"Identity.LicenseNumber\" [(ngModel)]=\"cipher.identity.licenseNumber\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"idEmail\">{{'email' | i18n}}</label> <input id=\"idEmail\" class=\"form-control\" type=\"text\" name=\"Identity.Email\" [(ngModel)]=\"cipher.identity.email\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-6 form-group\"> <label for=\"idPhone\">{{'phone' | i18n}}</label> <input id=\"idPhone\" class=\"form-control\" type=\"text\" name=\"Identity.Phone\" [(ngModel)]=\"cipher.identity.phone\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"idAddress1\">{{'address1' | i18n}}</label> <input id=\"idAddress1\" class=\"form-control\" type=\"text\" name=\"Identity.Address1\" [(ngModel)]=\"cipher.identity.address1\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-6 form-group\"> <label for=\"idAddress2\">{{'address2' | i18n}}</label> <input id=\"idAddress2\" class=\"form-control\" type=\"text\" name=\"Identity.Address2\" [(ngModel)]=\"cipher.identity.address2\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"idAddress3\">{{'address3' | i18n}}</label> <input id=\"idAddress3\" class=\"form-control\" type=\"text\" name=\"Identity.Address3\" [(ngModel)]=\"cipher.identity.address3\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-6 form-group\"> <label for=\"idCity\">{{'cityTown' | i18n}}</label> <input id=\"idCity\" class=\"form-control\" type=\"text\" name=\"Identity.City\" [(ngModel)]=\"cipher.identity.city\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"idState\">{{'stateProvince' | i18n}}</label> <input id=\"idState\" class=\"form-control\" type=\"text\" name=\"Identity.State\" [(ngModel)]=\"cipher.identity.state\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-6 form-group\"> <label for=\"idPostalCode\">{{'zipPostalCode' | i18n}}</label> <input id=\"idPostalCode\" class=\"form-control\" type=\"text\" name=\"Identity.PostalCode\" [(ngModel)]=\"cipher.identity.postalCode\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"idCountry\">{{'country' | i18n}}</label> <input id=\"idCountry\" class=\"form-control\" type=\"text\" name=\"Identity.Country\" [(ngModel)]=\"cipher.identity.country\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> </div> </ng-container> <div class=\"form-group\"> <label for=\"notes\">{{'notes' | i18n}}</label> <textarea id=\"notes\" name=\"Notes\" rows=\"6\" [(ngModel)]=\"cipher.notes\" [disabled]=\"cipher.isDeleted || viewOnly\" class=\"form-control\"></textarea> </div> <app-vault-add-edit-custom-fields [cipher]=\"cipher\" [thisCipherType]=\"cipher.type\" [viewOnly]=\"viewOnly\" [copy]=\"copy.bind(this)\"></app-vault-add-edit-custom-fields> <ng-container *ngIf=\"allowOwnershipAssignment()\"> <h3 class=\"mt-4\">{{'ownership' | i18n}}</h3> <div class=\"row\"> <div class=\"col-5\"> <label for=\"organizationId\">{{'whoOwnsThisItem' | i18n}}</label> <select id=\"organizationId\" class=\"form-control\" name=\"OrganizationId\" [(ngModel)]=\"cipher.organizationId\" (change)=\"organizationChanged()\" [disabled]=\"cipher.isDeleted || viewOnly\"> <option *ngFor=\"let o of ownershipOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> </div> </ng-container> <ng-container *ngIf=\"(!editMode || cloneMode) && cipher.organizationId\"> <h3 class=\"mt-4\">{{'collections' | i18n}}</h3> <div *ngIf=\"!collections || !collections.length\"> {{'noCollectionsInList' | i18n}} </div> <ng-container *ngIf=\"collections && collections.length\"> <div class=\"form-check\" *ngFor=\"let c of collections; let i = index\"> <input class=\"form-check-input\" type=\"checkbox\" [(ngModel)]=\"c.checked\" id=\"collection-{{i}}\" name=\"Collection[{{i}}].Checked\" [disabled]=\"cipher.isDeleted || viewOnly\"> <label class=\"form-check-label\" for=\"collection-{{i}}\">{{c.name}}</label> </div> </ng-container> </ng-container> <ng-container *ngIf=\"editMode\"> <div class=\"small text-muted mt-4\"> <div> <b class=\"font-weight-semibold\">{{'dateUpdated' | i18n}}:</b> {{cipher.revisionDate | date:'medium'}} </div> <div *ngIf=\"showRevisionDate\"> <b class=\"font-weight-semibold\">{{'datePasswordUpdated' | i18n}}:</b> {{cipher.passwordRevisionDisplayDate | date:'medium'}} </div> <div *ngIf=\"hasPasswordHistory\"> <b class=\"font-weight-semibold\">{{'passwordHistory' | i18n}}:</b> <a href=\"#\" appStopClick (click)=\"viewHistory()\" title=\"{{'view' | i18n}}\"> {{cipher.passwordHistory.length}} </a> </div> <div class=\"ml-3\" *ngIf=\"viewingPasswordHistory\"> <div *ngFor=\"let ph of cipher.passwordHistory\"> {{ph.lastUsedDate | date:'short'}} - <span class=\"password-wrapper text-monospace ml-2\">{{ph.password}}</span> </div> </div> </div> </ng-container> <ng-container *ngIf=\"canUseReprompt\"> <h3 class=\"mt-4\">{{'options' | i18n}}</h3> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" [ngModel]=\"reprompt\" (change)=\"repromptChanged()\" id=\"passwordPrompt\" name=\"passwordPrompt\" [disabled]=\"cipher.isDeleted || viewOnly\"> <label class=\"form-check-label\" for=\"passwordPrompt\">{{'passwordPrompt' | i18n}}</label> <a target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\" href=\"https://bitwarden.com/help/article/managing-items/#protect-individual-items\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\" *ngIf=\"!viewOnly\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{(cipher?.isDeleted ? 'restore' : 'save') | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\"> {{(viewOnly ? 'close' : 'cancel') | i18n}} </button> <div class=\"ml-auto\" *ngIf=\"cipher && !viewOnly\"> <button *ngIf=\"!organization && !cipher.isDeleted\" type=\"button\" (click)=\"toggleFavorite()\" class=\"btn btn-link\" appA11yTitle=\"{{(cipher.favorite ? 'unfavorite' : 'favorite') | i18n}}\"> <i class=\"fa fa-lg\" [ngClass]=\"{'fa-star': cipher.favorite, 'fa-star-o': !cipher.favorite}\" aria-hidden=\"true\"></i> </button> <button #deleteBtn type=\"button\" (click)=\"delete()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{(cipher.isDeleted ? 'permanentlyDelete' : 'delete') | i18n}}\" *ngIf=\"editMode && !cloneMode\" [disabled]=\"deleteBtn.loading\" [appApiAction]=\"deletePromise\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </div> </div> </form> </div> </div> ","import { Importer } from '../importers/importer';\n\nexport interface ImportOption {\n    id: string;\n    name: string;\n}\nexport abstract class ImportService {\n    featuredImportOptions: ImportOption[];\n    regularImportOptions: ImportOption[];\n    getImportOptions: () => ImportOption[];\n    import: (importer: Importer, fileContents: string, organizationId?: string) => Promise<Error>;\n    getImporter: (format: string, organizationId: string) => Importer;\n}\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CiphersComponent as BaseCiphersComponent } from 'jslib-angular/components/ciphers.component';\n\nimport { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType';\nimport { CipherType } from 'jslib-common/enums/cipherType';\nimport { EventType } from 'jslib-common/enums/eventType';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nconst MaxCheckedCount = 500;\n\n@Component({\n    selector: 'app-vault-ciphers',\n    templateUrl: 'ciphers.component.html',\n})\nexport class CiphersComponent extends BaseCiphersComponent implements OnDestroy {\n    @Input() showAddNew = true;\n    @Output() onAttachmentsClicked = new EventEmitter<CipherView>();\n    @Output() onShareClicked = new EventEmitter<CipherView>();\n    @Output() onCollectionsClicked = new EventEmitter<CipherView>();\n    @Output() onCloneClicked = new EventEmitter<CipherView>();\n\n    pagedCiphers: CipherView[] = [];\n    pageSize = 200;\n    cipherType = CipherType;\n    actionPromise: Promise<any>;\n    userHasPremiumAccess = false;\n\n    private didScroll = false;\n    private pagedCiphersCount = 0;\n    private refreshing = false;\n\n    constructor(searchService: SearchService, protected toasterService: ToasterService,\n        protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n        protected cipherService: CipherService, protected eventService: EventService,\n        protected totpService: TotpService, protected userService: UserService,\n        protected passwordRepromptService: PasswordRepromptService, private logService: LogService) {\n        super(searchService);\n    }\n\n    async ngOnInit() {\n        this.userHasPremiumAccess = await this.userService.canAccessPremium();\n    }\n\n    ngOnDestroy() {\n        this.selectAll(false);\n    }\n\n    loadMore() {\n        if (this.ciphers.length <= this.pageSize) {\n            return;\n        }\n        const pagedLength = this.pagedCiphers.length;\n        let pagedSize = this.pageSize;\n        if (this.refreshing && pagedLength === 0 && this.pagedCiphersCount > this.pageSize) {\n            pagedSize = this.pagedCiphersCount;\n        }\n        if (this.ciphers.length > pagedLength) {\n            this.pagedCiphers = this.pagedCiphers.concat(this.ciphers.slice(pagedLength, pagedLength + pagedSize));\n        }\n        this.pagedCiphersCount = this.pagedCiphers.length;\n        this.didScroll = this.pagedCiphers.length > this.pageSize;\n    }\n\n    async refresh() {\n        try {\n            this.refreshing = true;\n            await this.reload(this.filter, this.deleted);\n        } finally {\n            this.refreshing = false;\n        }\n    }\n\n    isPaging() {\n        const searching = this.isSearching();\n        if (searching && this.didScroll) {\n            this.resetPaging();\n        }\n        return !searching && this.ciphers.length > this.pageSize;\n    }\n\n    async resetPaging() {\n        this.pagedCiphers = [];\n        this.loadMore();\n    }\n\n    async doSearch(indexedCiphers?: CipherView[]) {\n        this.ciphers = await this.searchService.searchCiphers(this.searchText, [this.filter, this.deletedFilter], indexedCiphers);\n        this.resetPaging();\n    }\n\n    launch(uri: string) {\n        this.platformUtilsService.launchUri(uri);\n    }\n\n    async attachments(c: CipherView) {\n        if (!await this.repromptCipher(c)) {\n            return;\n        }\n        this.onAttachmentsClicked.emit(c);\n    }\n\n    async share(c: CipherView) {\n        if (!await this.repromptCipher(c)) {\n            return;\n        }\n        this.onShareClicked.emit(c);\n    }\n\n    collections(c: CipherView) {\n        this.onCollectionsClicked.emit(c);\n    }\n\n    async clone(c: CipherView) {\n        if (!await this.repromptCipher(c)) {\n            return;\n        }\n        this.onCloneClicked.emit(c);\n    }\n\n    async delete(c: CipherView): Promise<boolean> {\n        if (!await this.repromptCipher(c)) {\n            return;\n        }\n        if (this.actionPromise != null) {\n            return;\n        }\n        const permanent = c.isDeleted;\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t(permanent ? 'permanentlyDeleteItemConfirmation' : 'deleteItemConfirmation'),\n            this.i18nService.t(permanent ? 'permanentlyDeleteItem' : 'deleteItem'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.actionPromise = this.deleteCipher(c.id, permanent);\n            await this.actionPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t(permanent ? 'permanentlyDeletedItem'\n                : 'deletedItem'));\n            this.refresh();\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.actionPromise = null;\n    }\n\n    async restore(c: CipherView): Promise<boolean> {\n        if (this.actionPromise != null || !c.isDeleted) {\n            return;\n        }\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('restoreItemConfirmation'),\n            this.i18nService.t('restoreItem'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.actionPromise = this.cipherService.restoreWithServer(c.id);\n            await this.actionPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('restoredItem'));\n            this.refresh();\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.actionPromise = null;\n    }\n\n    async copy(cipher: CipherView, value: string, typeI18nKey: string, aType: string) {\n        if (this.passwordRepromptService.protectedFields().includes(aType) && !await this.repromptCipher(cipher)) {\n            return;\n        }\n\n        if (value == null || aType === 'TOTP' && !this.displayTotpCopyButton(cipher)) {\n            return;\n        } else if (value === cipher.login.totp) {\n            value = await this.totpService.getCode(value);\n        }\n\n        if (!cipher.viewPassword) {\n            return;\n        }\n\n        this.platformUtilsService.copyToClipboard(value, { window: window });\n        this.toasterService.popAsync('info', null,\n            this.i18nService.t('valueCopied', this.i18nService.t(typeI18nKey)));\n\n        if (typeI18nKey === 'password' || typeI18nKey === 'verificationCodeTotp') {\n            this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, cipher.id);\n        } else if (typeI18nKey === 'securityCode') {\n            this.eventService.collect(EventType.Cipher_ClientCopiedCardCode, cipher.id);\n        }\n    }\n\n    selectAll(select: boolean) {\n        if (select) {\n            this.selectAll(false);\n        }\n        const selectCount = select && this.ciphers.length > MaxCheckedCount\n            ? MaxCheckedCount\n            : this.ciphers.length;\n        for (let i = 0; i < selectCount; i++) {\n            this.checkCipher(this.ciphers[i], select);\n        }\n    }\n\n    checkCipher(c: CipherView, select?: boolean) {\n        (c as any).checked = select == null ? !(c as any).checked : select;\n    }\n\n    getSelected(): CipherView[] {\n        if (this.ciphers == null) {\n            return [];\n        }\n        return this.ciphers.filter(c => !!(c as any).checked);\n    }\n\n    getSelectedIds(): string[] {\n        return this.getSelected().map(c => c.id);\n    }\n\n    displayTotpCopyButton(cipher: CipherView) {\n        return (cipher?.login?.hasTotp ?? false) &&\n            (cipher.organizationUseTotp || this.userHasPremiumAccess);\n    }\n\n    async selectCipher(cipher: CipherView) {\n        if (await this.repromptCipher(cipher)) {\n            super.selectCipher(cipher);\n        }\n    }\n\n    protected deleteCipher(id: string, permanent: boolean) {\n        return permanent ? this.cipherService.deleteWithServer(id) : this.cipherService.softDeleteWithServer(id);\n    }\n\n    protected showFixOldAttachments(c: CipherView) {\n        return c.hasOldAttachments && c.organizationId == null;\n    }\n\n    protected async repromptCipher(c: CipherView) {\n        return c.reprompt === CipherRepromptType.None || await this.passwordRepromptService.showPasswordPrompt();\n    }\n}\n","<ng-container *ngIf=\"(isPaging() ? pagedCiphers : ciphers) as filteredCiphers\"> <table class=\"table table-hover table-list table-ciphers\" *ngIf=\"filteredCiphers.length\" infiniteScroll [infiniteScrollDistance]=\"1\" [infiniteScrollDisabled]=\"!isPaging()\" (scrolled)=\"loadMore()\"> <tbody> <tr *ngFor=\"let c of filteredCiphers\"> <td (click)=\"checkCipher(c)\" class=\"table-list-checkbox\"> <input type=\"checkbox\" [(ngModel)]=\"c.checked\" appStopProp> </td> <td (click)=\"checkCipher(c)\" class=\"table-list-icon\"> <app-vault-icon [cipher]=\"c\"></app-vault-icon> </td> <td (click)=\"checkCipher(c)\" class=\"reduced-lh wrap\"> <a href=\"#\" appStopClick appStopProp (click)=\"selectCipher(c)\" title=\"{{'editItem' | i18n}}\">{{c.name}}</a> <ng-container *ngIf=\"!organization && c.organizationId\"> <i class=\"fa fa-cube\" appStopProp title=\"{{'shared' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'shared' | i18n}}</span> </ng-container> <ng-container *ngIf=\"c.hasAttachments\"> <i class=\"fa fa-paperclip\" appStopProp title=\"{{'attachments' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachments' | i18n}}</span> <ng-container *ngIf=\"showFixOldAttachments(c)\"> <i class=\"fa fa-exclamation-triangle text-warning\" appStopProp title=\"{{'attachmentsNeedFix' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachmentsNeedFix' | i18n}}</span> </ng-container> </ng-container> <br> <small appStopProp>{{c.subTitle}}</small> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" id=\"dropdownMenuButton\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"dropdownMenuButton\"> <ng-container *ngIf=\"c.type === cipherType.Login && !c.isDeleted\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"copy(c, c.login.username, 'username', 'Username')\"> <i class=\"fa fa-fw fa-clone\" aria-hidden=\"true\"></i> {{'copyUsername' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"copy(c, c.login.password, 'password', 'Password')\" *ngIf=\"c.viewPassword\"> <i class=\"fa fa-fw fa-clone\" aria-hidden=\"true\"></i> {{'copyPassword' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"copy(c, c.login.totp, 'verificationCodeTotp', 'TOTP')\" *ngIf=\"displayTotpCopyButton(c)\"> <i class=\"fa fa-fw fa-clone\" aria-hidden=\"true\"></i> {{'copyVerificationCode' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick *ngIf=\"c.login.canLaunch\" (click)=\"launch(c.login.launchUri)\"> <i class=\"fa fa-fw fa-share-square-o\" aria-hidden=\"true\"></i> {{'launch' | i18n}} </a> </ng-container> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"attachments(c)\"> <i class=\"fa fa-fw fa-paperclip\" aria-hidden=\"true\"></i> {{'attachments' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick *ngIf=\"((!organization && !c.organizationId) || organization) && !c.isDeleted\" (click)=\"clone(c)\"> <i class=\"fa fa-fw fa-files-o\" aria-hidden=\"true\"></i> {{'clone' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick *ngIf=\"!organization && !c.organizationId && !c.isDeleted\" (click)=\"share(c)\"> <i class=\"fa fa-fw fa-arrow-circle-o-right\" aria-hidden=\"true\"></i> {{'moveToOrganization' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick *ngIf=\"c.organizationId && !c.isDeleted\" (click)=\"collections(c)\"> <i class=\"fa fa-fw fa-cubes\" aria-hidden=\"true\"></i> {{'collections' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick *ngIf=\"c.organizationId && accessEvents\" (click)=\"events(c)\"> <i class=\"fa fa-fw fa-file-text-o\" aria-hidden=\"true\"></i> {{'eventLogs' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"restore(c)\" *ngIf=\"c.isDeleted\"> <i class=\"fa fa-fw fa-undo\" aria-hidden=\"true\"></i> {{'restore' | i18n}} </a> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick (click)=\"delete(c)\"> <i class=\"fa fa-fw fa-trash-o\" aria-hidden=\"true\"></i> {{(c.isDeleted ? 'permanentlyDelete' : 'delete') | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> <div class=\"no-items\" *ngIf=\"!filteredCiphers.length\"> <ng-container *ngIf=\"!loaded\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"loaded\"> <p>{{'noItemsInList' | i18n}}</p> <button (click)=\"addCipher()\" class=\"btn btn-outline-primary\" *ngIf=\"showAddNew\"> <i class=\"fa fa-plus fa-fw\"></i>{{'addItem' | i18n}}</button> </ng-container> </div> </ng-container> ","import { OrganizationData } from '../data/organizationData';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { ProductType } from '../../enums/productType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\n\nexport class Organization {\n    id: string;\n    name: string;\n    status: OrganizationUserStatusType;\n    type: OrganizationUserType;\n    enabled: boolean;\n    usePolicies: boolean;\n    useGroups: boolean;\n    useDirectory: boolean;\n    useEvents: boolean;\n    useTotp: boolean;\n    use2fa: boolean;\n    useApi: boolean;\n    useSso: boolean;\n    useKeyConnector: boolean;\n    useResetPassword: boolean;\n    selfHost: boolean;\n    usersGetPremium: boolean;\n    seats: number;\n    maxCollections: number;\n    maxStorageGb?: number;\n    ssoBound: boolean;\n    identifier: string;\n    permissions: PermissionsApi;\n    resetPasswordEnrolled: boolean;\n    userId: string;\n    hasPublicAndPrivateKeys: boolean;\n    providerId: string;\n    providerName: string;\n    isProviderUser: boolean;\n    familySponsorshipFriendlyName: string;\n    familySponsorshipAvailable: boolean;\n    planProductType: ProductType;\n    keyConnectorEnabled: boolean;\n    keyConnectorUrl: string;\n\n    constructor(obj?: OrganizationData) {\n        if (obj == null) {\n            return;\n        }\n\n        this.id = obj.id;\n        this.name = obj.name;\n        this.status = obj.status;\n        this.type = obj.type;\n        this.enabled = obj.enabled;\n        this.usePolicies = obj.usePolicies;\n        this.useGroups = obj.useGroups;\n        this.useDirectory = obj.useDirectory;\n        this.useEvents = obj.useEvents;\n        this.useTotp = obj.useTotp;\n        this.use2fa = obj.use2fa;\n        this.useApi = obj.useApi;\n        this.useSso = obj.useSso;\n        this.useKeyConnector = obj.useKeyConnector;\n        this.useResetPassword = obj.useResetPassword;\n        this.selfHost = obj.selfHost;\n        this.usersGetPremium = obj.usersGetPremium;\n        this.seats = obj.seats;\n        this.maxCollections = obj.maxCollections;\n        this.maxStorageGb = obj.maxStorageGb;\n        this.ssoBound = obj.ssoBound;\n        this.identifier = obj.identifier;\n        this.permissions = obj.permissions;\n        this.resetPasswordEnrolled = obj.resetPasswordEnrolled;\n        this.userId = obj.userId;\n        this.hasPublicAndPrivateKeys = obj.hasPublicAndPrivateKeys;\n        this.providerId = obj.providerId;\n        this.providerName = obj.providerName;\n        this.isProviderUser = obj.isProviderUser;\n        this.familySponsorshipFriendlyName = obj.familySponsorshipFriendlyName;\n        this.familySponsorshipAvailable = obj.familySponsorshipAvailable;\n        this.planProductType = obj.planProductType;\n        this.keyConnectorEnabled = obj.keyConnectorEnabled;\n        this.keyConnectorUrl = obj.keyConnectorUrl;\n    }\n\n    get canAccess() {\n        if (this.type === OrganizationUserType.Owner) {\n            return true;\n        }\n        return this.enabled && this.status === OrganizationUserStatusType.Confirmed;\n    }\n\n    get isManager() {\n        return this.type === OrganizationUserType.Manager || this.type === OrganizationUserType.Owner ||\n            this.type === OrganizationUserType.Admin;\n    }\n\n    get isAdmin() {\n        return this.type === OrganizationUserType.Owner || this.type === OrganizationUserType.Admin;\n    }\n\n    get isOwner() {\n        return this.type === OrganizationUserType.Owner || this.isProviderUser;\n    }\n\n    get canAccessEventLogs() {\n        return this.isAdmin || this.permissions.accessEventLogs;\n    }\n\n    get canAccessImportExport() {\n        return this.isAdmin || this.permissions.accessImportExport;\n    }\n\n    get canAccessReports() {\n        return this.isAdmin || this.permissions.accessReports;\n    }\n\n    get canCreateNewCollections() {\n        return this.isManager || (this.permissions.createNewCollections ?? this.permissions.manageAllCollections);\n    }\n\n    get canEditAnyCollection() {\n        return this.isAdmin || (this.permissions.editAnyCollection ?? this.permissions.manageAllCollections);\n    }\n\n    get canDeleteAnyCollection() {\n        return this.isAdmin || (this.permissions.deleteAnyCollection ?? this.permissions.manageAllCollections);\n    }\n\n    get canViewAllCollections() {\n        return this.canCreateNewCollections || this.canEditAnyCollection || this.canDeleteAnyCollection;\n    }\n\n    get canEditAssignedCollections() {\n        return this.isManager || (this.permissions.editAssignedCollections ?? this.permissions.manageAssignedCollections);\n    }\n\n    get canDeleteAssignedCollections() {\n        return this.isManager || (this.permissions.deleteAssignedCollections ?? this.permissions.manageAssignedCollections);\n    }\n\n    get canViewAssignedCollections() {\n        return this.canDeleteAssignedCollections || this.canEditAssignedCollections;\n    }\n\n    get canManageGroups() {\n        return this.isAdmin || this.permissions.manageGroups;\n    }\n\n    get canManageSso() {\n        return this.isAdmin || this.permissions.manageSso;\n    }\n\n    get canManagePolicies() {\n        return this.isAdmin || this.permissions.managePolicies;\n    }\n\n    get canManageUsers() {\n        return this.isAdmin || this.permissions.manageUsers;\n    }\n\n    get canManageUsersPassword() {\n        return this.isAdmin || this.permissions.manageResetPassword;\n    }\n\n    get isExemptFromPolicies() {\n        return this.canManagePolicies;\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyResponse extends BaseResponse {\n    id: string;\n    organizationId: string;\n    type: PolicyType;\n    data: any;\n    enabled: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.organizationId = this.getResponseProperty('OrganizationId');\n        this.type = this.getResponseProperty('Type');\n        this.data = this.getResponseProperty('Data');\n        this.enabled = this.getResponseProperty('Enabled');\n    }\n}\n","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Provider } from 'jslib-common/models/domain/provider';\n\n@Component({\n    selector: 'app-navbar',\n    templateUrl: 'navbar.component.html',\n})\nexport class NavbarComponent implements OnInit {\n    selfHosted = false;\n    name: string;\n    email: string;\n    providers: Provider[] = [];\n\n    constructor(private messagingService: MessagingService, private platformUtilsService: PlatformUtilsService,\n        private tokenService: TokenService, private userService: UserService, private syncService: SyncService) {\n        this.selfHosted = this.platformUtilsService.isSelfHost();\n    }\n\n    async ngOnInit() {\n        this.name = await this.tokenService.getName();\n        this.email = await this.tokenService.getEmail();\n        if (this.name == null || this.name.trim() === '') {\n            this.name = this.email;\n        }\n\n        // Ensure provides are loaded\n        if (await this.syncService.getLastSync() == null) {\n            await this.syncService.fullSync(false);\n        }\n        this.providers = await this.userService.getAllProviders();\n    }\n\n    lock() {\n        this.messagingService.send('lockVault');\n    }\n\n    logOut() {\n        this.messagingService.send('logout');\n    }\n}\n","<nav class=\"navbar navbar-expand navbar-dark\" [ngClass]=\"{'nav-background-alt': selfHosted}\"> <div class=\"container\"> <a class=\"navbar-brand\" routerLink=\"/\" appA11yTitle=\"{{'pageTitle' | i18n : 'Bitwarden'}}\"> <i class=\"fa fa-shield\" aria-hidden=\"true\"></i> </a> <div class=\"collapse navbar-collapse\"> <ul class=\"navbar-nav\"> <li class=\"nav-item\" routerLinkActive=\"active\"> <a class=\"nav-link\" routerLink=\"/vault\">{{'myVault' | i18n}}</a> </li> <li class=\"nav-item\" routerLinkActive=\"active\"> <a class=\"nav-link\" routerLink=\"/sends\">{{'send' | i18n}}</a> </li> <ng-container *ngIf=\"providers.length >= 1\"> <li class=\"nav-item\" routerLinkActive=\"active\" *ngIf=\"providers.length == 1\"> <a class=\"nav-link\" [routerLink]=\"['/providers', providers[0].id]\">{{'provider' | i18n}}</a> </li> <li class=\"nav-item\" routerLinkActive=\"active\" *ngIf=\"providers.length > 1\"> <a class=\"nav-link\" routerLink=\"/providers\">{{'provider' | i18n}}</a> </li> </ng-container> <li class=\"nav-item\" routerLinkActive=\"active\"> <a class=\"nav-link\" routerLink=\"/tools\">{{'tools' | i18n}}</a> </li> <li class=\"nav-item\" routerLinkActive=\"active\"> <a class=\"nav-link\" routerLink=\"/settings\">{{'settings' | i18n}}</a> </li> </ul> </div> <ul class=\"navbar-nav flex-row ml-md-auto d-none d-md-flex\"> <li class=\"nav-item dropdown\"> <a class=\"nav-item nav-link dropdown-toggle\" href=\"#\" id=\"nav-profile\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"> <i class=\"fa fa-user-circle fa-lg\" aria-hidden=\"true\"></i> </a> <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"nav-profile\"> <div class=\"dropdown-item-text d-flex align-items-center\" *ngIf=\"name\" appStopProp> <app-avatar [data]=\"name\" [email]=\"email\" size=\"25\" fontSize=\"14\" [circle]=\"true\"></app-avatar> <div class=\"ml-2 overflow-hidden\"> <span>{{'loggedInAs' | i18n}}</span> <small class=\"text-muted\">{{name}}</small> </div> </div> <div class=\"dropdown-divider\"></div> <a class=\"dropdown-item\" href=\"#\" routerLink=\"/settings/account\"> <i class=\"fa fa-fw fa-user\" aria-hidden=\"true\"></i> {{'myAccount' | i18n}} </a> <a class=\"dropdown-item\" href=\"https://github.com/dani-garcia/vaultwarden\" target=\"_blank\" rel=\"noopener\"> <i class=\"fa fa-fw fa-question-circle\" aria-hidden=\"true\"></i> {{'getHelp' | i18n}} </a> <a class=\"dropdown-item\" href=\"https://bitwarden.com/download/\" target=\"_blank\" rel=\"noopener\"> <i class=\"fa fa-fw fa-download\" aria-hidden=\"true\"></i> {{'getApps' | i18n}} </a> <div class=\"dropdown-divider\"></div> <button type=\"button\" class=\"dropdown-item\" (click)=\"lock()\"> <i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i> {{'lockNow' | i18n}} </button> <button type=\"button\" class=\"dropdown-item\" (click)=\"logOut()\"> <i class=\"fa fa-fw fa-sign-out\" aria-hidden=\"true\"></i> {{'logOut' | i18n}} </button> </div> </li> </ul> </div> </nav> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Component({\n    selector: 'app-footer',\n    templateUrl: 'footer.component.html',\n})\nexport class FooterComponent implements OnInit {\n    version: string;\n    year: string = '2015';\n\n    constructor(private platformUtilsService: PlatformUtilsService) { }\n\n    async ngOnInit() {\n        this.year = new Date().getFullYear().toString();\n        this.version = await this.platformUtilsService.getApplicationVersion();\n    }\n}\n","<div class=\"container footer text-muted\"> <div class=\"row\"> <div class=\"col\"> &copy; {{year}}, Bitwarden Inc. (Powered by Vaultwarden) </div> <div class=\"col text-center\"></div> <div class=\"col text-right\"> {{'versionNumber' | i18n : version}} </div> </div> </div> ","export class OrganizationUserResetPasswordEnrollmentRequest {\n    resetPasswordKey: string;\n}\n","export enum HashPurpose {\n    ServerAuthorization = 1,\n    LocalAuthorization = 2,\n}\n","export class KeysRequest {\n    publicKey: string;\n    encryptedPrivateKey: string;\n\n    constructor(publicKey: string, encryptedPrivateKey: string) {\n        this.publicKey = publicKey;\n        this.encryptedPrivateKey = encryptedPrivateKey;\n    }\n}\n","import { PolicyResponse } from '../response/policyResponse';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class PolicyData {\n    id: string;\n    organizationId: string;\n    type: PolicyType;\n    data: any;\n    enabled: boolean;\n\n    constructor(response: PolicyResponse) {\n        this.id = response.id;\n        this.organizationId = response.organizationId;\n        this.type = response.type;\n        this.data = response.data;\n        this.enabled = response.enabled;\n    }\n}\n","import { Directive, OnInit } from '@angular/core';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\n@Directive()\nexport class ChangePasswordComponent implements OnInit {\n    masterPassword: string;\n    masterPasswordRetype: string;\n    formPromise: Promise<any>;\n    masterPasswordScore: number;\n    enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n    protected email: string;\n    protected kdf: KdfType;\n    protected kdfIterations: number;\n\n    private masterPasswordStrengthTimeout: any;\n\n    constructor(protected i18nService: I18nService, protected cryptoService: CryptoService,\n        protected messagingService: MessagingService, protected userService: UserService,\n        protected passwordGenerationService: PasswordGenerationService,\n        protected platformUtilsService: PlatformUtilsService, protected policyService: PolicyService) { }\n\n    async ngOnInit() {\n        this.email = await this.userService.getEmail();\n        this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n    }\n\n    async submit() {\n        if (!await this.strongPassword()) {\n            return;\n        }\n\n        if (!await this.setupSubmitActions()) {\n            return;\n        }\n\n        const email = await this.userService.getEmail();\n        if (this.kdf == null) {\n            this.kdf = await this.userService.getKdf();\n        }\n        if (this.kdfIterations == null) {\n            this.kdfIterations = await this.userService.getKdfIterations();\n        }\n        const key = await this.cryptoService.makeKey(this.masterPassword, email.trim().toLowerCase(),\n            this.kdf, this.kdfIterations);\n        const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n        let encKey: [SymmetricCryptoKey, EncString] = null;\n        const existingEncKey = await this.cryptoService.getEncKey();\n        if (existingEncKey == null) {\n            encKey = await this.cryptoService.makeEncKey(key);\n        } else {\n            encKey = await this.cryptoService.remakeEncKey(key);\n        }\n\n        await this.performSubmitActions(masterPasswordHash, key, encKey);\n    }\n\n    async setupSubmitActions(): Promise<boolean> {\n        // Override in sub-class\n        // Can be used for additional validation and/or other processes the should occur before changing passwords\n        return true;\n    }\n\n    async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey,\n        encKey: [SymmetricCryptoKey, EncString]) {\n        // Override in sub-class\n    }\n\n    async strongPassword(): Promise<boolean> {\n        if (this.masterPassword == null || this.masterPassword === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassRequired'));\n            return false;\n        }\n        if (this.masterPassword.length < 8) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassLength'));\n            return false;\n        }\n        if (this.masterPassword !== this.masterPasswordRetype) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassDoesntMatch'));\n            return false;\n        }\n\n        const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n            this.getPasswordStrengthUserInput());\n\n        if (this.enforcedPolicyOptions != null &&\n            !this.policyService.evaluateMasterPassword(\n                strengthResult.score,\n                this.masterPassword,\n                this.enforcedPolicyOptions)) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n            return false;\n        }\n\n        if (strengthResult != null && strengthResult.score < 3) {\n            const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n                this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n                'warning');\n            if (!result) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    updatePasswordStrength() {\n        if (this.masterPasswordStrengthTimeout != null) {\n            clearTimeout(this.masterPasswordStrengthTimeout);\n        }\n        this.masterPasswordStrengthTimeout = setTimeout(() => {\n            const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n                this.getPasswordStrengthUserInput());\n            this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n        }, 300);\n    }\n\n    async logOut() {\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('logOutConfirmation'),\n            this.i18nService.t('logOut'), this.i18nService.t('logOut'), this.i18nService.t('cancel'));\n        if (confirmed) {\n            this.messagingService.send('logout');\n        }\n    }\n\n    private getPasswordStrengthUserInput() {\n        let userInput: string[] = [];\n        const atPosition = this.email.indexOf('@');\n        if (atPosition > -1) {\n            userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n        }\n        return userInput;\n    }\n}\n","export class SelectionReadOnlyRequest {\n    id: string;\n    readOnly: boolean;\n    hidePasswords: boolean;\n\n    constructor(id: string, readOnly: boolean, hidePasswords: boolean) {\n        this.id = id;\n        this.readOnly = readOnly;\n        this.hidePasswords = hidePasswords;\n    }\n}\n","export enum ThemeType {\n    System = 'system',\n    Light = 'light',\n    Dark = 'dark',\n    Nord = 'nord',\n    SolarizedDark = 'solarizedDark',\n}\n","export enum ProductType {\n    Free = 0,\n    Families = 1,\n    Teams = 2,\n    Enterprise = 3,\n}\n","import { View } from './view';\n\nimport { LinkedMetadata } from '../../misc/linkedFieldOption.decorator';\n\nexport abstract class ItemView implements View {\n    linkedFieldOptions: Map<number, LinkedMetadata>;\n    abstract get subTitle(): string;\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { View } from './view';\n\nimport { LoginUri } from '../domain/loginUri';\n\nimport { Utils } from '../../misc/utils';\n\nconst CanLaunchWhitelist = [\n    'https://',\n    'http://',\n    'ssh://',\n    'ftp://',\n    'sftp://',\n    'irc://',\n    'vnc://',\n    // https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-uri\n    'rdp://', // Legacy RDP URI scheme\n    'ms-rd:', // Preferred RDP URI scheme\n    'chrome://',\n    'iosapp://',\n    'androidapp://',\n];\n\nexport class LoginUriView implements View {\n    match: UriMatchType = null;\n\n    // tslint:disable\n    private _uri: string = null;\n    private _domain: string = null;\n    private _hostname: string = null;\n    private _host: string = null;\n    private _canLaunch: boolean = null;\n    // tslint:enable\n\n    constructor(u?: LoginUri) {\n        if (!u) {\n            return;\n        }\n\n        this.match = u.match;\n    }\n\n    get uri(): string {\n        return this._uri;\n    }\n    set uri(value: string) {\n        this._uri = value;\n        this._domain = null;\n        this._canLaunch = null;\n    }\n\n    get domain(): string {\n        if (this._domain == null && this.uri != null) {\n            this._domain = Utils.getDomain(this.uri);\n            if (this._domain === '') {\n                this._domain = null;\n            }\n        }\n\n        return this._domain;\n    }\n\n    get hostname(): string {\n        if (this.match === UriMatchType.RegularExpression) {\n            return null;\n        }\n        if (this._hostname == null && this.uri != null) {\n            this._hostname = Utils.getHostname(this.uri);\n            if (this._hostname === '') {\n                this._hostname = null;\n            }\n        }\n\n        return this._hostname;\n    }\n\n    get host(): string {\n        if (this.match === UriMatchType.RegularExpression) {\n            return null;\n        }\n        if (this._host == null && this.uri != null) {\n            this._host = Utils.getHost(this.uri);\n            if (this._host === '') {\n                this._host = null;\n            }\n        }\n\n        return this._host;\n    }\n\n    get hostnameOrUri(): string {\n        return this.hostname != null ? this.hostname : this.uri;\n    }\n\n    get hostOrUri(): string {\n        return this.host != null ? this.host : this.uri;\n    }\n\n    get isWebsite(): boolean {\n        return this.uri != null && (this.uri.indexOf('http://') === 0 || this.uri.indexOf('https://') === 0 ||\n            (this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri)));\n    }\n\n    get canLaunch(): boolean {\n        if (this._canLaunch != null) {\n            return this._canLaunch;\n        }\n        if (this.uri != null && this.match !== UriMatchType.RegularExpression) {\n            const uri = this.launchUri;\n            for (let i = 0; i < CanLaunchWhitelist.length; i++) {\n                if (uri.indexOf(CanLaunchWhitelist[i]) === 0) {\n                    this._canLaunch = true;\n                    return this._canLaunch;\n                }\n            }\n        }\n        this._canLaunch = false;\n        return this._canLaunch;\n    }\n\n    get launchUri(): string {\n        return this.uri.indexOf('://') < 0 && Utils.tldEndingRegex.test(this.uri) ? ('http://' + this.uri) : this.uri;\n    }\n}\n","export enum UriMatchType {\n    Domain = 0,\n    Host = 1,\n    StartsWith = 2,\n    Exact = 3,\n    RegularExpression = 4,\n    Never = 5,\n}\n","import {\n    Component,\n    Input,\n} from '@angular/core';\n\nimport {\n    AddEditCustomFieldsComponent as BaseAddEditCustomFieldsComponent\n} from 'jslib-angular/components/add-edit-custom-fields.component';\n\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Component({\n    selector: 'app-vault-add-edit-custom-fields',\n    templateUrl: 'add-edit-custom-fields.component.html',\n})\nexport class AddEditCustomFieldsComponent extends BaseAddEditCustomFieldsComponent {\n    @Input() viewOnly: boolean;\n    @Input() copy: (value: string, typeI18nKey: string, aType: string) => void;\n\n    constructor(i18nService: I18nService, eventService: EventService) {\n        super(i18nService, eventService);\n    }\n}\n","<ng-container> <h3 class=\"mt-4\">{{'customFields' | i18n}}</h3> <div cdkDropList (cdkDropListDropped)=\"drop($event)\" *ngIf=\"cipher.hasFields\"> <div class=\"row\" cdkDrag *ngFor=\"let f of cipher.fields; let i = index; trackBy:trackByFunction\"> <div class=\"col-5 form-group\"> <div class=\"d-flex\"> <label for=\"fieldName{{i}}\">{{'name' | i18n}}</label> <a class=\"ml-auto\" href=\"https://help.bitwarden.com/article/custom-fields/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <input id=\"fieldName{{i}}\" type=\"text\" name=\"Field.Name{{i}}\" [(ngModel)]=\"f.name\" class=\"form-control\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <div class=\"col-7 form-group\"> <label for=\"fieldValue{{i}}\">{{'value' | i18n}}</label> <div class=\"d-flex align-items-center\"> <div class=\"input-group\" *ngIf=\"f.type === fieldType.Text\"> <input id=\"fieldValue{{i}}\" class=\"form-control\" type=\"text\" name=\"Field.Value{{i}}\" [(ngModel)]=\"f.value\" appInputVerbatim [disabled]=\"cipher.isDeleted || viewOnly\"> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'copyValue' | i18n}}\" (click)=\"copy(f.value, 'value', 'Field')\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> <div class=\"input-group\" *ngIf=\"f.type === fieldType.Hidden\"> <input id=\"fieldValue{{i}}\" type=\"{{f.showValue ? 'text' : 'password'}}\" name=\"Field.Value{{i}}\" [(ngModel)]=\"f.value\" class=\"form-control text-monospace\" appInputVerbatim autocomplete=\"new-password\" [disabled]=\"cipher.isDeleted || viewOnly || (!cipher.viewPassword && !f.newField)\"> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"toggleFieldValue(f)\" [disabled]=\"!cipher.viewPassword && !f.newField\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !f.showValue, 'fa-eye-slash': f.showValue}\"> </i> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'copyValue' | i18n}}\" (click)=\"copy(f.value, 'value', f.type === fieldType.Hidden ? 'H_Field' : 'Field')\" [disabled]=\"!cipher.viewPassword && !f.newField\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> <div class=\"input-group\" *ngIf=\"f.type === fieldType.Linked\"> <select id=\"fieldValue{{i}}\" name=\"Field.Value{{i}}\" class=\"form-control\" [(ngModel)]=\"f.linkedId\" *ngIf=\"f.type === fieldType.Linked && cipher.linkedFieldOptions != null\" [disabled]=\"cipher.isDeleted || viewOnly\"> <option *ngFor=\"let o of linkedFieldOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> <div class=\"flex-fill\"> <input id=\"fieldValue{{i}}\" name=\"Field.Value{{i}}\" type=\"checkbox\" [(ngModel)]=\"f.value\" *ngIf=\"f.type === fieldType.Boolean\" appTrueFalseValue trueValue=\"true\" falseValue=\"false\" [disabled]=\"cipher.isDeleted || viewOnly\"> </div> <button type=\"button\" class=\"btn btn-link text-danger ml-2\" (click)=\"removeField(f)\" appA11yTitle=\"{{'remove' | i18n}}\" *ngIf=\"!cipher.isDeleted && !viewOnly\"> <i class=\"fa fa-minus-circle fa-lg\" aria-hidden=\"true\"></i> </button> <button type=\"button\" class=\"btn btn-link text-muted cursor-move\" appA11yTitle=\"{{'dragToSort' | i18n}}\" *ngIf=\"!cipher.isDeleted && !viewOnly\"> <i class=\"fa fa-bars fa-lg\" aria-hidden=\"true\"></i> </button> </div> </div> </div> </div> <a href=\"#\" appStopClick (click)=\"addField()\" class=\"d-inline-block mb-2\" *ngIf=\"!cipher.isDeleted && !viewOnly\"> <i class=\"fa fa-plus-circle fa-fw\" aria-hidden=\"true\"></i> {{'newCustomField' | i18n}} </a> <div class=\"row\" *ngIf=\"!cipher.isDeleted && !viewOnly\"> <div class=\"col-5\"> <label for=\"addFieldType\" class=\"sr-only\">{{'type' | i18n}}</label> <select id=\"addFieldType\" class=\"form-control\" name=\"AddFieldType\" [(ngModel)]=\"addFieldType\"> <option *ngFor=\"let o of addFieldTypeOptions\" [ngValue]=\"o.value\">{{o.name}}</option> <option *ngIf=\"cipher.linkedFieldOptions != null\" [ngValue]=\"addFieldLinkedTypeOption.value\"> {{addFieldLinkedTypeOption.name}} </option> </select> </div> </div> </ng-container> ","import {\n    Component,\n    EventEmitter,\n    Output,\n} from '@angular/core';\n\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { GroupingsComponent as BaseGroupingsComponent } from 'jslib-angular/components/groupings.component';\n\n@Component({\n    selector: 'app-vault-groupings',\n    templateUrl: 'groupings.component.html',\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n    @Output() onSearchTextChanged = new EventEmitter<string>();\n\n    searchText: string = '';\n    searchPlaceholder: string = null;\n\n    constructor(collectionService: CollectionService, folderService: FolderService,\n        storageService: StorageService, userService: UserService) {\n        super(collectionService, folderService, storageService, userService);\n    }\n\n    searchTextChanged() {\n        this.onSearchTextChanged.emit(this.searchText);\n    }\n}\n","<div class=\"card vault-filters\"> <div class=\"card-header d-flex\"> {{'filters' | i18n}} <a class=\"ml-auto\" href=\"https://help.bitwarden.com/article/searching-vault/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <div class=\"card-body\"> <input type=\"search\" placeholder=\"{{searchPlaceholder || ('searchVault' | i18n)}}\" id=\"search\" class=\"form-control\" [(ngModel)]=\"searchText\" (input)=\"searchTextChanged()\" autocomplete=\"off\" appAutofocus> <ul class=\"fa-ul card-ul\"> <li [ngClass]=\"{active: selectedAll}\"> <a href=\"#\" appStopClick (click)=\"selectAll()\"> <i class=\"fa-li fa fa-fw fa-th\"></i>{{'allItems' | i18n}} </a> </li> <li [ngClass]=\"{active: selectedFavorites}\" *ngIf=\"showFavorites\"> <a href=\"#\" appStopClick (click)=\"selectFavorites()\"> <i class=\"fa-li fa fa-fw fa-star\"></i>{{'favorites' | i18n}} </a> </li> <li [ngClass]=\"{active: selectedTrash}\" *ngIf=\"showTrash\"> <a href=\"#\" appStopClick (click)=\"selectTrash()\"> <i class=\"fa-li fa fa-fw fa-trash-o\"></i>{{'trash' | i18n}} </a> </li> </ul> <h3>{{'types' | i18n}}</h3> <ul class=\"fa-ul card-ul\"> <li [ngClass]=\"{active: selectedType === cipherType.Login}\"> <a href=\"#\" appStopClick (click)=\"selectType(cipherType.Login)\"> <i class=\"fa-li fa fa-fw fa-globe\"></i>{{'typeLogin' | i18n}} </a> </li> <li [ngClass]=\"{active: selectedType === cipherType.Card}\"> <a href=\"#\" appStopClick (click)=\"selectType(cipherType.Card)\"> <i class=\"fa-li fa fa-fw fa-credit-card\"></i>{{'typeCard' | i18n}} </a> </li> <li [ngClass]=\"{active: selectedType === cipherType.Identity}\"> <a href=\"#\" appStopClick (click)=\"selectType(cipherType.Identity)\"> <i class=\"fa-li fa fa-fw fa-id-card-o\"></i>{{'typeIdentity' | i18n}} </a> </li> <li [ngClass]=\"{active: selectedType === cipherType.SecureNote}\"> <a href=\"#\" appStopClick (click)=\"selectType(cipherType.SecureNote)\"> <i class=\"fa-li fa fa-fw fa-sticky-note-o\"></i>{{'typeSecureNote' | i18n}} </a> </li> </ul> <p *ngIf=\"!loaded\" class=\"text-muted\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> <ng-container *ngIf=\"loaded\"> <ng-container *ngIf=\"showFolders\"> <h3 class=\"d-flex\"> {{'folders' | i18n}} <a href=\"#\" class=\"text-muted ml-auto\" appStopClick (click)=\"addFolder()\" appA11yTitle=\"{{'addFolder' | i18n}}\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> </a> </h3> <ul class=\"fa-ul card-ul\"> <ng-template #recursiveFolders let-folders> <li *ngFor=\"let f of folders\" [ngClass]=\"{active: selectedFolder && f.node.id === selectedFolderId}\"> <div class=\"d-flex\"> <i *ngIf=\"f.children.length\" class=\"fa-li fa\" title=\"{{'toggleCollapse' | i18n}}\" [ngClass]=\"{'fa-caret-right': isCollapsed(f.node), 'fa-caret-down': !isCollapsed(f.node)}\" (click)=\"collapse(f.node)\"></i> <a href=\"#\" class=\"text-break\" appStopClick (click)=\"selectFolder(f.node)\"> <i *ngIf=\"f.children.length === 0\" class=\"fa-li fa fa-folder-o\" aria-hidden=\"true\"></i>{{f.node.name}} </a> <a href=\"#\" class=\"text-muted ml-auto show-active\" appStopClick (click)=\"editFolder(f.node)\" appA11yTitle=\"{{'editFolder' | i18n}}\" *ngIf=\"f.node.id\"> <i class=\"fa fa-pencil fa-fw\" aria-hidden=\"true\"></i> </a> </div> <ul class=\"fa-ul card-ul carets\" *ngIf=\"f.children.length && !isCollapsed(f.node)\"> <ng-container *ngTemplateOutlet=\"recursiveFolders; context:{ $implicit: f.children }\"> </ng-container> </ul> </li> </ng-template> <ng-container *ngTemplateOutlet=\"recursiveFolders; context:{ $implicit: nestedFolders }\"> </ng-container> </ul> </ng-container> <ng-container *ngIf=\"showCollections && collections && collections.length\"> <h3>{{'collections' | i18n}}</h3> <ul class=\"fa-ul card-ul\"> <ng-template #recursiveCollections let-collections> <li *ngFor=\"let c of collections\" [ngClass]=\"{active: c.node.id === selectedCollectionId}\"> <i *ngIf=\"c.children.length\" class=\"fa-li fa\" title=\"{{'toggleCollapse' | i18n}}\" [ngClass]=\"{'fa-caret-right': isCollapsed(c.node), 'fa-caret-down': !isCollapsed(c.node)}\" (click)=\"collapse(c.node)\"></i> <a href=\"#\" class=\"text-break\" appStopClick (click)=\"selectCollection(c.node)\"> <i *ngIf=\"c.children.length === 0\" class=\"fa-li fa fa-cube\" aria-hidden=\"true\"></i>{{c.node.name}} </a> <ul class=\"fa-ul card-ul carets\" *ngIf=\"c.children.length && !isCollapsed(c.node)\"> <ng-container *ngTemplateOutlet=\"recursiveCollections; context:{ $implicit: c.children }\"> </ng-container> </ul> </li> </ng-template> <ng-container *ngTemplateOutlet=\"recursiveCollections; context:{ $implicit: nestedCollections }\"> </ng-container> </ul> </ng-container> </ng-container> </div> </div> ","import { View } from './view';\n\nimport { SendFile } from '../domain/sendFile';\n\nexport class SendFileView implements View {\n    id: string = null;\n    size: string = null;\n    sizeName: string = null;\n    fileName: string = null;\n\n    constructor(f?: SendFile) {\n        if (!f) {\n            return;\n        }\n\n        this.id = f.id;\n        this.size = f.size;\n        this.sizeName = f.sizeName;\n    }\n\n    get fileSize(): number {\n        try {\n            if (this.size != null) {\n                return parseInt(this.size, null);\n            }\n        } catch {\n            // Invalid file size.\n        }\n        return 0;\n    }\n}\n","import { View } from './view';\n\nimport { SendText } from '../domain/sendText';\n\nexport class SendTextView implements View {\n    text: string = null;\n    hidden: boolean;\n\n    constructor(t?: SendText) {\n        if (!t) {\n            return;\n        }\n\n        this.hidden = t.hidden;\n    }\n\n    get maskedText(): string {\n        return this.text != null ? '••••••••' : null;\n    }\n}\n","import {\n    Component,\n    Input,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { Policy } from 'jslib-common/models/domain/policy';\n\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\n@Component({\n    selector: 'app-organizations',\n    templateUrl: 'organizations.component.html',\n})\nexport class OrganizationsComponent implements OnInit {\n    @Input() vault = false;\n\n    organizations: Organization[];\n    policies: Policy[];\n    loaded: boolean = false;\n    actionPromise: Promise<any>;\n\n    constructor(private userService: UserService, private platformUtilsService: PlatformUtilsService,\n        private i18nService: I18nService, private apiService: ApiService,\n        private toasterService: ToasterService, private syncService: SyncService,\n        private cryptoService: CryptoService, private policyService: PolicyService,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        if (!this.vault) {\n            await this.syncService.fullSync(true);\n            await this.load();\n        }\n    }\n\n    async load() {\n        const orgs = await this.userService.getAllOrganizations();\n        orgs.sort(Utils.getSortFunction(this.i18nService, 'name'));\n        this.organizations = orgs;\n        this.policies = await this.policyService.getAll(PolicyType.ResetPassword);\n        this.loaded = true;\n    }\n\n    allowEnrollmentChanges(org: Organization): boolean {\n        if (org.usePolicies && org.useResetPassword && org.hasPublicAndPrivateKeys) {\n            const policy = this.policies.find(p => p.organizationId === org.id);\n            if (policy != null && policy.enabled) {\n                return org.resetPasswordEnrolled && policy.data.autoEnrollEnabled ? false : true;\n            }\n        }\n\n        return false;\n    }\n\n    showEnrolledStatus(org: Organization): boolean {\n        return org.useResetPassword && org.resetPasswordEnrolled && this.policies.some(p => p.organizationId === org.id && p.enabled);\n    }\n\n    async unlinkSso(org: Organization) {\n        const confirmed = await this.platformUtilsService.showDialog(\n            'Are you sure you want to unlink SSO for this organization?', org.name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.actionPromise = this.apiService.deleteSsoUser(org.id).then(() => {\n                return this.syncService.fullSync(true);\n            });\n            await this.actionPromise;\n            this.toasterService.popAsync('success', null, 'Unlinked SSO');\n            await this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async leave(org: Organization) {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('leaveOrganizationConfirmation'), org.name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.actionPromise = this.apiService.postLeaveOrganization(org.id).then(() => {\n                return this.syncService.fullSync(true);\n            });\n            await this.actionPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('leftOrganization'));\n            await this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async toggleResetPasswordEnrollment(org: Organization) {\n        // Set variables\n        let keyString: string = null;\n        let toastStringRef = 'withdrawPasswordResetSuccess';\n\n        // Enrolling\n        if (!org.resetPasswordEnrolled) {\n            // Alert user about enrollment\n            const confirmed = await this.platformUtilsService.showDialog(\n                this.i18nService.t('resetPasswordEnrollmentWarning'), null,\n                this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n            if (!confirmed) {\n                return;\n            }\n\n            // Retrieve Public Key\n            this.actionPromise = this.apiService.getOrganizationKeys(org.id)\n                .then(async response => {\n                    if (response == null) {\n                        throw new Error(this.i18nService.t('resetPasswordOrgKeysError'));\n                    }\n\n                    const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n                    // RSA Encrypt user's encKey.key with organization public key\n                    const encKey = await this.cryptoService.getEncKey();\n                    const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n                    keyString = encryptedKey.encryptedString;\n                    toastStringRef = 'enrollPasswordResetSuccess';\n\n                    // Create request and execute enrollment\n                    const request = new OrganizationUserResetPasswordEnrollmentRequest();\n                    request.resetPasswordKey = keyString;\n                    return this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n                })\n                .then(() => {\n                    return this.syncService.fullSync(true);\n                });\n        } else {\n            // Withdrawal\n            const request = new OrganizationUserResetPasswordEnrollmentRequest();\n            request.resetPasswordKey = keyString;\n            this.actionPromise = this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request)\n                .then(() => {\n                    return this.syncService.fullSync(true);\n                });\n        }\n\n        try {\n            await this.actionPromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t(toastStringRef));\n            await this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<ng-container *ngIf=\"vault\"> <p *ngIf=\"!loaded\" class=\"text-muted\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> <ng-container *ngIf=\"loaded\"> <ul class=\"fa-ul card-ul carets\" *ngIf=\"organizations && organizations.length\"> <li *ngFor=\"let o of organizations\"> <a [routerLink]=\"['/organizations', o.id]\" class=\"text-body\"> <i class=\"fa-li fa fa-caret-right\" aria-hidden=\"true\"></i> {{o.name}} <ng-container *ngIf=\"!o.enabled\"> <i class=\"fa fa-exclamation-triangle text-danger\" title=\"{{'organizationIsDisabled' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'organizationIsDisabled' | i18n}}</span> </ng-container> </a> </li> </ul> <p *ngIf=\"!organizations || !organizations.length\">{{'noOrganizationsList' | i18n}}</p> </ng-container> <a href=\"#\" routerLink=\"/settings/create-organization\" class=\"btn btn-block btn-outline-primary\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> {{'newOrganization' | i18n}} </a> </ng-container> <ng-container *ngIf=\"!vault\"> <div class=\"page-header d-flex\"> <h1> {{'organizations' | i18n}} <small [appApiAction]=\"actionPromise\" #action> <ng-container *ngIf=\"action.loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> </small> </h1> <a href=\"#\" routerLink=\"/settings/create-organization\" class=\"btn btn-sm btn-outline-primary ml-auto\" *ngIf=\"!loaded || (organizations && organizations.length)\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> {{'newOrganization' | i18n}} </a> </div> <ng-container *ngIf=\"!loaded\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"loaded\"> <ng-container *ngIf=\"!organizations || !organizations.length\"> <p>{{'noOrganizationsList' | i18n}}</p> <a href=\"#\" routerLink=\"/settings/create-organization\" class=\"btn btn-outline-primary\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> {{'newOrganization' | i18n}} </a> </ng-container> <table class=\"table table-hover table-list\" *ngIf=\"organizations && organizations.length\"> <tbody> <tr *ngFor=\"let o of organizations\"> <td width=\"30\"> <app-avatar [data]=\"o.name\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> <a href=\"#\" [routerLink]=\"['/organizations', o.id]\">{{o.name}}</a> <ng-container *ngIf=\"!o.enabled\"> <i class=\"fa fa-exclamation-triangle text-danger\" title=\"{{'organizationIsDisabled' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'organizationIsDisabled' | i18n}}</span> </ng-container> <ng-container *ngIf=\"showEnrolledStatus(o)\"> <i class=\"fa fa-key\" appStopProp title=\"{{'enrolledPasswordReset' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'enrolledPasswordReset' | i18n}}</span> </ng-container> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\"> <a *ngIf=\"allowEnrollmentChanges(o) && !o.resetPasswordEnrolled\" class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"toggleResetPasswordEnrollment(o)\"> <i class=\"fa fa-fw fa-key\" aria-hidden=\"true\"></i> {{'enrollPasswordReset' | i18n}} </a> <a *ngIf=\"allowEnrollmentChanges(o) && o.resetPasswordEnrolled\" class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"toggleResetPasswordEnrollment(o)\"> <i class=\"fa fa-fw fa-undo\" aria-hidden=\"true\"></i> {{'withdrawPasswordReset' | i18n}} </a> <ng-container *ngIf=\"o.useSso && o.identifier\"> <a *ngIf=\"o.ssoBound; else linkSso\" class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"unlinkSso(o)\"> <i class=\"fa fa-fw fa-chain-broken\" aria-hidden=\"true\"></i> {{'unlinkSso' | i18n}} </a> <ng-template #linkSso> <app-link-sso [organization]=\"o\"> </app-link-sso> </ng-template> </ng-container> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick (click)=\"leave(o)\"> <i class=\"fa fa-fw fa-sign-out\" aria-hidden=\"true\"></i> {{'leave' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> </ng-container> </ng-container> ","import { AttachmentResponse } from './attachmentResponse';\nimport { BaseResponse } from './baseResponse';\nimport { PasswordHistoryResponse } from './passwordHistoryResponse';\n\nimport { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CardApi } from '../api/cardApi';\nimport { FieldApi } from '../api/fieldApi';\nimport { IdentityApi } from '../api/identityApi';\nimport { LoginApi } from '../api/loginApi';\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class CipherResponse extends BaseResponse {\n    id: string;\n    organizationId: string;\n    folderId: string;\n    type: number;\n    name: string;\n    notes: string;\n    fields: FieldApi[];\n    login: LoginApi;\n    card: CardApi;\n    identity: IdentityApi;\n    secureNote: SecureNoteApi;\n    favorite: boolean;\n    edit: boolean;\n    viewPassword: boolean;\n    organizationUseTotp: boolean;\n    revisionDate: string;\n    attachments: AttachmentResponse[];\n    passwordHistory: PasswordHistoryResponse[];\n    collectionIds: string[];\n    deletedDate: string;\n    reprompt: CipherRepromptType;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.organizationId = this.getResponseProperty('OrganizationId');\n        this.folderId = this.getResponseProperty('FolderId') || null;\n        this.type = this.getResponseProperty('Type');\n        this.name = this.getResponseProperty('Name');\n        this.notes = this.getResponseProperty('Notes');\n        this.favorite = this.getResponseProperty('Favorite') || false;\n        this.edit = !!this.getResponseProperty('Edit');\n        if (this.getResponseProperty('ViewPassword') == null) {\n            this.viewPassword = true;\n        } else {\n            this.viewPassword = this.getResponseProperty('ViewPassword');\n        }\n        this.organizationUseTotp = this.getResponseProperty('OrganizationUseTotp');\n        this.revisionDate = this.getResponseProperty('RevisionDate');\n        this.collectionIds = this.getResponseProperty('CollectionIds');\n        this.deletedDate = this.getResponseProperty('DeletedDate');\n\n        const login = this.getResponseProperty('Login');\n        if (login != null) {\n            this.login = new LoginApi(login);\n        }\n\n        const card = this.getResponseProperty('Card');\n        if (card != null) {\n            this.card = new CardApi(card);\n        }\n\n        const identity = this.getResponseProperty('Identity');\n        if (identity != null) {\n            this.identity = new IdentityApi(identity);\n        }\n\n        const secureNote = this.getResponseProperty('SecureNote');\n        if (secureNote != null) {\n            this.secureNote = new SecureNoteApi(secureNote);\n        }\n\n        const fields = this.getResponseProperty('Fields');\n        if (fields != null) {\n            this.fields = fields.map((f: any) => new FieldApi(f));\n        }\n\n        const attachments = this.getResponseProperty('Attachments');\n        if (attachments != null) {\n            this.attachments = attachments.map((a: any) => new AttachmentResponse(a));\n        }\n\n        const passwordHistory = this.getResponseProperty('PasswordHistory');\n        if (passwordHistory != null) {\n            this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));\n        }\n\n        this.reprompt = this.getResponseProperty('Reprompt') || CipherRepromptType.None;\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SelectionReadOnlyResponse extends BaseResponse {\n    id: string;\n    readOnly: boolean;\n    hidePasswords: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.readOnly = this.getResponseProperty('ReadOnly');\n        this.hidePasswords = this.getResponseProperty('HidePasswords');\n    }\n}\n","export abstract class NotificationsService {\n    init: () => Promise<void>;\n    updateConnection: (sync?: boolean) => Promise<void>;\n    reconnectFromActivity: () => Promise<void>;\n    disconnectFromInactivity: () => Promise<void>;\n}\n","export abstract class SettingsService {\n    clearCache: () => void;\n    getEquivalentDomains: () => Promise<any>;\n    setEquivalentDomains: (equivalentDomains: string[][]) => Promise<any>;\n    clear: (userId: string) => Promise<void>;\n}\n","export enum EncryptionType {\n    AesCbc256_B64 = 0,\n    AesCbc128_HmacSha256_B64 = 1,\n    AesCbc256_HmacSha256_B64 = 2,\n    Rsa2048_OaepSha256_B64 = 3,\n    Rsa2048_OaepSha1_B64 = 4,\n    Rsa2048_OaepSha256_HmacSha256_B64 = 5,\n    Rsa2048_OaepSha1_HmacSha256_B64 = 6,\n}\n","import { PolicyData } from '../data/policyData';\n\nimport Domain from './domainBase';\n\nimport { PolicyType } from '../../enums/policyType';\n\nexport class Policy extends Domain {\n    id: string;\n    organizationId: string;\n    type: PolicyType;\n    data: any;\n    enabled: boolean;\n\n    constructor(obj?: PolicyData) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.id = obj.id;\n        this.organizationId = obj.organizationId;\n        this.type = obj.type;\n        this.data = obj.data;\n        this.enabled = obj.enabled;\n    }\n}\n","import { HashPurpose } from '../enums/hashPurpose';\nimport { KdfType } from '../enums/kdfType';\nimport { TwoFactorProviderType } from '../enums/twoFactorProviderType';\n\nimport { AuthResult } from '../models/domain/authResult';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { SetKeyConnectorKeyRequest } from '../models/request/account/setKeyConnectorKeyRequest';\nimport { DeviceRequest } from '../models/request/deviceRequest';\nimport { KeyConnectorUserKeyRequest } from '../models/request/keyConnectorUserKeyRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\n\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { AppIdService } from '../abstractions/appId.service';\nimport { AuthService as AuthServiceAbstraction } from '../abstractions/auth.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { EnvironmentService } from '../abstractions/environment.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { KeyConnectorService } from '../abstractions/keyConnector.service';\nimport { LogService } from '../abstractions/log.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService } from '../abstractions/vaultTimeout.service';\n\nimport { Utils } from '../misc/utils';\n\nexport const TwoFactorProviders = {\n    [TwoFactorProviderType.Authenticator]: {\n        type: TwoFactorProviderType.Authenticator,\n        name: null as string,\n        description: null as string,\n        priority: 1,\n        sort: 1,\n        premium: false,\n    },\n    [TwoFactorProviderType.Yubikey]: {\n        type: TwoFactorProviderType.Yubikey,\n        name: null as string,\n        description: null as string,\n        priority: 3,\n        sort: 2,\n        premium: true,\n    },\n    [TwoFactorProviderType.Duo]: {\n        type: TwoFactorProviderType.Duo,\n        name: 'Duo',\n        description: null as string,\n        priority: 2,\n        sort: 3,\n        premium: true,\n    },\n    [TwoFactorProviderType.OrganizationDuo]: {\n        type: TwoFactorProviderType.OrganizationDuo,\n        name: 'Duo (Organization)',\n        description: null as string,\n        priority: 10,\n        sort: 4,\n        premium: false,\n    },\n    [TwoFactorProviderType.Email]: {\n        type: TwoFactorProviderType.Email,\n        name: null as string,\n        description: null as string,\n        priority: 0,\n        sort: 6,\n        premium: false,\n    },\n    [TwoFactorProviderType.WebAuthn]: {\n        type: TwoFactorProviderType.WebAuthn,\n        name: null as string,\n        description: null as string,\n        priority: 4,\n        sort: 5,\n        premium: true,\n    },\n};\n\nexport class AuthService implements AuthServiceAbstraction {\n    email: string;\n    masterPasswordHash: string;\n    localMasterPasswordHash: string;\n    code: string;\n    codeVerifier: string;\n    ssoRedirectUrl: string;\n    clientId: string;\n    clientSecret: string;\n    twoFactorProvidersData: Map<TwoFactorProviderType, { [key: string]: string; }>;\n    selectedTwoFactorProviderType: TwoFactorProviderType = null;\n    captchaToken: string;\n\n    private key: SymmetricCryptoKey;\n\n    constructor(private cryptoService: CryptoService, protected apiService: ApiService,\n        private userService: UserService, protected tokenService: TokenService,\n        protected appIdService: AppIdService, private i18nService: I18nService,\n        protected platformUtilsService: PlatformUtilsService, private messagingService: MessagingService,\n        private vaultTimeoutService: VaultTimeoutService, private logService: LogService,\n        private cryptoFunctionService: CryptoFunctionService, private environmentService: EnvironmentService,\n        private keyConnectorService: KeyConnectorService, private setCryptoKeys = true) {\n    }\n\n    init() {\n        TwoFactorProviders[TwoFactorProviderType.Email].name = this.i18nService.t('emailTitle');\n        TwoFactorProviders[TwoFactorProviderType.Email].description = this.i18nService.t('emailDesc');\n\n        TwoFactorProviders[TwoFactorProviderType.Authenticator].name = this.i18nService.t('authenticatorAppTitle');\n        TwoFactorProviders[TwoFactorProviderType.Authenticator].description =\n            this.i18nService.t('authenticatorAppDesc');\n\n        TwoFactorProviders[TwoFactorProviderType.Duo].description = this.i18nService.t('duoDesc');\n\n        TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].name =\n            'Duo (' + this.i18nService.t('organization') + ')';\n        TwoFactorProviders[TwoFactorProviderType.OrganizationDuo].description =\n            this.i18nService.t('duoOrganizationDesc');\n\n        TwoFactorProviders[TwoFactorProviderType.WebAuthn].name = this.i18nService.t('webAuthnTitle');\n        TwoFactorProviders[TwoFactorProviderType.WebAuthn].description = this.i18nService.t('webAuthnDesc');\n\n        TwoFactorProviders[TwoFactorProviderType.Yubikey].name = this.i18nService.t('yubiKeyTitle');\n        TwoFactorProviders[TwoFactorProviderType.Yubikey].description = this.i18nService.t('yubiKeyDesc');\n    }\n\n    async logIn(email: string, masterPassword: string, captchaToken?: string): Promise<AuthResult> {\n        this.selectedTwoFactorProviderType = null;\n        const key = await this.makePreloginKey(masterPassword, email);\n        const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n        const localHashedPassword = await this.cryptoService.hashPassword(masterPassword, key,\n            HashPurpose.LocalAuthorization);\n        return await this.logInHelper(email, hashedPassword, localHashedPassword, null, null, null, null, null,\n            key, null, null, null, captchaToken, null);\n    }\n\n    async logInSso(code: string, codeVerifier: string, redirectUrl: string, orgId: string): Promise<AuthResult> {\n        this.selectedTwoFactorProviderType = null;\n        return await this.logInHelper(null, null, null, code, codeVerifier, redirectUrl, null, null,\n            null, null, null, null, null, orgId);\n    }\n\n    async logInApiKey(clientId: string, clientSecret: string): Promise<AuthResult> {\n        this.selectedTwoFactorProviderType = null;\n        return await this.logInHelper(null, null, null, null, null, null, clientId, clientSecret,\n            null, null, null, null, null, null);\n    }\n\n    async logInTwoFactor(twoFactorProvider: TwoFactorProviderType, twoFactorToken: string,\n        remember?: boolean): Promise<AuthResult> {\n        return await this.logInHelper(this.email, this.masterPasswordHash, this.localMasterPasswordHash, this.code,\n            this.codeVerifier, this.ssoRedirectUrl, this.clientId, this.clientSecret, this.key, twoFactorProvider,\n            twoFactorToken, remember, this.captchaToken, null);\n    }\n\n    async logInComplete(email: string, masterPassword: string, twoFactorProvider: TwoFactorProviderType,\n        twoFactorToken: string, remember?: boolean, captchaToken?: string): Promise<AuthResult> {\n        this.selectedTwoFactorProviderType = null;\n        const key = await this.makePreloginKey(masterPassword, email);\n        const hashedPassword = await this.cryptoService.hashPassword(masterPassword, key);\n        const localHashedPassword = await this.cryptoService.hashPassword(masterPassword, key,\n            HashPurpose.LocalAuthorization);\n        return await this.logInHelper(email, hashedPassword, localHashedPassword, null, null, null, null, null, key,\n            twoFactorProvider, twoFactorToken, remember, captchaToken, null);\n    }\n\n    async logInSsoComplete(code: string, codeVerifier: string, redirectUrl: string,\n        twoFactorProvider: TwoFactorProviderType, twoFactorToken: string, remember?: boolean): Promise<AuthResult> {\n        this.selectedTwoFactorProviderType = null;\n        return await this.logInHelper(null, null, null, code, codeVerifier, redirectUrl, null,\n            null, null, twoFactorProvider, twoFactorToken, remember, null, null);\n    }\n\n    async logInApiKeyComplete(clientId: string, clientSecret: string, twoFactorProvider: TwoFactorProviderType,\n        twoFactorToken: string, remember?: boolean): Promise<AuthResult> {\n        this.selectedTwoFactorProviderType = null;\n        return await this.logInHelper(null, null, null, null, null, null, clientId, clientSecret, null,\n            twoFactorProvider, twoFactorToken, remember, null, null);\n    }\n\n    logOut(callback: Function) {\n        callback();\n        this.messagingService.send('loggedOut');\n    }\n\n    getSupportedTwoFactorProviders(win: Window): any[] {\n        const providers: any[] = [];\n        if (this.twoFactorProvidersData == null) {\n            return providers;\n        }\n\n        if (this.twoFactorProvidersData.has(TwoFactorProviderType.OrganizationDuo) &&\n            this.platformUtilsService.supportsDuo()) {\n            providers.push(TwoFactorProviders[TwoFactorProviderType.OrganizationDuo]);\n        }\n\n        if (this.twoFactorProvidersData.has(TwoFactorProviderType.Authenticator)) {\n            providers.push(TwoFactorProviders[TwoFactorProviderType.Authenticator]);\n        }\n\n        if (this.twoFactorProvidersData.has(TwoFactorProviderType.Yubikey)) {\n            providers.push(TwoFactorProviders[TwoFactorProviderType.Yubikey]);\n        }\n\n        if (this.twoFactorProvidersData.has(TwoFactorProviderType.Duo) && this.platformUtilsService.supportsDuo()) {\n            providers.push(TwoFactorProviders[TwoFactorProviderType.Duo]);\n        }\n\n        if (this.twoFactorProvidersData.has(TwoFactorProviderType.WebAuthn) && this.platformUtilsService.supportsWebAuthn(win)) {\n            providers.push(TwoFactorProviders[TwoFactorProviderType.WebAuthn]);\n        }\n\n        if (this.twoFactorProvidersData.has(TwoFactorProviderType.Email)) {\n            providers.push(TwoFactorProviders[TwoFactorProviderType.Email]);\n        }\n\n        return providers;\n    }\n\n    getDefaultTwoFactorProvider(webAuthnSupported: boolean): TwoFactorProviderType {\n        if (this.twoFactorProvidersData == null) {\n            return null;\n        }\n\n        if (this.selectedTwoFactorProviderType != null &&\n            this.twoFactorProvidersData.has(this.selectedTwoFactorProviderType)) {\n            return this.selectedTwoFactorProviderType;\n        }\n\n        let providerType: TwoFactorProviderType = null;\n        let providerPriority = -1;\n        this.twoFactorProvidersData.forEach((value, type) => {\n            const provider = (TwoFactorProviders as any)[type];\n            if (provider != null && provider.priority > providerPriority) {\n                if (type === TwoFactorProviderType.WebAuthn && !webAuthnSupported) {\n                    return;\n                }\n\n                providerType = type;\n                providerPriority = provider.priority;\n            }\n        });\n\n        return providerType;\n    }\n\n    async makePreloginKey(masterPassword: string, email: string): Promise<SymmetricCryptoKey> {\n        email = email.trim().toLowerCase();\n        let kdf: KdfType = null;\n        let kdfIterations: number = null;\n        try {\n            const preloginResponse = await this.apiService.postPrelogin(new PreloginRequest(email));\n            if (preloginResponse != null) {\n                kdf = preloginResponse.kdf;\n                kdfIterations = preloginResponse.kdfIterations;\n            }\n        } catch (e) {\n            if (e == null || e.statusCode !== 404) {\n                throw e;\n            }\n        }\n        return this.cryptoService.makeKey(masterPassword, email, kdf, kdfIterations);\n    }\n\n    authingWithApiKey(): boolean {\n        return this.clientId != null && this.clientSecret != null;\n    }\n\n    authingWithSso(): boolean {\n        return this.code != null && this.codeVerifier != null && this.ssoRedirectUrl != null;\n    }\n\n    authingWithPassword(): boolean {\n        return this.email != null && this.masterPasswordHash != null;\n    }\n\n    private async logInHelper(email: string, hashedPassword: string, localHashedPassword: string, code: string,\n        codeVerifier: string, redirectUrl: string, clientId: string, clientSecret: string, key: SymmetricCryptoKey,\n        twoFactorProvider?: TwoFactorProviderType, twoFactorToken?: string, remember?: boolean, captchaToken?: string,\n        orgId?: string): Promise<AuthResult> {\n        const storedTwoFactorToken = await this.tokenService.getTwoFactorToken(email);\n        const appId = await this.appIdService.getAppId();\n        const deviceRequest = new DeviceRequest(appId, this.platformUtilsService);\n\n        let emailPassword: string[] = [];\n        let codeCodeVerifier: string[] = [];\n        let clientIdClientSecret: [string, string] = [null, null];\n\n        if (email != null && hashedPassword != null) {\n            emailPassword = [email, hashedPassword];\n        } else {\n            emailPassword = null;\n        }\n        if (code != null && codeVerifier != null && redirectUrl != null) {\n            codeCodeVerifier = [code, codeVerifier, redirectUrl];\n        } else {\n            codeCodeVerifier = null;\n        }\n        if (clientId != null && clientSecret != null) {\n            clientIdClientSecret = [clientId, clientSecret];\n        } else {\n            clientIdClientSecret = null;\n        }\n\n        let request: TokenRequest;\n        if (twoFactorToken != null && twoFactorProvider != null) {\n            request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, twoFactorProvider,\n                twoFactorToken, remember, captchaToken, deviceRequest);\n        } else if (storedTwoFactorToken != null) {\n            request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret,\n                TwoFactorProviderType.Remember, storedTwoFactorToken, false, captchaToken, deviceRequest);\n        } else {\n            request = new TokenRequest(emailPassword, codeCodeVerifier, clientIdClientSecret, null,\n                null, false, captchaToken, deviceRequest);\n        }\n\n        const response = await this.apiService.postIdentityToken(request);\n\n        this.clearState();\n        const result = new AuthResult();\n        result.captchaSiteKey = (response as any).siteKey;\n        if (!!result.captchaSiteKey) {\n            return result;\n        }\n        result.twoFactor = !!(response as any).twoFactorProviders2;\n\n        if (result.twoFactor) {\n            // two factor required\n            this.email = email;\n            this.masterPasswordHash = hashedPassword;\n            this.localMasterPasswordHash = localHashedPassword;\n            this.code = code;\n            this.codeVerifier = codeVerifier;\n            this.ssoRedirectUrl = redirectUrl;\n            this.clientId = clientId;\n            this.clientSecret = clientSecret;\n            this.key = this.setCryptoKeys ? key : null;\n            const twoFactorResponse = response as IdentityTwoFactorResponse;\n            this.twoFactorProvidersData = twoFactorResponse.twoFactorProviders2;\n            result.twoFactorProviders = twoFactorResponse.twoFactorProviders2;\n            this.captchaToken = twoFactorResponse.captchaToken;\n            return result;\n        }\n\n        const tokenResponse = response as IdentityTokenResponse;\n        result.resetMasterPassword = tokenResponse.resetMasterPassword;\n        result.forcePasswordReset = tokenResponse.forcePasswordReset;\n        if (tokenResponse.twoFactorToken != null) {\n            await this.tokenService.setTwoFactorToken(tokenResponse.twoFactorToken, email);\n        }\n\n        await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken, clientIdClientSecret);\n        await this.userService.setInformation(this.tokenService.getUserId(), this.tokenService.getEmail(),\n            tokenResponse.kdf, tokenResponse.kdfIterations);\n        if (this.setCryptoKeys) {\n            if (key != null) {\n                await this.cryptoService.setKey(key);\n            }\n            if (localHashedPassword != null) {\n                await this.cryptoService.setKeyHash(localHashedPassword);\n            }\n\n            // Skip this step during SSO new user flow. No key is returned from server.\n            if (code == null || tokenResponse.key != null) {\n\n                if (tokenResponse.keyConnectorUrl != null) {\n                    await this.keyConnectorService.getAndSetKey(tokenResponse.keyConnectorUrl);\n                } else if (tokenResponse.apiUseKeyConnector) {\n                    const keyConnectorUrl = this.environmentService.getKeyConnectorUrl();\n                    await this.keyConnectorService.getAndSetKey(keyConnectorUrl);\n                }\n\n                await this.cryptoService.setEncKey(tokenResponse.key);\n\n                // User doesn't have a key pair yet (old account), let's generate one for them\n                if (tokenResponse.privateKey == null) {\n                    try {\n                        const keyPair = await this.cryptoService.makeKeyPair();\n                        await this.apiService.postAccountKeys(new KeysRequest(keyPair[0], keyPair[1].encryptedString));\n                        tokenResponse.privateKey = keyPair[1].encryptedString;\n                    } catch (e) {\n                        this.logService.error(e);\n                    }\n                }\n\n                await this.cryptoService.setEncPrivateKey(tokenResponse.privateKey);\n            } else if (tokenResponse.keyConnectorUrl != null) {\n                const password = await this.cryptoFunctionService.randomBytes(64);\n\n                const k = await this.cryptoService.makeKey(Utils.fromBufferToB64(password), this.tokenService.getEmail(), tokenResponse.kdf, tokenResponse.kdfIterations);\n                const keyConnectorRequest = new KeyConnectorUserKeyRequest(k.encKeyB64);\n                await this.cryptoService.setKey(k);\n\n                const encKey = await this.cryptoService.makeEncKey(k);\n                await this.cryptoService.setEncKey(encKey[1].encryptedString);\n\n                const [pubKey, privKey] = await this.cryptoService.makeKeyPair();\n\n                try {\n                    await this.apiService.postUserKeyToKeyConnector(tokenResponse.keyConnectorUrl, keyConnectorRequest);\n                } catch (e) {\n                    throw new Error('Unable to reach key connector');\n                }\n\n                const keys = new KeysRequest(pubKey, privKey.encryptedString);\n                const setPasswordRequest = new SetKeyConnectorKeyRequest(\n                    encKey[1].encryptedString, tokenResponse.kdf, tokenResponse.kdfIterations, orgId, keys\n                );\n                await this.apiService.postSetKeyConnectorKey(setPasswordRequest);\n            }\n        }\n\n        if (this.vaultTimeoutService != null) {\n            this.vaultTimeoutService.biometricLocked = false;\n        }\n        this.messagingService.send('loggedIn');\n        return result;\n    }\n\n    private clearState(): void {\n        this.key = null;\n        this.email = null;\n        this.masterPasswordHash = null;\n        this.localMasterPasswordHash = null;\n        this.code = null;\n        this.codeVerifier = null;\n        this.ssoRedirectUrl = null;\n        this.clientId = null;\n        this.clientSecret = null;\n        this.twoFactorProvidersData = null;\n        this.selectedTwoFactorProviderType = null;\n    }\n}\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n    selector: 'app-entity-users',\n    templateUrl: 'entity-users.component.html',\n})\nexport class EntityUsersComponent implements OnInit {\n    @Input() entity: 'group' | 'collection';\n    @Input() entityId: string;\n    @Input() entityName: string;\n    @Input() organizationId: string;\n    @Output() onEditedUsers = new EventEmitter();\n\n    organizationUserType = OrganizationUserType;\n    organizationUserStatusType = OrganizationUserStatusType;\n\n    showSelected = false;\n    loading = true;\n    formPromise: Promise<any>;\n    selectedCount = 0;\n    searchText: string;\n\n    private allUsers: OrganizationUserUserDetailsResponse[] = [];\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    async ngOnInit() {\n        await this.loadUsers();\n        this.loading = false;\n    }\n\n    get users() {\n        if (this.showSelected) {\n            return this.allUsers.filter(u => (u as any).checked);\n        } else {\n            return this.allUsers;\n        }\n    }\n\n    async loadUsers() {\n        const users = await this.apiService.getOrganizationUsers(this.organizationId);\n        this.allUsers = users.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'email'));\n        if (this.entity === 'group') {\n            const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);\n            if (response != null && users.data.length > 0) {\n                response.forEach(s => {\n                    const user = users.data.filter(u => u.id === s);\n                    if (user != null && user.length > 0) {\n                        (user[0] as any).checked = true;\n                    }\n                });\n            }\n        } else if (this.entity === 'collection') {\n            const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);\n            if (response != null && users.data.length > 0) {\n                response.forEach(s => {\n                    const user = users.data.filter(u => !u.accessAll && u.id === s.id);\n                    if (user != null && user.length > 0) {\n                        (user[0] as any).checked = true;\n                        (user[0] as any).readOnly = s.readOnly;\n                        (user[0] as any).hidePasswords = s.hidePasswords;\n                    }\n                });\n            }\n        }\n\n        this.allUsers.forEach(u => {\n            if (this.entity === 'collection' && u.accessAll) {\n                (u as any).checked = true;\n            }\n            if ((u as any).checked) {\n                this.selectedCount++;\n            }\n        });\n    }\n\n    check(u: OrganizationUserUserDetailsResponse) {\n        if (this.entity === 'collection' && u.accessAll) {\n            return;\n        }\n        (u as any).checked = !(u as any).checked;\n        this.selectedChanged(u);\n    }\n\n    selectedChanged(u: OrganizationUserUserDetailsResponse) {\n        if ((u as any).checked) {\n            this.selectedCount++;\n        } else {\n            if (this.entity === 'collection') {\n                (u as any).readOnly = false;\n                (u as any).hidePasswords = false;\n            }\n            this.selectedCount--;\n        }\n    }\n\n    filterSelected(showSelected: boolean) {\n        this.showSelected = showSelected;\n    }\n\n    async submit() {\n        try {\n            if (this.entity === 'group') {\n                const selections = this.users.filter(u => (u as any).checked).map(u => u.id);\n                this.formPromise = this.apiService.putGroupUsers(this.organizationId, this.entityId, selections);\n            } else {\n                const selections = this.users.filter(u => (u as any).checked && !u.accessAll)\n                    .map(u => new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords));\n                this.formPromise = this.apiService.putCollectionUsers(this.organizationId, this.entityId, selections);\n            }\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('updatedUsers'));\n            this.onEditedUsers.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"userAccessTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"userAccessTitle\"> {{'userAccess' | i18n}} <small>{{entityName}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"loading || !users\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"modal-body\" *ngIf=\"!loading && users && (users | search:searchText:'name':'email':'id') as searchedUsers\"> <div class=\"d-flex\"> <div class=\"mr-3\"> <label class=\"sr-only\" for=\"search\">{{'search' | i18n}}</label> <input type=\"search\" class=\"form-control form-control-sm\" id=\"search\" placeholder=\"{{'search' | i18n}}\" name=\"SearchText\" [(ngModel)]=\"searchText\"> </div> <div class=\"btn-group btn-group-sm\" role=\"group\"> <button type=\"button\" class=\"btn btn-outline-secondary\" [ngClass]=\"{active: !showSelected}\" (click)=\"filterSelected(false)\"> {{'all' | i18n}} </button> <button type=\"button\" class=\"btn btn-outline-secondary\" [ngClass]=\"{active: showSelected}\" (click)=\"filterSelected(true)\"> {{'selected' | i18n}} <span class=\"badge badge-pill badge-info\" *ngIf=\"selectedCount\">{{selectedCount}}</span> </button> </div> </div> <ng-container *ngIf=\"!searchedUsers.length\"> <hr> {{'noUsersInList' | i18n}} </ng-container> <ng-container *ngIf=\"searchedUsers.length\"> <table class=\"table table-hover table-list mb-0\"> <thead> <tr> <th>&nbsp;</th> <th>&nbsp;</th> <th>{{'name' | i18n}}</th> <th *ngIf=\"entity === 'collection'\">&nbsp;</th> <th>{{'userType' | i18n}}</th> <th width=\"100\" class=\"text-center\" *ngIf=\"entity === 'collection'\">{{'hidePasswords' | i18n}}</th> <th width=\"100\" class=\"text-center\" *ngIf=\"entity === 'collection'\">{{'readOnly' | i18n}}</th> </tr> </thead> <tbody> <tr *ngFor=\"let u of searchedUsers\"> <td class=\"table-list-checkbox\" (click)=\"check(u)\"> <input type=\"checkbox\" [(ngModel)]=\"u.checked\" name=\"{{u.id.substr(0,8)}}_Checked\" [disabled]=\"entity === 'collection' && u.accessAll\" (change)=\"selectedChanged(u)\" appStopProp> </td> <td width=\"30\" (click)=\"check(u)\"> <app-avatar [data]=\"u | userName\" [email]=\"u.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> {{u.email}} <span class=\"badge badge-secondary\" *ngIf=\"u.status === organizationUserStatusType.Invited\">{{'invited' | i18n}}</span> <span class=\"badge badge-warning\" *ngIf=\"u.status === organizationUserStatusType.Accepted\">{{'accepted' | i18n}}</span> <small class=\"text-muted d-block\" *ngIf=\"u.name\">{{u.name}}</small> </td> <td *ngIf=\"entity === 'collection'\"> <ng-container *ngIf=\"u.accessAll\"> <i class=\"fa fa-th\" title=\"{{'userAccessAllItems' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'userAccessAllItems' | i18n}}</span> </ng-container> </td> <td> <span *ngIf=\"u.type === organizationUserType.Owner\">{{'owner' | i18n}}</span> <span *ngIf=\"u.type === organizationUserType.Admin\">{{'admin' | i18n}}</span> <span *ngIf=\"u.type === organizationUserType.Manager\">{{'manager' | i18n}}</span> <span *ngIf=\"u.type === organizationUserType.User\">{{'user' | i18n}}</span> <span *ngIf=\"u.type === organizationUserType.Custom\">{{'custom' | i18n}}</span> </td> <td class=\"text-center\" *ngIf=\"entity === 'collection'\"> <input type=\"checkbox\" [(ngModel)]=\"u.hidePasswords\" name=\"{{u.id.substr(0,8)}}_HidePasswords\" [disabled]=\"u.accessAll || !u.checked\"> </td> <td class=\"text-center\" *ngIf=\"entity === 'collection'\"> <input type=\"checkbox\" [(ngModel)]=\"u.readOnly\" name=\"{{u.id.substr(0,8)}}_ReadOnly\" [disabled]=\"u.accessAll || !u.checked\"> </td> </tr> </tbody> </table> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","export enum DeviceType {\n    Android = 0,\n    iOS = 1,\n    ChromeExtension = 2,\n    FirefoxExtension = 3,\n    OperaExtension = 4,\n    EdgeExtension = 5,\n    WindowsDesktop = 6,\n    MacOsDesktop = 7,\n    LinuxDesktop = 8,\n    ChromeBrowser = 9,\n    FirefoxBrowser = 10,\n    OperaBrowser = 11,\n    EdgeBrowser = 12,\n    IEBrowser = 13,\n    UnknownBrowser = 14,\n    AndroidAmazon = 15,\n    UWP = 16,\n    SafariBrowser = 17,\n    VivaldiBrowser = 18,\n    VivaldiExtension = 19,\n    SafariExtension = 20,\n}\n","import { KeysRequest } from './keysRequest';\n\nexport class OrganizationKeysRequest extends KeysRequest {\n    constructor(publicKey: string, encryptedPrivateKey: string) {\n        super(publicKey, encryptedPrivateKey);\n    }\n}\n","export class OrganizationUserBulkRequest {\n    ids: string[];\n\n    constructor(ids: string[]) {\n        this.ids = ids == null ? [] : ids;\n    }\n}\n","import {\n    Component,\n    Input,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { EventService } from '../../services/event.service';\n\nimport { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe';\n\nimport { EventResponse } from 'jslib-common/models/response/eventResponse';\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\n\n@Component({\n    selector: 'app-entity-events',\n    templateUrl: 'entity-events.component.html',\n})\nexport class EntityEventsComponent implements OnInit {\n    @Input() name: string;\n    @Input() entity: 'user' | 'cipher';\n    @Input() entityId: string;\n    @Input() organizationId: string;\n    @Input() providerId: string;\n    @Input() showUser = false;\n\n    loading = true;\n    loaded = false;\n    events: any[];\n    start: string;\n    end: string;\n    continuationToken: string;\n    refreshPromise: Promise<any>;\n    morePromise: Promise<any>;\n\n    private orgUsersUserIdMap = new Map<string, any>();\n    private orgUsersIdMap = new Map<string, any>();\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private eventService: EventService, private toasterService: ToasterService,\n        private userNamePipe: UserNamePipe, private logService: LogService) { }\n\n    async ngOnInit() {\n        const defaultDates = this.eventService.getDefaultDateFilters();\n        this.start = defaultDates[0];\n        this.end = defaultDates[1];\n        await this.load();\n    }\n\n    async load() {\n        if (this.showUser) {\n            const response = await this.apiService.getOrganizationUsers(this.organizationId);\n            response.data.forEach(u => {\n                const name = this.userNamePipe.transform(u);\n                this.orgUsersIdMap.set(u.id, { name: name, email: u.email });\n                this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n            });\n        }\n        await this.loadEvents(true);\n        this.loaded = true;\n    }\n\n    async loadEvents(clearExisting: boolean) {\n        if (this.refreshPromise != null || this.morePromise != null) {\n            return;\n        }\n\n        let dates: string[] = null;\n        try {\n            dates = this.eventService.formatDateFilters(this.start, this.end);\n        } catch (e) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('invalidDateRange'));\n            return;\n        }\n\n        this.loading = true;\n        let response: ListResponse<EventResponse>;\n        try {\n            let promise: Promise<any>;\n            if (this.entity === 'user' && this.providerId) {\n                promise = this.apiService.getEventsProviderUser(this.providerId, this.entityId,\n                    dates[0], dates[1], clearExisting ? null : this.continuationToken);\n            } else if (this.entity === 'user') {\n                promise = this.apiService.getEventsOrganizationUser(this.organizationId, this.entityId,\n                    dates[0], dates[1], clearExisting ? null : this.continuationToken);\n            } else {\n                promise = this.apiService.getEventsCipher(this.entityId,\n                    dates[0], dates[1], clearExisting ? null : this.continuationToken);\n            }\n            if (clearExisting) {\n                this.refreshPromise = promise;\n            } else {\n                this.morePromise = promise;\n            }\n            response = await promise;\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        this.continuationToken = response.continuationToken;\n        const events = await Promise.all(response.data.map(async r => {\n            const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n            const eventInfo = await this.eventService.getEventInfo(r);\n            const user = this.showUser && userId != null && this.orgUsersUserIdMap.has(userId) ?\n                this.orgUsersUserIdMap.get(userId) : null;\n            return {\n                message: eventInfo.message,\n                appIcon: eventInfo.appIcon,\n                appName: eventInfo.appName,\n                userId: userId,\n                userName: user != null ? user.name : this.showUser ? this.i18nService.t('unknown') : null,\n                userEmail: user != null ? user.email : this.showUser ? '' : null,\n                date: r.date,\n                ip: r.ipAddress,\n                type: r.type,\n            };\n        }));\n\n        if (!clearExisting && this.events != null && this.events.length > 0) {\n            this.events = this.events.concat(events);\n        } else {\n            this.events = events;\n        }\n\n        this.loading = false;\n        this.morePromise = null;\n        this.refreshPromise = null;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"eventLogsTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"eventLogsTitle\"> {{'eventLogs' | i18n}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"!loaded\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"modal-body\" *ngIf=\"loaded\"> <div class=\"d-flex\"> <div class=\"form-inline\"> <label class=\"sr-only\" for=\"start\">{{'startDate' | i18n}}</label> <input type=\"datetime-local\" class=\"form-control form-control-sm\" id=\"start\" placeholder=\"{{'startDate' | i18n}}\" [(ngModel)]=\"start\" placeholder=\"YYYY-MM-DDTHH:MM\"> <span class=\"mx-2\">-</span> <label class=\"sr-only\" for=\"end\">{{'endDate' | i18n}}</label> <input type=\"datetime-local\" class=\"form-control form-control-sm\" id=\"end\" placeholder=\"{{'endDate' | i18n}}\" [(ngModel)]=\"end\" placeholder=\"YYYY-MM-DDTHH:MM\"> </div> <button #refreshBtn [appApiAction]=\"refreshPromise\" type=\"button\" class=\"btn btn-sm btn-outline-primary ml-3\" (click)=\"loadEvents(true)\" [disabled]=\"loaded && refreshBtn.loading\"> <i class=\"fa fa-refresh fa-fw\" [ngClass]=\"{'fa-spin': loaded && refreshBtn.loading}\" aria-hidden=\"true\"></i> {{'refresh' | i18n}} </button> </div> <hr> <div *ngIf=\"!events || !events.length\"> {{'noEventsInList' | i18n}} </div> <table class=\"table table-hover mb-0\" *ngIf=\"events && events.length\"> <thead> <tr> <th class=\"border-top-0\" width=\"210\">{{'timestamp' | i18n}}</th> <th class=\"border-top-0\" width=\"40\"> <span class=\"sr-only\">{{'device' | i18n}}</span> </th> <th class=\"border-top-0\" width=\"150\" *ngIf=\"showUser\">{{'user' | i18n}}</th> <th class=\"border-top-0\">{{'event' | i18n}}</th> </tr> </thead> <tbody> <tr *ngFor=\"let e of events\"> <td>{{e.date | date:'medium'}}</td> <td> <i class=\"text-muted fa fa-lg {{e.appIcon}}\" title=\"{{e.appName}}, {{e.ip}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{e.appName}}, {{e.ip}}</span> </td> <td *ngIf=\"showUser\"> <span appA11yTitle=\"{{e.userEmail}}\">{{e.userName}}</span> </td> <td [innerHTML]=\"e.message\"></td> </tr> </tbody> </table> <button #moreBtn [appApiAction]=\"morePromise\" type=\"button\" class=\"btn btn-block btn-link btn-submit\" (click)=\"loadEvents(false)\" [disabled]=\"loaded && moreBtn.loading\" *ngIf=\"continuationToken\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'loadMore' | i18n}}</span> </button> </div> <div class=\"modal-footer\"> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </div> </div> </div> ","import { Component } from '@angular/core';\n\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { SecretVerificationRequest } from 'jslib-common/models/request/secretVerificationRequest';\n\nimport { ApiKeyResponse } from 'jslib-common/models/response/apiKeyResponse';\n\nimport { Verification } from 'jslib-common/types/verification';\n\n@Component({\n    selector: 'app-api-key',\n    templateUrl: 'api-key.component.html',\n})\nexport class ApiKeyComponent {\n    keyType: string;\n    isRotation: boolean;\n    postKey: (entityId: string, request: SecretVerificationRequest) => Promise<ApiKeyResponse>;\n    entityId: string;\n    scope: string;\n    grantType: string;\n    apiKeyTitle: string;\n    apiKeyWarning: string;\n    apiKeyDescription: string;\n\n    masterPassword: Verification;\n    formPromise: Promise<ApiKeyResponse>;\n    clientId: string;\n    clientSecret: string;\n\n    constructor(private userVerificationService: UserVerificationService, private logService: LogService) { }\n\n    async submit() {\n        try {\n            this.formPromise = this.userVerificationService.buildRequest(this.masterPassword)\n                .then(request => this.postKey(this.entityId, request));\n            const response = await this.formPromise;\n            this.clientSecret = response.apiKey;\n            this.clientId = `${this.keyType}.${this.entityId}`;\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"apiKeyTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"apiKeyTitle\">{{apiKeyTitle | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{apiKeyDescription | i18n}}</p> <app-verify-master-password [(ngModel)]=\"masterPassword\" ngDefaultControl name=\"secret\" *ngIf=\"!clientSecret\"> </app-verify-master-password> <app-callout type=\"warning\" *ngIf=\"clientSecret\">{{apiKeyWarning | i18n}}</app-callout> <app-callout type=\"info\" title=\"{{'oauth2ClientCredentials' | i18n}}\" icon=\"fa-key\" *ngIf=\"clientSecret\"> <p class=\"mb-1\"> <strong>client_id:</strong><br> <code>{{clientId}}</code> </p> <p class=\"mb-1\"> <strong>client_secret:</strong><br> <code>{{clientSecret}}</code> </p> <p class=\"mb-1\"> <strong>scope:</strong><br> <code>{{scope}}</code> </p> <p class=\"mb-0\"> <strong>grant_type:</strong><br> <code>{{grantType}}</code> </p> </app-callout> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\" *ngIf=\"!clientSecret\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{(isRotation ? 'rotateApiKey' : 'viewApiKey') | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","export enum VerificationType {\n    MasterPassword = 0,\n    OTP = 1,\n}\n","import {\n    Component,\n    Input,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { Verification } from 'jslib-common/types/verification';\n\n@Component({\n    selector: 'app-purge-vault',\n    templateUrl: 'purge-vault.component.html',\n})\nexport class PurgeVaultComponent {\n    @Input() organizationId?: string = null;\n\n    masterPassword: Verification;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private userVerificationService: UserVerificationService,\n        private router: Router, private logService: LogService) { }\n\n    async submit() {\n        try {\n            this.formPromise = this.userVerificationService.buildRequest(this.masterPassword)\n                .then(request => this.apiService.postPurgeCiphers(request, this.organizationId));\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('vaultPurged'));\n            if (this.organizationId != null) {\n                this.router.navigate(['organizations', this.organizationId, 'vault']);\n            } else {\n                this.router.navigate(['vault']);\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"purgeVaultTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"purgeVaultTitle\">{{'purgeVault' | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{(organizationId ? 'purgeOrgVaultDesc' : 'purgeVaultDesc') | i18n}}</p> <app-callout type=\"warning\">{{'purgeVaultWarning' | i18n}}</app-callout> <app-verify-master-password [(ngModel)]=\"masterPassword\" ngDefaultControl name=\"secret\"> </app-verify-master-password> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-danger btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'purgeVault' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { Verification } from 'jslib-common/types/verification';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\n@Component({\n    selector: 'app-delete-organization',\n    templateUrl: 'delete-organization.component.html',\n})\nexport class DeleteOrganizationComponent {\n    organizationId: string;\n    descriptionKey = 'deleteOrganizationDesc';\n    @Output() onSuccess: EventEmitter<any> = new EventEmitter();\n\n    masterPassword: Verification;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private userVerificationService: UserVerificationService,\n        private logService: LogService) { }\n\n    async submit() {\n        try {\n            this.formPromise = this.userVerificationService.buildRequest(this.masterPassword)\n                .then(request => this.apiService.deleteOrganization(this.organizationId, request));\n            await this.formPromise;\n            this.toasterService.popAsync('success', this.i18nService.t('organizationDeleted'),\n                this.i18nService.t('organizationDeletedDesc'));\n            this.onSuccess.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"deleteOrganizationTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"deleteOrganizationTitle\">{{'deleteOrganization' | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{descriptionKey | i18n}}</p> <app-callout type=\"warning\">{{'deleteOrganizationWarning' | i18n}}</app-callout> <app-verify-master-password [(ngModel)]=\"masterPassword\" ngDefaultControl name=\"secret\"> </app-verify-master-password> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-danger btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'deleteOrganization' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { BillingResponse } from 'jslib-common/models/response/billingResponse';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\nimport { TransactionType } from 'jslib-common/enums/transactionType';\nimport { VerifyBankRequest } from 'jslib-common/models/request/verifyBankRequest';\n\n@Component({\n    selector: 'app-user-billing',\n    templateUrl: 'user-billing.component.html',\n})\nexport class UserBillingComponent implements OnInit {\n    loading = false;\n    firstLoaded = false;\n    showAdjustPayment = false;\n    showAddCredit = false;\n    billing: BillingResponse;\n    paymentMethodType = PaymentMethodType;\n    transactionType = TransactionType;\n    organizationId: string;\n    verifyAmount1: number;\n    verifyAmount2: number;\n\n    verifyBankPromise: Promise<any>;\n\n    constructor(protected apiService: ApiService, protected i18nService: I18nService,\n        protected toasterService: ToasterService, protected platformUtilsService: PlatformUtilsService,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        await this.load();\n        this.firstLoaded = true;\n    }\n\n    async load() {\n        if (this.loading) {\n            return;\n        }\n        this.loading = true;\n        if (this.organizationId != null) {\n            this.billing = await this.apiService.getOrganizationBilling(this.organizationId);\n        } else {\n            this.billing = await this.apiService.getUserBilling();\n        }\n        this.loading = false;\n    }\n\n    async verifyBank() {\n        if (this.loading) {\n            return;\n        }\n\n        try {\n            const request = new VerifyBankRequest();\n            request.amount1 = this.verifyAmount1;\n            request.amount2 = this.verifyAmount2;\n            this.verifyBankPromise = this.apiService.postOrganizationVerifyBank(this.organizationId, request);\n            await this.verifyBankPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('verifiedBankAccount'));\n            this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    addCredit() {\n        if (this.paymentSourceInApp) {\n            this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n                this.i18nService.t('addCredit'), null, null, 'warning');\n            return;\n        }\n        this.showAddCredit = true;\n    }\n\n    closeAddCredit(load: boolean) {\n        this.showAddCredit = false;\n        if (load) {\n            this.load();\n        }\n    }\n\n    changePayment() {\n        if (this.paymentSourceInApp) {\n            this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n                this.i18nService.t('changePaymentMethod'), null, null, 'warning');\n            return;\n        }\n        this.showAdjustPayment = true;\n    }\n\n    closePayment(load: boolean) {\n        this.showAdjustPayment = false;\n        if (load) {\n            this.load();\n        }\n    }\n\n    get isCreditBalance() {\n        return this.billing == null || this.billing.balance <= 0;\n    }\n\n    get creditOrBalance() {\n        return Math.abs(this.billing != null ? this.billing.balance : 0);\n    }\n\n    get paymentSource() {\n        return this.billing != null ? this.billing.paymentSource : null;\n    }\n\n    get paymentSourceInApp() {\n        return this.paymentSource != null &&\n            (this.paymentSource.type === PaymentMethodType.AppleInApp ||\n                this.paymentSource.type === PaymentMethodType.GoogleInApp);\n    }\n\n    get invoices() {\n        return this.billing != null ? this.billing.invoices : null;\n    }\n\n    get transactions() {\n        return this.billing != null ? this.billing.transactions : null;\n    }\n}\n","<div class=\"page-header d-flex\"> <h1> {{'billing' | i18n}} </h1> <button (click)=\"load()\" class=\"btn btn-sm btn-outline-primary ml-auto\" *ngIf=\"firstLoaded\" [disabled]=\"loading\"> <i class=\"fa fa-refresh fa-fw\" [ngClass]=\"{'fa-spin': loading}\" aria-hidden=\"true\"></i> {{'refresh' | i18n}} </button> </div> <ng-container *ngIf=\"!firstLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"billing\"> <h2>{{(isCreditBalance ? 'accountCredit' : 'accountBalance') | i18n}}</h2> <p class=\"text-lg\"><strong>{{creditOrBalance | currency:'$'}}</strong></p> <p>{{'creditAppliedDesc' | i18n}}</p> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"addCredit()\" *ngIf=\"!showAddCredit\"> {{'addCredit' | i18n}} </button> <app-add-credit [organizationId]=\"organizationId\" (onAdded)=\"closeAddCredit(true)\" (onCanceled)=\"closeAddCredit(false)\" *ngIf=\"showAddCredit\"> </app-add-credit> <h2 class=\"spaced-header\">{{'paymentMethod' | i18n}}</h2> <p *ngIf=\"!paymentSource\">{{'noPaymentMethod' | i18n}}</p> <ng-container *ngIf=\"paymentSource\"> <app-callout type=\"warning\" title=\"{{'verifyBankAccount' | i18n}}\" *ngIf=\"paymentSource.type === paymentMethodType.BankAccount && paymentSource.needsVerification\"> <p>{{'verifyBankAccountDesc' | i18n}} {{'verifyBankAccountFailureWarning' | i18n}}</p> <form #verifyForm class=\"form-inline\" (ngSubmit)=\"verifyBank()\" [appApiAction]=\"verifyBankPromise\" ngNativeValidate> <label class=\"sr-only\" for=\"verifyAmount1\">{{'amount' | i18n : '1'}}</label> <div class=\"input-group mr-2\"> <div class=\"input-group-prepend\"> <div class=\"input-group-text\">$0.</div> </div> <input type=\"number\" class=\"form-control\" id=\"verifyAmount1\" placeholder=\"xx\" name=\"Amount1\" [(ngModel)]=\"verifyAmount1\" min=\"1\" max=\"99\" step=\"1\" required> </div> <label class=\"sr-only\" for=\"verifyAmount2\">{{'amount' | i18n : '2'}}</label> <div class=\"input-group mr-2\"> <div class=\"input-group-prepend\"> <div class=\"input-group-text\">$0.</div> </div> <input type=\"number\" class=\"form-control\" id=\"verifyAmount2\" placeholder=\"xx\" name=\"Amount2\" [(ngModel)]=\"verifyAmount2\" min=\"1\" max=\"99\" step=\"1\" required> </div> <button type=\"submit\" class=\"btn btn-outline-primary btn-submit\" [disabled]=\"verifyForm.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'verifyBankAccount' | i18n}}</span> </button> </form> </app-callout> <p> <i class=\"fa fa-fw\" [ngClass]=\"{'fa-credit-card': paymentSource.type === paymentMethodType.Card,\n                    'fa-university': paymentSource.type === paymentMethodType.BankAccount,\n                    'fa-money': paymentSource.type === paymentMethodType.Check,\n                    'fa-paypal text-primary': paymentSource.type === paymentMethodType.PayPal,\n                    'fa-apple text-muted': paymentSource.type === paymentMethodType.AppleInApp,\n                    'fa-google text-muted': paymentSource.type === paymentMethodType.GoogleInApp}\"></i> <span *ngIf=\"paymentSourceInApp\">{{'inAppPurchase' | i18n}}</span> {{paymentSource.description}} </p> </ng-container> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"changePayment()\" *ngIf=\"!showAdjustPayment\"> {{(paymentSource ? 'changePaymentMethod' : 'addPaymentMethod') | i18n}} </button> <app-adjust-payment [currentType]=\"paymentSource != null ? paymentSource.type : null\" [organizationId]=\"organizationId\" (onAdjusted)=\"closePayment(true)\" (onCanceled)=\"closePayment(false)\" *ngIf=\"showAdjustPayment\"> </app-adjust-payment> <h2 class=\"spaced-header\">{{'invoices' | i18n}}</h2> <p *ngIf=\"!invoices || !invoices.length\">{{'noInvoices' | i18n}}</p> <table class=\"table mb-2\" *ngIf=\"invoices && invoices.length\"> <tbody> <tr *ngFor=\"let i of invoices\"> <td>{{i.date | date:'mediumDate'}}</td> <td> <a href=\"{{i.pdfUrl}}\" target=\"_blank\" rel=\"noopener\" class=\"mr-2\" appA11yTitle=\"{{'downloadInvoice' | i18n}}\"> <i class=\"fa fa-file-pdf-o\" aria-hidden=\"true\"></i></a> <a href=\"{{i.url}}\" target=\"_blank\" rel=\"noopener\" title=\"{{'viewInvoice' | i18n}}\"> {{'invoiceNumber' | i18n : i.number}}</a> </td> <td>{{i.amount | currency:'$'}}</td> <td> <span *ngIf=\"i.paid\"> <i class=\"fa fa-check text-success\" aria-hidden=\"true\"></i> {{'paid' | i18n}} </span> <span *ngIf=\"!i.paid\"> <i class=\"fa fa-exclamation-circle text-muted\" aria-hidden=\"true\"></i> {{'unpaid' | i18n}} </span> </td> </tr> </tbody> </table> <h2 class=\"spaced-header\">{{'transactions' | i18n}}</h2> <p *ngIf=\"!transactions || !transactions.length\">{{'noTransactions' | i18n}}</p> <table class=\"table mb-2\" *ngIf=\"transactions && transactions.length\"> <tbody> <tr *ngFor=\"let t of transactions\"> <td>{{t.createdDate | date:'mediumDate'}}</td> <td> <span *ngIf=\"t.type === transactionType.Charge || t.type === transactionType.Credit\"> {{'chargeNoun' | i18n}} </span> <span *ngIf=\"t.type === transactionType.Refund\">{{'refundNoun' | i18n}}</span> </td> <td> <i class=\"fa fa-fw\" *ngIf=\"t.paymentMethodType\" aria-hidden=\"true\" [ngClass]=\"{\n                            'fa-credit-card': t.paymentMethodType === paymentMethodType.Card,\n                            'fa-university': t.paymentMethodType === paymentMethodType.BankAccount ||\n                                t.paymentMethodType === paymentMethodType.WireTransfer,\n                            'fa-bitcoin text-warning': t.paymentMethodType === paymentMethodType.BitPay,\n                            'fa-paypal text-primary': t.paymentMethodType === paymentMethodType.PayPal\n                        }\"></i> {{t.details}} </td> <td [ngClass]=\"{'text-strike': t.refunded}\" title=\"{{(t.refunded ? 'refunded' : '') | i18n}}\"> {{t.amount | currency:'$'}}</td> </tr> </tbody> </table> <small class=\"text-muted\">* {{'chargesStatement' | i18n : 'BITWARDEN'}}</small> </ng-container> ","import {\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n    ViewChild,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { PayPalConfig } from 'jslib-common/abstractions/environment.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\n\nimport { BitPayInvoiceRequest } from 'jslib-common/models/request/bitPayInvoiceRequest';\n\n@Component({\n    selector: 'app-add-credit',\n    templateUrl: 'add-credit.component.html',\n})\nexport class AddCreditComponent implements OnInit {\n    @Input() creditAmount: string;\n    @Input() showOptions = true;\n    @Input() method = PaymentMethodType.PayPal;\n    @Input() organizationId: string;\n    @Output() onAdded = new EventEmitter();\n    @Output() onCanceled = new EventEmitter();\n\n    @ViewChild('ppButtonForm', { read: ElementRef, static: true }) ppButtonFormRef: ElementRef;\n\n    paymentMethodType = PaymentMethodType;\n    ppButtonFormAction: string;\n    ppButtonBusinessId: string;\n    ppButtonCustomField: string;\n    ppLoading = false;\n    subject: string;\n    returnUrl: string;\n    formPromise: Promise<any>;\n\n    private userId: string;\n    private name: string;\n    private email: string;\n\n    constructor(private userService: UserService, private apiService: ApiService,\n        private platformUtilsService: PlatformUtilsService, private logService: LogService) {\n        const payPalConfig = process.env.PAYPAL_CONFIG as PayPalConfig;\n        this.ppButtonFormAction = payPalConfig.buttonAction;\n        this.ppButtonBusinessId = payPalConfig.businessId;\n    }\n\n    async ngOnInit() {\n        if (this.organizationId != null) {\n            if (this.creditAmount == null) {\n                this.creditAmount = '20.00';\n            }\n            this.ppButtonCustomField = 'organization_id:' + this.organizationId;\n            const org = await this.userService.getOrganization(this.organizationId);\n            if (org != null) {\n                this.subject = org.name;\n                this.name = org.name;\n            }\n        } else {\n            if (this.creditAmount == null) {\n                this.creditAmount = '10.00';\n            }\n            this.userId = await this.userService.getUserId();\n            this.subject = await this.userService.getEmail();\n            this.email = this.subject;\n            this.ppButtonCustomField = 'user_id:' + this.userId;\n        }\n        this.ppButtonCustomField += ',account_credit:1';\n        this.returnUrl = window.location.href;\n    }\n\n    async submit() {\n        if (this.creditAmount == null || this.creditAmount === '') {\n            return;\n        }\n\n        if (this.method === PaymentMethodType.PayPal) {\n            this.ppButtonFormRef.nativeElement.submit();\n            this.ppLoading = true;\n            return;\n        }\n        if (this.method === PaymentMethodType.BitPay) {\n            try {\n                const req = new BitPayInvoiceRequest();\n                req.email = this.email;\n                req.name = this.name;\n                req.credit = true;\n                req.amount = this.creditAmountNumber;\n                req.organizationId = this.organizationId;\n                req.userId = this.userId;\n                req.returnUrl = this.returnUrl;\n                this.formPromise = this.apiService.postBitPayInvoice(req);\n                const bitPayUrl: string = await this.formPromise;\n                this.platformUtilsService.launchUri(bitPayUrl);\n            } catch (e) {\n                this.logService.error(e);\n            }\n            return;\n        }\n        try {\n            this.onAdded.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    cancel() {\n        this.onCanceled.emit();\n    }\n\n    formatAmount() {\n        try {\n            if (this.creditAmount != null && this.creditAmount !== '') {\n                const floatAmount = Math.abs(parseFloat(this.creditAmount));\n                if (floatAmount > 0) {\n                    this.creditAmount = parseFloat((Math.round(floatAmount * 100) / 100).toString())\n                        .toFixed(2).toString();\n                    return;\n                }\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.creditAmount = '';\n    }\n\n    get creditAmountNumber(): number {\n        if (this.creditAmount != null && this.creditAmount !== '') {\n            try {\n                return parseFloat(this.creditAmount);\n            } catch (e) {\n                this.logService.error(e);\n            }\n        }\n        return null;\n    }\n}\n","<form #form class=\"card\" (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"card-body\"> <button type=\"button\" class=\"close\" appA11yTitle=\"{{'cancel' | i18n}}\" (click)=\"cancel()\"><span aria-hidden=\"true\">&times;</span></button> <h3 class=\"card-body-header\">{{'addCredit' | i18n}}</h3> <div class=\"mb-4 text-lg\" *ngIf=\"showOptions\"> <div class=\"form-check form-check-inline\"> <input class=\"form-check-input\" type=\"radio\" name=\"Method\" id=\"credit-method-paypal\" [value]=\"paymentMethodType.PayPal\" [(ngModel)]=\"method\"> <label class=\"form-check-label\" for=\"credit-method-paypal\"> <i class=\"fa fa-fw fa-paypal\" aria-hidden=\"true\"></i> PayPal</label> </div> <div class=\"form-check form-check-inline\"> <input class=\"form-check-input\" type=\"radio\" name=\"Method\" id=\"credit-method-bitcoin\" [value]=\"paymentMethodType.BitPay\" [(ngModel)]=\"method\"> <label class=\"form-check-label\" for=\"credit-method-bitcoin\"> <i class=\"fa fa-fw fa-bitcoin\" aria-hidden=\"true\"></i> Bitcoin</label> </div> </div> <div class=\"form-group\"> <div class=\"row\"> <div class=\"col-4\"> <label for=\"creditAmount\">{{'amount' | i18n}}</label> <div class=\"input-group\"> <div class=\"input-group-prepend\"><span class=\"input-group-text\">$USD</span></div> <input id=\"creditAmount\" class=\"form-control\" type=\"text\" name=\"CreditAmount\" [(ngModel)]=\"creditAmount\" (blur)=\"formatAmount()\" required> </div> </div> </div> <small class=\"form-text text-muted\">{{'creditDelayed' | i18n}}</small> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading || ppLoading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"cancel()\"> {{'cancel' | i18n}} </button> </div> </form> <form #ppButtonForm action=\"{{ppButtonFormAction}}\" method=\"post\" target=\"_top\"> <input type=\"hidden\" name=\"cmd\" value=\"_xclick\"> <input type=\"hidden\" name=\"business\" value=\"{{ppButtonBusinessId}}\"> <input type=\"hidden\" name=\"button_subtype\" value=\"services\"> <input type=\"hidden\" name=\"no_note\" value=\"1\"> <input type=\"hidden\" name=\"no_shipping\" value=\"1\"> <input type=\"hidden\" name=\"rm\" value=\"1\"> <input type=\"hidden\" name=\"return\" value=\"{{returnUrl}}\"> <input type=\"hidden\" name=\"cancel_return\" value=\"{{returnUrl}}\"> <input type=\"hidden\" name=\"currency_code\" value=\"USD\"> <input type=\"hidden\" name=\"image_url\" value=\"https://bitwarden.com/images/paypal-banner.png\"> <input type=\"hidden\" name=\"bn\" value=\"PP-BuyNowBF:btn_buynow_LG.gif:NonHosted\"> <input type=\"hidden\" name=\"amount\" value=\"{{creditAmount}}\"> <input type=\"hidden\" name=\"custom\" value=\"{{ppButtonCustomField}}\"> <input type=\"hidden\" name=\"item_name\" value=\"Bitwarden Account Credit\"> <input type=\"hidden\" name=\"item_number\" value=\"{{subject}}\"> </form> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n    ViewChild,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { PaymentRequest } from 'jslib-common/models/request/paymentRequest';\n\nimport { PaymentMethodType } from 'jslib-common/enums/paymentMethodType';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\n@Component({\n    selector: 'app-adjust-payment',\n    templateUrl: 'adjust-payment.component.html',\n})\nexport class AdjustPaymentComponent {\n    @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n    @ViewChild(TaxInfoComponent, { static: true }) taxInfoComponent: TaxInfoComponent;\n\n    @Input() currentType?: PaymentMethodType;\n    @Input() organizationId: string;\n    @Output() onAdjusted = new EventEmitter();\n    @Output() onCanceled = new EventEmitter();\n\n    paymentMethodType = PaymentMethodType;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    async submit() {\n        try {\n            const request = new PaymentRequest();\n            this.formPromise = this.paymentComponent.createPaymentToken().then(result => {\n                request.paymentToken = result[0];\n                request.paymentMethodType = result[1];\n                request.postalCode = this.taxInfoComponent.taxInfo.postalCode;\n                request.country = this.taxInfoComponent.taxInfo.country;\n                if (this.organizationId == null) {\n                    return this.apiService.postAccountPayment(request);\n                } else {\n                    request.taxId = this.taxInfoComponent.taxInfo.taxId;\n                    request.state = this.taxInfoComponent.taxInfo.state;\n                    request.line1 = this.taxInfoComponent.taxInfo.line1;\n                    request.line2 = this.taxInfoComponent.taxInfo.line2;\n                    request.city = this.taxInfoComponent.taxInfo.city;\n                    request.state = this.taxInfoComponent.taxInfo.state;\n                    return this.apiService.postOrganizationPayment(this.organizationId, request);\n                }\n            });\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('updatedPaymentMethod'));\n            this.onAdjusted.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    cancel() {\n        this.onCanceled.emit();\n    }\n\n    changeCountry() {\n        if (this.taxInfoComponent.taxInfo.country === 'US') {\n            this.paymentComponent.hideBank = !this.organizationId;\n        } else {\n            this.paymentComponent.hideBank = true;\n            if (this.paymentComponent.method === PaymentMethodType.BankAccount) {\n                this.paymentComponent.method = PaymentMethodType.Card;\n                this.paymentComponent.changeMethod();\n            }\n        }\n    }\n}\n","<form #form class=\"card\" (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"card-body\"> <button type=\"button\" class=\"close\" appA11yTitle=\"{{'cancel' | i18n}}\" (click)=\"cancel()\"><span aria-hidden=\"true\">&times;</span></button> <h3 class=\"card-body-header\">{{(currentType != null ? 'changePaymentMethod' : 'addPaymentMethod') | i18n}}</h3> <app-payment [hideBank]=\"!organizationId\" [hideCredit]=\"true\"></app-payment> <app-tax-info (onCountryChanged)=\"changeCountry()\"></app-tax-info> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"cancel()\"> {{'cancel' | i18n}} </button> </div> </form> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n    ViewChild,\n} from '@angular/core';\n\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { StorageRequest } from 'jslib-common/models/request/storageRequest';\n\nimport { PaymentResponse } from 'jslib-common/models/response/paymentResponse';\n\nimport { PaymentComponent } from './payment.component';\n\n@Component({\n    selector: 'app-adjust-storage',\n    templateUrl: 'adjust-storage.component.html',\n})\nexport class AdjustStorageComponent {\n    @Input() storageGbPrice = 0;\n    @Input() add = true;\n    @Input() organizationId: string;\n    @Input() interval = 'year';\n    @Output() onAdjusted = new EventEmitter<number>();\n    @Output() onCanceled = new EventEmitter();\n\n    @ViewChild(PaymentComponent, { static: true }) paymentComponent: PaymentComponent;\n\n    storageAdjustment = 0;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private router: Router,\n        private activatedRoute: ActivatedRoute, private logService: LogService) { }\n\n    async submit() {\n        try {\n            const request = new StorageRequest();\n            request.storageGbAdjustment = this.storageAdjustment;\n            if (!this.add) {\n                request.storageGbAdjustment *= -1;\n            }\n\n            let paymentFailed = false;\n            const action = async () => {\n                let response: Promise<PaymentResponse>;\n                if (this.organizationId == null) {\n                    response = this.formPromise = this.apiService.postAccountStorage(request);\n                } else {\n                    response = this.formPromise = this.apiService.postOrganizationStorage(this.organizationId, request);\n                }\n                const result = await response;\n                if (result != null && result.paymentIntentClientSecret != null) {\n                    try {\n                        await this.paymentComponent.handleStripeCardPayment(result.paymentIntentClientSecret, null);\n                    } catch {\n                        paymentFailed = true;\n                    }\n                }\n            };\n            this.formPromise = action();\n            await this.formPromise;\n            this.onAdjusted.emit(this.storageAdjustment);\n            if (paymentFailed) {\n                this.toasterService.popAsync({\n                    body: this.i18nService.t('couldNotChargeCardPayInvoice'),\n                    type: 'warning',\n                    timeout: 10000,\n                });\n                this.router.navigate(['../billing'], { relativeTo: this.activatedRoute });\n            } else {\n                this.toasterService.popAsync('success', null,\n                    this.i18nService.t('adjustedStorage', request.storageGbAdjustment.toString()));\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    cancel() {\n        this.onCanceled.emit();\n    }\n\n    get adjustedStorageTotal(): number {\n        return this.storageGbPrice * this.storageAdjustment;\n    }\n}\n","<form #form class=\"card\" (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"card-body\"> <button type=\"button\" class=\"close\" appA11yTitle=\"{{'cancel' | i18n}}\" (click)=\"cancel()\"><span aria-hidden=\"true\">&times;</span></button> <h3 class=\"card-body-header\">{{(add ? 'addStorage' : 'removeStorage') | i18n}}</h3> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"storageAdjustment\">{{(add ? 'gbStorageAdd' : 'gbStorageRemove') | i18n}}</label> <input id=\"storageAdjustment\" class=\"form-control\" type=\"number\" name=\"StroageGbAdjustment\" [(ngModel)]=\"storageAdjustment\" min=\"0\" max=\"99\" step=\"1\" required> </div> </div> <div *ngIf=\"add\" class=\"mb-3\"> <strong>{{'total' | i18n}}:</strong> {{storageAdjustment || 0}} GB &times; {{storageGbPrice | currency:'$'}} = {{adjustedStorageTotal | currency:'$'}} /{{interval | i18n}} </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"cancel()\"> {{'cancel' | i18n}} </button> <small class=\"d-block text-muted mt-3\"> {{(add ? 'storageAddNote' : 'storageRemoveNote') | i18n}} </small> </div> </form> <app-payment [showMethods]=\"false\"></app-payment> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\n@Component({\n    selector: 'app-update-license',\n    templateUrl: 'update-license.component.html',\n})\nexport class UpdateLicenseComponent {\n    @Input() organizationId: string;\n    @Output() onUpdated = new EventEmitter();\n    @Output() onCanceled = new EventEmitter();\n\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    async submit() {\n        const fileEl = document.getElementById('file') as HTMLInputElement;\n        const files = fileEl.files;\n        if (files == null || files.length === 0) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('selectFile'));\n            return;\n        }\n\n        try {\n            const fd = new FormData();\n            fd.append('license', files[0]);\n\n            let updatePromise: Promise<any> = null;\n            if (this.organizationId == null) {\n                updatePromise = this.apiService.postAccountLicense(fd);\n            } else {\n                updatePromise = this.apiService.postOrganizationLicenseUpdate(this.organizationId, fd);\n            }\n\n            this.formPromise = updatePromise.then(() => {\n                return this.apiService.refreshIdentityToken();\n            });\n\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('updatedLicense'));\n            this.onUpdated.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    cancel() {\n        this.onCanceled.emit();\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"form-group\"> <label for=\"file\" class=\"sr-only\">{{'licenseFile' | i18n}}</label> <input type=\"file\" id=\"file\" class=\"form-control-file\" name=\"file\" required> <small class=\"form-text text-muted\">{{'licenseFileDesc' | i18n : (!organizationId ? 'bitwarden_premium_license.json' : 'bitwarden_organization_license.json')}}</small> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"cancel()\"> {{'cancel' | i18n}} </button> </form> ","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\nimport { UpdateTwoFactorDuoRequest } from 'jslib-common/models/request/updateTwoFactorDuoRequest';\nimport { TwoFactorDuoResponse } from 'jslib-common/models/response/twoFactorDuoResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n    selector: 'app-two-factor-duo',\n    templateUrl: 'two-factor-duo.component.html',\n})\nexport class TwoFactorDuoComponent extends TwoFactorBaseComponent {\n    type = TwoFactorProviderType.Duo;\n    ikey: string;\n    skey: string;\n    host: string;\n    formPromise: Promise<any>;\n\n    constructor(apiService: ApiService, i18nService: I18nService,\n        toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n        logService: LogService, userVerificationService: UserVerificationService) {\n        super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService);\n    }\n\n    auth(authResponse: any) {\n        super.auth(authResponse);\n        this.processResponse(authResponse.response);\n    }\n\n    submit() {\n        if (this.enabled) {\n            return super.disable(this.formPromise);\n        } else {\n            return this.enable();\n        }\n    }\n\n    protected async enable() {\n        const request = await this.buildRequestModel(UpdateTwoFactorDuoRequest);\n        request.integrationKey = this.ikey;\n        request.secretKey = this.skey;\n        request.host = this.host;\n\n        return super.enable(async () => {\n            if (this.organizationId != null) {\n                this.formPromise = this.apiService.putTwoFactorOrganizationDuo(this.organizationId, request);\n            } else {\n                this.formPromise = this.apiService.putTwoFactorDuo(request);\n            }\n            const response = await this.formPromise;\n            await this.processResponse(response);\n        });\n    }\n\n    private processResponse(response: TwoFactorDuoResponse) {\n        this.ikey = response.integrationKey;\n        this.skey = response.secretKey;\n        this.host = response.host;\n        this.enabled = response.enabled;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"2faDuoTitle\"> <div class=\"modal-dialog\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" title=\"2faDuoTitle\"> {{'twoStepLogin' | i18n}} <small>Duo</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <app-two-factor-verify [organizationId]=\"organizationId\" [type]=\"type\" (onAuthed)=\"auth($event)\" *ngIf=\"!authed\"> </app-two-factor-verify> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"authed\" autocomplete=\"off\"> <div class=\"modal-body\"> <ng-container *ngIf=\"enabled\"> <app-callout type=\"success\" title=\"{{'enabled' | i18n}}\" icon=\"fa-check-circle\"> {{'twoStepLoginProviderEnabled' | i18n}} </app-callout> <img class=\"float-right ml-3 mfaType2\" alt=\"Duo logo\"> <strong>{{'twoFactorDuoIntegrationKey' | i18n}}:</strong> {{ikey}} <br> <strong>{{'twoFactorDuoSecretKey' | i18n}}:</strong> {{skey}} <br> <strong>{{'twoFactorDuoApiHostname' | i18n}}:</strong> {{host}} </ng-container> <ng-container *ngIf=\"!enabled\"> <img class=\"float-right ml-3 mfaType2\" alt=\"Duo logo\"> <p>{{'twoFactorDuoDesc' | i18n}}</p> <div class=\"form-group\"> <label for=\"ikey\">{{'twoFactorDuoIntegrationKey' | i18n}}</label> <input id=\"ikey\" type=\"text\" name=\"IntegrationKey\" class=\"form-control\" [(ngModel)]=\"ikey\" required appInputVerbatim> </div> <div class=\"form-group\"> <label for=\"skey\">{{'twoFactorDuoSecretKey' | i18n}}</label> <input id=\"skey\" type=\"password\" name=\"SecretKey\" class=\"form-control\" [(ngModel)]=\"skey\" required appInputVerbatim autocomplete=\"new-password\"> </div> <div class=\"form-group\"> <label for=\"host\">{{'twoFactorDuoApiHostname' | i18n}}</label> <input id=\"host\" type=\"text\" name=\"Host\" class=\"form-control\" [(ngModel)]=\"host\" placeholder=\"{{'ex' | i18n}} api-xxxxxxxx.duosecurity.com\" required appInputVerbatim> </div> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span *ngIf=\"!enabled\">{{'enable' | i18n}}</span> <span *ngIf=\"enabled\">{{'disable' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> </div> ","import {\n    Component,\n    OnInit,\n    Type,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { TwoFactorProviders } from 'jslib-common/services/auth.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { ModalRef } from 'jslib-angular/components/modal/modal.ref';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorAuthenticatorComponent } from './two-factor-authenticator.component';\nimport { TwoFactorDuoComponent } from './two-factor-duo.component';\nimport { TwoFactorEmailComponent } from './two-factor-email.component';\nimport { TwoFactorRecoveryComponent } from './two-factor-recovery.component';\nimport { TwoFactorWebAuthnComponent } from './two-factor-webauthn.component';\nimport { TwoFactorYubiKeyComponent } from './two-factor-yubikey.component';\n\n@Component({\n    selector: 'app-two-factor-setup',\n    templateUrl: 'two-factor-setup.component.html',\n})\nexport class TwoFactorSetupComponent implements OnInit {\n    @ViewChild('recoveryTemplate', { read: ViewContainerRef, static: true }) recoveryModalRef: ViewContainerRef;\n    @ViewChild('authenticatorTemplate', { read: ViewContainerRef, static: true }) authenticatorModalRef: ViewContainerRef;\n    @ViewChild('yubikeyTemplate', { read: ViewContainerRef, static: true }) yubikeyModalRef: ViewContainerRef;\n    @ViewChild('duoTemplate', { read: ViewContainerRef, static: true }) duoModalRef: ViewContainerRef;\n    @ViewChild('emailTemplate', { read: ViewContainerRef, static: true }) emailModalRef: ViewContainerRef;\n    @ViewChild('webAuthnTemplate', { read: ViewContainerRef, static: true }) webAuthnModalRef: ViewContainerRef;\n\n    organizationId: string;\n    providers: any[] = [];\n    canAccessPremium: boolean;\n    showPolicyWarning = false;\n    loading = true;\n    modal: ModalRef;\n\n    constructor(protected apiService: ApiService, protected userService: UserService,\n        protected modalService: ModalService, protected messagingService: MessagingService,\n        protected policyService: PolicyService) { }\n\n    async ngOnInit() {\n        this.canAccessPremium = await this.userService.canAccessPremium();\n\n        for (const key in TwoFactorProviders) {\n            if (!TwoFactorProviders.hasOwnProperty(key)) {\n                continue;\n            }\n\n            const p = (TwoFactorProviders as any)[key];\n            if (this.filterProvider(p.type)) {\n                continue;\n            }\n\n            this.providers.push({\n                type: p.type,\n                name: p.name,\n                description: p.description,\n                enabled: false,\n                premium: p.premium,\n                sort: p.sort,\n            });\n        }\n\n        this.providers.sort((a: any, b: any) => a.sort - b.sort);\n        await this.load();\n    }\n\n    async load() {\n        this.loading = true;\n        const providerList = await this.getTwoFactorProviders();\n        providerList.data.forEach(p => {\n            this.providers.forEach(p2 => {\n                if (p.type === p2.type) {\n                    p2.enabled = p.enabled;\n                }\n            });\n        });\n        this.evaluatePolicies();\n        this.loading = false;\n    }\n\n    async manage(type: TwoFactorProviderType) {\n        switch (type) {\n            case TwoFactorProviderType.Authenticator:\n                const authComp = await this.openModal(this.authenticatorModalRef, TwoFactorAuthenticatorComponent);\n                authComp.onUpdated.subscribe((enabled: boolean) => {\n                    this.updateStatus(enabled, TwoFactorProviderType.Authenticator);\n                });\n                break;\n            case TwoFactorProviderType.Yubikey:\n                const yubiComp = await this.openModal(this.yubikeyModalRef, TwoFactorYubiKeyComponent);\n                yubiComp.onUpdated.subscribe((enabled: boolean) => {\n                    this.updateStatus(enabled, TwoFactorProviderType.Yubikey);\n                });\n                break;\n            case TwoFactorProviderType.Duo:\n                const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n                duoComp.onUpdated.subscribe((enabled: boolean) => {\n                    this.updateStatus(enabled, TwoFactorProviderType.Duo);\n                });\n                break;\n            case TwoFactorProviderType.Email:\n                const emailComp = await this.openModal(this.emailModalRef, TwoFactorEmailComponent);\n                emailComp.onUpdated.subscribe((enabled: boolean) => {\n                    this.updateStatus(enabled, TwoFactorProviderType.Email);\n                });\n                break;\n            case TwoFactorProviderType.WebAuthn:\n                const webAuthnComp = await this.openModal(this.webAuthnModalRef, TwoFactorWebAuthnComponent);\n                webAuthnComp.onUpdated.subscribe((enabled: boolean) => {\n                    this.updateStatus(enabled, TwoFactorProviderType.WebAuthn);\n                });\n                break;\n            default:\n                break;\n        }\n    }\n\n    recoveryCode() {\n        this.openModal(this.recoveryModalRef, TwoFactorRecoveryComponent);\n    }\n\n    async premiumRequired() {\n        if (!this.canAccessPremium) {\n            this.messagingService.send('premiumRequired');\n            return;\n        }\n    }\n\n    protected getTwoFactorProviders() {\n        return this.apiService.getTwoFactorProviders();\n    }\n\n    protected filterProvider(type: TwoFactorProviderType) {\n        return type === TwoFactorProviderType.OrganizationDuo;\n    }\n\n    protected async openModal<T>(ref: ViewContainerRef, type: Type<T>): Promise<T> {\n        const [modal, childComponent] = await this.modalService.openViewRef(type, ref);\n        this.modal = modal;\n\n        return childComponent;\n    }\n\n    protected updateStatus(enabled: boolean, type: TwoFactorProviderType) {\n        if (!enabled && this.modal != null) {\n            this.modal.close();\n        }\n        this.providers.forEach(p => {\n            if (p.type === type) {\n                p.enabled = enabled;\n            }\n        });\n        this.evaluatePolicies();\n    }\n\n    private async evaluatePolicies() {\n        if (this.organizationId == null && this.providers.filter(p => p.enabled).length === 1) {\n            this.showPolicyWarning = await this.policyService.policyAppliesToUser(PolicyType.TwoFactorAuthentication);\n        } else {\n            this.showPolicyWarning = false;\n        }\n    }\n}\n","<div class=\"page-header\"> <h1>{{'twoStepLogin' | i18n}}</h1> </div> <p *ngIf=\"!organizationId\">{{'twoStepLoginDesc' | i18n}}</p> <p *ngIf=\"organizationId\">{{'twoStepLoginOrganizationDesc' | i18n}}</p> <app-callout type=\"warning\" *ngIf=\"!organizationId\"> <p>{{'twoStepLoginRecoveryWarning' | i18n}}</p> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"recoveryCode()\">{{'viewRecoveryCode' | i18n}}</button> </app-callout> <h2 [ngClass]=\"{'mt-5':!organizationId}\"> {{'providers' | i18n}} <small *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin fa-fw text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </small> </h2> <app-callout type=\"warning\" *ngIf=\"showPolicyWarning\"> {{'twoStepLoginPolicyUserWarning' | i18n}} </app-callout> <ul class=\"list-group list-group-2fa\"> <li *ngFor=\"let p of providers\" class=\"list-group-item d-flex align-items-center\"> <div class=\"logo-2fa d-flex justify-content-center\"> <img [class]=\"'mfaType' + p.type\" [alt]=\"p.name + ' logo'\"> </div> <div class=\"mx-4\"> <h3 class=\"mb-0\"> {{p.name}} <ng-container *ngIf=\"p.enabled\"> <i class=\"fa fa-check text-success fa-fw\" title=\"{{'enabled' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'enabled' | i18n}}</span> </ng-container> <a href=\"#\" appStopClick class=\"badge badge-primary\" *ngIf=\"!canAccessPremium && p.premium\" (click)=\"premiumRequired()\"> {{'premium' | i18n}} </a> </h3> {{p.description}} </div> <div class=\"ml-auto\"> <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" [disabled]=\"!canAccessPremium && p.premium\" (click)=\"manage(p.type)\"> {{'manage' | i18n}} </button> </div> </li> </ul> <ng-template #authenticatorTemplate></ng-template> <ng-template #recoveryTemplate></ng-template> <ng-template #duoTemplate></ng-template> <ng-template #emailTemplate></ng-template> <ng-template #yubikeyTemplate></ng-template> <ng-template #webAuthnTemplate></ng-template> ","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { ExportComponent as BaseExportComponent } from 'jslib-angular/components/export.component';\n\n@Component({\n    selector: 'app-export',\n    templateUrl: 'export.component.html',\n})\nexport class ExportComponent extends BaseExportComponent {\n    organizationId: string;\n\n    constructor(cryptoService: CryptoService, i18nService: I18nService,\n        platformUtilsService: PlatformUtilsService, exportService: ExportService,\n        eventService: EventService, policyService: PolicyService, logService: LogService,\n        userVerificationService: UserVerificationService, fb: FormBuilder) {\n        super(cryptoService, i18nService, platformUtilsService, exportService, eventService,\n            policyService, window, logService, userVerificationService, fb);\n    }\n\n    protected saved() {\n        super.saved();\n        this.platformUtilsService.showToast('success', null, this.i18nService.t('exportSuccess'));\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" ngNativeValidate [appApiAction]=\"formPromise\" [formGroup]=\"exportForm\"> <div class=\"page-header\"> <h1>{{'exportVault' | i18n}}</h1> </div> <app-callout type=\"error\" title=\"{{'vaultExportDisabled' | i18n}}\" *ngIf=\"disabledByPolicy\"> {{'personalVaultExportPolicyInEffect' | i18n}} </app-callout> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"format\">{{'fileFormat' | i18n}}</label> <select class=\"form-control\" id=\"format\" name=\"Format\" formControlName=\"format\"> <option *ngFor=\"let f of formatOptions\" [value]=\"f.value\">{{f.name}}</option> </select> </div> </div> <div class=\"row\"> <div class=\"form-group col-6\"> <app-verify-master-password ngDefaultControl formControlName=\"secret\" name=\"secret\"> </app-verify-master-password> </div> </div> <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.loading || exportForm.disabled\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\" *ngIf=\"form.loading\"></i> <span *ngIf=\"!form.loading\">{{'exportVault' | i18n}}</span> </button> </form> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n    selector: 'app-exposed-passwords-report',\n    templateUrl: 'exposed-passwords-report.component.html',\n})\nexport class ExposedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n    exposedPasswordMap = new Map<string, number>();\n\n    constructor(protected cipherService: CipherService, protected auditService: AuditService,\n        modalService: ModalService, messagingService: MessagingService,\n        userService: UserService, passwordRepromptService: PasswordRepromptService) {\n        super(modalService, userService, messagingService, passwordRepromptService, true);\n    }\n\n    ngOnInit() {\n        this.checkAccess();\n    }\n\n    async load() {\n        if (await this.checkAccess()) {\n            super.load();\n        }\n    }\n\n    async setCiphers() {\n        const allCiphers = await this.getAllCiphers();\n        const exposedPasswordCiphers: CipherView[] = [];\n        const promises: Promise<void>[] = [];\n        allCiphers.forEach(c => {\n            if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n                return;\n            }\n            const promise = this.auditService.passwordLeaked(c.login.password).then(exposedCount => {\n                if (exposedCount > 0) {\n                    exposedPasswordCiphers.push(c);\n                    this.exposedPasswordMap.set(c.id, exposedCount);\n                }\n            });\n            promises.push(promise);\n        });\n        await Promise.all(promises);\n        this.ciphers = exposedPasswordCiphers;\n    }\n\n    protected getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllDecrypted();\n    }\n\n    protected canManageCipher(c: CipherView): boolean {\n        // this will only ever be false from the org view;\n        return true;\n    }\n}\n","<div class=\"page-header\"> <h1>{{'exposedPasswordsReport' | i18n}}</h1> </div> <p>{{'exposedPasswordsReportDesc' | i18n}}</p> <button type=\"button\" class=\"btn btn-primary btn-submit\" [disabled]=\"loading\" (click)=\"load()\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'checkExposedPasswords' | i18n}}</span> </button> <div class=\"mt-4\" *ngIf=\"hasLoaded\"> <app-callout type=\"success\" title=\"{{'goodNews' | i18n}}\" *ngIf=\"!ciphers.length\"> {{'noExposedPasswords' | i18n}} </app-callout> <ng-container *ngIf=\"ciphers.length\"> <app-callout type=\"danger\" title=\"{{'exposedPasswordsFound' | i18n}}\" [useAlertRole]=\"true\"> {{'exposedPasswordsFoundDesc' | i18n : (ciphers.length | number)}} </app-callout> <table class=\"table table-hover table-list table-ciphers\"> <tbody> <tr *ngFor=\"let c of ciphers\"> <td class=\"table-list-icon\"> <app-vault-icon [cipher]=\"c\"></app-vault-icon> </td> <td class=\"reduced-lh wrap\"> <ng-container *ngIf=\"!organization || canManageCipher(c) ; else cantManage\"> <a href=\"#\" appStopClick (click)=\"selectCipher(c)\" title=\"{{'editItem' | i18n}}\">{{c.name}}</a> </ng-container> <ng-template #cantManage> <span>{{c.name}}</span> </ng-template> <ng-container *ngIf=\"!organization && c.organizationId\"> <i class=\"fa fa-cube\" appStopProp title=\"{{'shared' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'shared' | i18n}}</span> </ng-container> <ng-container *ngIf=\"c.hasAttachments\"> <i class=\"fa fa-paperclip\" appStopProp title=\"{{'attachments' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachments' | i18n}}</span> </ng-container> <br> <small>{{c.subTitle}}</small> </td> <td class=\"text-right\"> <span class=\"badge badge-warning\"> {{'exposedXTimes' | i18n : (exposedPasswordMap.get(c.id) | number)}} </span> </td> </tr> </tbody> </table> </ng-container> </div> <ng-template #cipherAddEdit></ng-template> ","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherData } from 'jslib-common/models/data/cipherData';\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherCreateRequest } from 'jslib-common/models/request/cipherCreateRequest';\nimport { CipherRequest } from 'jslib-common/models/request/cipherRequest';\n\nimport { AddEditComponent as BaseAddEditComponent } from '../../vault/add-edit.component';\n\n@Component({\n    selector: 'app-org-vault-add-edit',\n    templateUrl: '../../vault/add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n    organization: Organization;\n    originalCipher: Cipher = null;\n\n    constructor(cipherService: CipherService, folderService: FolderService,\n        i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n        auditService: AuditService, stateService: StateService,\n        userService: UserService, collectionService: CollectionService,\n        totpService: TotpService, passwordGenerationService: PasswordGenerationService,\n        private apiService: ApiService, messagingService: MessagingService,\n        eventService: EventService, policyService: PolicyService, logService: LogService,\n        passwordRepromptService: PasswordRepromptService) {\n        super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n            userService, collectionService, totpService, passwordGenerationService, messagingService,\n            eventService, policyService, passwordRepromptService, logService);\n    }\n\n    protected allowOwnershipAssignment() {\n        if (this.ownershipOptions != null && (this.ownershipOptions.length > 1 || !this.allowPersonal)) {\n            if (this.organization != null) {\n                return this.cloneMode && this.organization.canEditAnyCollection;\n            } else {\n                return !this.editMode || this.cloneMode;\n            }\n        }\n        return false;\n    }\n\n    protected loadCollections() {\n        if (!this.organization.canEditAnyCollection) {\n            return super.loadCollections();\n        }\n        return Promise.resolve(this.collections);\n    }\n\n    protected async loadCipher() {\n        if (!this.organization.canEditAnyCollection) {\n            return await super.loadCipher();\n        }\n        const response = await this.apiService.getCipherAdmin(this.cipherId);\n        const data = new CipherData(response);\n        this.originalCipher = new Cipher(data);\n        return new Cipher(data);\n    }\n\n    protected encryptCipher() {\n        if (!this.organization.canEditAnyCollection) {\n            return super.encryptCipher();\n        }\n        return this.cipherService.encrypt(this.cipher, null, this.originalCipher);\n    }\n\n    protected async saveCipher(cipher: Cipher) {\n        if (!this.organization.canEditAnyCollection || cipher.organizationId == null) {\n            return super.saveCipher(cipher);\n        }\n        if (this.editMode && !this.cloneMode) {\n            const request = new CipherRequest(cipher);\n            return this.apiService.putCipherAdmin(this.cipherId, request);\n        } else {\n            const request = new CipherCreateRequest(cipher);\n            return this.apiService.postCipherAdmin(request);\n        }\n    }\n\n    protected async deleteCipher() {\n        if (!this.organization.canEditAnyCollection) {\n            return super.deleteCipher();\n        }\n        return this.cipher.isDeleted ? this.apiService.deleteCipherAdmin(this.cipherId)\n            : this.apiService.putDeleteCipherAdmin(this.cipherId);\n    }\n}\n","export type LinkedIdType = LoginLinkedId | CardLinkedId | IdentityLinkedId;\n\n// LoginView\nexport enum LoginLinkedId {\n    Username = 100,\n    Password = 101,\n}\n\n// CardView\nexport enum CardLinkedId {\n    CardholderName = 300,\n    ExpMonth = 301,\n    ExpYear = 302,\n    Code = 303,\n    Brand = 304,\n    Number = 305,\n}\n\n// IdentityView\nexport enum IdentityLinkedId {\n    Title = 400,\n    MiddleName = 401,\n    Address1 = 402,\n    Address2 = 403,\n    Address3 = 404,\n    City = 405,\n    State = 406,\n    PostalCode = 407,\n    Country = 408,\n    Company = 409,\n    Email = 410,\n    Phone = 411,\n    Ssn = 412,\n    Username = 413,\n    PassportNumber = 414,\n    LicenseNumber = 415,\n    FirstName = 416,\n    LastName = 417,\n    FullName = 418,\n}\n","import { ItemView } from '../models/view/itemView';\n\nimport { LinkedIdType } from '../enums/linkedIdType';\n\nexport class LinkedMetadata {\n    constructor(readonly propertyKey: string, private readonly _i18nKey?: string) { }\n\n    get i18nKey() {\n        return this._i18nKey ?? this.propertyKey;\n    }\n}\n\n/**\n * A decorator used to set metadata used by Linked custom fields. Apply it to a class property or getter to make it\n *    available as a Linked custom field option.\n * @param id - A unique value that is saved in the Field model. It is used to look up the decorated class property.\n * @param i18nKey - The i18n key used to describe the decorated class property in the UI. If it is null, then the name\n *    of the class property will be used as the i18n key.\n */\nexport function linkedFieldOption(id: LinkedIdType, i18nKey?: string) {\n    return (prototype: ItemView, propertyKey: string) => {\n        if (prototype.linkedFieldOptions == null) {\n            prototype.linkedFieldOptions = new Map<LinkedIdType, LinkedMetadata>();\n        }\n\n        prototype.linkedFieldOptions.set(id, new LinkedMetadata(propertyKey, i18nKey));\n    };\n}\n","import { CardData } from '../data/cardData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { CardView } from '../view/cardView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Card extends Domain {\n    cardholderName: EncString;\n    brand: EncString;\n    number: EncString;\n    expMonth: EncString;\n    expYear: EncString;\n    code: EncString;\n\n    constructor(obj?: CardData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            cardholderName: null,\n            brand: null,\n            number: null,\n            expMonth: null,\n            expYear: null,\n            code: null,\n        }, alreadyEncrypted, []);\n    }\n\n    decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<CardView> {\n        return this.decryptObj(new CardView(this), {\n            cardholderName: null,\n            brand: null,\n            number: null,\n            expMonth: null,\n            expYear: null,\n            code: null,\n        }, orgId, encKey);\n    }\n\n    toCardData(): CardData {\n        const c = new CardData();\n        this.buildDataModel(this, c, {\n            cardholderName: null,\n            brand: null,\n            number: null,\n            expMonth: null,\n            expYear: null,\n            code: null,\n        });\n        return c;\n    }\n}\n","import { FieldType } from '../../enums/fieldType';\nimport { LinkedIdType } from '../../enums/linkedIdType';\n\nimport { FieldData } from '../data/fieldData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { FieldView } from '../view/fieldView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Field extends Domain {\n    name: EncString;\n    value: EncString;\n    type: FieldType;\n    linkedId: LinkedIdType;\n\n    constructor(obj?: FieldData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.type = obj.type;\n        this.linkedId = obj.linkedId;\n        this.buildDomainModel(this, obj, {\n            name: null,\n            value: null,\n        }, alreadyEncrypted, []);\n    }\n\n    decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<FieldView> {\n        return this.decryptObj(new FieldView(this), {\n            name: null,\n            value: null,\n        }, orgId, encKey);\n    }\n\n    toFieldData(): FieldData {\n        const f = new FieldData();\n        this.buildDataModel(this, f, {\n            name: null,\n            value: null,\n            type: null,\n            linkedId: null,\n        }, ['type', 'linkedId']);\n        return f;\n    }\n}\n","import { IdentityData } from '../data/identityData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { IdentityView } from '../view/identityView';\n\nexport class Identity extends Domain {\n    title: EncString;\n    firstName: EncString;\n    middleName: EncString;\n    lastName: EncString;\n    address1: EncString;\n    address2: EncString;\n    address3: EncString;\n    city: EncString;\n    state: EncString;\n    postalCode: EncString;\n    country: EncString;\n    company: EncString;\n    email: EncString;\n    phone: EncString;\n    ssn: EncString;\n    username: EncString;\n    passportNumber: EncString;\n    licenseNumber: EncString;\n\n    constructor(obj?: IdentityData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            title: null,\n            firstName: null,\n            middleName: null,\n            lastName: null,\n            address1: null,\n            address2: null,\n            address3: null,\n            city: null,\n            state: null,\n            postalCode: null,\n            country: null,\n            company: null,\n            email: null,\n            phone: null,\n            ssn: null,\n            username: null,\n            passportNumber: null,\n            licenseNumber: null,\n        }, alreadyEncrypted, []);\n    }\n\n    decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<IdentityView> {\n        return this.decryptObj(new IdentityView(this), {\n            title: null,\n            firstName: null,\n            middleName: null,\n            lastName: null,\n            address1: null,\n            address2: null,\n            address3: null,\n            city: null,\n            state: null,\n            postalCode: null,\n            country: null,\n            company: null,\n            email: null,\n            phone: null,\n            ssn: null,\n            username: null,\n            passportNumber: null,\n            licenseNumber: null,\n        }, orgId, encKey);\n    }\n\n    toIdentityData(): IdentityData {\n        const i = new IdentityData();\n        this.buildDataModel(this, i, {\n            title: null,\n            firstName: null,\n            middleName: null,\n            lastName: null,\n            address1: null,\n            address2: null,\n            address3: null,\n            city: null,\n            state: null,\n            postalCode: null,\n            country: null,\n            company: null,\n            email: null,\n            phone: null,\n            ssn: null,\n            username: null,\n            passportNumber: null,\n            licenseNumber: null,\n        });\n        return i;\n    }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginData } from '../data/loginData';\n\nimport { LoginView } from '../view/loginView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Login extends Domain {\n    uris: LoginUri[];\n    username: EncString;\n    password: EncString;\n    passwordRevisionDate?: Date;\n    totp: EncString;\n    autofillOnPageLoad: boolean;\n\n    constructor(obj?: LoginData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.passwordRevisionDate = obj.passwordRevisionDate != null ? new Date(obj.passwordRevisionDate) : null;\n        this.autofillOnPageLoad = obj.autofillOnPageLoad;\n        this.buildDomainModel(this, obj, {\n            username: null,\n            password: null,\n            totp: null,\n        }, alreadyEncrypted, []);\n\n        if (obj.uris) {\n            this.uris = [];\n            obj.uris.forEach(u => {\n                this.uris.push(new LoginUri(u, alreadyEncrypted));\n            });\n        }\n    }\n\n    async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<LoginView> {\n        const view = await this.decryptObj(new LoginView(this), {\n            username: null,\n            password: null,\n            totp: null,\n        }, orgId, encKey);\n\n        if (this.uris != null) {\n            view.uris = [];\n            for (let i = 0; i < this.uris.length; i++) {\n                const uri = await this.uris[i].decrypt(orgId, encKey);\n                view.uris.push(uri);\n            }\n        }\n\n        return view;\n    }\n\n    toLoginData(): LoginData {\n        const l = new LoginData();\n        l.passwordRevisionDate = this.passwordRevisionDate != null ? this.passwordRevisionDate.toISOString() : null;\n        l.autofillOnPageLoad = this.autofillOnPageLoad;\n        this.buildDataModel(this, l, {\n            username: null,\n            password: null,\n            totp: null,\n        });\n\n        if (this.uris != null && this.uris.length > 0) {\n            l.uris = [];\n            this.uris.forEach(u => {\n                l.uris.push(u.toLoginUriData());\n            });\n        }\n\n        return l;\n    }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriData } from '../data/loginUriData';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class LoginUri extends Domain {\n    uri: EncString;\n    match: UriMatchType;\n\n    constructor(obj?: LoginUriData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.match = obj.match;\n        this.buildDomainModel(this, obj, {\n            uri: null,\n        }, alreadyEncrypted, []);\n    }\n\n    decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<LoginUriView> {\n        return this.decryptObj(new LoginUriView(this), {\n            uri: null,\n        }, orgId, encKey);\n    }\n\n    toLoginUriData(): LoginUriData {\n        const u = new LoginUriData();\n        this.buildDataModel(this, u, {\n            uri: null,\n        }, ['match']);\n        return u;\n    }\n}\n","import { View } from './view';\n\nimport { Password } from '../domain/password';\n\nexport class PasswordHistoryView implements View {\n    password: string = null;\n    lastUsedDate: Date = null;\n\n    constructor(ph?: Password) {\n        if (!ph) {\n            return;\n        }\n\n        this.lastUsedDate = ph.lastUsedDate;\n    }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteData } from '../data/secureNoteData';\n\nimport Domain from './domainBase';\n\nimport { SecureNoteView } from '../view/secureNoteView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class SecureNote extends Domain {\n    type: SecureNoteType;\n\n    constructor(obj?: SecureNoteData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.type = obj.type;\n    }\n\n    decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<SecureNoteView> {\n        return Promise.resolve(new SecureNoteView(this));\n    }\n\n    toSecureNoteData(): SecureNoteData {\n        const n = new SecureNoteData();\n        n.type = this.type;\n        return n;\n    }\n}\n","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { ImportOption, ImportService } from 'jslib-common/abstractions/import.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport Swal, { SweetAlertIcon } from 'sweetalert2';\n\n@Component({\n    selector: 'app-import',\n    templateUrl: 'import.component.html',\n})\nexport class ImportComponent implements OnInit {\n    featuredImportOptions: ImportOption[];\n    importOptions: ImportOption[];\n    format: string = null;\n    fileContents: string;\n    formPromise: Promise<Error>;\n    loading: boolean = false;\n    importBlockedByPolicy: boolean = false;\n\n    protected organizationId: string = null;\n    protected successNavigate: any[] = ['vault'];\n\n    constructor(protected i18nService: I18nService, protected toasterService: ToasterService,\n        protected importService: ImportService, protected router: Router,\n        protected platformUtilsService: PlatformUtilsService, protected policyService: PolicyService,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        this.setImportOptions();\n        this.importOptions.sort((a, b) => {\n            if (a.name == null && b.name != null) {\n                return -1;\n            }\n            if (a.name != null && b.name == null) {\n                return 1;\n            }\n            if (a.name == null && b.name == null) {\n                return 0;\n            }\n\n            return this.i18nService.collator ? this.i18nService.collator.compare(a.name, b.name) :\n                a.name.localeCompare(b.name);\n        });\n\n        this.importBlockedByPolicy = await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership);\n    }\n\n    async submit() {\n        if (this.importBlockedByPolicy) {\n            this.platformUtilsService.showToast('error', null,\n                this.i18nService.t('personalOwnershipPolicyInEffectImports'));\n            return;\n        }\n\n        this.loading = true;\n\n        const importer = this.importService.getImporter(this.format, this.organizationId);\n        if (importer === null) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('selectFormat'));\n            this.loading = false;\n            return;\n        }\n\n        const fileEl = document.getElementById('file') as HTMLInputElement;\n        const files = fileEl.files;\n        if ((files == null || files.length === 0) && (this.fileContents == null || this.fileContents === '')) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('selectFile'));\n            this.loading = false;\n            return;\n        }\n\n        let fileContents = this.fileContents;\n        if (files != null && files.length > 0) {\n            try {\n                const content = await this.getFileContents(files[0]);\n                if (content != null) {\n                    fileContents = content;\n                }\n            } catch (e) {\n                this.logService.error(e);\n            }\n        }\n\n        if (fileContents == null || fileContents === '') {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('selectFile'));\n            this.loading = false;\n            return;\n        }\n\n        try {\n            this.formPromise = this.importService.import(importer, fileContents, this.organizationId);\n            const error = await this.formPromise;\n            if (error != null) {\n                this.error(error);\n                this.loading = false;\n                return;\n            }\n            this.toasterService.popAsync('success', null, this.i18nService.t('importSuccess'));\n            this.router.navigate(this.successNavigate);\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        this.loading = false;\n    }\n\n    getFormatInstructionTitle() {\n        if (this.format == null) {\n            return null;\n        }\n\n        const results = this.featuredImportOptions.concat(this.importOptions).filter(o => o.id === this.format);\n        if (results.length > 0) {\n            return this.i18nService.t('instructionsFor', results[0].name);\n        }\n        return null;\n    }\n\n    protected setImportOptions() {\n        this.featuredImportOptions = [{\n            id: null,\n            name: '-- ' + this.i18nService.t('select') + ' --',\n        }, ...this.importService.featuredImportOptions];\n        this.importOptions = this.importService.regularImportOptions;\n    }\n\n    private async error(error: Error) {\n        await Swal.fire({\n            heightAuto: false,\n            buttonsStyling: false,\n            icon: 'error' as SweetAlertIcon,\n            iconHtml: `<i class=\"swal-custom-icon fa fa-bolt text-danger\"></i>`,\n            input: 'textarea',\n            inputValue: error.message,\n            inputAttributes: {\n                'readonly': 'true',\n            },\n            titleText: this.i18nService.t('importError'),\n            text: this.i18nService.t('importErrorDesc'),\n            showConfirmButton: true,\n            confirmButtonText: this.i18nService.t('ok'),\n            onOpen: popupEl => {\n                popupEl.querySelector('.swal2-textarea').scrollTo(0, 0);\n             },\n        });\n    }\n\n    private getFileContents(file: File): Promise<string> {\n        return new Promise((resolve, reject) => {\n            const reader = new FileReader();\n            reader.readAsText(file, 'utf-8');\n            reader.onload = evt => {\n                if (this.format === 'lastpasscsv' && file.type === 'text/html') {\n                    const parser = new DOMParser();\n                    const doc = parser.parseFromString((evt.target as any).result, 'text/html');\n                    const pre = doc.querySelector('pre');\n                    if (pre != null) {\n                        resolve(pre.textContent);\n                        return;\n                    }\n                    reject();\n                    return;\n                }\n\n                resolve((evt.target as any).result);\n            };\n            reader.onerror = () => {\n                reject();\n            };\n        });\n    }\n}\n","<div class=\"page-header\"> <h1>{{'importData' | i18n}}</h1> </div> <app-callout type=\"info\" *ngIf=\"importBlockedByPolicy\"> {{'personalOwnershipPolicyInEffectImports' | i18n}} </app-callout> <form #form (ngSubmit)=\"submit()\" ngNativeValidate> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"type\">1. {{'selectFormat' | i18n}}</label> <select id=\"type\" name=\"Format\" [(ngModel)]=\"format\" class=\"form-control\" [disabled]=\"importBlockedByPolicy\" required> <option *ngFor=\"let o of featuredImportOptions\" [ngValue]=\"o.id\">{{o.name}}</option> <ng-container *ngIf=\"importOptions && importOptions.length\"> <option value=\"-\" disabled=\"disabled\"></option> <option *ngFor=\"let o of importOptions\" [ngValue]=\"o.id\">{{o.name}}</option> </ng-container> </select> </div> </div> </div> <app-callout type=\"info\" title=\"{{getFormatInstructionTitle()}}\" *ngIf=\"format\"> <ng-container *ngIf=\"format === 'bitwardencsv' || format === 'bitwardenjson'\"> See detailed instructions on our help site at <a target=\"_blank\" rel=\"noopener\" href=\"https://help.bitwarden.com/article/export-your-data/\"> https://help.bitwarden.com/article/export-your-data/</a> </ng-container> <ng-container *ngIf=\"format === 'lastpasscsv'\"> See detailed instructions on our help site at <a target=\"_blank\" rel=\"noopener\" href=\"https://help.bitwarden.com/article/import-from-lastpass/\"> https://help.bitwarden.com/article/import-from-lastpass/</a> </ng-container> <ng-container *ngIf=\"format === 'keepassxcsv'\"> Using the KeePassX desktop application, navigate to \"Database\" &rarr; \"Export to CSV file\" and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'aviracsv'\"> In the Avira web vault, go to \"Settings\" &rarr; \"My Data\" &rarr; \"Export data\" and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'blurcsv'\"> In the Blur web vault, click your username at the top and go to \"Settings\" &rarr; \"Export Data\", then click \"Export CSV\" for your \"Accounts\". </ng-container> <ng-container *ngIf=\"format === 'safeincloudxml'\"> Using the SaveInCloud desktop application, navigate to \"File\" &rarr; \"Export\" &rarr; \"As XML\" and save the XML file. </ng-container> <ng-container *ngIf=\"format === 'padlockcsv'\"> Using the Padlock desktop application, click the hamburger icon in the top left corner and navigate to \"Settings\" &rarr; \"Export\" button and save the file \"As CSV\". </ng-container> <ng-container *ngIf=\"format === 'keepass2xml'\"> Using the KeePass 2 desktop application, navigate to \"File\" &rarr; \"Export\" and select the \"KeePass XML (2.x)\" option. </ng-container> <ng-container *ngIf=\"format === 'upmcsv'\"> Using the Universal Password Manager desktop application, navigate to \"Database\" &rarr; \"Export\" and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'saferpasscsv'\"> Using the SaferPass browser extension, click the hamburger icon in the top left corner and navigate to \"Settings\". Click the \"Export accounts\" button to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'meldiumcsv'\"> Using the Meldium web vault, navigate to \"Settings\". Locate the \"Export data\" function and click \"Show me my data\" to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'keepercsv'\"> Log into the Keeper web vault (keepersecurity.com/vault). Navigate to \"Backup\" (top right) and find the \"Export to .csv File\" option. Click \"Export Now\" to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'chromecsv' || format === 'operacsv' || format === 'vivaldicsv'\"> <span *ngIf=\"format !== 'chromecsv'\"> The process is exactly the same as importing from Google Chrome. </span> See detailed instructions on our help site at <a target=\"_blank\" rel=\"noopener\" href=\"https://help.bitwarden.com/article/import-from-chrome/\"> https://help.bitwarden.com/article/import-from-chrome/</a> </ng-container> <ng-container *ngIf=\"format === 'firefoxcsv'\"> See detailed instructions on our help site at <a target=\"_blank\" rel=\"noopener\" href=\"https://bitwarden.com/help/article/import-from-firefox/\"> https://bitwarden.com/help/article/import-from-firefox/</a>. </ng-container> <ng-container *ngIf=\"format === 'safaricsv'\"> See detailed instructions on our help site at <a target=\"_blank\" rel=\"noopener\" href=\"https://bitwarden.com/help/article/import-from-safari/\"> https://bitwarden.com/help/article/import-from-safari/</a>. </ng-container> <ng-container *ngIf=\"format === '1password1pif' || format === '1passwordwincsv' || format === '1passwordmaccsv'\"> See detailed instructions on our help site at <a target=\"_blank\" rel=\"noopener\" href=\"https://help.bitwarden.com/article/import-from-1password/\"> https://help.bitwarden.com/article/import-from-1password/</a>. </ng-container> <ng-container *ngIf=\"format === 'passworddragonxml'\"> Using the Password Dragon desktop application, navigate to \"File\" &rarr; \"Export\" &rarr; \"To XML\". In the dialog that pops up select \"All Rows\" and check all fields. Click the \"Export\" button and save the XML file. </ng-container> <ng-container *ngIf=\"format === 'enpasscsv'\"> Using the Enpass desktop application, navigate to \"File\" &rarr; \"Export\" &rarr; \"As CSV\". Select \"OK\" to the warning alert and save the CSV file. Note that the importer only supports files exported while Enpass is set to the English language, so adjust your settings accordingly. </ng-container> <ng-container *ngIf=\"format === 'enpassjson'\"> Using the Enpass 6 desktop application, click the menu button and navigate to \"File\" &rarr; \"Export\". Select the \".json\" file format option and save the JSON file. </ng-container> <ng-container *ngIf=\"format === 'pwsafexml'\"> Using the Password Safe desktop application, navigate to \"File\" &rarr; \"Export To\" &rarr; \"XML format...\" and save the XML file. </ng-container> <ng-container *ngIf=\"format === 'dashlanejson'\"> Using the Dashlane desktop application, navigate to \"File\" &rarr; \"Export\" &rarr; \"Unsecured archive (readable) in JSON format\" and save the JSON file. </ng-container> <ng-container *ngIf=\"format === 'msecurecsv'\"> Using the mSecure desktop application, navigate to \"File\" &rarr; \"Export\" &rarr; \"CSV File...\" and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'stickypasswordxml'\"> Using the Sticky Password desktop application, navigate to \"Menu\" (top right) &rarr; \"Export\" &rarr; \"Export all\". Select the unencrypted format XML option and save the XML file. </ng-container> <ng-container *ngIf=\"format === 'truekeycsv'\"> Using the True Key desktop application, click the gear icon (top right) and then navigate to \"App Settings\". Click the \"Export\" button, enter your password and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'clipperzhtml'\"> Log into the Clipperz web application (clipperz.is/app). Click the hamburger menu icon in the top right to expand the navigation bar. Navigate to \"Data\" &rarr; \"Export\". Click the \"download HTML+JSON\" button to save the HTML file. </ng-container> <ng-container *ngIf=\"format === 'roboformcsv'\"> Using the RoboForm Editor desktop application, navigate to \"RoboForm\" (top left) &rarr; \"Options\" &rarr; \"Account &amp; Data\" and click the \"Export\" button. Select all of your data, change the \"Format\" to \"CSV file\" and then click the \"Export\" button to save the CSV file. Note: RoboForm only allows you to export Logins. Other items will not be exported. </ng-container> <ng-container *ngIf=\"format === 'passboltcsv'\"> Log into the Passbolt web vault and navigate to the \"Passwords\" listing. Select all of the passwords you would like to export and click the \"Export\" button at the top of the listing. Choose the \"csv (lastpass)\" export format and click the \"Export\" button. </ng-container> <ng-container *ngIf=\"format === 'ascendocsv'\"> Using the Ascendo DataVault desktop application, navigate to \"Tools\" &rarr; \"Export\". In the dialog that pops up, select the \"All Items (DVX, CSV)\" option. Click the \"Ok\" button to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'passwordbossjson'\"> Using the Password Boss desktop application, navigate to \"File\" &rarr; \"Export data\" &rarr; \"Password Boss JSON - not encrypted\" and save the JSON file. </ng-container> <ng-container *ngIf=\"format === 'zohovaultcsv'\"> Log into the Zoho web vault (vault.zoho.com). Navigate to \"Tools\" &rarr; \"Export Secrets\". Select \"All Secrets\" and click the \"Zoho Vault Format CSV\" button. Highlight and copy the data from the textarea. Open a text editor like Notepad and paste the data. Save the data from the text editor as <code>zoho_export.csv</code>. </ng-container> <ng-container *ngIf=\"format === 'splashidcsv'\"> Using the SplashID Safe desktop application, click on the SplashID blue lock logo in the top right corner. Navigate to \"Export\" &rarr; \"Export as CSV\" and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'passkeepcsv'\"> Using the PassKeep mobile app, navigate to \"Backup/Restore\". Locate the \"CSV Backup/Restore\" section and click \"Backup to CSV\" to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'gnomejson'\"> Make sure you have python-keyring and python-gnomekeyring installed. Save the <a target=\"_blank\" rel=\"noopener\" href=\"https://bit.ly/2GpOMTg\">GNOME Keyring Import/Export</a> python script to your desktop as <code>pw_helper.py</code>. Open terminal and run <code>chmod +rx Desktop/pw_helper.py</code> and then <code>python Desktop/pw_helper.py export Desktop/my_passwords.json</code>. Then upload the resulting <code>my_passwords.json</code> file here to Bitwarden. </ng-container> <ng-container *ngIf=\"format === 'passwordagentcsv'\"> Using the Password Agent desktop application navigate to \"File\" &rarr; \"Export\", select the \"Fields to export\" button and check all of the fields, change the \"Output format\" to \"CSV\", and then click the \"Start\" button to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'passpackcsv'\"> Log into the Passpack website vault and navigate to \"Settings\" &rarr; \"Export\", then click the \"Download\" button to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'passmanjson'\"> Open your Passman vault and click on \"Settings\" in the bottom left corner. In the \"Settings\" window switch to the \"Export credentials\" tab and choose \"JSON\" as the export type. Enter your vault's passphrase and click the \"Export\" button to save the JSON file. </ng-container> <ng-container *ngIf=\"format === 'avastcsv'\"> Open the Avast Passwords desktop application and navigate to \"Settings\" &rarr; \"Import/export data\". Select the \"Export\" button for the \"Export to CSV file\" option to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'avastjson'\"> Open the Avast Passwords desktop application and navigate to \"Settings\" &rarr; \"Import/export data\". Select the \"Export\" button for the \"Export to JSON file\" option to save the JSON file. </ng-container> <ng-container *ngIf=\"format === 'fsecurefsk'\"> Open the F-Secure KEY desktop application and navigate to \"Settings\" &rarr; \"Export Passwords\". Select the \"Export\" button, enter your master password, and save the FSK file. </ng-container> <ng-container *ngIf=\"format === 'kasperskytxt'\"> Open the Kaspersky Password Manager desktop application and navigate to \"Settings\" &rarr; \"Import/Export\". Locate the \"Export to text file\" section and select the \"Export\" button to save the TXT file. </ng-container> <ng-container *ngIf=\"format === 'remembearcsv'\"> Open the RememBear desktop application and navigate to \"Settings\" &rarr; \"Account\" &rarr; \"Export\". Enter your master password and select the \"Export Anyway\" button to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'passwordwallettxt'\"> Open the PasswordWallet desktop application and navigate to \"File\" &rarr; \"Export\" &rarr; \"Visible entries to text file\". Enter your password and select the \"Ok\" button to save the TXT file. </ng-container> <ng-container *ngIf=\"format === 'mykicsv'\"> Open the Myki desktop browser extension and navigate to \"Advanced\" &rarr; \"Export Accounts\" and then scan the QR code with your mobile device. Various CSV files will then be saved to your computer's downloads folder. </ng-container> <ng-container *ngIf=\"format === 'securesafecsv'\"> Export your SecureSafe password safe to a CSV file with a comma delimiter. </ng-container> <ng-container *ngIf=\"format === 'logmeoncecsv'\"> Open the LogMeOnce browser extension, then navigate to \"Open Menu\" &rarr; \"Export To\" and select \"CSV File\" to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'blackberrycsv'\"> Open the BlackBerry Password Keeper application, then navigate to \"Settings\" &rarr; \"Import/Export\". Select \"Export Passwords\" and follow the instructions on screen to save the unencrypted CSV file. </ng-container> <ng-container *ngIf=\"format === 'buttercupcsv'\"> Open the Buttercup desktop application and unlock your vault. Right click on your vault's icon and select \"Export\" to save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'codebookcsv'\"> Open the Codebook desktop application and log in. Navigate to \"File\" &rarr; \"Export all\", then click \"Yes\" on the dialog and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'encryptrcsv'\"> Open the newest version of the Encryptr desktop application and allow all of your data to sync. Once syncing of your data is complete, the download icon in the top right corner will turn pink. Click the download icon and save the CSV file. </ng-container> <ng-container *ngIf=\"format === 'yoticsv'\"> From the Yoti browser extension, click on \"Settings\", then \"Export Saved Logins\" and save the CSV file. </ng-container> </app-callout> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"file\">2. {{'selectImportFile' | i18n}}</label> <input type=\"file\" id=\"file\" class=\"form-control-file\" name=\"file\" [disabled]=\"importBlockedByPolicy\"> </div> </div> </div> <div class=\"form-group\"> <label for=\"fileContents\">{{'orCopyPasteFileContents' | i18n}}</label> <textarea id=\"fileContents\" class=\"form-control\" name=\"FileContents\" [(ngModel)]=\"fileContents\" [disabled]=\"importBlockedByPolicy\"></textarea> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"loading || importBlockedByPolicy\" [ngClass]=\"{manual:importBlockedByPolicy}\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'importData' | i18n}}</span> </button> </form> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n    selector: 'app-inactive-two-factor-report',\n    templateUrl: 'inactive-two-factor-report.component.html',\n})\nexport class InactiveTwoFactorReportComponent extends CipherReportComponent implements OnInit {\n    services = new Map<string, string>();\n    cipherDocs = new Map<string, string>();\n\n    constructor(protected cipherService: CipherService, modalService: ModalService,\n        messagingService: MessagingService, userService: UserService, private logService: LogService,\n        passwordRepromptService: PasswordRepromptService) {\n        super(modalService, userService, messagingService, passwordRepromptService, true);\n    }\n\n    async ngOnInit() {\n        if (await this.checkAccess()) {\n            await super.load();\n        }\n    }\n\n    async setCiphers() {\n        try {\n            await this.load2fa();\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        if (this.services.size > 0) {\n            const allCiphers = await this.getAllCiphers();\n            const inactive2faCiphers: CipherView[] = [];\n            const promises: Promise<void>[] = [];\n            const docs = new Map<string, string>();\n            allCiphers.forEach(c => {\n                if (c.type !== CipherType.Login || (c.login.totp != null && c.login.totp !== '') || !c.login.hasUris ||\n                    c.isDeleted) {\n                    return;\n                }\n                for (let i = 0; i < c.login.uris.length; i++) {\n                    const u = c.login.uris[i];\n                    if (u.uri != null && u.uri !== '') {\n                        const hostname = Utils.getHostname(u.uri);\n                        if (hostname != null && this.services.has(hostname)) {\n                            if (this.services.get(hostname) != null) {\n                                docs.set(c.id, this.services.get(hostname));\n                            }\n                            inactive2faCiphers.push(c);\n                            break;\n                        }\n                    }\n                }\n            });\n            await Promise.all(promises);\n            this.ciphers = inactive2faCiphers;\n            this.cipherDocs = docs;\n        }\n    }\n\n    protected getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllDecrypted();\n    }\n\n    private async load2fa() {\n        if (this.services.size > 0) {\n            return;\n        }\n        const response = await fetch(new Request('https://2fa.directory/api/v2/totp.json'));\n        if (response.status !== 200) {\n            throw new Error();\n        }\n        const responseJson = await response.json();\n        for (const categoryName in responseJson) {\n            if (responseJson.hasOwnProperty(categoryName)) {\n                const category = responseJson[categoryName];\n                for (const serviceName in category) {\n                    if (category.hasOwnProperty(serviceName)) {\n                        const service = category[serviceName];\n                        if (service.url != null) {\n                            const hostname = Utils.getHostname(service.url);\n                            if (hostname != null) {\n                                this.services.set(hostname, service.doc);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n","<div class=\"page-header\"> <h1> {{'inactive2faReport' | i18n}} <small *ngIf=\"hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </small> </h1> </div> <p>{{'inactive2faReportDesc' | i18n}}</p> <div *ngIf=\"!hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"mt-4\" *ngIf=\"hasLoaded\"> <app-callout type=\"success\" title=\"{{'goodNews' | i18n}}\" *ngIf=\"!ciphers.length\"> {{'noInactive2fa' | i18n}} </app-callout> <ng-container *ngIf=\"ciphers.length\"> <app-callout type=\"danger\" title=\"{{'inactive2faFound' | i18n}}\"> {{'inactive2faFoundDesc' | i18n : (ciphers.length | number)}} </app-callout> <table class=\"table table-hover table-list table-ciphers\"> <tbody> <tr *ngFor=\"let c of ciphers\"> <td class=\"table-list-icon\"> <app-vault-icon [cipher]=\"c\"></app-vault-icon> </td> <td class=\"reduced-lh wrap\"> <a href=\"#\" appStopClick (click)=\"selectCipher(c)\" title=\"{{'editItem' | i18n}}\">{{c.name}}</a> <ng-container *ngIf=\"!organization && c.organizationId\"> <i class=\"fa fa-cube\" appStopProp title=\"{{'shared' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'shared' | i18n}}</span> </ng-container> <ng-container *ngIf=\"c.hasAttachments\"> <i class=\"fa fa-paperclip\" appStopProp title=\"{{'attachments' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachments' | i18n}}</span> </ng-container> <br> <small>{{c.subTitle}}</small> </td> <td class=\"text-right\"> <a class=\"badge badge-primary\" href=\"{{cipherDocs.get(c.id)}}\" target=\"_blank\" rel=\"noopener\" *ngIf=\"cipherDocs.has(c.id)\"> {{'instructions' | i18n}}</a> </td> </tr> </tbody> </table> </ng-container> </div> <ng-template #cipherAddEdit></ng-template> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n    selector: 'app-reused-passwords-report',\n    templateUrl: 'reused-passwords-report.component.html',\n})\nexport class ReusedPasswordsReportComponent extends CipherReportComponent implements OnInit {\n    passwordUseMap: Map<string, number>;\n\n    constructor(protected cipherService: CipherService, modalService: ModalService,\n        messagingService: MessagingService, userService: UserService,\n        passwordRepromptService: PasswordRepromptService) {\n        super(modalService, userService, messagingService, passwordRepromptService, true);\n    }\n\n    async ngOnInit() {\n        if (await this.checkAccess()) {\n            await super.load();\n        }\n    }\n\n    async setCiphers() {\n        const allCiphers = await this.getAllCiphers();\n        const ciphersWithPasswords: CipherView[] = [];\n        this.passwordUseMap = new Map<string, number>();\n        allCiphers.forEach(c => {\n            if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n                return;\n            }\n            ciphersWithPasswords.push(c);\n            if (this.passwordUseMap.has(c.login.password)) {\n                this.passwordUseMap.set(c.login.password, this.passwordUseMap.get(c.login.password) + 1);\n            } else {\n                this.passwordUseMap.set(c.login.password, 1);\n            }\n        });\n        const reusedPasswordCiphers = ciphersWithPasswords.filter(c =>\n            this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1);\n        this.ciphers = reusedPasswordCiphers;\n    }\n\n    protected getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllDecrypted();\n    }\n\n    protected canManageCipher(c: CipherView): boolean {\n        // this will only ever be false from an organization view\n        return true;\n    }\n}\n","<div class=\"page-header\"> <h1> {{'reusedPasswordsReport' | i18n}} <small *ngIf=\"hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </small> </h1> </div> <p>{{'reusedPasswordsReportDesc' | i18n}}</p> <div *ngIf=\"!hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"mt-4\" *ngIf=\"hasLoaded\"> <app-callout type=\"success\" title=\"{{'goodNews' | i18n}}\" *ngIf=\"!ciphers.length\"> {{'noReusedPasswords' | i18n}} </app-callout> <ng-container *ngIf=\"ciphers.length\"> <app-callout type=\"danger\" title=\"{{'reusedPasswordsFound' | i18n}}\"> {{'reusedPasswordsFoundDesc' | i18n : (ciphers.length | number)}} </app-callout> <table class=\"table table-hover table-list table-ciphers\"> <tbody> <tr *ngFor=\"let c of ciphers\"> <td class=\"table-list-icon\"> <app-vault-icon [cipher]=\"c\"></app-vault-icon> </td> <td class=\"reduced-lh wrap\"> <ng-container *ngIf=\"!organization || canManageCipher(c) ; else cantManage\"> <a href=\"#\" appStopClick (click)=\"selectCipher(c)\" title=\"{{'editItem' | i18n}}\">{{c.name}}</a> </ng-container> <ng-template #cantManage> <span>{{c.name}}</span> </ng-template> <ng-container *ngIf=\"!organization && c.organizationId\"> <i class=\"fa fa-cube\" appStopProp title=\"{{'shared' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'shared' | i18n}}</span> </ng-container> <ng-container *ngIf=\"c.hasAttachments\"> <i class=\"fa fa-paperclip\" appStopProp title=\"{{'attachments' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachments' | i18n}}</span> </ng-container> <br> <small>{{c.subTitle}}</small> </td> <td class=\"text-right\"> <span class=\"badge badge-warning\"> {{'reusedXTimes' | i18n : passwordUseMap.get(c.login.password)}} </span> </td> </tr> </tbody> </table> </ng-container> </div> <ng-template #cipherAddEdit></ng-template> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n    selector: 'app-unsecured-websites-report',\n    templateUrl: 'unsecured-websites-report.component.html',\n})\nexport class UnsecuredWebsitesReportComponent extends CipherReportComponent implements OnInit {\n    constructor(protected cipherService: CipherService, modalService: ModalService,\n        messagingService: MessagingService, userService: UserService, passwordRepromptService: PasswordRepromptService) {\n        super(modalService, userService, messagingService, passwordRepromptService, true);\n    }\n\n    async ngOnInit() {\n        if (await this.checkAccess()) {\n            await super.load();\n        }\n    }\n\n    async setCiphers() {\n        const allCiphers = await this.getAllCiphers();\n        const unsecuredCiphers = allCiphers.filter(c => {\n            if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {\n                return false;\n            }\n            return c.login.uris.some(u => u.uri != null && u.uri.indexOf('http://') === 0);\n        });\n        this.ciphers = unsecuredCiphers;\n    }\n\n    protected getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllDecrypted();\n    }\n}\n","<div class=\"page-header\"> <h1> {{'unsecuredWebsitesReport' | i18n}} <small *ngIf=\"hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </small> </h1> </div> <p>{{'unsecuredWebsitesReportDesc' | i18n}}</p> <div *ngIf=\"!hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"mt-4\" *ngIf=\"hasLoaded\"> <app-callout type=\"success\" title=\"{{'goodNews' | i18n}}\" *ngIf=\"!ciphers.length\"> {{'noUnsecuredWebsites' | i18n}} </app-callout> <ng-container *ngIf=\"ciphers.length\"> <app-callout type=\"danger\" title=\"{{'unsecuredWebsitesFound' | i18n}}\"> {{'unsecuredWebsitesFoundDesc' | i18n : (ciphers.length | number)}} </app-callout> <table class=\"table table-hover table-list table-ciphers\"> <tbody> <tr *ngFor=\"let c of ciphers\"> <td class=\"table-list-icon\"> <app-vault-icon [cipher]=\"c\"></app-vault-icon> </td> <td class=\"reduced-lh wrap\"> <a href=\"#\" appStopClick (click)=\"selectCipher(c)\" title=\"{{'editItem' | i18n}}\">{{c.name}}</a> <ng-container *ngIf=\"!organization && c.organizationId\"> <i class=\"fa fa-cube\" appStopProp title=\"{{'shared' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'shared' | i18n}}</span> </ng-container> <ng-container *ngIf=\"c.hasAttachments\"> <i class=\"fa fa-paperclip\" appStopProp title=\"{{'attachments' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachments' | i18n}}</span> </ng-container> <br> <small>{{c.subTitle}}</small> </td> </tr> </tbody> </table> </ng-container> </div> <ng-template #cipherAddEdit></ng-template> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherReportComponent } from './cipher-report.component';\n\n@Component({\n    selector: 'app-weak-passwords-report',\n    templateUrl: 'weak-passwords-report.component.html',\n})\nexport class WeakPasswordsReportComponent extends CipherReportComponent implements OnInit {\n\n    passwordStrengthMap = new Map<string, [string, string]>();\n\n    private passwordStrengthCache = new Map<string, number>();\n\n    constructor(protected cipherService: CipherService, protected passwordGenerationService: PasswordGenerationService,\n        modalService: ModalService, messagingService: MessagingService, userService: UserService,\n        passwordRepromptService: PasswordRepromptService) {\n        super(modalService, userService, messagingService, passwordRepromptService, true);\n    }\n\n    async ngOnInit() {\n        if (await this.checkAccess()) {\n            await super.load();\n        }\n    }\n\n    async setCiphers() {\n        const allCiphers = await this.getAllCiphers();\n        const weakPasswordCiphers: CipherView[] = [];\n        const isUserNameNotEmpty = (c: CipherView): boolean => {\n            return c.login.username != null && c.login.username.trim() !== '';\n        };\n        const getCacheKey = (c: CipherView): string => {\n            return c.login.password + '_____' + (isUserNameNotEmpty(c) ? c.login.username : '');\n        };\n\n        allCiphers.forEach(c => {\n            if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {\n                return;\n            }\n            const hasUserName = isUserNameNotEmpty(c);\n            const cacheKey = getCacheKey(c);\n            if (!this.passwordStrengthCache.has(cacheKey)) {\n                let userInput: string[] = [];\n                if (hasUserName) {\n                    const atPosition = c.login.username.indexOf('@');\n                    if (atPosition > -1) {\n                        userInput = userInput.concat(\n                            c.login.username.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/))\n                            .filter(i => i.length >= 3);\n                    } else {\n                        userInput = c.login.username.trim().toLowerCase().split(/[^A-Za-z0-9]/)\n                            .filter(i => i.length >= 3);\n                    }\n                }\n                const result = this.passwordGenerationService.passwordStrength(c.login.password,\n                    userInput.length > 0 ? userInput : null);\n                this.passwordStrengthCache.set(cacheKey, result.score);\n            }\n            const score = this.passwordStrengthCache.get(cacheKey);\n            if (score != null && score <= 2) {\n                this.passwordStrengthMap.set(c.id, this.scoreKey(score));\n                weakPasswordCiphers.push(c);\n            }\n        });\n        weakPasswordCiphers.sort((a, b) => {\n            return this.passwordStrengthCache.get(getCacheKey(a)) -\n                this.passwordStrengthCache.get(getCacheKey(b));\n        });\n        this.ciphers = weakPasswordCiphers;\n    }\n\n    protected getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllDecrypted();\n    }\n\n    protected canManageCipher(c: CipherView): boolean {\n        // this will only ever be false from the org view;\n        return true;\n    }\n\n    private scoreKey(score: number): [string, string] {\n        switch (score) {\n            case 4:\n                return ['strong', 'success'];\n            case 3:\n                return ['good', 'primary'];\n            case 2:\n                return ['weak', 'warning'];\n            default:\n                return ['veryWeak', 'danger'];\n        }\n    }\n}\n","<div class=\"page-header\"> <h1> {{'weakPasswordsReport' | i18n}} <small *ngIf=\"hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </small> </h1> </div> <p>{{'weakPasswordsReportDesc' | i18n}}</p> <div *ngIf=\"!hasLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"mt-4\" *ngIf=\"hasLoaded\"> <app-callout type=\"success\" title=\"{{'goodNews' | i18n}}\" *ngIf=\"!ciphers.length\"> {{'noWeakPasswords' | i18n}} </app-callout> <ng-container *ngIf=\"ciphers.length\"> <app-callout type=\"danger\" title=\"{{'weakPasswordsFound' | i18n}}\"> {{'weakPasswordsFoundDesc' | i18n : (ciphers.length | number)}} </app-callout> <table class=\"table table-hover table-list table-ciphers\"> <tbody> <tr *ngFor=\"let c of ciphers\"> <td class=\"table-list-icon\"> <app-vault-icon [cipher]=\"c\"></app-vault-icon> </td> <td class=\"reduced-lh wrap\"> <ng-container *ngIf=\"!organization || canManageCipher(c) ; else cantManage\"> <a href=\"#\" appStopClick (click)=\"selectCipher(c)\" title=\"{{'editItem' | i18n}}\">{{c.name}}</a> </ng-container> <ng-template #cantManage> <span>{{c.name}}</span> </ng-template> <ng-container *ngIf=\"!organization && c.organizationId\"> <i class=\"fa fa-cube\" appStopProp title=\"{{'shared' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'shared' | i18n}}</span> </ng-container> <ng-container *ngIf=\"c.hasAttachments\"> <i class=\"fa fa-paperclip\" appStopProp title=\"{{'attachments' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachments' | i18n}}</span> </ng-container> <br> <small>{{c.subTitle}}</small> </td> <td class=\"text-right\"> <span class=\"badge badge-{{passwordStrengthMap.get(c.id)[1]}}\"> {{passwordStrengthMap.get(c.id)[0] | i18n}} </span> </td> </tr> </tbody> </table> </ng-container> </div> <ng-template #cipherAddEdit></ng-template> ","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib-angular/components/attachments.component';\n\n@Component({\n    selector: 'app-vault-attachments',\n    templateUrl: 'attachments.component.html',\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n    viewOnly = false;\n\n    constructor(cipherService: CipherService, i18nService: I18nService,\n        cryptoService: CryptoService, userService: UserService,\n        platformUtilsService: PlatformUtilsService, apiService: ApiService,\n        logService: LogService) {\n        super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window,\n            logService);\n    }\n\n    protected async reupload(attachment: AttachmentView) {\n        if (this.showFixOldAttachments(attachment)) {\n            await this.reuploadCipherAttachment(attachment, false);\n        }\n    }\n\n    protected showFixOldAttachments(attachment: AttachmentView) {\n        return attachment.key == null && this.cipher.organizationId == null;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"attachmentsTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"attachmentsTitle\"> {{'attachments' | i18n}} <small *ngIf=\"cipher\">{{cipher.name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <table class=\"table table-hover table-list\" *ngIf=\"cipher && cipher.hasAttachments\"> <tbody> <tr *ngFor=\"let a of cipher.attachments\"> <td class=\"table-list-icon\"> <i class=\"fa fa-fw fa-lg fa-file-o\" *ngIf=\"!a.downloading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-lg fa-fw fa-spin\" *ngIf=\"a.downloading\" aria-hidden=\"true\"></i> </td> <td class=\"wrap\"> <div class=\"d-flex\"> <a href=\"#\" appStopClick (click)=\"download(a)\">{{a.fileName}}</a> <div *ngIf=\"showFixOldAttachments(a)\" class=\"ml-2\"> <a href=\"https://help.bitwarden.com/article/attachments/#fixing-old-attachments\" target=\"_blank\" rel=\"noopener\"> <i class=\"fa fa-exclamation-triangle text-warning\" title=\"{{'attachmentFixDesc' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachmentFixDesc' | i18n}}</span></a> <button type=\"button\" class=\"btn btn-outline-primary btn-sm m-0 py-0 px-2\" (click)=\"reupload(a)\" #reuploadBtn [appApiAction]=\"reuploadPromises[a.id]\" [disabled]=\"reuploadBtn.loading\">{{'fix' | i18n}}</button> </div> </div> <small>{{a.sizeName}}</small> </td> <td class=\"table-list-options\" *ngIf=\"!viewOnly\"> <button class=\"btn btn-outline-danger\" type=\"button\" appStopClick appA11yTitle=\"{{'delete' | i18n}}\" (click)=\"delete(a)\" #deleteBtn [appApiAction]=\"deletePromises[a.id]\" [disabled]=\"deleteBtn.loading\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </td> </tr> </tbody> </table> <div *ngIf=\"!viewOnly\"> <h3>{{'newAttachment' | i18n}}</h3> <label for=\"file\" class=\"sr-only\">{{'file' | i18n}}</label> <input type=\"file\" id=\"file\" class=\"form-control-file\" name=\"file\" required> <small class=\"form-text text-muted\">{{'maxFileSize' | i18n}}</small> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\" *ngIf=\"!viewOnly\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CiphersComponent as BaseCiphersComponent } from '../../vault/ciphers.component';\n\n@Component({\n    selector: 'app-org-vault-ciphers',\n    templateUrl: '../../vault/ciphers.component.html',\n})\nexport class CiphersComponent extends BaseCiphersComponent {\n    @Output() onEventsClicked = new EventEmitter<CipherView>();\n\n    organization: Organization;\n    accessEvents = false;\n\n    protected allCiphers: CipherView[] = [];\n\n    constructor(searchService: SearchService, toasterService: ToasterService, i18nService: I18nService,\n        platformUtilsService: PlatformUtilsService, cipherService: CipherService,\n        private apiService: ApiService, eventService: EventService, totpService: TotpService,\n        userService: UserService, passwordRepromptService: PasswordRepromptService,\n        logService: LogService) {\n        super(searchService, toasterService, i18nService, platformUtilsService, cipherService,\n            eventService, totpService, userService, passwordRepromptService, logService);\n    }\n\n    async load(filter: (cipher: CipherView) => boolean = null) {\n        if (this.organization.canEditAnyCollection) {\n            this.accessEvents = this.organization.useEvents;\n            this.allCiphers = await this.cipherService.getAllFromApiForOrganization(this.organization.id);\n        } else {\n            this.allCiphers = (await this.cipherService.getAllDecrypted()).filter(c => c.organizationId === this.organization.id);\n        }\n        await this.searchService.indexCiphers(this.organization.id, this.allCiphers);\n        await this.applyFilter(filter);\n        this.loaded = true;\n    }\n\n    async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n        if (this.organization.canViewAllCollections) {\n            await super.applyFilter(filter);\n        } else {\n            const f = (c: CipherView) => c.organizationId === this.organization.id && (filter == null || filter(c));\n            await super.applyFilter(f);\n        }\n    }\n\n    async search(timeout: number = null) {\n        await super.search(timeout, this.allCiphers);\n    }\n    events(c: CipherView) {\n        this.onEventsClicked.emit(c);\n    }\n\n    protected deleteCipher(id: string) {\n        if (!this.organization.canEditAnyCollection) {\n            return super.deleteCipher(id, this.deleted);\n        }\n        return this.deleted ? this.apiService.deleteCipherAdmin(id) : this.apiService.putDeleteCipherAdmin(id);\n    }\n\n    protected showFixOldAttachments(c: CipherView) {\n        return this.organization.canEditAnyCollection && c.hasOldAttachments;\n    }\n}\n","import {\n    Component,\n    OnDestroy,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { CollectionsComponent as BaseCollectionsComponent } from 'jslib-angular/components/collections.component';\n\n@Component({\n    selector: 'app-vault-collections',\n    templateUrl: 'collections.component.html',\n})\nexport class CollectionsComponent extends BaseCollectionsComponent implements OnDestroy {\n    constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n        i18nService: I18nService, cipherService: CipherService, logService: LogService) {\n        super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n    }\n\n    ngOnDestroy() {\n        this.selectAll(false);\n    }\n\n    check(c: CollectionView, select?: boolean) {\n        (c as any).checked = select == null ? !(c as any).checked : select;\n    }\n\n    selectAll(select: boolean) {\n        this.collections.forEach(c => this.check(c, select));\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"collectionsTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"collectionsTitle\"> {{'collections' | i18n}} <small *ngIf=\"cipher\">{{cipher.name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{'collectionsDesc' | i18n}}</p> <div class=\"d-flex\"> <h3>{{'collections' | i18n}}</h3> <div class=\"ml-auto d-flex\" *ngIf=\"collections && collections.length\"> <button type=\"button\" (click)=\"selectAll(true)\" class=\"btn btn-link btn-sm py-0\"> {{'selectAll' | i18n}} </button> <button type=\"button\" (click)=\"selectAll(false)\" class=\"btn btn-link btn-sm py-0\"> {{'unselectAll' | i18n}} </button> </div> </div> <div *ngIf=\"!collections || !collections.length\"> {{'noCollectionsInList' | i18n}} </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"collections && collections.length\"> <tbody> <tr *ngFor=\"let c of collections; let i = index\" (click)=\"check(c)\"> <td class=\"table-list-checkbox\"> <input type=\"checkbox\" [(ngModel)]=\"c.checked\" name=\"Collection[{{i}}].Checked\" appStopProp> </td> <td> {{c.name}} </td> </tr> </tbody> </table> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CollectionDetailsResponse } from 'jslib-common/models/response/collectionResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { GroupingsComponent as BaseGroupingsComponent } from '../../vault/groupings.component';\n\n@Component({\n    selector: 'app-org-vault-groupings',\n    templateUrl: '../../vault/groupings.component.html',\n})\nexport class GroupingsComponent extends BaseGroupingsComponent {\n    organization: Organization;\n\n    constructor(collectionService: CollectionService, folderService: FolderService,\n        storageService: StorageService, userService: UserService,\n        private apiService: ApiService, private i18nService: I18nService) {\n        super(collectionService, folderService, storageService, userService);\n    }\n\n    async loadCollections() {\n        if (!this.organization.canEditAnyCollection) {\n            await super.loadCollections(this.organization.id);\n            return;\n        }\n\n        const collections = await this.apiService.getCollections(this.organization.id);\n        if (collections != null && collections.data != null && collections.data.length) {\n            const collectionDomains = collections.data.map(r =>\n                new Collection(new CollectionData(r as CollectionDetailsResponse)));\n            this.collections = await this.collectionService.decryptMany(collectionDomains);\n        } else {\n            this.collections = [];\n        }\n\n        const unassignedCollection = new CollectionView();\n        unassignedCollection.name = this.i18nService.t('unassigned');\n        unassignedCollection.id = 'unassigned';\n        unassignedCollection.organizationId = this.organization.id;\n        unassignedCollection.readOnly = true;\n        this.collections.push(unassignedCollection);\n        this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n    }\n\n    collapse(grouping: CollectionView) {\n        super.collapse(grouping, 'org_');\n    }\n\n    isCollapsed(grouping: CollectionView) {\n        return super.isCollapsed(grouping, 'org_');\n    }\n}\n","import {\n    Component,\n    Input,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { BulkDeleteComponent } from './bulk-delete.component';\nimport { BulkMoveComponent } from './bulk-move.component';\nimport { BulkRestoreComponent } from './bulk-restore.component';\nimport { BulkShareComponent } from './bulk-share.component';\nimport { CiphersComponent } from './ciphers.component';\n\n@Component({\n    selector: 'app-vault-bulk-actions',\n    templateUrl: 'bulk-actions.component.html',\n})\nexport class BulkActionsComponent {\n    @Input() ciphersComponent: CiphersComponent;\n    @Input() deleted: boolean;\n    @Input() organization: Organization;\n\n    @ViewChild('bulkDeleteTemplate', { read: ViewContainerRef, static: true }) bulkDeleteModalRef: ViewContainerRef;\n    @ViewChild('bulkRestoreTemplate', { read: ViewContainerRef, static: true }) bulkRestoreModalRef: ViewContainerRef;\n    @ViewChild('bulkMoveTemplate', { read: ViewContainerRef, static: true }) bulkMoveModalRef: ViewContainerRef;\n    @ViewChild('bulkShareTemplate', { read: ViewContainerRef, static: true }) bulkShareModalRef: ViewContainerRef;\n\n    constructor(private toasterService: ToasterService, private i18nService: I18nService,\n        private modalService: ModalService, private passwordRepromptService: PasswordRepromptService) { }\n\n    async bulkDelete() {\n        if (!await this.promptPassword()) {\n            return;\n        }\n\n        const selectedIds = this.ciphersComponent.getSelectedIds();\n        if (selectedIds.length === 0) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('nothingSelected'));\n            return;\n        }\n\n        const [modal] = await this.modalService.openViewRef(BulkDeleteComponent, this.bulkDeleteModalRef, comp => {\n            comp.permanent = this.deleted;\n            comp.cipherIds = selectedIds;\n            comp.organization = this.organization;\n            comp.onDeleted.subscribe(async () => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n    }\n\n    async bulkRestore() {\n        if (!await this.promptPassword()) {\n            return;\n        }\n\n        const selectedIds = this.ciphersComponent.getSelectedIds();\n        if (selectedIds.length === 0) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('nothingSelected'));\n            return;\n        }\n\n        const [modal] = await this.modalService.openViewRef(BulkRestoreComponent, this.bulkRestoreModalRef, comp => {\n            comp.cipherIds = selectedIds;\n            comp.onRestored.subscribe(async () => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n    }\n\n    async bulkShare() {\n        if (!await this.promptPassword()) {\n            return;\n        }\n\n        const selectedCiphers = this.ciphersComponent.getSelected();\n        if (selectedCiphers.length === 0) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('nothingSelected'));\n            return;\n        }\n\n        const [modal] = await this.modalService.openViewRef(BulkShareComponent, this.bulkShareModalRef, comp => {\n            comp.ciphers = selectedCiphers;\n            comp.onShared.subscribe(async () => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n    }\n\n    async bulkMove() {\n        if (!await this.promptPassword()) {\n            return;\n        }\n\n        const selectedIds = this.ciphersComponent.getSelectedIds();\n        if (selectedIds.length === 0) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('nothingSelected'));\n            return;\n        }\n\n        const [modal] = await this.modalService.openViewRef(BulkMoveComponent, this.bulkMoveModalRef, comp => {\n            comp.cipherIds = selectedIds;\n            comp.onMoved.subscribe(async () => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n    }\n\n    selectAll(select: boolean) {\n        this.ciphersComponent.selectAll(select);\n    }\n\n    private async promptPassword() {\n        const selectedCiphers = this.ciphersComponent.getSelected();\n        const notProtected = !selectedCiphers.find(cipher => cipher.reprompt !== CipherRepromptType.None);\n\n        return notProtected || await this.passwordRepromptService.showPasswordPrompt();\n    }\n}\n","<div class=\"dropdown mr-2\" appListDropdown> <button class=\"btn btn-sm btn-outline-secondary dropdown-toggle\" type=\"button\" id=\"bulkActionsButton\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"bulkActionsButton\"> <button class=\"dropdown-item\" appStopClick (click)=\"bulkMove()\" *ngIf=\"!deleted && !organization\"> <i class=\"fa fa-fw fa-share\" aria-hidden=\"true\"></i> {{'moveSelected' | i18n}} </button> <button class=\"dropdown-item\" appStopClick (click)=\"bulkShare()\" *ngIf=\"!deleted && !organization\"> <i class=\"fa fa-fw fa-arrow-circle-o-right\" aria-hidden=\"true\"></i> {{'moveSelectedToOrg' | i18n}} </button> <button class=\"dropdown-item\" (click)=\"bulkRestore()\" *ngIf=\"deleted && !organization\"> <i class=\"fa fa-fw fa-undo\" aria-hidden=\"true\"></i> {{'restoreSelected' | i18n}} </button> <button class=\"dropdown-item text-danger\" (click)=\"bulkDelete()\"> <i class=\"fa fa-fw fa-trash-o\" aria-hidden=\"true\"></i> {{(deleted ? 'permanentlyDeleteSelected' : 'deleteSelected') | i18n}} </button> <div class=\"dropdown-divider\"></div> <button class=\"dropdown-item\" appStopClick (click)=\"selectAll(true)\"> <i class=\"fa fa-fw fa-check-square-o\" aria-hidden=\"true\"></i> {{'selectAll' | i18n}} </button> <button class=\"dropdown-item\" appStopClick (click)=\"selectAll(false)\"> <i class=\"fa fa-fw fa-minus-square-o\" aria-hidden=\"true\"></i> {{'unselectAll' | i18n}} </button> </div> </div> <ng-template #bulkDeleteTemplate></ng-template> <ng-template #bulkRestoreTemplate></ng-template> <ng-template #bulkMoveTemplate></ng-template> <ng-template #bulkShareTemplate></ng-template> ","import Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { SendFileData } from '../data/sendFileData';\n\nimport { SendFileView } from '../view/sendFileView';\n\nexport class SendFile extends Domain {\n    id: string;\n    size: string;\n    sizeName: string;\n    fileName: EncString;\n\n    constructor(obj?: SendFileData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.size = obj.size;\n        this.buildDomainModel(this, obj, {\n            id: null,\n            sizeName: null,\n            fileName: null,\n        }, alreadyEncrypted, ['id', 'sizeName']);\n    }\n\n    async decrypt(key: SymmetricCryptoKey): Promise<SendFileView> {\n        const view = await this.decryptObj(new SendFileView(this), {\n            fileName: null,\n        }, null, key);\n        return view;\n    }\n}\n","import Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { SendTextData } from '../data/sendTextData';\n\nimport { SendTextView } from '../view/sendTextView';\n\nexport class SendText extends Domain {\n    text: EncString;\n    hidden: boolean;\n\n    constructor(obj?: SendTextData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.hidden = obj.hidden;\n        this.buildDomainModel(this, obj, {\n            text: null,\n        }, alreadyEncrypted, []);\n    }\n\n    decrypt(key: SymmetricCryptoKey): Promise<SendTextView> {\n        return this.decryptObj(new SendTextView(this), {\n            text: null,\n        }, null, key);\n    }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherWithIdRequest extends CipherRequest {\n    id: string;\n\n    constructor(cipher: Cipher) {\n        super(cipher);\n        this.id = cipher.id;\n    }\n}\n","import { Folder } from '../domain/folder';\n\nexport class FolderRequest {\n    name: string;\n\n    constructor(folder: Folder) {\n        this.name = folder.name ? folder.name.encryptedString : null;\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class SendFileApi extends BaseResponse {\n    id: string;\n    fileName: string;\n    key: string;\n    size: string;\n    sizeName: string;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.id = this.getResponseProperty('Id');\n        this.fileName = this.getResponseProperty('FileName');\n        this.key = this.getResponseProperty('Key');\n        this.size = this.getResponseProperty('Size');\n        this.sizeName = this.getResponseProperty('SizeName');\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class SendTextApi extends BaseResponse {\n    text: string;\n    hidden: boolean;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.text = this.getResponseProperty('Text');\n        this.hidden = this.getResponseProperty('Hidden') || false;\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    HostListener,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Directive({\n    selector: '[appSelectCopy]',\n})\nexport class SelectCopyDirective {\n    constructor(private el: ElementRef, private platformUtilsService: PlatformUtilsService) { }\n\n    @HostListener('copy') onCopy() {\n        if (window == null) {\n            return;\n        }\n        let copyText = '';\n        const selection = window.getSelection();\n        for (let i = 0; i < selection.rangeCount; i++) {\n            const range = selection.getRangeAt(i);\n            const text = range.toString();\n\n            // The selection should only contain one line of text. In some cases however, the\n            // selection contains newlines and space characters from the indentation of following\n            // sibling nodes. To avoid copying passwords containing trailing newlines and spaces\n            // that aren't part of the password, the selection has to be trimmed.\n            let stringEndPos = text.length;\n            const newLinePos = text.search(/(?:\\r\\n|\\r|\\n)/);\n            if (newLinePos > -1) {\n                const otherPart = text.substr(newLinePos).trim();\n                if (otherPart === '') {\n                    stringEndPos = newLinePos;\n                }\n            }\n            copyText += text.substring(0, stringEndPos);\n        }\n        this.platformUtilsService.copyToClipboard(copyText, { window: window });\n    }\n}\n","import {\n    Pipe,\n    PipeTransform,\n} from '@angular/core';\nimport { Utils } from 'jslib-common/misc/utils';\n\n/*\n An updated pipe that sanitizes HTML, highlights numbers and special characters (in different colors each)\n and handles Unicode / Emoji characters correctly.\n*/\n@Pipe({ name: 'colorPassword' })\nexport class ColorPasswordPipe implements PipeTransform {\n    transform(password: string) {\n        // Convert to an array to handle cases that stings have special characters, ie: emoji.\n        const passwordArray = Array.from(password);\n        let colorizedPassword = '';\n        for (let i = 0; i < passwordArray.length; i++) {\n            let character = passwordArray[i];\n            let isSpecial = false;\n            // Sanitize HTML first.\n            switch (character) {\n                case '&':\n                    character = '&amp;';\n                    isSpecial = true;\n                    break;\n                case '<':\n                    character = '&lt;';\n                    isSpecial = true;\n                    break;\n                case '>':\n                    character = '&gt;';\n                    isSpecial = true;\n                    break;\n                case ' ':\n                    character = '&nbsp;';\n                    isSpecial = true;\n                    break;\n                default:\n                    break;\n            }\n            let type = 'letter';\n            if (character.match(Utils.regexpEmojiPresentation)) {\n                type = 'emoji';\n            } else if (isSpecial || character.match(/[^\\w ]/)) {\n                type = 'special';\n            } else if (character.match(/\\d/)) {\n                type = 'number';\n            }\n            colorizedPassword += '<span class=\"password-' + type + '\">' + character + '</span>';\n        }\n        return colorizedPassword;\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileOrganizationResponse } from './profileOrganizationResponse';\nimport { ProfileProviderOrganizationResponse } from './profileProviderOrganizationResponse';\nimport { ProfileProviderResponse } from './profileProviderResponse';\n\nexport class ProfileResponse extends BaseResponse {\n    id: string;\n    name: string;\n    email: string;\n    emailVerified: boolean;\n    masterPasswordHint: string;\n    premium: boolean;\n    culture: string;\n    twoFactorEnabled: boolean;\n    key: string;\n    privateKey: string;\n    securityStamp: string;\n    forcePasswordReset: boolean;\n    usesKeyConnector: boolean;\n    organizations: ProfileOrganizationResponse[] = [];\n    providers: ProfileProviderResponse[] = [];\n    providerOrganizations: ProfileProviderOrganizationResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.name = this.getResponseProperty('Name');\n        this.email = this.getResponseProperty('Email');\n        this.emailVerified = this.getResponseProperty('EmailVerified');\n        this.masterPasswordHint = this.getResponseProperty('MasterPasswordHint');\n        this.premium = this.getResponseProperty('Premium');\n        this.culture = this.getResponseProperty('Culture');\n        this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n        this.key = this.getResponseProperty('Key');\n        this.privateKey = this.getResponseProperty('PrivateKey');\n        this.securityStamp = this.getResponseProperty('SecurityStamp');\n        this.forcePasswordReset = this.getResponseProperty('ForcePasswordReset') ?? false;\n        this.usesKeyConnector = this.getResponseProperty('UsesKeyConnector') ?? false;\n\n        const organizations = this.getResponseProperty('Organizations');\n        if (organizations != null) {\n            this.organizations = organizations.map((o: any) => new ProfileOrganizationResponse(o));\n        }\n        const providers = this.getResponseProperty('Providers');\n        if (providers != null) {\n            this.providers = providers.map((o: any) => new ProfileProviderResponse(o));\n        }\n        const providerOrganizations = this.getResponseProperty('ProviderOrganizations');\n        if (providerOrganizations != null) {\n            this.providerOrganizations = providerOrganizations.map((o: any) => new ProfileProviderOrganizationResponse(o));\n        }\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nexport class SendResponse extends BaseResponse {\n    id: string;\n    accessId: string;\n    type: SendType;\n    name: string;\n    notes: string;\n    file: SendFileApi;\n    text: SendTextApi;\n    key: string;\n    maxAccessCount?: number;\n    accessCount: number;\n    revisionDate: string;\n    expirationDate: string;\n    deletionDate: string;\n    password: string;\n    disable: boolean;\n    hideEmail: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.accessId = this.getResponseProperty('AccessId');\n        this.type = this.getResponseProperty('Type');\n        this.name = this.getResponseProperty('Name');\n        this.notes = this.getResponseProperty('Notes');\n        this.key = this.getResponseProperty('Key');\n        this.maxAccessCount = this.getResponseProperty('MaxAccessCount');\n        this.accessCount = this.getResponseProperty('AccessCount');\n        this.revisionDate = this.getResponseProperty('RevisionDate');\n        this.expirationDate = this.getResponseProperty('ExpirationDate');\n        this.deletionDate = this.getResponseProperty('DeletionDate');\n        this.password = this.getResponseProperty('Password');\n        this.disable = this.getResponseProperty('Disabled') || false;\n        this.hideEmail = this.getResponseProperty('HideEmail') || false;\n\n        const text = this.getResponseProperty('Text');\n        if (text != null) {\n            this.text = new SendTextApi(text);\n        }\n\n        const file = this.getResponseProperty('File');\n        if (file != null) {\n            this.file = new SendFileApi(file);\n        }\n    }\n}\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 489;","import { Component } from '@angular/core';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class DisableSendPolicy extends BasePolicy {\n    name = 'disableSend';\n    description = 'disableSendPolicyDesc';\n    type = PolicyType.DisableSend;\n    component = DisableSendPolicyComponent;\n}\n\n@Component({\n    selector: 'policy-disable-send',\n    templateUrl: 'disable-send.component.html',\n})\nexport class DisableSendPolicyComponent extends BasePolicyComponent {\n}\n","<app-callout type=\"warning\"> {{'disableSendExemption' | i18n}} </app-callout> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> ","import Domain from './domainBase';\n\nexport class MasterPasswordPolicyOptions extends Domain {\n    minComplexity: number = 0;\n    minLength: number = 0;\n    requireUpper: boolean = false;\n    requireLower: boolean = false;\n    requireNumbers: boolean = false;\n    requireSpecial: boolean = false;\n}\n","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class MasterPasswordPolicy extends BasePolicy {\n    name = 'masterPass';\n    description = 'masterPassPolicyDesc';\n    type = PolicyType.MasterPassword;\n    component = MasterPasswordPolicyComponent;\n}\n\n@Component({\n    selector: 'policy-master-password',\n    templateUrl: 'master-password.component.html',\n})\nexport class MasterPasswordPolicyComponent extends BasePolicyComponent {\n\n    data = this.fb.group({\n        minComplexity: [null],\n        minLength: [null],\n        requireUpper: [null],\n        requireLower: [null],\n        requireNumbers: [null],\n        requireSpecial: [null],\n    });\n\n    passwordScores: { name: string; value: number; }[];\n    showKeyConnectorInfo: boolean = false;\n\n    constructor(private fb: FormBuilder, i18nService: I18nService, private userService: UserService) {\n        super();\n\n        this.passwordScores = [\n            { name: '-- ' + i18nService.t('select') + ' --', value: null },\n            { name: i18nService.t('weak') + ' (0)', value: 0 },\n            { name: i18nService.t('weak') + ' (1)', value: 1 },\n            { name: i18nService.t('weak') + ' (2)', value: 2 },\n            { name: i18nService.t('good') + ' (3)', value: 3 },\n            { name: i18nService.t('strong') + ' (4)', value: 4 },\n        ];\n    }\n\n    async ngOnInit() {\n        super.ngOnInit();\n        const organization = await this.userService.getOrganization(this.policyResponse.organizationId);\n        this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n    }\n}\n","<app-callout type=\"info\" *ngIf=\"showKeyConnectorInfo\"> {{'keyConnectorPolicyRestriction' | i18n}} </app-callout> <div [formGroup]=\"data\"> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"minComplexity\">{{'minComplexityScore' | i18n}}</label> <select id=\"minComplexity\" name=\"minComplexity\" formControlName=\"minComplexity\" class=\"form-control\"> <option *ngFor=\"let o of passwordScores\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> <div class=\"col-6 form-group\"> <label for=\"minLength\">{{'minLength' | i18n}}</label> <input id=\"minLength\" class=\"form-control\" type=\"number\" min=\"8\" name=\"minLength\" formControlName=\"minLength\"> </div> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"requireUpper\" name=\"requireUpper\" formControlName=\"requireUpper\"> <label class=\"form-check-label\" for=\"requireUpper\">A-Z</label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"requireLower\" name=\"requireLower\" formControlName=\"requireLower\"> <label class=\"form-check-label\" for=\"requireLower\">a-z</label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"requireNumbers\" name=\"requireNumbers\" formControlName=\"requireNumbers\"> <label class=\"form-check-label\" for=\"requireNumbers\">0-9</label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"requireSpecial\" name=\"requireSpecial\" formControlName=\"requireSpecial\"> <label class=\"form-check-label\" for=\"requireSpecial\">!@#$%^&amp;*</label> </div> </div> ","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class PasswordGeneratorPolicy extends BasePolicy {\n    name = 'passwordGenerator';\n    description = 'passwordGeneratorPolicyDesc';\n    type = PolicyType.PasswordGenerator;\n    component = PasswordGeneratorPolicyComponent;\n}\n\n@Component({\n    selector: 'policy-password-generator',\n    templateUrl: 'password-generator.component.html',\n})\nexport class PasswordGeneratorPolicyComponent extends BasePolicyComponent {\n\n    data = this.fb.group({\n        defaultType: [null],\n        minLength: [null],\n        useUpper: [null],\n        useLower: [null],\n        useNumbers: [null],\n        useSpecial: [null],\n        minNumbers: [null],\n        minSpecial: [null],\n        minNumberWords: [null],\n        capitalize: [null],\n        includeNumber: [null],\n    });\n\n    defaultTypes: { name: string; value: string; }[];\n\n    constructor(private fb: FormBuilder, i18nService: I18nService) {\n        super();\n\n        this.defaultTypes = [\n            { name: i18nService.t('userPreference'), value: null },\n            { name: i18nService.t('password'), value: 'password' },\n            { name: i18nService.t('passphrase'), value: 'passphrase' },\n        ];\n    }\n}\n","<div [formGroup]=\"data\"> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group mb-0\"> <label for=\"defaultType\">{{'defaultType' | i18n}}</label> <select id=\"defaultType\" name=\"defaultType\" formControlName=\"defaultType\" class=\"form-control\"> <option *ngFor=\"let o of defaultTypes\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> </div> <h3 class=\"mt-4\">{{'password' | i18n}}</h3> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"minLength\">{{'minLength' | i18n}}</label> <input id=\"minLength\" class=\"form-control\" type=\"number\" name=\"minLength\" min=\"5\" max=\"128\" formControlName=\"minLength\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"minNumbers\">{{'minNumbers' | i18n}}</label> <input id=\"minNumbers\" class=\"form-control\" type=\"number\" name=\"minNumbers\" min=\"0\" max=\"9\" formControlName=\"minNumbers\"> </div> <div class=\"col-6 form-group\"> <label for=\"minSpecial\">{{'minSpecial' | i18n}}</label> <input id=\"minSpecial\" class=\"form-control\" type=\"number\" name=\"minSpecial\" min=\"0\" max=\"9\" formControlName=\"minSpecial\"> </div> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"useUpper\" formControlName=\"useUpper\" name=\"useUpper\"> <label class=\"form-check-label\" for=\"useUpper\">A-Z</label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"useLower\" name=\"useLower\" formControlName=\"useLower\"> <label class=\"form-check-label\" for=\"useLower\">a-z</label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"useNumbers\" name=\"useNumbers\" formControlName=\"useNumbers\"> <label class=\"form-check-label\" for=\"useNumbers\">0-9</label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"useSpecial\" name=\"useSpecial\" formControlName=\"useSpecial\"> <label class=\"form-check-label\" for=\"useSpecial\">!@#$%^&amp;*</label> </div> <h3 class=\"mt-4\">{{'passphrase' | i18n}}</h3> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"minNumberWords\">{{'minimumNumberOfWords' | i18n}}</label> <input id=\"minNumberWords\" class=\"form-control\" type=\"number\" name=\"minNumberWords\" min=\"3\" max=\"20\" formControlName=\"minNumberWords\"> </div> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"capitalize\" name=\"capitalize\" formControlName=\"capitalize\"> <label class=\"form-check-label\" for=\"capitalize\">{{'capitalize' | i18n}}</label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"includeNumber\" name=\"includeNumber\" formControlName=\"includeNumber\"> <label class=\"form-check-label\" for=\"includeNumber\">{{'includeNumber' | i18n}}</label> </div> </div> ","import { Component } from '@angular/core';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class PersonalOwnershipPolicy extends BasePolicy {\n    name = 'personalOwnership';\n    description = 'personalOwnershipPolicyDesc';\n    type = PolicyType.PersonalOwnership;\n    component = PersonalOwnershipPolicyComponent;\n}\n\n@Component({\n    selector: 'policy-personal-ownership',\n    templateUrl: 'personal-ownership.component.html',\n})\nexport class PersonalOwnershipPolicyComponent extends BasePolicyComponent {\n}\n","<app-callout type=\"warning\"> {{'personalOwnershipExemption' | i18n}} </app-callout> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'personalOwnershipCheckboxDesc' | i18n}}</label> </div> </div> ","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { PolicyRequest } from 'jslib-common/models/request/policyRequest';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class RequireSsoPolicy extends BasePolicy {\n    name = 'requireSso';\n    description = 'requireSsoPolicyDesc';\n    type = PolicyType.RequireSso;\n    component = RequireSsoPolicyComponent;\n\n    display(organization: Organization) {\n        return organization.useSso;\n    }\n}\n\n@Component({\n    selector: 'policy-require-sso',\n    templateUrl: 'require-sso.component.html',\n})\nexport class RequireSsoPolicyComponent extends BasePolicyComponent {\n    constructor(private i18nService: I18nService) {\n        super();\n    }\n\n    buildRequest(policiesEnabledMap: Map<PolicyType, boolean>): Promise<PolicyRequest> {\n        const singleOrgEnabled = policiesEnabledMap.get(PolicyType.SingleOrg) ?? false;\n        if (this.enabled.value && !singleOrgEnabled) {\n            throw new Error(this.i18nService.t('requireSsoPolicyReqError'));\n        }\n\n        return super.buildRequest(policiesEnabledMap);\n    }\n}\n","<app-callout type=\"tip\" title=\"{{'prerequisite' | i18n}}\"> {{'requireSsoPolicyReq' | i18n}} </app-callout> <app-callout type=\"warning\"> {{'requireSsoExemption' | i18n}} </app-callout> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> ","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class ResetPasswordPolicy extends BasePolicy {\n    name = 'resetPasswordPolicy';\n    description = 'resetPasswordPolicyDescription';\n    type = PolicyType.ResetPassword;\n    component = ResetPasswordPolicyComponent;\n\n    display(organization: Organization) {\n        return organization.useResetPassword;\n    }\n}\n\n@Component({\n    selector: 'policy-reset-password',\n    templateUrl: 'reset-password.component.html',\n})\nexport class ResetPasswordPolicyComponent extends BasePolicyComponent {\n\n    data = this.fb.group({\n        autoEnrollEnabled: false,\n    });\n\n    defaultTypes: { name: string; value: string; }[];\n    showKeyConnectorInfo: boolean = false;\n\n    constructor(private fb: FormBuilder, private userService: UserService) {\n        super();\n    }\n\n    async ngOnInit() {\n        super.ngOnInit();\n        const organization = await this.userService.getOrganization(this.policyResponse.organizationId);\n        this.showKeyConnectorInfo = organization.keyConnectorEnabled;\n    }\n}\n","<app-callout type=\"info\" *ngIf=\"showKeyConnectorInfo\"> {{'keyConnectorPolicyRestriction' | i18n}} </app-callout> <app-callout type=\"warning\"> {{'resetPasswordPolicyWarning' | i18n}} </app-callout> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> <div [formGroup]=\"data\"> <h3 class=\"mt-4\">{{'resetPasswordPolicyAutoEnroll' | i18n}}</h3> <p>{{'resetPasswordPolicyAutoEnrollDescription' | i18n}}</p> <app-callout type=\"warning\"> {{'resetPasswordPolicyAutoEnrollWarning' | i18n}} </app-callout> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"autoEnrollEnabled\" name=\"AutoEnrollEnabled\" formControlName=\"autoEnrollEnabled\"> <label class=\"form-check-label\" for=\"autoEnrollEnabled\"> {{'resetPasswordPolicyAutoEnrollCheckbox' | i18n }} </label> </div> </div> ","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class SendOptionsPolicy extends BasePolicy {\n    name = 'sendOptions';\n    description = 'sendOptionsPolicyDesc';\n    type = PolicyType.SendOptions;\n    component = SendOptionsPolicyComponent;\n}\n\n@Component({\n    selector: 'policy-send-options',\n    templateUrl: 'send-options.component.html',\n})\nexport class SendOptionsPolicyComponent extends BasePolicyComponent {\n\n    data = this.fb.group({\n        disableHideEmail: false,\n    });\n\n    constructor(private fb: FormBuilder) {\n        super();\n    }\n}\n","<app-callout type=\"warning\"> {{'sendOptionsExemption' | i18n}} </app-callout> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> <div [formGroup]=\"data\"> <h3 class=\"mt-4\">{{'options' | i18n}}</h3> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"disableHideEmail\" name=\"DisableHideEmail\" formControlName=\"disableHideEmail\"> <label class=\"form-check-label\" for=\"disableHideEmail\">{{'disableHideEmail' | i18n}}</label> </div> </div> ","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { PolicyRequest } from 'jslib-common/models/request/policyRequest';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class SingleOrgPolicy extends BasePolicy {\n    name = 'singleOrg';\n    description = 'singleOrgDesc';\n    type = PolicyType.SingleOrg;\n    component = SingleOrgPolicyComponent;\n}\n\n@Component({\n    selector: 'policy-single-org',\n    templateUrl: 'single-org.component.html',\n})\nexport class SingleOrgPolicyComponent extends BasePolicyComponent {\n\n    constructor(private i18nService: I18nService) {\n        super();\n    }\n\n    buildRequest(policiesEnabledMap: Map<PolicyType, boolean>): Promise<PolicyRequest> {\n        if (!this.enabled.value) {\n            if (policiesEnabledMap.get(PolicyType.RequireSso) ?? false) {\n                throw new Error(this.i18nService.t('disableRequiredError', this.i18nService.t('requireSso')));\n            }\n\n            if (policiesEnabledMap.get(PolicyType.MaximumVaultTimeout) ?? false) {\n                throw new Error(this.i18nService.t('disableRequiredError', this.i18nService.t('maximumVaultTimeoutLabel')));\n            }\n        }\n\n        return super.buildRequest(policiesEnabledMap);\n    }\n}\n","<app-callout type=\"warning\"> {{'singleOrgPolicyWarning' | i18n}} </app-callout> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> ","import { Component } from '@angular/core';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { BasePolicy, BasePolicyComponent } from './base-policy.component';\n\nexport class TwoFactorAuthenticationPolicy extends BasePolicy {\n    name = 'twoStepLogin';\n    description = 'twoStepLoginPolicyDesc';\n    type = PolicyType.TwoFactorAuthentication;\n    component = TwoFactorAuthenticationPolicyComponent;\n}\n\n@Component({\n    selector: 'policy-two-factor-authentication',\n    templateUrl: 'two-factor-authentication.component.html',\n})\nexport class TwoFactorAuthenticationPolicyComponent extends BasePolicyComponent {\n}\n","<app-callout type=\"warning\"> {{'twoStepLoginPolicyWarning' | i18n}} </app-callout> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enabled\" [formControl]=\"enabled\" name=\"Enabled\"> <label class=\"form-check-label\" for=\"enabled\">{{'enabled' | i18n}}</label> </div> </div> ","import {\n    Component,\n    OnDestroy,\n    OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Component({\n    selector: 'app-frontend-layout',\n    templateUrl: 'frontend-layout.component.html',\n})\nexport class FrontendLayoutComponent implements OnInit, OnDestroy {\n    version: string;\n    year: string = '2015';\n\n    constructor(private platformUtilsService: PlatformUtilsService) { }\n\n    async ngOnInit() {\n        this.year = new Date().getFullYear().toString();\n        this.version = await this.platformUtilsService.getApplicationVersion();\n        document.body.classList.add('layout_frontend');\n    }\n\n    ngOnDestroy() {\n        document.body.classList.remove('layout_frontend');\n    }\n}\n","<router-outlet></router-outlet> <div class=\"container my-5 text-muted text-center\"> &copy; {{year}}, Bitwarden Inc. (Powered by Vaultwarden) <br> {{'versionNumber' | i18n : version}} </div> ","import {\n    Component,\n    NgZone,\n    OnDestroy,\n    OnInit,\n} from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nconst BroadcasterSubscriptionId = 'OrganizationLayoutComponent';\n\n@Component({\n    selector: 'app-organization-layout',\n    templateUrl: 'organization-layout.component.html',\n})\nexport class OrganizationLayoutComponent implements OnInit, OnDestroy {\n    organization: Organization;\n    businessTokenPromise: Promise<any>;\n    private organizationId: string;\n\n    constructor(private route: ActivatedRoute, private userService: UserService,\n        private broadcasterService: BroadcasterService, private ngZone: NgZone) { }\n\n    ngOnInit() {\n        document.body.classList.remove('layout_frontend');\n        this.route.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            await this.load();\n        });\n        this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n            this.ngZone.run(async () => {\n                switch (message.command) {\n                    case 'updatedOrgLicense':\n                        await this.load();\n                        break;\n                }\n            });\n        });\n    }\n\n    ngOnDestroy() {\n        this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n    }\n\n    async load() {\n        this.organization = await this.userService.getOrganization(this.organizationId);\n    }\n\n    get showMenuBar() {\n        return this.showManageTab || this.showToolsTab || this.organization.isOwner;\n    }\n\n    get showManageTab(): boolean {\n        return this.organization.canManageUsers ||\n            this.organization.canViewAllCollections ||\n            this.organization.canViewAssignedCollections ||\n            this.organization.canManageGroups ||\n            this.organization.canManagePolicies ||\n            this.organization.canAccessEventLogs;\n    }\n\n    get showToolsTab(): boolean {\n        return this.organization.canAccessImportExport || this.organization.canAccessReports;\n    }\n\n    get toolsRoute(): string {\n        return this.organization.canAccessImportExport ?\n            'tools/import' :\n            'tools/exposed-passwords-report';\n    }\n\n    get manageRoute(): string {\n        let route: string;\n        switch (true) {\n            case this.organization.canManageUsers:\n                route = 'manage/people';\n                break;\n            case this.organization.canViewAssignedCollections || this.organization.canViewAllCollections:\n                route = 'manage/collections';\n                break;\n            case this.organization.canManageGroups:\n                route = 'manage/groups';\n                break;\n            case this.organization.canManagePolicies:\n                route = 'manage/policies';\n                break;\n            case this.organization.canAccessEventLogs:\n                route = 'manage/events';\n                break;\n        }\n        return route;\n    }\n}\n","<app-navbar></app-navbar> <div class=\"org-nav\" *ngIf=\"organization\"> <div class=\"container d-flex\"> <div class=\"d-flex flex-column\"> <div class=\"my-auto d-flex align-items-center pl-1\"> <app-avatar [data]=\"organization.name\" size=\"45\" [circle]=\"true\"></app-avatar> <div class=\"org-name ml-3\"> <span>{{organization.name}}</span> <small class=\"text-muted\">{{'organization' | i18n}}</small> </div> <div class=\"ml-3 card border-danger text-danger bg-transparent\" *ngIf=\"!organization.enabled\"> <div class=\"card-body py-2\"> <i class=\"fa fa-exclamation-triangle\" aria-hidden=\"true\"></i> {{'organizationIsDisabled' | i18n}} </div> </div> <div class=\"ml-3 card border-info text-info bg-transparent\" *ngIf=\"organization.isProviderUser\"> <div class=\"card-body py-2\"> <i class=\"fa fa-exclamation-triangle\" aria-hidden=\"true\"></i> {{'accessingUsingProvider' | i18n : organization.providerName}} </div> </div> </div> <ul class=\"nav nav-tabs\" *ngIf=\"showMenuBar\"> <li class=\"nav-item\"> <a class=\"nav-link\" routerLink=\"vault\" routerLinkActive=\"active\"> <i class=\"fa fa-lock\" aria-hidden=\"true\"></i> {{'vault' | i18n}} </a> </li> <li class=\"nav-item\" *ngIf=\"showManageTab\"> <a class=\"nav-link\" [routerLink]=\"manageRoute\" routerLinkActive=\"active\"> <i class=\"fa fa-sliders\" aria-hidden=\"true\"></i> {{'manage' | i18n}} </a> </li> <li class=\"nav-item\" *ngIf=\"showToolsTab\"> <a class=\"nav-link\" [routerLink]=\"toolsRoute\" routerLinkActive=\"active\"> <i class=\"fa fa-wrench\" aria-hidden=\"true\"></i> {{'tools' | i18n}} </a> </li> <li class=\"nav-item\" *ngIf=\"organization.isOwner\"> <a class=\"nav-link\" routerLink=\"settings\" routerLinkActive=\"active\"> <i class=\"fa fa-cogs\" aria-hidden=\"true\"></i> {{'settings' | i18n}} </a> </li> </ul> </div> </div> </div> <router-outlet></router-outlet> <app-footer></app-footer> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\n@Component({\n    selector: 'app-user-layout',\n    templateUrl: 'user-layout.component.html',\n})\nexport class UserLayoutComponent implements OnInit {\n    ngOnInit() {\n        document.body.classList.remove('layout_frontend');\n    }\n}\n","<app-navbar></app-navbar> <router-outlet></router-outlet> <app-footer></app-footer> ","import { Component } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport {\n    Toast,\n    ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { EmergencyAccessAcceptRequest } from 'jslib-common/models/request/emergencyAccessAcceptRequest';\nimport { BaseAcceptComponent } from '../common/base.accept.component';\n\n@Component({\n    selector: 'app-accept-emergency',\n    templateUrl: 'accept-emergency.component.html',\n})\nexport class AcceptEmergencyComponent extends BaseAcceptComponent {\n\n    name: string;\n\n    protected requiredParameters: string[] = ['id', 'name', 'email', 'token'];\n    protected failedShortMessage = 'emergencyInviteAcceptFailedShort';\n    protected failedMessage = 'emergencyInviteAcceptFailed';\n\n    constructor(router: Router, toasterService: ToasterService,\n        i18nService: I18nService, route: ActivatedRoute,\n        private apiService: ApiService, userService: UserService,\n        stateService: StateService) {\n        super(router, toasterService, i18nService, route, userService, stateService);\n    }\n\n    async authedHandler(qParams: any): Promise<void> {\n        const request = new EmergencyAccessAcceptRequest();\n        request.token = qParams.token;\n        this.actionPromise = this.apiService.postEmergencyAccessAccept(qParams.id, request);\n        await this.actionPromise;\n        const toast: Toast = {\n            type: 'success',\n            title: this.i18nService.t('inviteAccepted'),\n            body: this.i18nService.t('emergencyInviteAcceptedDesc'),\n            timeout: 10000,\n        };\n        this.toasterService.popAsync(toast);\n        this.router.navigate(['/vault']);\n    }\n\n    async unauthedHandler(qParams: any): Promise<void> {\n        this.name = qParams.name;\n        if (this.name != null) {\n            // Fix URL encoding of space issue with Angular\n            this.name = this.name.replace(/\\+/g, ' ');\n        }\n    }\n}\n","<div class=\"mt-5 d-flex justify-content-center\" *ngIf=\"loading\"> <div> <img class=\"mb-4 logo logo-themed\" alt=\"Bitwarden\"> <p class=\"text-center\"> <i class=\"fa fa-spinner fa-spin fa-2x text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> </div> </div> <div class=\"container\" *ngIf=\"!loading && !authed\"> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'emergencyAccess' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <p class=\"text-center\"> {{name}} </p> <p>{{'acceptEmergencyAccess' | i18n}}</p> <hr> <div class=\"d-flex\"> <a routerLink=\"/\" [queryParams]=\"{email: email}\" class=\"btn btn-primary btn-block\"> {{'logIn' | i18n}} </a> <a routerLink=\"/register\" [queryParams]=\"{email: email}\" class=\"btn btn-primary btn-block ml-2 mt-0\"> {{'createAccount' | i18n}} </a> </div> </div> </div> </div> </div> </div> ","import {\n    Directive,\n    OnInit,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport {\n    Toast,\n    ToasterService,\n} from 'angular2-toaster';\n\nimport { first } from 'rxjs/operators';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Directive()\nexport abstract class BaseAcceptComponent implements OnInit {\n    loading = true;\n    authed = false;\n    email: string;\n    actionPromise: Promise<any>;\n\n    protected requiredParameters: string[] = [];\n    protected failedShortMessage = 'inviteAcceptFailedShort';\n    protected failedMessage = 'inviteAcceptFailed';\n\n    constructor(protected router: Router, protected toasterService: ToasterService,\n        protected i18nService: I18nService, protected route: ActivatedRoute,\n        protected userService: UserService, protected stateService: StateService) { }\n\n    abstract authedHandler(qParams: any): Promise<void>;\n    abstract unauthedHandler(qParams: any): Promise<void>;\n\n    ngOnInit() {\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            await this.stateService.remove('loginRedirect');\n\n            let error = this.requiredParameters.some(e => qParams?.[e] == null || qParams[e] === '');\n            let errorMessage: string = null;\n            if (!error) {\n                this.authed = await this.userService.isAuthenticated();\n\n                if (this.authed) {\n                    try {\n                        await this.authedHandler(qParams);\n                    } catch (e) {\n                        error = true;\n                        errorMessage = e.message;\n                    }\n                } else {\n                    await this.stateService.save('loginRedirect', {\n                        route: this.getRedirectRoute(),\n                        qParams: qParams,\n                    });\n\n                    this.email = qParams.email;\n                    await this.unauthedHandler(qParams);\n                }\n            }\n\n            if (error) {\n                const toast: Toast = {\n                    type: 'error',\n                    title: null,\n                    body: errorMessage != null ? this.i18nService.t(this.failedShortMessage, errorMessage) :\n                        this.i18nService.t(this.failedMessage),\n                    timeout: 10000,\n                };\n                this.toasterService.popAsync(toast);\n                this.router.navigate(['/']);\n            }\n\n            this.loading = false;\n        });\n    }\n\n    getRedirectRoute() {\n        const urlTree = this.router.parseUrl(this.router.url);\n        urlTree.queryParams = {};\n        return urlTree.toString();\n    }\n}\n","import { Component } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport {\n    Toast,\n    ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { OrganizationUserAcceptRequest } from 'jslib-common/models/request/organizationUserAcceptRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest';\n\nimport { Utils } from 'jslib-common/misc/utils';\nimport { Policy } from 'jslib-common/models/domain/policy';\nimport { BaseAcceptComponent } from '../common/base.accept.component';\n\n@Component({\n    selector: 'app-accept-organization',\n    templateUrl: 'accept-organization.component.html',\n})\nexport class AcceptOrganizationComponent extends BaseAcceptComponent {\n    orgName: string;\n\n    protected requiredParameters: string[] = ['organizationId', 'organizationUserId', 'token'];\n\n    constructor(router: Router, toasterService: ToasterService,\n        i18nService: I18nService, route: ActivatedRoute,\n        private apiService: ApiService, userService: UserService,\n        stateService: StateService, private cryptoService: CryptoService,\n        private policyService: PolicyService, private logService: LogService) {\n        super(router, toasterService, i18nService, route, userService, stateService);\n    }\n\n    async authedHandler(qParams: any): Promise<void> {\n        const request = new OrganizationUserAcceptRequest();\n        request.token = qParams.token;\n        if (await this.performResetPasswordAutoEnroll(qParams)) {\n            this.actionPromise = this.apiService.postOrganizationUserAccept(qParams.organizationId,\n                qParams.organizationUserId, request).then(() => {\n                    // Retrieve Public Key\n                    return this.apiService.getOrganizationKeys(qParams.organizationId);\n                }).then(async response => {\n                    if (response == null) {\n                        throw new Error(this.i18nService.t('resetPasswordOrgKeysError'));\n                    }\n\n                    const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n                    // RSA Encrypt user's encKey.key with organization public key\n                    const encKey = await this.cryptoService.getEncKey();\n                    const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n                    // Create request and execute enrollment\n                    const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n                    resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n                    // Get User Id\n                    const userId = await this.userService.getUserId();\n\n                    return this.apiService.putOrganizationUserResetPasswordEnrollment(qParams.organizationId, userId, resetRequest);\n                });\n        } else {\n            this.actionPromise = this.apiService.postOrganizationUserAccept(qParams.organizationId,\n                qParams.organizationUserId, request);\n        }\n\n        await this.actionPromise;\n        const toast: Toast = {\n            type: 'success',\n            title: this.i18nService.t('inviteAccepted'),\n            body: this.i18nService.t('inviteAcceptedDesc'),\n            timeout: 10000,\n        };\n        this.toasterService.popAsync(toast);\n\n        await this.stateService.remove('orgInvitation');\n        this.router.navigate(['/vault']);\n    }\n\n    async unauthedHandler(qParams: any): Promise<void> {\n        this.orgName = qParams.organizationName;\n        if (this.orgName != null) {\n            // Fix URL encoding of space issue with Angular\n            this.orgName = this.orgName.replace(/\\+/g, ' ');\n        }\n        await this.stateService.save('orgInvitation', qParams);\n    }\n\n    private async performResetPasswordAutoEnroll(qParams: any): Promise<boolean> {\n        let policyList: Policy[] = null;\n        try {\n            const policies = await this.apiService.getPoliciesByToken(qParams.organizationId, qParams.token,\n                qParams.email, qParams.organizationUserId);\n            policyList = this.policyService.mapPoliciesFromToken(policies);\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        if (policyList != null) {\n            const result = this.policyService.getResetPasswordPolicyOptions(policyList, qParams.organizationId);\n            // Return true if policy enabled and auto-enroll enabled\n            return result[1] && result[0].autoEnrollEnabled;\n        }\n\n        return false;\n    }\n}\n","<div class=\"mt-5 d-flex justify-content-center\" *ngIf=\"loading\"> <div> <img src=\"images/logo-dark@2x.png\" class=\"mb-4 logo\" alt=\"Bitwarden\"> <p class=\"text-center\"> <i class=\"fa fa-spinner fa-spin fa-2x text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> </div> </div> <div class=\"container\" *ngIf=\"!loading && !authed\"> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'joinOrganization' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <p class=\"text-center\"> {{orgName}} <strong class=\"d-block mt-2\">{{email}}</strong> </p> <p>{{'joinOrganizationDesc' | i18n}}</p> <hr> <div class=\"d-flex\"> <a routerLink=\"/\" [queryParams]=\"{email: email}\" class=\"btn btn-primary btn-block\"> {{'logIn' | i18n}} </a> <a routerLink=\"/register\" [queryParams]=\"{email: email}\" class=\"btn btn-primary btn-block ml-2 mt-0\"> {{'createAccount' | i18n}} </a> </div> </div> </div> </div> </div> </div> ","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { HintComponent as BaseHintComponent } from 'jslib-angular/components/hint.component';\n\n@Component({\n    selector: 'app-hint',\n    templateUrl: 'hint.component.html',\n})\nexport class HintComponent extends BaseHintComponent {\n    constructor(router: Router, i18nService: I18nService,\n        apiService: ApiService, platformUtilsService: PlatformUtilsService,\n        logService: LogService) {\n        super(router, i18nService, apiService, platformUtilsService, logService);\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'passwordHint' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <div class=\"form-group\"> <label for=\"email\">{{'emailAddress' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"email\" required appAutofocus inputmode=\"email\" appInputVerbatim=\"false\"> <small class=\"form-text text-muted\">{{'enterEmailToGetHint' | i18n}}</small> </div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span [hidden]=\"form.loading\">{{'submit' | i18n}}</span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> {{'cancel' | i18n}} </a> </div> </div> </div> </div> </div> </form> ","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { RouterService } from '../services/router.service';\n\nimport { LockComponent as BaseLockComponent } from 'jslib-angular/components/lock.component';\n\n@Component({\n    selector: 'app-lock',\n    templateUrl: 'lock.component.html',\n})\nexport class LockComponent extends BaseLockComponent {\n    constructor(router: Router, i18nService: I18nService,\n        platformUtilsService: PlatformUtilsService, messagingService: MessagingService,\n        userService: UserService, cryptoService: CryptoService,\n        storageService: StorageService, vaultTimeoutService: VaultTimeoutService,\n        environmentService: EnvironmentService, private routerService: RouterService,\n        stateService: StateService, apiService: ApiService, logService: LogService,\n        keyConnectorService: KeyConnectorService) {\n        super(router, i18nService, platformUtilsService, messagingService, userService, cryptoService,\n            storageService, vaultTimeoutService, environmentService, stateService, apiService, logService,\n            keyConnectorService);\n    }\n\n    async ngOnInit() {\n        await super.ngOnInit();\n        this.onSuccessfulSubmit = () => {\n            const previousUrl = this.routerService.getPreviousUrl();\n            if (previousUrl !== '/' && previousUrl.indexOf('lock') === -1) {\n                this.successRoute = previousUrl;\n            }\n            this.router.navigate([this.successRoute]);\n        };\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"text-center mb-4\"> <i class=\"fa fa-lock fa-4x text-muted\" aria-hidden=\"true\"></i> </p> <p class=\"lead text-center mx-4 mb-4\">{{'yourVaultIsLocked' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <div class=\"form-group\"> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <div class=\"d-flex\"> <input id=\"masterPassword\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPassword\" class=\"text-monospace form-control\" [(ngModel)]=\"masterPassword\" required appAutofocus appInputVerbatim> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword()\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> </div> <small class=\"text-muted form-text\"> {{'loggedInAsEmailOn' | i18n : email : webVaultHostname}} </small> </div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span> <i class=\"fa fa-unlock-alt\" aria-hidden=\"true\"></i> {{'unlock' | i18n}} </span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <button type=\"button\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\" (click)=\"logOut()\"> {{'logOut' | i18n}} </button> </div> </div> </div> </div> </div> </form> ","import { Component } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { LoginComponent as BaseLoginComponent } from 'jslib-angular/components/login.component';\n\nimport { Policy } from 'jslib-common/models/domain/policy';\n\n@Component({\n    selector: 'app-login',\n    templateUrl: 'login.component.html',\n})\nexport class LoginComponent extends BaseLoginComponent {\n\n    showResetPasswordAutoEnrollWarning = false;\n\n    constructor(authService: AuthService, router: Router,\n        i18nService: I18nService, private route: ActivatedRoute,\n        storageService: StorageService, stateService: StateService,\n        platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService,\n        passwordGenerationService: PasswordGenerationService, cryptoFunctionService: CryptoFunctionService,\n        private apiService: ApiService, private policyService: PolicyService, logService: LogService) {\n        super(authService, router,\n            platformUtilsService, i18nService,\n            stateService, environmentService,\n            passwordGenerationService, cryptoFunctionService,\n            storageService, logService);\n        this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n    }\n\n    async ngOnInit() {\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            if (qParams.email != null && qParams.email.indexOf('@') > -1) {\n                this.email = qParams.email;\n            }\n            if (qParams.premium != null) {\n                this.stateService.save('loginRedirect', { route: '/settings/premium' });\n            } else if (qParams.org != null) {\n                this.stateService.save('loginRedirect',\n                    { route: '/settings/create-organization', qParams: { plan: qParams.org } });\n            }\n\n            // Are they coming from an email for sponsoring a families organization\n            if (qParams.sponsorshipToken != null) {\n                // After logging in redirect them to setup the families sponsorship\n                this.stateService.save('loginRedirect', {\n                    route: '/setup/families-for-enterprise',\n                    qParams: { token: qParams.sponsorshipToken },\n                });\n            }\n            await super.ngOnInit();\n        });\n\n        const invite = await this.stateService.get<any>('orgInvitation');\n        if (invite != null) {\n            let policyList: Policy[] = null;\n            try {\n                const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token,\n                    invite.email, invite.organizationUserId);\n                policyList = this.policyService.mapPoliciesFromToken(policies);\n            } catch (e) {\n                this.logService.error(e);\n            }\n\n            if (policyList != null) {\n                const result = this.policyService.getResetPasswordPolicyOptions(policyList, invite.organizationId);\n                // Set to true if policy enabled and auto-enroll enabled\n                this.showResetPasswordAutoEnrollWarning = result[1] && result[0].autoEnrollEnabled;\n            }\n        }\n    }\n\n    async goAfterLogIn() {\n        const loginRedirect = await this.stateService.get<any>('loginRedirect');\n        if (loginRedirect != null) {\n            this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n            await this.stateService.remove('loginRedirect');\n        } else {\n            this.router.navigate([this.successRoute]);\n        }\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <img class=\"mb-2 logo logo-themed\" alt=\"Bitwarden\"> <p class=\"lead text-center mx-4 mb-4\">{{'loginOrCreateNewAccount' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <app-callout type=\"warning\" title=\"{{'resetPasswordPolicyAutoEnroll' | i18n}}\" *ngIf=\"showResetPasswordAutoEnrollWarning\"> {{'resetPasswordAutoEnrollInviteWarning' | i18n}} </app-callout> <div class=\"form-group\"> <label for=\"email\">{{'emailAddress' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"email\" required inputmode=\"email\" appInputVerbatim=\"false\"> </div> <div class=\"form-group\"> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <div class=\"d-flex\"> <input id=\"masterPassword\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPassword\" class=\"text-monospace form-control\" [(ngModel)]=\"masterPassword\" required appInputVerbatim> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword()\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> </div> <small class=\"form-text\"> <a routerLink=\"/hint\">{{'getMasterPasswordHint' | i18n}}</a> </small> </div> <div class=\"form-check mb-3\"> <input type=\"checkbox\" class=\"form-check-input\" id=\"rememberEmail\" name=\"RememberEmail\" [(ngModel)]=\"rememberEmail\"> <label class=\"form-check-label\" for=\"rememberEmail\">{{'rememberEmail' | i18n}}</label> </div> <div class=\"mb-n3\" [hidden]=\"!showCaptcha()\"><iframe id=\"hcaptcha_iframe\" height=\"80\"></iframe></div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span> <i class=\"fa fa-sign-in\" aria-hidden=\"true\"></i> {{'logIn' | i18n}} </span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/register\" [queryParams]=\"{email: email}\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> <i class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></i> {{'createAccount' | i18n}} </a> </div> <div class=\"d-flex\"> <a routerLink=\"/sso\" class=\"btn btn-outline-secondary btn-block mt-2\"> <i class=\"fa fa-bank\" aria-hidden=\"true\"></i> {{'enterpriseSingleSignOn' | i18n}} </a> </div> </div> </div> </div> </div> </form> ","import { Directive, Input } from '@angular/core';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CaptchaIFrame } from 'jslib-common/misc/captcha_iframe';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive()\nexport abstract class CaptchaProtectedComponent {\n    @Input() captchaSiteKey: string = null;\n    captchaToken: string = null;\n    captcha: CaptchaIFrame;\n\n    constructor(protected environmentService: EnvironmentService, protected i18nService: I18nService,\n        protected platformUtilsService: PlatformUtilsService) { }\n\n    async setupCaptcha() {\n        const webVaultUrl = this.environmentService.getWebVaultUrl();\n\n        this.captcha = new CaptchaIFrame(window, webVaultUrl,\n            this.i18nService, (token: string) => {\n                this.captchaToken = token;\n            }, (error: string) => {\n                this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), error);\n            }, (info: string) => {\n                this.platformUtilsService.showToast('info', this.i18nService.t('info'), info);\n            }\n        );\n    }\n\n    showCaptcha() {\n        return !Utils.isNullOrWhitespace(this.captchaSiteKey);\n    }\n\n    protected handleCaptchaRequired(response: { captchaSiteKey: string; }): boolean {\n        if (Utils.isNullOrWhitespace(response.captchaSiteKey)) {\n            return false;\n        }\n\n        this.captchaSiteKey = response.captchaSiteKey;\n        this.captcha.init(response.captchaSiteKey);\n        return true;\n    }\n}\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { DeleteRecoverRequest } from 'jslib-common/models/request/deleteRecoverRequest';\n\n@Component({\n    selector: 'app-recover-delete',\n    templateUrl: 'recover-delete.component.html',\n})\nexport class RecoverDeleteComponent {\n    email: string;\n    formPromise: Promise<any>;\n\n    constructor(private router: Router, private apiService: ApiService,\n        private toasterService: ToasterService, private i18nService: I18nService,\n        private logService: LogService) {\n    }\n\n    async submit() {\n        try {\n            const request = new DeleteRecoverRequest();\n            request.email = this.email.trim().toLowerCase();\n            this.formPromise = this.apiService.postAccountRecoverDelete(request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('deleteRecoverEmailSent'));\n            this.router.navigate(['/']);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'deleteAccount' | i18n}}</p> <div class=\"card\"> <div class=\"card-body\"> <p>{{'deleteRecoverDesc' | i18n}}</p> <div class=\"form-group\"> <label for=\"email\">{{'emailAddress' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"email\" required appAutofocus inputmode=\"email\" appInputVerbatim=\"false\"> </div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span>{{'submit' | i18n}}</span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> {{'cancel' | i18n}} </a> </div> </div> </div> </div> </div> </form> ","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { TwoFactorRecoveryRequest } from 'jslib-common/models/request/twoFactorRecoveryRequest';\n\n@Component({\n    selector: 'app-recover-two-factor',\n    templateUrl: 'recover-two-factor.component.html',\n})\nexport class RecoverTwoFactorComponent {\n    email: string;\n    masterPassword: string;\n    recoveryCode: string;\n    formPromise: Promise<any>;\n\n    constructor(private router: Router, private apiService: ApiService,\n        private toasterService: ToasterService, private i18nService: I18nService,\n        private cryptoService: CryptoService, private authService: AuthService,\n        private logService: LogService) { }\n\n    async submit() {\n        try {\n            const request = new TwoFactorRecoveryRequest();\n            request.recoveryCode = this.recoveryCode.replace(/\\s/g, '').toLowerCase();\n            request.email = this.email.trim().toLowerCase();\n            const key = await this.authService.makePreloginKey(this.masterPassword, request.email);\n            request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n            this.formPromise = this.apiService.postTwoFactorRecover(request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('twoStepRecoverDisabled'));\n            this.router.navigate(['/']);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'recoverAccountTwoStep' | i18n}}</p> <div class=\"card\"> <div class=\"card-body\"> <p>{{'recoverAccountTwoStepDesc' | i18n}} <a href=\"https://help.bitwarden.com/article/lost-two-step-device/\" target=\"_blank\" rel=\"noopener\">{{'learnMore' | i18n}}</a> </p> <div class=\"form-group\"> <label for=\"email\">{{'emailAddress' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"email\" required appAutofocus inputmode=\"email\" appInputVerbatim=\"false\"> </div> <div class=\"form-group\"> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <input id=\"masterPassword\" type=\"password\" name=\"MasterPassword\" class=\"form-control\" [(ngModel)]=\"masterPassword\" required appInputVerbatim> </div> <div class=\"form-group\"> <label for=\"recoveryCode\">{{'recoveryCodeTitle' | i18n}}</label> <input id=\"recoveryCode\" class=\"text-monospace form-control\" type=\"text\" name=\"RecoveryCode\" [(ngModel)]=\"recoveryCode\" required appInputVerbatim> </div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span>{{'submit' | i18n}}</span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> {{'cancel' | i18n}} </a> </div> </div> </div> </div> </div> </form> ","import { Component } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\n\nimport { RegisterComponent as BaseRegisterComponent } from 'jslib-angular/components/register.component';\n\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\nimport { Policy } from 'jslib-common/models/domain/policy';\n\nimport { PolicyData } from 'jslib-common/models/data/policyData';\nimport { ReferenceEventRequest } from 'jslib-common/models/request/referenceEventRequest';\n\n@Component({\n    selector: 'app-register',\n    templateUrl: 'register.component.html',\n})\nexport class RegisterComponent extends BaseRegisterComponent {\n    showCreateOrgMessage = false;\n    layout = '';\n    enforcedPolicyOptions: MasterPasswordPolicyOptions;\n\n    private policies: Policy[];\n\n    constructor(authService: AuthService, router: Router,\n        i18nService: I18nService, cryptoService: CryptoService,\n        apiService: ApiService, private route: ActivatedRoute,\n        stateService: StateService, platformUtilsService: PlatformUtilsService,\n        passwordGenerationService: PasswordGenerationService, private policyService: PolicyService,\n        environmentService: EnvironmentService, logService: LogService) {\n        super(authService, router, i18nService, cryptoService, apiService, stateService, platformUtilsService,\n            passwordGenerationService, environmentService, logService);\n    }\n\n    async ngOnInit() {\n        this.route.queryParams.pipe(first()).subscribe(qParams => {\n            this.referenceData = new ReferenceEventRequest();\n            if (qParams.email != null && qParams.email.indexOf('@') > -1) {\n                this.email = qParams.email;\n            }\n            if (qParams.premium != null) {\n                this.stateService.save('loginRedirect', { route: '/settings/premium' });\n            } else if (qParams.org != null) {\n                this.showCreateOrgMessage = true;\n                this.referenceData.flow = qParams.org;\n                this.stateService.save('loginRedirect',\n                    { route: '/settings/create-organization', qParams: { plan: qParams.org } });\n            }\n            if (qParams.layout != null) {\n                this.layout = this.referenceData.layout = qParams.layout;\n            }\n            if (qParams.reference != null) {\n                this.referenceData.id = qParams.reference;\n            } else {\n                this.referenceData.id = ('; ' + document.cookie).split('; reference=').pop().split(';').shift();\n            }\n            // Are they coming from an email for sponsoring a families organization\n            if (qParams.sponsorshipToken != null) {\n                // After logging in redirect them to setup the families sponsorship\n                this.stateService.save('loginRedirect', {\n                    route: '/setup/families-for-enterprise',\n                    qParams: { token: qParams.sponsorshipToken },\n                });\n            }\n            if (this.referenceData.id === '') {\n                this.referenceData.id = null;\n            }\n        });\n        const invite = await this.stateService.get<any>('orgInvitation');\n        if (invite != null) {\n            try {\n                const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token,\n                    invite.email, invite.organizationUserId);\n                if (policies.data != null) {\n                    const policiesData = policies.data.map(p => new PolicyData(p));\n                    this.policies = policiesData.map(p => new Policy(p));\n                }\n            } catch (e) {\n                this.logService.error(e);\n            }\n        }\n\n        if (this.policies != null) {\n            this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(this.policies);\n        }\n\n        await super.ngOnInit();\n    }\n\n    async submit() {\n        if (this.enforcedPolicyOptions != null &&\n            !this.policyService.evaluateMasterPassword(this.masterPasswordScore, this.masterPassword,\n                this.enforcedPolicyOptions)) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n            return;\n        }\n\n        await super.submit();\n    }\n}\n","<div class=\"layout\" [ngClass]=\"['layout', layout]\"> <header class=\"header\" *ngIf=\"layout === 'enterprise2'\"> <div class=\"container\"> <div class=\"row\"> <div class=\"col-7\"> <img alt=\"Bitwarden\" class=\"logo mb-2\" src=\"images/logo-horizontal-white.png\"> </div> </div> </div> </header> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row\"> <div class=\"col-7\" *ngIf=\"layout\"> <div class=\"mt-5\"> <div *ngIf=\"layout === 'enterprise2'\"> <h2>Companies globally trust Bitwarden for password management.</h2> <p>Start your 7-day free trial!</p> <p class=\"highlight\">Quickly deploy your <b>organization</b></p> <p>Use Bitwarden across all platforms</p> <p>Collaborate and share securely</p> <figure> <figcaption> <cite> <img src=\"images/wired-logo.png\" alt=\"Wired\"> </cite> </figcaption> <blockquote> \"Bitwarden has become a popular choice among open-source software advocates. After using it for a few months, I can see why.\" - February 2020 </blockquote> </figure> </div> <div *ngIf=\"layout === 'enterprise3'\"> <p>Enterprise 3 layout</p> </div> <div *ngIf=\"layout === 'enterprise4'\"> <p>Enterprise 4 layout</p> </div> </div> </div> <div [ngClass]=\"{'col-5': layout, 'col-12': !layout}\"> <div class=\"row justify-content-md-center mt-5\"> <div [ngClass]=\"{'col-5': !layout, 'col-12': layout}\"> <p class=\"lead text-center mb-4\" *ngIf=\"!layout\">{{'createAccount' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <app-callout title=\"{{'createOrganizationStep1' | i18n}}\" type=\"info\" icon=\"fa-thumb-tack\" *ngIf=\"showCreateOrgMessage\"> {{'createOrganizationCreatePersonalAccount' | i18n}} </app-callout> <div class=\"form-group\"> <label for=\"email\">{{'emailAddress' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"email\" required [appAutofocus]=\"email === ''\" inputmode=\"email\" appInputVerbatim=\"false\"> <small class=\"form-text text-muted\">{{'emailAddressDesc' | i18n}}</small> </div> <div class=\"form-group\"> <label for=\"name\">{{'yourName' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"name\" [appAutofocus]=\"email !== ''\"> <small class=\"form-text text-muted\">{{'yourNameDesc' | i18n}}</small> </div> <div class=\"form-group\"> <app-callout type=\"info\" [enforcedPolicyOptions]=\"enforcedPolicyOptions\" *ngIf=\"enforcedPolicyOptions\"> </app-callout> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <div class=\"d-flex\"> <div class=\"w-100\"> <input id=\"masterPassword\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPassword\" class=\"text-monospace form-control mb-1\" [(ngModel)]=\"masterPassword\" (input)=\"updatePasswordStrength()\" required appInputVerbatim> <app-password-strength [score]=\"masterPasswordScore\" [showText]=\"true\"> </app-password-strength> </div> <div> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword(false)\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> <div class=\"progress-bar invisible\"></div> </div> </div> <small class=\"form-text text-muted\">{{'masterPassDesc' | i18n}}</small> </div> <div class=\"form-group\"> <label for=\"masterPasswordRetype\">{{'reTypeMasterPass' | i18n}}</label> <div class=\"d-flex\"> <input id=\"masterPasswordRetype\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPasswordRetype\" class=\"text-monospace form-control\" [(ngModel)]=\"confirmMasterPassword\" required appInputVerbatim> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword(true)\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> </div> </div> <div class=\"form-group\"> <label for=\"hint\">{{'masterPassHint' | i18n}}</label> <input id=\"hint\" class=\"form-control\" type=\"text\" name=\"Hint\" [(ngModel)]=\"hint\"> <small class=\"form-text text-muted\">{{'masterPassHintDesc' | i18n}}</small> </div> <div [hidden]=\"!showCaptcha()\"><iframe id=\"hcaptcha_iframe\" height=\"80\"></iframe></div> <div class=\"form-group\" *ngIf=\"showTerms\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"acceptPolicies\" [(ngModel)]=\"acceptPolicies\" name=\"AcceptPolicies\"> <label class=\"form-check-label small text-muted\" for=\"acceptPolicies\"> {{'acceptPolicies' | i18n}}<br> <a href=\"https://bitwarden.com/terms/\" target=\"_blank\" rel=\"noopener\">{{'termsOfService' | i18n}}</a>, <a href=\"https://bitwarden.com/privacy/\" target=\"_blank\" rel=\"noopener\">{{'privacyPolicy' | i18n}}</a> </label> </div> </div> <hr> <div class=\"d-flex mb-2\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span>{{'submit' | i18n}}</span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> {{'cancel' | i18n}} </a> </div> </div> </div> </div> </div> </div> </div> </form> </div> ","import { Component } from '@angular/core';\n\nimport { RemovePasswordComponent as BaseRemovePasswordComponent } from 'jslib-angular/components/remove-password.component';\n\n@Component({\n    selector: 'app-remove-password',\n    templateUrl: 'remove-password.component.html',\n})\nexport class RemovePasswordComponent extends BaseRemovePasswordComponent {\n}\n","<div class=\"mt-5 d-flex justify-content-center\" *ngIf=\"loading\"> <div> <img class=\"mb-4 logo logo-themed\" alt=\"Bitwarden\"> <p class=\"text-center\"> <i class=\"fa fa-spinner fa-spin fa-2x text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> </div> </div> <div class=\"container\" *ngIf=\"!loading\"> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'removeMasterPassword' | i18n}}</p> <hr> <div class=\"card d-block\"> <div class=\"card-body\"> <p>{{'convertOrganizationEncryptionDesc' | i18n : organization.name}}</p> <button type=\"button\" class=\"btn btn-primary btn-block\" (click)=\"convert()\" [disabled]=\"actionPromise\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\" *ngIf=\"continuing\"></i> {{'removeMasterPassword' | i18n}} </button> <button type=\"button\" class=\"btn btn-outline-secondary btn-block\" (click)=\"leave()\" [disabled]=\"actionPromise\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\" *ngIf=\"leaving\"></i> {{'leaveOrganization' | i18n}} </button> </div> </div> </div> </div> </div> ","import { Component } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport {\n    SetPasswordComponent as BaseSetPasswordComponent,\n} from 'jslib-angular/components/set-password.component';\n\n@Component({\n    selector: 'app-set-password',\n    templateUrl: 'set-password.component.html',\n})\nexport class SetPasswordComponent extends BaseSetPasswordComponent {\n    constructor(apiService: ApiService, i18nService: I18nService,\n        cryptoService: CryptoService, messagingService: MessagingService,\n        userService: UserService, passwordGenerationService: PasswordGenerationService,\n        platformUtilsService: PlatformUtilsService, policyService: PolicyService, router: Router,\n        syncService: SyncService, route: ActivatedRoute) {\n        super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n            platformUtilsService, policyService, router, apiService, syncService, route);\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate autocomplete=\"off\"> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'setMasterPassword' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body text-center\" *ngIf=\"syncLoading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> {{'loading' | i18n}} </div> <div class=\"card-body\" *ngIf=\"!syncLoading\"> <app-callout type=\"info\">{{'ssoCompleteRegistration' | i18n}}</app-callout> <app-callout type=\"warning\" title=\"{{'resetPasswordPolicyAutoEnroll' | i18n}}\" *ngIf=\"resetPasswordAutoEnroll\"> {{'resetPasswordAutoEnrollInviteWarning' | i18n}} </app-callout> <div class=\"form-group\"> <app-callout type=\"info\" [enforcedPolicyOptions]=\"enforcedPolicyOptions\" *ngIf=\"enforcedPolicyOptions\"> </app-callout> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <div class=\"d-flex\"> <div class=\"w-100\"> <input id=\"masterPassword\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPasswordHash\" class=\"text-monospace form-control mb-1\" [(ngModel)]=\"masterPassword\" (input)=\"updatePasswordStrength()\" required appInputVerbatim> <app-password-strength [score]=\"masterPasswordScore\" [showText]=\"true\"> </app-password-strength> </div> <div> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword(false)\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> <div class=\"progress-bar invisible\"></div> </div> </div> <small class=\"form-text text-muted\">{{'masterPassDesc' | i18n}}</small> </div> <div class=\"form-group\"> <label for=\"masterPasswordRetype\">{{'reTypeMasterPass' | i18n}}</label> <div class=\"d-flex\"> <input id=\"masterPasswordRetype\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPasswordRetype\" class=\"text-monospace form-control\" [(ngModel)]=\"masterPasswordRetype\" required appInputVerbatim> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword(true)\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> </div> </div> <div class=\"form-group\"> <label for=\"hint\">{{'masterPassHint' | i18n}}</label> <input id=\"hint\" class=\"form-control\" type=\"text\" name=\"Hint\" [(ngModel)]=\"hint\"> <small class=\"form-text text-muted\">{{'masterPassHintDesc' | i18n}}</small> </div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\" (click)=\"logOut()\"> {{'logOut' | i18n}} </button> </div> </div> </div> </div> </div> </form> ","import { Component } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { SsoComponent as BaseSsoComponent } from 'jslib-angular/components/sso.component';\n\nconst IdentifierStorageKey = 'ssoOrgIdentifier';\n\n@Component({\n    selector: 'app-sso',\n    templateUrl: 'sso.component.html',\n})\nexport class SsoComponent extends BaseSsoComponent {\n    constructor(authService: AuthService, router: Router,\n        i18nService: I18nService, route: ActivatedRoute,\n        storageService: StorageService, stateService: StateService,\n        platformUtilsService: PlatformUtilsService, apiService: ApiService,\n        cryptoFunctionService: CryptoFunctionService, environmentService: EnvironmentService,\n        passwordGenerationService: PasswordGenerationService, logService: LogService) {\n        super(authService, router, i18nService, route, storageService, stateService, platformUtilsService,\n            apiService, cryptoFunctionService, environmentService, passwordGenerationService, logService);\n        this.redirectUri = window.location.origin + '/sso-connector.html';\n        this.clientId = 'web';\n    }\n\n    async ngOnInit() {\n        super.ngOnInit();\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            if (qParams.identifier != null) {\n                this.identifier = qParams.identifier;\n            } else {\n                const storedIdentifier = await this.storageService.get<string>(IdentifierStorageKey);\n                if (storedIdentifier != null) {\n                    this.identifier = storedIdentifier;\n                }\n            }\n        });\n    }\n\n    async submit() {\n        await this.storageService.save(IdentifierStorageKey, this.identifier);\n        if (this.clientId === 'browser') {\n            document.cookie = `ssoHandOffMessage=${this.i18nService.t('ssoHandOff')};SameSite=strict`;\n        }\n        super.submit();\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" class=\"container\" [appApiAction]=\"initiateSsoFormPromise\" ngNativeValidate> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <img class=\"logo mb-2 logo-themed\" alt=\"Bitwarden\"> <div class=\"card d-block mt-4\"> <div class=\"card-body\" *ngIf=\"loggingIn\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> {{'loading' | i18n}} </div> <div class=\"card-body\" *ngIf=\"!loggingIn\"> <p>{{'ssoLogInWithOrgIdentifier' | i18n}}</p> <div class=\"form-group\"> <label for=\"identifier\">{{'organizationIdentifier' | i18n}}</label> <input id=\"identifier\" class=\"form-control\" type=\"text\" name=\"Identifier\" [(ngModel)]=\"identifier\" required appAutofocus> </div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span> <i class=\"fa fa-sign-in\" aria-hidden=\"true\"></i> {{'logIn' | i18n}} </span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> {{'cancel' | i18n}} </a> </div> </div> </div> </div> </div> </form> ","import { Directive } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { AuthResult } from 'jslib-common/models/domain/authResult';\n\n@Directive()\nexport class SsoComponent {\n    identifier: string;\n    loggingIn = false;\n\n    formPromise: Promise<AuthResult>;\n    initiateSsoFormPromise: Promise<any>;\n    onSuccessfulLogin: () => Promise<any>;\n    onSuccessfulLoginNavigate: () => Promise<any>;\n    onSuccessfulLoginTwoFactorNavigate: () => Promise<any>;\n    onSuccessfulLoginChangePasswordNavigate: () => Promise<any>;\n    onSuccessfulLoginForceResetNavigate: () => Promise<any>;\n\n    protected twoFactorRoute = '2fa';\n    protected successRoute = 'lock';\n    protected changePasswordRoute = 'set-password';\n    protected forcePasswordResetRoute = 'update-temp-password';\n    protected clientId: string;\n    protected redirectUri: string;\n    protected state: string;\n    protected codeChallenge: string;\n\n    constructor(protected authService: AuthService, protected router: Router,\n        protected i18nService: I18nService, protected route: ActivatedRoute,\n        protected storageService: StorageService, protected stateService: StateService,\n        protected platformUtilsService: PlatformUtilsService, protected apiService: ApiService,\n        protected cryptoFunctionService: CryptoFunctionService, protected environmentService: EnvironmentService,\n        protected passwordGenerationService: PasswordGenerationService, protected logService: LogService) { }\n\n    async ngOnInit() {\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            if (qParams.code != null && qParams.state != null) {\n                const codeVerifier = await this.storageService.get<string>(ConstantsService.ssoCodeVerifierKey);\n                const state = await this.storageService.get<string>(ConstantsService.ssoStateKey);\n                await this.storageService.remove(ConstantsService.ssoCodeVerifierKey);\n                await this.storageService.remove(ConstantsService.ssoStateKey);\n                if (qParams.code != null && codeVerifier != null && state != null && this.checkState(state, qParams.state)) {\n                    await this.logIn(qParams.code, codeVerifier, this.getOrgIdentifierFromState(qParams.state));\n                }\n            } else if (qParams.clientId != null && qParams.redirectUri != null && qParams.state != null &&\n                qParams.codeChallenge != null) {\n                this.redirectUri = qParams.redirectUri;\n                this.state = qParams.state;\n                this.codeChallenge = qParams.codeChallenge;\n                this.clientId = qParams.clientId;\n            }\n        });\n    }\n\n    async submit(returnUri?: string, includeUserIdentifier?: boolean) {\n        this.initiateSsoFormPromise = this.preValidate();\n        if (await this.initiateSsoFormPromise) {\n            const authorizeUrl = await this.buildAuthorizeUrl(returnUri, includeUserIdentifier);\n            this.platformUtilsService.launchUri(authorizeUrl, { sameWindow: true });\n        }\n    }\n\n    async preValidate(): Promise<boolean> {\n        if (this.identifier == null || this.identifier === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('ssoValidationFailed'),\n                this.i18nService.t('ssoIdentifierRequired'));\n            return false;\n        }\n        return await this.apiService.preValidateSso(this.identifier);\n    }\n\n    protected async buildAuthorizeUrl(returnUri?: string, includeUserIdentifier?: boolean): Promise<string> {\n        let codeChallenge = this.codeChallenge;\n        let state = this.state;\n\n        const passwordOptions: any = {\n            type: 'password',\n            length: 64,\n            uppercase: true,\n            lowercase: true,\n            numbers: true,\n            special: false,\n        };\n\n        if (codeChallenge == null) {\n            const codeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n            const codeVerifierHash = await this.cryptoFunctionService.hash(codeVerifier, 'sha256');\n            codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n            await this.storageService.save(ConstantsService.ssoCodeVerifierKey, codeVerifier);\n        }\n\n        if (state == null) {\n            state = await this.passwordGenerationService.generatePassword(passwordOptions);\n            if (returnUri) {\n                state += `_returnUri='${returnUri}'`;\n            }\n        }\n\n        // Add Organization Identifier to state\n        state += `_identifier=${this.identifier}`;\n\n        // Save state (regardless of new or existing)\n        await this.storageService.save(ConstantsService.ssoStateKey, state);\n\n        let authorizeUrl = this.environmentService.getIdentityUrl() + '/connect/authorize?' +\n            'client_id=' + this.clientId + '&redirect_uri=' + encodeURIComponent(this.redirectUri) + '&' +\n            'response_type=code&scope=api offline_access&' +\n            'state=' + state + '&code_challenge=' + codeChallenge + '&' +\n            'code_challenge_method=S256&response_mode=query&' +\n            'domain_hint=' + encodeURIComponent(this.identifier);\n\n        if (includeUserIdentifier) {\n            const userIdentifier = await this.apiService.getSsoUserIdentifier();\n            authorizeUrl += `&user_identifier=${encodeURIComponent(userIdentifier)}`;\n        }\n\n        return authorizeUrl;\n    }\n\n    private async logIn(code: string, codeVerifier: string, orgIdFromState: string) {\n        this.loggingIn = true;\n        try {\n            this.formPromise = this.authService.logInSso(code, codeVerifier, this.redirectUri, orgIdFromState);\n            const response = await this.formPromise;\n            if (response.twoFactor) {\n                if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n                    this.onSuccessfulLoginTwoFactorNavigate();\n                } else {\n                    this.router.navigate([this.twoFactorRoute], {\n                        queryParams: {\n                            identifier: orgIdFromState,\n                            sso: 'true',\n                        },\n                    });\n                }\n            } else if (response.resetMasterPassword) {\n                if (this.onSuccessfulLoginChangePasswordNavigate != null) {\n                    this.onSuccessfulLoginChangePasswordNavigate();\n                } else {\n                    this.router.navigate([this.changePasswordRoute], {\n                        queryParams: {\n                            identifier: orgIdFromState,\n                        },\n                    });\n                }\n            } else if (response.forcePasswordReset) {\n                if (this.onSuccessfulLoginForceResetNavigate != null) {\n                    this.onSuccessfulLoginForceResetNavigate();\n                } else {\n                    this.router.navigate([this.forcePasswordResetRoute]);\n                }\n            } else {\n                const disableFavicon = await this.storageService.get<boolean>(ConstantsService.disableFaviconKey);\n                await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n                if (this.onSuccessfulLogin != null) {\n                    this.onSuccessfulLogin();\n                }\n                if (this.onSuccessfulLoginNavigate != null) {\n                    this.onSuccessfulLoginNavigate();\n                } else {\n                    this.router.navigate([this.successRoute]);\n                }\n            }\n        } catch (e) {\n            this.logService.error(e);\n            if (e.message === 'Unable to reach key connector') {\n                this.platformUtilsService.showToast('error', null, this.i18nService.t('ssoKeyConnectorUnavailable'));\n            }\n        }\n        this.loggingIn = false;\n    }\n\n    private getOrgIdentifierFromState(state: string): string {\n        if (state === null || state === undefined) {\n            return null;\n        }\n\n        const stateSplit = state.split('_identifier=');\n        return stateSplit.length > 1 ? stateSplit[1] : null;\n    }\n\n    private checkState(state: string, checkState: string): boolean {\n        if (state === null || state === undefined) {\n            return false;\n        }\n        if (checkState === null || checkState === undefined) {\n            return false;\n        }\n\n        const stateSplit = state.split('_identifier=');\n        const checkStateSplit = checkState.split('_identifier=');\n        return stateSplit[0] === checkStateSplit[0];\n    }\n}\n","import {\n    Component,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorComponent as BaseTwoFactorComponent } from 'jslib-angular/components/two-factor.component';\n\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { TwoFactorOptionsComponent } from './two-factor-options.component';\n\n@Component({\n    selector: 'app-two-factor',\n    templateUrl: 'two-factor.component.html',\n})\nexport class TwoFactorComponent extends BaseTwoFactorComponent {\n    @ViewChild('twoFactorOptions', { read: ViewContainerRef, static: true }) twoFactorOptionsModal: ViewContainerRef;\n\n    constructor(authService: AuthService, router: Router,\n        i18nService: I18nService, apiService: ApiService,\n        platformUtilsService: PlatformUtilsService, stateService: StateService,\n        environmentService: EnvironmentService, private modalService: ModalService,\n        storageService: StorageService, route: ActivatedRoute, logService: LogService) {\n        super(authService, router, i18nService, apiService, platformUtilsService, window, environmentService,\n            stateService, storageService, route, logService);\n        this.onSuccessfulLoginNavigate = this.goAfterLogIn;\n    }\n\n    async anotherMethod() {\n        const [modal] = await this.modalService.openViewRef(TwoFactorOptionsComponent, this.twoFactorOptionsModal, comp => {\n            comp.onProviderSelected.subscribe(async (provider: TwoFactorProviderType) => {\n                modal.close();\n                this.selectedProviderType = provider;\n                await this.init();\n            });\n            comp.onRecoverSelected.subscribe(() => {\n                modal.close();\n            });\n        });\n    }\n\n    async goAfterLogIn() {\n        const loginRedirect = await this.stateService.get<any>('loginRedirect');\n        if (loginRedirect != null) {\n            this.router.navigate([loginRedirect.route], { queryParams: loginRedirect.qParams });\n            await this.stateService.remove('loginRedirect');\n        } else {\n            this.router.navigate([this.successRoute], {\n                queryParams: {\n                    identifier: this.identifier,\n                },\n            });\n        }\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate autocomplete=\"off\"> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\" [ngClass]=\"{'col-9': selectedProviderType === providerType.Duo || selectedProviderType === providerType.OrganizationDuo}\"> <p class=\"lead text-center mb-4\">{{title}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <ng-container *ngIf=\"selectedProviderType === providerType.Email || selectedProviderType === providerType.Authenticator\"> <p *ngIf=\"selectedProviderType === providerType.Authenticator\"> {{'enterVerificationCodeApp' | i18n}}</p> <p *ngIf=\"selectedProviderType === providerType.Email\"> {{'enterVerificationCodeEmail' | i18n : twoFactorEmail}} </p> <div class=\"form-group\"> <label for=\"code\" class=\"sr-only\">{{'verificationCode' | i18n}}</label> <input id=\"code\" type=\"text\" name=\"Code\" class=\"form-control\" [(ngModel)]=\"token\" required appAutofocus inputmode=\"tel\" appInputVerbatim> <small class=\"form-text\" *ngIf=\"selectedProviderType === providerType.Email\"> <a href=\"#\" appStopClick (click)=\"sendEmail(true)\" [appApiAction]=\"emailPromise\" *ngIf=\"selectedProviderType === providerType.Email\"> {{'sendVerificationCodeEmailAgain' | i18n}} </a> </small> </div> </ng-container> <ng-container *ngIf=\"selectedProviderType === providerType.Yubikey\"> <p class=\"text-center\">{{'insertYubiKey' | i18n}}</p> <img src=\"images/yubikey.jpg\" class=\"rounded img-fluid mb-3\" alt=\"\"> <div class=\"form-group\"> <label for=\"code\" class=\"sr-only\">{{'verificationCode' | i18n}}</label> <input id=\"code\" type=\"password\" name=\"Code\" class=\"form-control\" [(ngModel)]=\"token\" required appAutofocus appInputVerbatim autocomplete=\"new-password\"> </div> </ng-container> <ng-container *ngIf=\"selectedProviderType === providerType.WebAuthn\"> <div id=\"web-authn-frame\" class=\"mb-3\"> <iframe id=\"webauthn_iframe\" [allow]=\"webAuthnAllow\"></iframe> </div> </ng-container> <ng-container *ngIf=\"selectedProviderType === providerType.Duo ||\n                        selectedProviderType === providerType.OrganizationDuo\"> <div id=\"duo-frame\" class=\"mb-3\"> <iframe id=\"duo_iframe\"></iframe> </div> </ng-container> <i class=\"fa fa-spinner text-muted fa-spin pull-right\" title=\"{{'loading' | i18n}}\" *ngIf=\"form.loading && selectedProviderType === providerType.WebAuthn\" aria-hidden=\"true\"></i> <div class=\"form-check\" *ngIf=\"selectedProviderType != null\"> <input id=\"remember\" type=\"checkbox\" name=\"Remember\" class=\"form-check-input\" [(ngModel)]=\"remember\"> <label for=\"remember\" class=\"form-check-label\">{{'rememberMe' | i18n}}</label> </div> <ng-container *ngIf=\"selectedProviderType == null\"> <p>{{'noTwoStepProviders' | i18n}}</p> <p>{{'noTwoStepProviders2' | i18n}}</p> </ng-container> <hr> <div class=\"d-flex mb-3\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\" *ngIf=\"selectedProviderType != null && selectedProviderType !== providerType.Duo && \n                        selectedProviderType !== providerType.OrganizationDuo && selectedProviderType !== providerType.WebAuthn\"> <span> <i class=\"fa fa-sign-in\" aria-hidden=\"true\"></i> {{'continue' | i18n}} </span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> {{'cancel' | i18n}} </a> </div> <div class=\"text-center\"> <a href=\"#\" appStopClick (click)=\"anotherMethod()\">{{'useAnotherTwoStepMethod' | i18n}}</a> </div> </div> </div> </div> </div> </form> <ng-template #twoFactorOptions></ng-template> ","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class TwoFactorEmailRequest extends SecretVerificationRequest {\n    email: string;\n}\n","export class KeyConnectorUserKeyRequest {\n    key: string;\n\n    constructor(key: string) {\n        this.key = key;\n    }\n}\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n    TwoFactorOptionsComponent as BaseTwoFactorOptionsComponent,\n} from 'jslib-angular/components/two-factor-options.component';\n\n@Component({\n    selector: 'app-two-factor-options',\n    templateUrl: 'two-factor-options.component.html',\n})\nexport class TwoFactorOptionsComponent extends BaseTwoFactorOptionsComponent {\n    constructor(authService: AuthService, router: Router,\n        i18nService: I18nService, platformUtilsService: PlatformUtilsService) {\n        super(authService, router, i18nService, platformUtilsService, window);\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"twoStepOptionsTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"twoStepOptionsTitle\">{{'twoStepOptions' | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <div class=\"list-group list-group-flush-2fa\"> <div *ngFor=\"let p of providers\" class=\"list-group-item list-group-item-action\"> <div class=\"two-factor-content\"> <div class=\"logo-col\"> <img [class]=\"'mfaType' + p.type\" [alt]=\"p.name + ' logo'\"> </div> <div class=\"text-col\"> <h3>{{p.name}}</h3> {{p.description}} </div> <div class=\"btn-col\"> <button [attr.aria-describedby]=\"p.name\" type=\"button\" class=\"btn btn-outline-secondary btn-sm\" (click)=\"choose(p)\"> {{'select' | i18n}} </button> </div> </div> </div> <div class=\"list-group-item list-group-item-action\" (click)=\"recover()\"> <div class=\"two-factor-content\"> <div class=\"logo-col\"> <img class=\"recovery-code-img\" alt=\"rc logo\"> </div> <div class=\"text-col\"> <h3>{{'recoveryCodeTitle' | i18n}}</h3> {{'recoveryCodeDesc' | i18n}} </div> <div class=\"btn-col\"> <button [attr.aria-descibedby]=\"'recoveryCodeTitle' | i18n\" type=\"button\" class=\"btn btn-outline-secondary btn-sm\" (click)=\"recover()\"> {{'select' | i18n}} </button> </div> </div> </div> </div> </div> <div class=\"modal-footer\"> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </div> </div> </div> ","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from 'jslib-angular/components/update-temp-password.component';\n\n@Component({\n    selector: 'app-update-temp-password',\n    templateUrl: 'update-temp-password.component.html',\n})\n\nexport class UpdateTempPasswordComponent extends BaseUpdateTempPasswordComponent {\n    constructor(i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n        passwordGenerationService: PasswordGenerationService, policyService: PolicyService,\n        cryptoService: CryptoService, userService: UserService,\n        messagingService: MessagingService, apiService: ApiService,\n        syncService: SyncService, logService: LogService) {\n        super(i18nService, platformUtilsService, passwordGenerationService, policyService, cryptoService,\n            userService, messagingService, apiService, syncService, logService);\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate autocomplete=\"off\"> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-4\"> <p class=\"lead text-center mb-4\">{{'updateMasterPassword' | i18n}}</p> <div class=\"card d-block\"> <div class=\"card-body\"> <app-callout type=\"warning\">{{'updateMasterPasswordWarning' | i18n}} </app-callout> <div class=\"form-group\"> <app-callout type=\"info\" [enforcedPolicyOptions]=\"enforcedPolicyOptions\" *ngIf=\"enforcedPolicyOptions\"> </app-callout> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <div class=\"d-flex\"> <div class=\"w-100\"> <input id=\"masterPassword\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPasswordHash\" class=\"text-monospace form-control mb-1\" [(ngModel)]=\"masterPassword\" (input)=\"updatePasswordStrength()\" required appInputVerbatim> <app-password-strength [score]=\"masterPasswordScore\" [showText]=\"true\"> </app-password-strength> </div> <div> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword(false)\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> <div class=\"progress-bar invisible\"></div> </div> </div> </div> <div class=\"form-group\"> <label for=\"masterPasswordRetype\">{{'reTypeMasterPass' | i18n}}</label> <div class=\"d-flex\"> <input id=\"masterPasswordRetype\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPasswordRetype\" class=\"text-monospace form-control\" [(ngModel)]=\"masterPasswordRetype\" required appInputVerbatim> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword(true)\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> </div> </div> <div class=\"form-group\"> <label for=\"hint\">{{'masterPassHint' | i18n}}</label> <input id=\"hint\" class=\"form-control\" type=\"text\" name=\"Hint\" [(ngModel)]=\"hint\"> <small class=\"form-text text-muted\">{{'masterPassHintDesc' | i18n}}</small> </div> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\" (click)=\"logOut()\"> {{'logOut' | i18n}} </button> </div> </div> </div> </div> </div> </form> ","export class OrganizationUserResetPasswordRequest {\n    newMasterPasswordHash: string;\n    key: string;\n}\n","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { VerifyEmailRequest } from 'jslib-common/models/request/verifyEmailRequest';\n\n@Component({\n    selector: 'app-verify-email-token',\n    templateUrl: 'verify-email-token.component.html',\n})\nexport class VerifyEmailTokenComponent implements OnInit {\n    constructor(private router: Router, private toasterService: ToasterService,\n        private i18nService: I18nService, private route: ActivatedRoute,\n        private apiService: ApiService, private userService: UserService,\n        private logService: LogService) { }\n\n    ngOnInit() {\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            if (qParams.userId != null && qParams.token != null) {\n                try {\n                    await this.apiService.postAccountVerifyEmailToken(\n                        new VerifyEmailRequest(qParams.userId, qParams.token));\n                    const authed = await this.userService.isAuthenticated();\n                    if (authed) {\n                        await this.apiService.refreshIdentityToken();\n                    }\n                    this.toasterService.popAsync('success', null, this.i18nService.t('emailVerified'));\n                    this.router.navigate(['/']);\n                    return;\n                } catch (e) {\n                    this.logService.error(e);\n                }\n            }\n            this.toasterService.popAsync('error', null, this.i18nService.t('emailVerifiedFailed'));\n            this.router.navigate(['/']);\n        });\n    }\n}\n","<div class=\"mt-5 d-flex justify-content-center\"> <div> <img class=\"mb-4 logo logo-themed\" alt=\"Bitwarden\"> <p class=\"text-center\"> <i class=\"fa fa-spinner fa-spin fa-2x text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { VerifyDeleteRecoverRequest } from 'jslib-common/models/request/verifyDeleteRecoverRequest';\n\n@Component({\n    selector: 'app-verify-recover-delete',\n    templateUrl: 'verify-recover-delete.component.html',\n})\nexport class VerifyRecoverDeleteComponent implements OnInit {\n    email: string;\n    formPromise: Promise<any>;\n\n    private userId: string;\n    private token: string;\n\n    constructor(private router: Router, private apiService: ApiService,\n        private toasterService: ToasterService, private i18nService: I18nService,\n        private route: ActivatedRoute, private logService: LogService) {\n    }\n\n    ngOnInit() {\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            if (qParams.userId != null && qParams.token != null && qParams.email != null) {\n                this.userId = qParams.userId;\n                this.token = qParams.token;\n                this.email = qParams.email;\n            } else {\n                this.router.navigate(['/']);\n            }\n        });\n    }\n\n    async submit() {\n        try {\n            const request = new VerifyDeleteRecoverRequest(this.userId, this.token);\n            this.formPromise = this.apiService.postAccountRecoverDeleteToken(request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'),\n                this.i18nService.t('accountDeletedDesc'));\n            this.router.navigate(['/']);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row justify-content-md-center mt-5\"> <div class=\"col-5\"> <p class=\"lead text-center mb-4\">{{'deleteAccount' | i18n}}</p> <div class=\"card\"> <div class=\"card-body\"> <app-callout type=\"warning\">{{'deleteAccountWarning' | i18n}}</app-callout> <p class=\"text-center\"> <strong>{{email}}</strong> </p> <p>{{'deleteRecoverConfirmDesc' | i18n}}</p> <hr> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-danger btn-block btn-submit\" [disabled]=\"form.loading\"> <span>{{'deleteAccount' | i18n}}</span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> <a routerLink=\"/\" class=\"btn btn-outline-secondary btn-block ml-2 mt-0\"> {{'cancel' | i18n}} </a> </div> </div> </div> </div> </div> </form> ","import {\n    Component,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { first } from 'rxjs/operators';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport {\n    CollectionDetailsResponse,\n    CollectionResponse,\n} from 'jslib-common/models/response/collectionResponse';\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { CollectionAddEditComponent } from './collection-add-edit.component';\nimport { EntityUsersComponent } from './entity-users.component';\n\n@Component({\n    selector: 'app-org-manage-collections',\n    templateUrl: 'collections.component.html',\n})\nexport class CollectionsComponent implements OnInit {\n    @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n    @ViewChild('usersTemplate', { read: ViewContainerRef, static: true }) usersModalRef: ViewContainerRef;\n\n    loading = true;\n    organization: Organization;\n    canCreate: boolean = false;\n    organizationId: string;\n    collections: CollectionView[];\n    assignedCollections: CollectionView[];\n    pagedCollections: CollectionView[];\n    searchText: string;\n\n    protected didScroll = false;\n    protected pageSize = 100;\n\n    private pagedCollectionsCount = 0;\n\n    constructor(private apiService: ApiService, private route: ActivatedRoute,\n        private collectionService: CollectionService, private modalService: ModalService,\n        private toasterService: ToasterService, private i18nService: I18nService,\n        private platformUtilsService: PlatformUtilsService, private userService: UserService,\n        private searchService: SearchService, private logService: LogService) { }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            await this.load();\n            this.route.queryParams.pipe(first()).subscribe(async qParams => {\n                this.searchText = qParams.search;\n            });\n        });\n    }\n\n    async load() {\n        this.organization = await this.userService.getOrganization(this.organizationId);\n        this.canCreate = this.organization.canCreateNewCollections;\n\n        const decryptCollections = async (r: ListResponse<CollectionResponse>) => {\n            const collections = r.data.filter(c => c.organizationId === this.organizationId).map(d =>\n                new Collection(new CollectionData(d as CollectionDetailsResponse)));\n            return await this.collectionService.decryptMany(collections);\n        };\n\n        if (this.organization.canViewAssignedCollections) {\n            const response = await this.apiService.getUserCollections();\n            this.assignedCollections = await decryptCollections(response);\n        }\n\n        if (this.organization.canViewAllCollections) {\n            const response = await this.apiService.getCollections(this.organizationId);\n            this.collections = await decryptCollections(response);\n        } else {\n            this.collections = this.assignedCollections;\n        }\n\n        this.resetPaging();\n        this.loading = false;\n    }\n\n    loadMore() {\n        if (!this.collections || this.collections.length <= this.pageSize) {\n            return;\n        }\n        const pagedLength = this.pagedCollections.length;\n        let pagedSize = this.pageSize;\n        if (pagedLength === 0 && this.pagedCollectionsCount > this.pageSize) {\n            pagedSize = this.pagedCollectionsCount;\n        }\n        if (this.collections.length > pagedLength) {\n            this.pagedCollections =\n                this.pagedCollections.concat(this.collections.slice(pagedLength, pagedLength + pagedSize));\n        }\n        this.pagedCollectionsCount = this.pagedCollections.length;\n        this.didScroll = this.pagedCollections.length > this.pageSize;\n    }\n\n    async edit(collection: CollectionView) {\n        const canCreate = collection == null && this.canCreate;\n        const canEdit = collection != null && this.canEdit(collection);\n        const canDelete = collection != null && this.canDelete(collection);\n\n        if (!(canCreate || canEdit || canDelete)) {\n            this.toasterService.popAsync('error', null, this.i18nService.t('missingPermissions'));\n            return;\n        }\n\n        const [modal] = await this.modalService.openViewRef(CollectionAddEditComponent, this.addEditModalRef, comp => {\n            comp.organizationId = this.organizationId;\n            comp.collectionId = collection != null ? collection.id : null;\n            comp.canSave = canCreate || canEdit;\n            comp.canDelete = canDelete;\n            comp.onSavedCollection.subscribe(() => {\n                modal.close();\n                this.load();\n            });\n            comp.onDeletedCollection.subscribe(() => {\n                modal.close();\n                this.removeCollection(collection);\n            });\n        });\n    }\n\n    add() {\n        this.edit(null);\n    }\n\n    async delete(collection: CollectionView) {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteCollectionConfirmation'), collection.name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            await this.apiService.deleteCollection(this.organizationId, collection.id);\n            this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', collection.name));\n            this.removeCollection(collection);\n        } catch (e) {\n            this.logService.error(e);\n            this.toasterService.popAsync('error', null, this.i18nService.t('missingPermissions'));\n        }\n    }\n\n    async users(collection: CollectionView) {\n        const [modal] = await this.modalService.openViewRef(EntityUsersComponent, this.usersModalRef, comp => {\n            comp.organizationId = this.organizationId;\n            comp.entity = 'collection';\n            comp.entityId = collection.id;\n            comp.entityName = collection.name;\n\n            comp.onEditedUsers.subscribe(() => {\n                this.load();\n                modal.close();\n            });\n        });\n    }\n\n    async resetPaging() {\n        this.pagedCollections = [];\n        this.loadMore();\n    }\n\n    isSearching() {\n        return this.searchService.isSearchable(this.searchText);\n    }\n\n    isPaging() {\n        const searching = this.isSearching();\n        if (searching && this.didScroll) {\n            this.resetPaging();\n        }\n        return !searching && this.collections && this.collections.length > this.pageSize;\n    }\n\n    canEdit(collection: CollectionView) {\n        if (this.organization.canEditAnyCollection) {\n            return true;\n        }\n\n        if (this.organization.canEditAssignedCollections && this.assignedCollections.some(c => c.id === collection.id)) {\n            return true;\n        }\n        return false;\n    }\n\n    canDelete(collection: CollectionView) {\n        if (this.organization.canDeleteAnyCollection) {\n            return true;\n        }\n\n        if (this.organization.canDeleteAssignedCollections && this.assignedCollections.some(c => c.id === collection.id)) {\n            return true;\n        }\n        return false;\n    }\n\n    private removeCollection(collection: CollectionView) {\n        const index = this.collections.indexOf(collection);\n        if (index > -1) {\n            this.collections.splice(index, 1);\n            this.resetPaging();\n        }\n    }\n}\n","<div class=\"page-header d-flex\"> <h1>{{'collections' | i18n}}</h1> <div class=\"ml-auto d-flex\"> <div> <label class=\"sr-only\" for=\"search\">{{'search' | i18n}}</label> <input type=\"search\" class=\"form-control form-control-sm\" id=\"search\" placeholder=\"{{'search' | i18n}}\" [(ngModel)]=\"searchText\"> </div> <button type=\"button\" *ngIf=\"this.canCreate\" class=\"btn btn-sm btn-outline-primary ml-3\" (click)=\"add()\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> {{'newCollection' | i18n}} </button> </div> </div> <ng-container *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"!loading && (isPaging() ? pagedCollections : collections | search:searchText:'name':'id') as searchedCollections\"> <p *ngIf=\"!searchedCollections.length\">{{'noCollectionsInList' | i18n}}</p> <table class=\"table table-hover table-list\" *ngIf=\"searchedCollections.length\" infiniteScroll [infiniteScrollDistance]=\"1\" [infiniteScrollDisabled]=\"!isPaging()\" (scrolled)=\"loadMore()\"> <tbody> <tr *ngFor=\"let c of searchedCollections\"> <td> <a href=\"#\" appStopClick (click)=\"edit(c)\">{{c.name}}</a> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown *ngIf=\"this.canEdit(c) || this.canDelete(c)\"> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\"> <a class=\"dropdown-item\" href=\"#\" appStopClick *ngIf=\"this.canEdit(c)\" (click)=\"users(c)\"> <i class=\"fa fa-fw fa-users\" aria-hidden=\"true\"></i> {{'users' | i18n}} </a> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick *ngIf=\"this.canDelete(c)\" (click)=\"delete(c)\"> <i class=\"fa fa-fw fa-trash-o\" aria-hidden=\"true\"></i> {{'delete' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> </ng-container> <ng-template #addEdit></ng-template> <ng-template #usersTemplate></ng-template> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\nimport { CollectionRequest } from 'jslib-common/models/request/collectionRequest';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { GroupResponse } from 'jslib-common/models/response/groupResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n    selector: 'app-collection-add-edit',\n    templateUrl: 'collection-add-edit.component.html',\n})\nexport class CollectionAddEditComponent implements OnInit {\n    @Input() collectionId: string;\n    @Input() organizationId: string;\n    @Input() canSave: boolean;\n    @Input() canDelete: boolean;\n    @Output() onSavedCollection = new EventEmitter();\n    @Output() onDeletedCollection = new EventEmitter();\n\n    loading = true;\n    editMode: boolean = false;\n    accessGroups: boolean = false;\n    title: string;\n    name: string;\n    externalId: string;\n    groups: GroupResponse[] = [];\n    formPromise: Promise<any>;\n    deletePromise: Promise<any>;\n\n    private orgKey: SymmetricCryptoKey;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService,\n        private cryptoService: CryptoService, private userService: UserService,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        const organization = await this.userService.getOrganization(this.organizationId);\n        this.accessGroups = organization.useGroups;\n        this.editMode = this.loading = this.collectionId != null;\n        if (this.accessGroups) {\n            const groupsResponse = await this.apiService.getGroups(this.organizationId);\n            this.groups = groupsResponse.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'name'));\n        }\n        this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n\n        if (this.editMode) {\n            this.editMode = true;\n            this.title = this.i18nService.t('editCollection');\n            try {\n                const collection = await this.apiService.getCollectionDetails(this.organizationId, this.collectionId);\n                this.name = await this.cryptoService.decryptToUtf8(new EncString(collection.name), this.orgKey);\n                this.externalId = collection.externalId;\n                if (collection.groups != null && this.groups.length > 0) {\n                    collection.groups.forEach(s => {\n                        const group = this.groups.filter(g => !g.accessAll && g.id === s.id);\n                        if (group != null && group.length > 0) {\n                            (group[0] as any).checked = true;\n                            (group[0] as any).readOnly = s.readOnly;\n                            (group[0] as any).hidePasswords = s.hidePasswords;\n                        }\n                    });\n                }\n            } catch (e) {\n                this.logService.error(e);\n            }\n        } else {\n            this.title = this.i18nService.t('addCollection');\n        }\n\n        this.groups.forEach(g => {\n            if (g.accessAll) {\n                (g as any).checked = true;\n            }\n        });\n\n        this.loading = false;\n    }\n\n    check(g: GroupResponse, select?: boolean) {\n        if (g.accessAll) {\n            return;\n        }\n        (g as any).checked = select == null ? !(g as any).checked : select;\n        if (!(g as any).checked) {\n            (g as any).readOnly = false;\n            (g as any).hidePasswords = false;\n        }\n    }\n\n    selectAll(select: boolean) {\n        this.groups.forEach(g => this.check(g, select));\n    }\n\n    async submit() {\n        if (this.orgKey == null) {\n            throw new Error('No encryption key for this organization.');\n        }\n\n        const request = new CollectionRequest();\n        request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;\n        request.externalId = this.externalId;\n        request.groups = this.groups.filter(g => (g as any).checked && !g.accessAll)\n            .map(g => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords));\n\n        try {\n            if (this.editMode) {\n                this.formPromise = this.apiService.putCollection(this.organizationId, this.collectionId, request);\n            } else {\n                this.formPromise = this.apiService.postCollection(this.organizationId, request);\n            }\n            await this.formPromise;\n            this.toasterService.popAsync('success', null,\n                this.i18nService.t(this.editMode ? 'editedCollectionId' : 'createdCollectionId', this.name));\n            this.onSavedCollection.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async delete() {\n        if (!this.editMode) {\n            return;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteCollectionConfirmation'), this.name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.deletePromise = this.apiService.deleteCollection(this.organizationId, this.collectionId);\n            await this.deletePromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('deletedCollectionId', this.name));\n            this.onDeletedCollection.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"collectionAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"collectionAddEditTitle\">{{title}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"modal-body\" *ngIf=\"!loading\"> <div class=\"form-group\"> <label for=\"name\">{{'name' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"name\" required appAutofocus [disabled]=\"!this.canSave\"> </div> <div class=\"form-group\"> <label for=\"externalId\">{{'externalId' | i18n}}</label> <input id=\"externalId\" class=\"form-control\" type=\"text\" name=\"ExternalId\" [(ngModel)]=\"externalId\" [disabled]=\"!this.canSave\"> <small class=\"form-text text-muted\">{{'externalIdDesc' | i18n}}</small> </div> <ng-container *ngIf=\"accessGroups\"> <h3 class=\"mt-4 d-flex mb-0\"> {{'groupAccess' | i18n}} <div class=\"ml-auto\" *ngIf=\"groups && groups.length && this.canSave\"> <button type=\"button\" (click)=\"selectAll(true)\" class=\"btn btn-link btn-sm py-0\"> {{'selectAll' | i18n}} </button> <button type=\"button\" (click)=\"selectAll(false)\" class=\"btn btn-link btn-sm py-0\"> {{'unselectAll' | i18n}} </button> </div> </h3> <div *ngIf=\"!groups || !groups.length\"> {{'noGroupsInList' | i18n}} </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"groups && groups.length\"> <thead> <tr> <th>&nbsp;</th> <th>{{'name' | i18n}}</th> <th width=\"100\" class=\"text-center\">{{'hidePasswords' | i18n}}</th> <th width=\"100\" class=\"text-center\">{{'readOnly' | i18n}}</th> </tr> </thead> <tbody> <tr *ngFor=\"let g of groups; let i = index\"> <td class=\"table-list-checkbox\" (click)=\"check(g)\"> <input type=\"checkbox\" [(ngModel)]=\"g.checked\" name=\"Groups[{{i}}].Checked\" [disabled]=\"g.accessAll || !this.canSave\" appStopProp> </td> <td (click)=\"check(g)\"> {{g.name}} <ng-container *ngIf=\"g.accessAll\"> <i class=\"fa fa-th text-muted fa-fw\" title=\"{{'groupAccessAllItems' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'groupAccessAllItems' | i18n}}</span> </ng-container> </td> <td class=\"text-center\"> <input type=\"checkbox\" [(ngModel)]=\"g.hidePasswords\" name=\"Groups[{{i}}].HidePasswords\" [disabled]=\"!g.checked || g.accessAll || !this.canSave\"> </td> <td class=\"text-center\"> <input type=\"checkbox\" [(ngModel)]=\"g.readOnly\" name=\"Groups[{{i}}].ReadOnly\" [disabled]=\"!g.checked || g.accessAll || !this.canSave\"> </td> </tr> </tbody> </table> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\" *ngIf=\"this.canSave\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> <div class=\"ml-auto\" *ngIf=\"this.canDelete\"> <button #deleteBtn type=\"button\" (click)=\"delete()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{'delete' | i18n}}\" *ngIf=\"editMode\" [disabled]=\"deleteBtn.loading\" [appApiAction]=\"deletePromise\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </div> </div> </form> </div> </div> ","import { Collection } from '../domain/collection';\n\nimport { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nexport class CollectionRequest {\n    name: string;\n    externalId: string;\n    groups: SelectionReadOnlyRequest[] = [];\n\n    constructor(collection?: Collection) {\n        if (collection == null) {\n            return;\n        }\n        this.name = collection.name ? collection.name.encryptedString : null;\n        this.externalId = collection.externalId;\n    }\n}\n","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { EventResponse } from 'jslib-common/models/response/eventResponse';\n\nimport { EventService } from '../../services/event.service';\n\nimport { BaseEventsComponent } from '../../common/base.events.component';\n\n@Component({\n    selector: 'app-org-events',\n    templateUrl: 'events.component.html',\n})\nexport class EventsComponent extends BaseEventsComponent implements OnInit {\n    exportFileName: string = 'org-events';\n    organizationId: string;\n    organization: Organization;\n\n    private orgUsersUserIdMap = new Map<string, any>();\n\n    constructor(private apiService: ApiService, private route: ActivatedRoute, eventService: EventService,\n        i18nService: I18nService, toasterService: ToasterService, private userService: UserService,\n        exportService: ExportService, platformUtilsService: PlatformUtilsService, private router: Router,\n        logService: LogService, private userNamePipe: UserNamePipe) {\n        super(eventService, i18nService, toasterService, exportService, platformUtilsService, logService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            this.organization = await this.userService.getOrganization(this.organizationId);\n            if (this.organization == null || !this.organization.useEvents) {\n                this.router.navigate(['/organizations', this.organizationId]);\n                return;\n            }\n\n            await this.load();\n        });\n    }\n\n    async load() {\n        const response = await this.apiService.getOrganizationUsers(this.organizationId);\n        response.data.forEach(u => {\n            const name = this.userNamePipe.transform(u);\n            this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });\n        });\n\n        if (this.organization.providerId != null) {\n            try {\n                const provider = await this.userService.getProvider(this.organization.providerId);\n                if (provider != null && (await this.userService.getProvider(this.organization.providerId)).canManageUsers) {\n                    const providerUsersResponse = await this.apiService.getProviderUsers(this.organization.providerId);\n                    providerUsersResponse.data.forEach(u => {\n                        const name = this.userNamePipe.transform(u);\n                        this.orgUsersUserIdMap.set(u.userId, { name: `${name} (${this.organization.providerName})`, email: u.email });\n                    });\n                }\n            } catch (e) {\n                this.logService.warning(e);\n            }\n        }\n\n        await this.loadEvents(true);\n        this.loaded = true;\n    }\n\n    protected requestEvents(startDate: string, endDate: string, continuationToken: string) {\n        return this.apiService.getEventsOrganization(this.organizationId, startDate, endDate, continuationToken);\n    }\n\n    protected getUserName(r: EventResponse, userId: string) {\n        if (userId == null) {\n            return null;\n        }\n\n        if (this.orgUsersUserIdMap.has(userId)) {\n            return this.orgUsersUserIdMap.get(userId);\n        }\n\n        if (r.providerId != null && r.providerId === this.organization.providerId) {\n            return {\n                'name': this.organization.providerName,\n            };\n        }\n\n        return null;\n    }\n}\n","<div class=\"page-header d-flex\"> <h1>{{'eventLogs' | i18n}}</h1> <div class=\"ml-auto d-flex\"> <div class=\"form-inline\"> <label class=\"sr-only\" for=\"start\">{{'startDate' | i18n}}</label> <input type=\"datetime-local\" class=\"form-control form-control-sm\" id=\"start\" placeholder=\"{{'startDate' | i18n}}\" [(ngModel)]=\"start\" placeholder=\"YYYY-MM-DDTHH:MM\" (change)=\"dirtyDates = true\"> <span class=\"mx-2\">-</span> <label class=\"sr-only\" for=\"end\">{{'endDate' | i18n}}</label> <input type=\"datetime-local\" class=\"form-control form-control-sm\" id=\"end\" placeholder=\"{{'endDate' | i18n}}\" [(ngModel)]=\"end\" placeholder=\"YYYY-MM-DDTHH:MM\" (change)=\"dirtyDates = true\"> </div> <form #refreshForm [appApiAction]=\"refreshPromise\" class=\"d-inline\"> <button type=\"button\" class=\"btn btn-sm btn-outline-primary ml-3\" (click)=\"loadEvents(true)\" [disabled]=\"loaded && refreshForm.loading\"> <i class=\"fa fa-refresh fa-fw\" aria-hidden=\"true\" [ngClass]=\"{'fa-spin': loaded && refreshForm.loading}\"></i> {{'refresh' | i18n}} </button> </form> <form #exportForm [appApiAction]=\"exportPromise\" class=\"d-inline\"> <button type=\"button\" class=\"btn btn-sm btn-outline-primary btn-submit manual ml-3\" [ngClass]=\"{loading:exportForm.loading}\" (click)=\"exportEvents()\" [disabled]=\"loaded && exportForm.loading || dirtyDates\"> <i class=\"fa fa-spinner fa-spin\" aria-hidden=\"true\"></i> <span>{{'export' | i18n}}</span> </button> </form> </div> </div> <ng-container *ngIf=\"!loaded\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"loaded\"> <p *ngIf=\"!events || !events.length\">{{'noEventsInList' | i18n}}</p> <table class=\"table table-hover\" *ngIf=\"events && events.length\"> <thead> <tr> <th class=\"border-top-0\" width=\"210\">{{'timestamp' | i18n}}</th> <th class=\"border-top-0\" width=\"40\"> <span class=\"sr-only\">{{'device' | i18n}}</span> </th> <th class=\"border-top-0\" width=\"150\">{{'user' | i18n}}</th> <th class=\"border-top-0\">{{'event' | i18n}}</th> </tr> </thead> <tbody> <tr *ngFor=\"let e of events\"> <td>{{e.date | date:'medium'}}</td> <td> <i class=\"text-muted fa fa-lg {{e.appIcon}}\" title=\"{{e.appName}}, {{e.ip}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{e.appName}}, {{e.ip}}</span> </td> <td> <span title=\"{{e.userEmail}}\">{{e.userName}}</span> </td> <td [innerHTML]=\"e.message\"></td> </tr> </tbody> </table> <button #moreBtn [appApiAction]=\"morePromise\" type=\"button\" class=\"btn btn-block btn-link btn-submit\" (click)=\"loadEvents(false)\" [disabled]=\"loaded && moreBtn.loading\" *ngIf=\"continuationToken\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'loadMore' | i18n}}</span> </button> </ng-container> ","import {\n    Component,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { GroupResponse } from 'jslib-common/models/response/groupResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { EntityUsersComponent } from './entity-users.component';\nimport { GroupAddEditComponent } from './group-add-edit.component';\n\n@Component({\n    selector: 'app-org-groups',\n    templateUrl: 'groups.component.html',\n})\nexport class GroupsComponent implements OnInit {\n    @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n    @ViewChild('usersTemplate', { read: ViewContainerRef, static: true }) usersModalRef: ViewContainerRef;\n\n    loading = true;\n    organizationId: string;\n    groups: GroupResponse[];\n    pagedGroups: GroupResponse[];\n    searchText: string;\n\n    protected didScroll = false;\n    protected pageSize = 100;\n\n    private pagedGroupsCount = 0;\n\n    constructor(private apiService: ApiService, private route: ActivatedRoute,\n        private i18nService: I18nService, private modalService: ModalService,\n        private toasterService: ToasterService, private platformUtilsService: PlatformUtilsService,\n        private userService: UserService, private router: Router,\n        private searchService: SearchService, private logService: LogService) { }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            const organization = await this.userService.getOrganization(this.organizationId);\n            if (organization == null || !organization.useGroups) {\n                this.router.navigate(['/organizations', this.organizationId]);\n                return;\n            }\n            await this.load();\n            this.route.queryParams.pipe(first()).subscribe(async qParams => {\n                this.searchText = qParams.search;\n            });\n        });\n    }\n\n    async load() {\n        const response = await this.apiService.getGroups(this.organizationId);\n        const groups = response.data != null && response.data.length > 0 ? response.data : [];\n        groups.sort(Utils.getSortFunction(this.i18nService, 'name'));\n        this.groups = groups;\n        this.resetPaging();\n        this.loading = false;\n    }\n\n    loadMore() {\n        if (!this.groups || this.groups.length <= this.pageSize) {\n            return;\n        }\n        const pagedLength = this.pagedGroups.length;\n        let pagedSize = this.pageSize;\n        if (pagedLength === 0 && this.pagedGroupsCount > this.pageSize) {\n            pagedSize = this.pagedGroupsCount;\n        }\n        if (this.groups.length > pagedLength) {\n            this.pagedGroups = this.pagedGroups.concat(this.groups.slice(pagedLength, pagedLength + pagedSize));\n        }\n        this.pagedGroupsCount = this.pagedGroups.length;\n        this.didScroll = this.pagedGroups.length > this.pageSize;\n    }\n\n    async edit(group: GroupResponse) {\n        const [modal] = await this.modalService.openViewRef(GroupAddEditComponent, this.addEditModalRef, comp => {\n            comp.organizationId = this.organizationId;\n            comp.groupId = group != null ? group.id : null;\n            comp.onSavedGroup.subscribe(() => {\n                modal.close();\n                this.load();\n            });\n            comp.onDeletedGroup.subscribe(() => {\n                modal.close();\n                this.removeGroup(group);\n            });\n        });\n    }\n\n    add() {\n        this.edit(null);\n    }\n\n    async delete(group: GroupResponse) {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteGroupConfirmation'), group.name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            await this.apiService.deleteGroup(this.organizationId, group.id);\n            this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', group.name));\n            this.removeGroup(group);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async users(group: GroupResponse) {\n        const [modal] = await this.modalService.openViewRef(EntityUsersComponent, this.usersModalRef, comp => {\n            comp.organizationId = this.organizationId;\n            comp.entity = 'group';\n            comp.entityId = group.id;\n            comp.entityName = group.name;\n\n            comp.onEditedUsers.subscribe(() => {\n                modal.close();\n            });\n        });\n    }\n\n    async resetPaging() {\n        this.pagedGroups = [];\n        this.loadMore();\n    }\n\n    isSearching() {\n        return this.searchService.isSearchable(this.searchText);\n    }\n\n    isPaging() {\n        const searching = this.isSearching();\n        if (searching && this.didScroll) {\n            this.resetPaging();\n        }\n        return !searching && this.groups && this.groups.length > this.pageSize;\n    }\n\n    private removeGroup(group: GroupResponse) {\n        const index = this.groups.indexOf(group);\n        if (index > -1) {\n            this.groups.splice(index, 1);\n            this.resetPaging();\n        }\n    }\n}\n","<div class=\"page-header d-flex\"> <h1>{{'groups' | i18n}}</h1> <div class=\"ml-auto d-flex\"> <div> <label class=\"sr-only\" for=\"search\">{{'search' | i18n}}</label> <input type=\"search\" class=\"form-control form-control-sm\" id=\"search\" placeholder=\"{{'search' | i18n}}\" [(ngModel)]=\"searchText\"> </div> <button type=\"button\" class=\"btn btn-sm btn-outline-primary ml-3\" (click)=\"add()\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> {{'newGroup' | i18n}} </button> </div> </div> <ng-container *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"!loading && (isPaging() ? pagedGroups : groups | search:searchText:'name':'id') as searchedGroups\"> <p *ngIf=\"!searchedGroups.length\">{{'noGroupsInList' | i18n}}</p> <table class=\"table table-hover table-list\" *ngIf=\"searchedGroups.length\" infiniteScroll [infiniteScrollDistance]=\"1\" [infiniteScrollDisabled]=\"!isPaging()\" (scrolled)=\"loadMore()\"> <tbody> <tr *ngFor=\"let g of searchedGroups\"> <td> <a href=\"#\" appStopClick (click)=\"edit(g)\">{{g.name}}</a> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"users(g)\"> <i class=\"fa fa-fw fa-users\" aria-hidden=\"true\"></i> {{'users' | i18n}} </a> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick (click)=\"delete(g)\"> <i class=\"fa fa-fw fa-trash-o\" aria-hidden=\"true\"></i> {{'delete' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> </ng-container> <ng-template #addEdit></ng-template> <ng-template #usersTemplate></ng-template> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport { GroupRequest } from 'jslib-common/models/request/groupRequest';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { CollectionDetailsResponse } from 'jslib-common/models/response/collectionResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\n@Component({\n    selector: 'app-group-add-edit',\n    templateUrl: 'group-add-edit.component.html',\n})\nexport class GroupAddEditComponent implements OnInit {\n    @Input() groupId: string;\n    @Input() organizationId: string;\n    @Output() onSavedGroup = new EventEmitter();\n    @Output() onDeletedGroup = new EventEmitter();\n\n    loading = true;\n    editMode: boolean = false;\n    title: string;\n    name: string;\n    externalId: string;\n    access: 'all' | 'selected' = 'selected';\n    collections: CollectionView[] = [];\n    formPromise: Promise<any>;\n    deletePromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private collectionService: CollectionService,\n        private platformUtilsService: PlatformUtilsService, private logService: LogService) { }\n\n    async ngOnInit() {\n        this.editMode = this.loading = this.groupId != null;\n        await this.loadCollections();\n\n        if (this.editMode) {\n            this.editMode = true;\n            this.title = this.i18nService.t('editGroup');\n            try {\n                const group = await this.apiService.getGroupDetails(this.organizationId, this.groupId);\n                this.access = group.accessAll ? 'all' : 'selected';\n                this.name = group.name;\n                this.externalId = group.externalId;\n                if (group.collections != null && this.collections != null) {\n                    group.collections.forEach(s => {\n                        const collection = this.collections.filter(c => c.id === s.id);\n                        if (collection != null && collection.length > 0) {\n                            (collection[0] as any).checked = true;\n                            collection[0].readOnly = s.readOnly;\n                            collection[0].hidePasswords = s.hidePasswords;\n                        }\n                    });\n                }\n            } catch (e) {\n                this.logService.error(e);\n            }\n        } else {\n            this.title = this.i18nService.t('addGroup');\n        }\n\n        this.loading = false;\n    }\n\n    async loadCollections() {\n        const response = await this.apiService.getCollections(this.organizationId);\n        const collections = response.data.map(r =>\n            new Collection(new CollectionData(r as CollectionDetailsResponse)));\n        this.collections = await this.collectionService.decryptMany(collections);\n    }\n\n    check(c: CollectionView, select?: boolean) {\n        (c as any).checked = select == null ? !(c as any).checked : select;\n        if (!(c as any).checked) {\n            c.readOnly = false;\n        }\n    }\n\n    selectAll(select: boolean) {\n        this.collections.forEach(c => this.check(c, select));\n    }\n\n    async submit() {\n        const request = new GroupRequest();\n        request.name = this.name;\n        request.externalId = this.externalId;\n        request.accessAll = this.access === 'all';\n        if (!request.accessAll) {\n            request.collections = this.collections.filter(c => (c as any).checked)\n                .map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n        }\n\n        try {\n            if (this.editMode) {\n                this.formPromise = this.apiService.putGroup(this.organizationId, this.groupId, request);\n            } else {\n                this.formPromise = this.apiService.postGroup(this.organizationId, request);\n            }\n            await this.formPromise;\n            this.toasterService.popAsync('success', null,\n                this.i18nService.t(this.editMode ? 'editedGroupId' : 'createdGroupId', this.name));\n            this.onSavedGroup.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async delete() {\n        if (!this.editMode) {\n            return;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteGroupConfirmation'), this.name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.deletePromise = this.apiService.deleteGroup(this.organizationId, this.groupId);\n            await this.deletePromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('deletedGroupId', this.name));\n            this.onDeletedGroup.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"groupAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"groupAddEditTitle\">{{title}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"modal-body\" *ngIf=\"!loading\"> <div class=\"form-group\"> <label for=\"name\">{{'name' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"name\" required> </div> <div class=\"form-group\"> <label for=\"externalId\">{{'externalId' | i18n}}</label> <input id=\"externalId\" class=\"form-control\" type=\"text\" name=\"ExternalId\" [(ngModel)]=\"externalId\"> <small class=\"form-text text-muted\">{{'externalIdDesc' | i18n}}</small> </div> <h3 class=\"mt-4 d-flex\"> <div class=\"mb-2\"> {{'accessControl' | i18n}} <a target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\" href=\"https://bitwarden.com/help/article/user-types-access-control/#access-control\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <div class=\"ml-auto\" *ngIf=\"access === 'selected' && collections && collections.length\"> <button type=\"button\" (click)=\"selectAll(true)\" class=\"btn btn-link btn-sm py-0\"> {{'selectAll' | i18n}} </button> <button type=\"button\" (click)=\"selectAll(false)\" class=\"btn btn-link btn-sm py-0\"> {{'unselectAll' | i18n}} </button> </div> </h3> <div class=\"form-group\" [ngClass]=\"{'mb-0': access !== 'selected'}\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"radio\" name=\"access\" id=\"accessAll\" value=\"all\" [(ngModel)]=\"access\"> <label class=\"form-check-label\" for=\"accessAll\"> {{'groupAccessAllItems' | i18n}} </label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"radio\" name=\"access\" id=\"accessSelected\" value=\"selected\" [(ngModel)]=\"access\"> <label class=\"form-check-label\" for=\"accessSelected\"> {{'groupAccessSelectedCollections' | i18n}} </label> </div> </div> <ng-container *ngIf=\"access === 'selected'\"> <div *ngIf=\"!collections || !collections.length\"> {{'noCollectionsInList' | i18n}} </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"collections && collections.length\"> <thead> <tr> <th>&nbsp;</th> <th>{{'name' | i18n}}</th> <th width=\"100\" class=\"text-center\">{{'hidePasswords' | i18n}}</th> <th width=\"100\" class=\"text-center\">{{'readOnly' | i18n}}</th> </tr> </thead> <tbody> <tr *ngFor=\"let c of collections; let i = index\"> <td class=\"table-list-checkbox\" (click)=\"check(c)\"> <input type=\"checkbox\" [(ngModel)]=\"c.checked\" name=\"Collection[{{i}}].Checked\" appStopProp> </td> <td (click)=\"check(c)\"> {{c.name}} </td> <td class=\"text-center\"> <input type=\"checkbox\" [(ngModel)]=\"c.hidePasswords\" name=\"Collection[{{i}}].HidePasswords\" [disabled]=\"!c.checked\"> </td> <td class=\"text-center\"> <input type=\"checkbox\" [(ngModel)]=\"c.readOnly\" name=\"Collection[{{i}}].ReadOnly\" [disabled]=\"!c.checked\"> </td> </tr> </tbody> </table> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> <div class=\"ml-auto\"> <button #deleteBtn type=\"button\" (click)=\"delete()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{'delete' | i18n}}\" *ngIf=\"editMode\" [disabled]=\"deleteBtn.loading\" [appApiAction]=\"deletePromise\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" aria-hidden=\"true\" title=\"{{'loading' | i18n}}\"></i> </button> </div> </div> </form> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n    selector: 'app-org-manage',\n    templateUrl: 'manage.component.html',\n})\nexport class ManageComponent implements OnInit {\n    organization: Organization;\n    accessPolicies: boolean = false;\n    accessGroups: boolean = false;\n    accessEvents: boolean = false;\n    accessSso: boolean = false;\n\n    constructor(private route: ActivatedRoute, private userService: UserService) {}\n\n    ngOnInit() {\n        this.route.parent.params.subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            this.accessPolicies = this.organization.usePolicies;\n            this.accessSso = this.organization.useSso;\n            this.accessEvents = this.organization.useEvents;\n            this.accessGroups = this.organization.useGroups;\n        });\n    }\n}\n","<div class=\"container page-content\"> <div class=\"row\"> <div class=\"col-3\"> <div class=\"card\" *ngIf=\"organization\"> <div class=\"card-header\">{{'manage' | i18n}}</div> <div class=\"list-group list-group-flush\"> <a routerLink=\"people\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"organization.canManageUsers\"> {{'people' | i18n}} </a> <a routerLink=\"collections\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"organization.canViewAllCollections || organization.canViewAssignedCollections\"> {{'collections' | i18n}} </a> <a routerLink=\"groups\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"organization.canManageGroups && accessGroups\"> {{'groups' | i18n}} </a> <a routerLink=\"policies\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"organization.canManagePolicies && accessPolicies\"> {{'policies' | i18n}} </a> <a routerLink=\"sso\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"organization.canManageSso && accessSso\"> {{'singleSignOn' | i18n}} </a> <a routerLink=\"events\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"organization.canAccessEventLogs && accessEvents\"> {{'eventLogs' | i18n}} </a> </div> </div> </div> <div class=\"col-9\"> <router-outlet></router-outlet> </div> </div> </div> ","import {\n    Component,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport { first } from 'rxjs/operators';\n\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ValidationService } from 'jslib-angular/services/validation.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { OrganizationKeysRequest } from 'jslib-common/models/request/organizationKeysRequest';\nimport { OrganizationUserBulkRequest } from 'jslib-common/models/request/organizationUserBulkRequest';\nimport { OrganizationUserConfirmRequest } from 'jslib-common/models/request/organizationUserConfirmRequest';\n\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\nimport { OrganizationUserBulkResponse } from 'jslib-common/models/response/organizationUserBulkResponse';\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { SearchPipe } from 'jslib-angular/pipes/search.pipe';\nimport { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe';\n\nimport { BasePeopleComponent } from '../../common/base.people.component';\nimport { BulkConfirmComponent } from './bulk/bulk-confirm.component';\nimport { BulkRemoveComponent } from './bulk/bulk-remove.component';\nimport { BulkStatusComponent } from './bulk/bulk-status.component';\nimport { EntityEventsComponent } from './entity-events.component';\nimport { ResetPasswordComponent } from './reset-password.component';\nimport { UserAddEditComponent } from './user-add-edit.component';\nimport { UserGroupsComponent } from './user-groups.component';\n\n@Component({\n    selector: 'app-org-people',\n    templateUrl: 'people.component.html',\n})\nexport class PeopleComponent extends BasePeopleComponent<OrganizationUserUserDetailsResponse> implements OnInit {\n    @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n    @ViewChild('groupsTemplate', { read: ViewContainerRef, static: true }) groupsModalRef: ViewContainerRef;\n    @ViewChild('eventsTemplate', { read: ViewContainerRef, static: true }) eventsModalRef: ViewContainerRef;\n    @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef;\n    @ViewChild('resetPasswordTemplate', { read: ViewContainerRef, static: true }) resetPasswordModalRef: ViewContainerRef;\n    @ViewChild('bulkStatusTemplate', { read: ViewContainerRef, static: true }) bulkStatusModalRef: ViewContainerRef;\n    @ViewChild('bulkConfirmTemplate', { read: ViewContainerRef, static: true }) bulkConfirmModalRef: ViewContainerRef;\n    @ViewChild('bulkRemoveTemplate', { read: ViewContainerRef, static: true }) bulkRemoveModalRef: ViewContainerRef;\n\n    userType = OrganizationUserType;\n    userStatusType = OrganizationUserStatusType;\n\n    organizationId: string;\n    status: OrganizationUserStatusType = null;\n    accessEvents = false;\n    accessGroups = false;\n    canResetPassword = false; // User permission (admin/custom)\n    orgUseResetPassword = false; // Org plan ability\n    orgHasKeys = false; // Org public/private keys\n    orgResetPasswordPolicyEnabled = false;\n    callingUserType: OrganizationUserType = null;\n\n    constructor(apiService: ApiService, private route: ActivatedRoute,\n        i18nService: I18nService, modalService: ModalService,\n        platformUtilsService: PlatformUtilsService, toasterService: ToasterService,\n        cryptoService: CryptoService, private userService: UserService, private router: Router,\n        storageService: StorageService, searchService: SearchService,\n        validationService: ValidationService, private policyService: PolicyService,\n        logService: LogService, searchPipe: SearchPipe, userNamePipe: UserNamePipe, private syncService: SyncService) {\n            super(apiService, searchService, i18nService, platformUtilsService, toasterService, cryptoService,\n                storageService, validationService, modalService, logService, searchPipe, userNamePipe);\n        }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            const organization = await this.userService.getOrganization(this.organizationId);\n            if (!organization.canManageUsers) {\n                this.router.navigate(['../collections'], { relativeTo: this.route });\n                return;\n            }\n            this.accessEvents = organization.useEvents;\n            this.accessGroups = organization.useGroups;\n            this.canResetPassword = organization.canManageUsersPassword;\n            this.orgUseResetPassword = organization.useResetPassword;\n            this.callingUserType = organization.type;\n            this.orgHasKeys = organization.hasPublicAndPrivateKeys;\n\n            // Backfill pub/priv key if necessary\n            if (this.canResetPassword && !this.orgHasKeys) {\n                const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n                const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n                const request = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n                const response = await this.apiService.postOrganizationKeys(this.organizationId, request);\n                if (response != null) {\n                    this.orgHasKeys = response.publicKey != null && response.privateKey != null;\n                    await this.syncService.fullSync(true); // Replace oganizations with new data\n                } else {\n                    throw new Error(this.i18nService.t('resetPasswordOrgKeysError'));\n                }\n            }\n\n            await this.load();\n\n            this.route.queryParams.pipe(first()).subscribe(async qParams => {\n                this.searchText = qParams.search;\n                if (qParams.viewEvents != null) {\n                    const user = this.users.filter(u => u.id === qParams.viewEvents);\n                    if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {\n                        this.events(user[0]);\n                    }\n                }\n            });\n        });\n    }\n\n    async load() {\n        const resetPasswordPolicy = await this.policyService.getPolicyForOrganization(PolicyType.ResetPassword,\n            this.organizationId);\n        this.orgResetPasswordPolicyEnabled = resetPasswordPolicy?.enabled;\n        super.load();\n    }\n\n    getUsers(): Promise<ListResponse<OrganizationUserUserDetailsResponse>> {\n        return this.apiService.getOrganizationUsers(this.organizationId);\n    }\n\n    deleteUser(id: string): Promise<any> {\n        return this.apiService.deleteOrganizationUser(this.organizationId, id);\n    }\n\n    reinviteUser(id: string): Promise<any> {\n        return this.apiService.postOrganizationUserReinvite(this.organizationId, id);\n    }\n\n    async confirmUser(user: OrganizationUserUserDetailsResponse, publicKey: Uint8Array): Promise<any> {\n        const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n        const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer);\n        const request = new OrganizationUserConfirmRequest();\n        request.key = key.encryptedString;\n        await this.apiService.postOrganizationUserConfirm(this.organizationId, user.id, request);\n    }\n\n    allowResetPassword(orgUser: OrganizationUserUserDetailsResponse): boolean {\n        // Hierarchy check\n        let callingUserHasPermission = false;\n\n        switch (this.callingUserType) {\n            case OrganizationUserType.Owner:\n                callingUserHasPermission = true;\n                break;\n            case OrganizationUserType.Admin:\n                callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner;\n                break;\n            case OrganizationUserType.Custom:\n                callingUserHasPermission = orgUser.type !== OrganizationUserType.Owner\n                    && orgUser.type !== OrganizationUserType.Admin;\n                break;\n        }\n\n        // Final\n        return this.canResetPassword && callingUserHasPermission && this.orgUseResetPassword && this.orgHasKeys\n            && orgUser.resetPasswordEnrolled && this.orgResetPasswordPolicyEnabled\n            && orgUser.status === OrganizationUserStatusType.Confirmed;\n    }\n\n    showEnrolledStatus(orgUser: OrganizationUserUserDetailsResponse): boolean {\n        return this.orgUseResetPassword && orgUser.resetPasswordEnrolled && this.orgResetPasswordPolicyEnabled;\n    }\n\n    async edit(user: OrganizationUserUserDetailsResponse) {\n        const [modal] = await this.modalService.openViewRef(UserAddEditComponent, this.addEditModalRef, comp => {\n            comp.name = this.userNamePipe.transform(user);\n            comp.organizationId = this.organizationId;\n            comp.organizationUserId = user != null ? user.id : null;\n            comp.usesKeyConnector = user?.usesKeyConnector;\n            comp.onSavedUser.subscribe(() => {\n                modal.close();\n                this.load();\n            });\n            comp.onDeletedUser.subscribe(() => {\n                modal.close();\n                this.removeUser(user);\n            });\n        });\n    }\n\n    async groups(user: OrganizationUserUserDetailsResponse) {\n        const [modal] = await this.modalService.openViewRef(UserGroupsComponent, this.groupsModalRef, comp => {\n            comp.name = this.userNamePipe.transform(user);\n            comp.organizationId = this.organizationId;\n            comp.organizationUserId = user != null ? user.id : null;\n            comp.onSavedUser.subscribe(() => {\n                modal.close();\n            });\n        });\n    }\n\n    async bulkRemove() {\n        if (this.actionPromise != null) {\n            return;\n        }\n\n        const [modal] = await this.modalService.openViewRef(BulkRemoveComponent, this.bulkRemoveModalRef, comp => {\n            comp.organizationId = this.organizationId;\n            comp.users = this.getCheckedUsers();\n        });\n\n        await modal.onClosedPromise();\n        await this.load();\n    }\n\n    async bulkReinvite() {\n        if (this.actionPromise != null) {\n            return;\n        }\n\n        const users = this.getCheckedUsers();\n        const filteredUsers = users.filter(u => u.status === OrganizationUserStatusType.Invited);\n\n        if (filteredUsers.length <= 0) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('noSelectedUsersApplicable'));\n            return;\n        }\n\n        try {\n            const request = new OrganizationUserBulkRequest(filteredUsers.map(user => user.id));\n            const response = this.apiService.postManyOrganizationUserReinvite(this.organizationId, request);\n            this.showBulkStatus(users, filteredUsers, response, this.i18nService.t('bulkReinviteMessage'));\n        } catch (e) {\n            this.validationService.showError(e);\n        }\n        this.actionPromise = null;\n    }\n\n    async bulkConfirm() {\n        if (this.actionPromise != null) {\n            return;\n        }\n\n        const [modal] = await this.modalService.openViewRef(BulkConfirmComponent, this.bulkConfirmModalRef, comp => {\n            comp.organizationId = this.organizationId;\n            comp.users = this.getCheckedUsers();\n        });\n\n        await modal.onClosedPromise();\n        await this.load();\n    }\n\n    async events(user: OrganizationUserUserDetailsResponse) {\n        const [modal] = await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, comp => {\n            comp.name = this.userNamePipe.transform(user);\n            comp.organizationId = this.organizationId;\n            comp.entityId = user.id;\n            comp.showUser = false;\n            comp.entity = 'user';\n        });\n    }\n\n    async resetPassword(user: OrganizationUserUserDetailsResponse) {\n        const [modal] = await this.modalService.openViewRef(ResetPasswordComponent, this.resetPasswordModalRef, comp => {\n            comp.name = this.userNamePipe.transform(user);\n            comp.email = user != null ? user.email : null;\n            comp.organizationId = this.organizationId;\n            comp.id = user != null ? user.id : null;\n\n            comp.onPasswordReset.subscribe(() => {\n                modal.close();\n                this.load();\n            });\n        });\n    }\n\n    protected deleteWarningMessage(user: OrganizationUserUserDetailsResponse): string {\n        if (user.usesKeyConnector) {\n            return this.i18nService.t('removeUserConfirmationKeyConnector');\n        }\n\n        return super.deleteWarningMessage(user);\n    }\n\n    private async showBulkStatus(users: OrganizationUserUserDetailsResponse[], filteredUsers: OrganizationUserUserDetailsResponse[],\n        request: Promise<ListResponse<OrganizationUserBulkResponse>>, successfullMessage: string) {\n\n        const [modal, childComponent] = await this.modalService.openViewRef(BulkStatusComponent, this.bulkStatusModalRef, comp => {\n            comp.loading = true;\n        });\n\n        // Workaround to handle closing the modal shortly after it has been opened\n        let close = false;\n        modal.onShown.subscribe(() => {\n            if (close) {\n                modal.close();\n            }\n        });\n\n        try {\n            const response = await request;\n\n            if (modal) {\n                const keyedErrors: any = response.data.filter(r => r.error !== '').reduce((a, x) => ({ ...a, [x.id]: x.error }), {});\n                const keyedFilteredUsers: any = filteredUsers.reduce((a, x) => ({ ...a, [x.id]: x }), {});\n\n                childComponent.users = users.map(user => {\n                    let message = keyedErrors[user.id] ?? successfullMessage;\n                    if (!keyedFilteredUsers.hasOwnProperty(user.id)) {\n                        message = this.i18nService.t('bulkFilteredMessage');\n                    }\n\n                    return {\n                        user: user,\n                        error: keyedErrors.hasOwnProperty(user.id),\n                        message: message,\n                    };\n                });\n                childComponent.loading = false;\n            }\n        } catch {\n            close = true;\n            modal.close();\n        }\n    }\n}\n","<div class=\"page-header d-flex\"> <h1>{{'people' | i18n}}</h1> <div class=\"ml-auto d-flex\"> <div class=\"btn-group btn-group-sm\" role=\"group\"> <button type=\"button\" class=\"btn btn-outline-secondary\" [ngClass]=\"{active: status == null}\" (click)=\"filter(null)\"> {{'all' | i18n}} <span class=\"badge badge-pill badge-info\" *ngIf=\"allCount\">{{allCount}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" [ngClass]=\"{active: status == userStatusType.Invited}\" (click)=\"filter(userStatusType.Invited)\"> {{'invited' | i18n}} <span class=\"badge badge-pill badge-info\" *ngIf=\"invitedCount\">{{invitedCount}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" [ngClass]=\"{active: status == userStatusType.Accepted}\" (click)=\"filter(userStatusType.Accepted)\"> {{'accepted' | i18n}} <span class=\"badge badge-pill badge-warning\" *ngIf=\"acceptedCount\">{{acceptedCount}}</span> </button> </div> <div class=\"ml-3\"> <label class=\"sr-only\" for=\"search\">{{'search' | i18n}}</label> <input type=\"search\" class=\"form-control form-control-sm\" id=\"search\" placeholder=\"{{'search' | i18n}}\" [(ngModel)]=\"searchText\"> </div> <div class=\"dropdown ml-3\" appListDropdown> <button class=\"btn btn-sm btn-outline-secondary dropdown-toggle\" type=\"button\" id=\"bulkActionsButton\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"bulkActionsButton\"> <button class=\"dropdown-item\" appStopClick (click)=\"bulkReinvite()\"> <i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i> {{'reinviteSelected' | i18n}} </button> <button class=\"dropdown-item text-success\" appStopClick (click)=\"bulkConfirm()\" *ngIf=\"showBulkConfirmUsers\"> <i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"></i> {{'confirmSelected' | i18n}} </button> <button class=\"dropdown-item text-danger\" appStopClick (click)=\"bulkRemove()\"> <i class=\"fa fa-fw fa-remove\" aria-hidden=\"true\"></i> {{'remove' | i18n}} </button> <div class=\"dropdown-divider\"></div> <button class=\"dropdown-item\" appStopClick (click)=\"selectAll(true)\"> <i class=\"fa fa-fw fa-check-square-o\" aria-hidden=\"true\"></i> {{'selectAll' | i18n}} </button> <button class=\"dropdown-item\" appStopClick (click)=\"selectAll(false)\"> <i class=\"fa fa-fw fa-minus-square-o\" aria-hidden=\"true\"></i> {{'unselectAll' | i18n}} </button> </div> </div> <button type=\"button\" class=\"btn btn-sm btn-outline-primary ml-3\" (click)=\"invite()\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> {{'inviteUser' | i18n}} </button> </div> </div> <ng-container *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"!loading && (isPaging() ? pagedUsers : users | search:searchText:'name':'email':'id') as searchedUsers\"> <p *ngIf=\"!searchedUsers.length\">{{'noUsersInList' | i18n}}</p> <ng-container *ngIf=\"searchedUsers.length\"> <app-callout type=\"info\" title=\"{{'confirmUsers' | i18n}}\" icon=\"fa-check-circle\" *ngIf=\"showConfirmUsers\"> {{'usersNeedConfirmed' | i18n}} </app-callout> <table class=\"table table-hover table-list\" infiniteScroll [infiniteScrollDistance]=\"1\" [infiniteScrollDisabled]=\"!isPaging()\" (scrolled)=\"loadMore()\"> <tbody> <tr *ngFor=\"let u of searchedUsers\"> <td (click)=\"checkUser(u)\" class=\"table-list-checkbox\"> <input type=\"checkbox\" [(ngModel)]=\"u.checked\" appStopProp> </td> <td width=\"30\"> <app-avatar [data]=\"u | userName\" [email]=\"u.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> <a href=\"#\" appStopClick (click)=\"edit(u)\">{{u.email}}</a> <span class=\"badge badge-secondary\" *ngIf=\"u.status === userStatusType.Invited\">{{'invited' | i18n}}</span> <span class=\"badge badge-warning\" *ngIf=\"u.status === userStatusType.Accepted\">{{'accepted' | i18n}}</span> <small class=\"text-muted d-block\" *ngIf=\"u.name\">{{u.name}}</small> </td> <td> <ng-container *ngIf=\"u.twoFactorEnabled\"> <i class=\"fa fa-lock\" title=\"{{'userUsingTwoStep' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'userUsingTwoStep' | i18n}}</span> </ng-container> <ng-container *ngIf=\"showEnrolledStatus(u)\"> <i class=\"fa fa-key\" title=\"{{'enrolledPasswordReset' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'enrolledPasswordReset' | i18n}}</span> </ng-container> </td> <td> <span *ngIf=\"u.type === userType.Owner\">{{'owner' | i18n}}</span> <span *ngIf=\"u.type === userType.Admin\">{{'admin' | i18n}}</span> <span *ngIf=\"u.type === userType.Manager\">{{'manager' | i18n}}</span> <span *ngIf=\"u.type === userType.User\">{{'user' | i18n}}</span> <span *ngIf=\"u.type === userType.Custom\">{{'custom' | i18n}}</span> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"reinvite(u)\" *ngIf=\"u.status === userStatusType.Invited\"> <i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i> {{'resendInvitation' | i18n}} </a> <a class=\"dropdown-item text-success\" href=\"#\" appStopClick (click)=\"confirm(u)\" *ngIf=\"u.status === userStatusType.Accepted\"> <i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"></i> {{'confirm' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"groups(u)\" *ngIf=\"accessGroups\"> <i class=\"fa fa-fw fa-sitemap\" aria-hidden=\"true\"></i> {{'groups' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"events(u)\" *ngIf=\"accessEvents && u.status === userStatusType.Confirmed\"> <i class=\"fa fa-fw fa-file-text-o\" aria-hidden=\"true\"></i> {{'eventLogs' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"resetPassword(u)\" *ngIf=\"allowResetPassword(u)\"> <i class=\"fa fa-fw fa-key\" aria-hidden=\"true\"></i> {{'resetPassword' | i18n}} </a> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick (click)=\"remove(u)\"> <i class=\"fa fa-fw fa-remove\" aria-hidden=\"true\"></i> {{'remove' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> </ng-container> </ng-container> <ng-template #addEdit></ng-template> <ng-template #groupsTemplate></ng-template> <ng-template #eventsTemplate></ng-template> <ng-template #confirmTemplate></ng-template> <ng-template #resetPasswordTemplate></ng-template> <ng-template #bulkStatusTemplate></ng-template> <ng-template #bulkConfirmTemplate></ng-template> <ng-template #bulkRemoveTemplate></ng-template> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\n@Component({\n    selector: 'app-user-confirm',\n    templateUrl: 'user-confirm.component.html',\n})\nexport class UserConfirmComponent implements OnInit {\n    @Input() name: string;\n    @Input() userId: string;\n    @Input() publicKey: Uint8Array;\n    @Output() onConfirmedUser = new EventEmitter();\n\n    dontAskAgain = false;\n    loading = true;\n    fingerprint: string;\n    formPromise: Promise<any>;\n\n    constructor(private cryptoService: CryptoService, private storageService: StorageService,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        try {\n            if (this.publicKey != null) {\n                const fingerprint = await this.cryptoService.getFingerprint(this.userId, this.publicKey.buffer);\n                if (fingerprint != null) {\n                    this.fingerprint = fingerprint.join('-');\n                }\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.loading = false;\n    }\n\n    async submit() {\n        if (this.loading) {\n            return;\n        }\n\n        if (this.dontAskAgain) {\n            await this.storageService.save(ConstantsService.autoConfirmFingerprints, true);\n        }\n\n        this.onConfirmedUser.emit();\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"confirmUserTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"confirmUserTitle\"> {{'confirmUser' | i18n}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p> {{'fingerprintEnsureIntegrityVerify' | i18n}} <a href=\"https://help.bitwarden.com/article/fingerprint-phrase/\" target=\"_blank\" rel=\"noopener\"> {{'learnMore' | i18n}}</a> </p> <p><code>{{fingerprint}}</code></p> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"dontAskAgain\" name=\"DontAskAgain\" [(ngModel)]=\"dontAskAgain\"> <label class=\"form-check-label\" for=\"dontAskAgain\"> {{'dontAskFingerprintAgain' | i18n}} </label> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'confirm' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    Input,\n    OnInit,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { OrganizationUserBulkConfirmRequest } from 'jslib-common/models/request/organizationUserBulkConfirmRequest';\nimport { OrganizationUserBulkRequest } from 'jslib-common/models/request/organizationUserBulkRequest';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\n\nimport { Utils } from 'jslib-common/misc/utils';\nimport { BulkUserDetails } from './bulk-status.component';\n\n@Component({\n    selector: 'app-bulk-confirm',\n    templateUrl: 'bulk-confirm.component.html',\n})\nexport class BulkConfirmComponent implements OnInit {\n\n    @Input() organizationId: string;\n    @Input() users: BulkUserDetails[];\n\n    excludedUsers: BulkUserDetails[];\n    filteredUsers: BulkUserDetails[];\n    publicKeys: Map<string, Uint8Array> = new Map();\n    fingerprints: Map<string, string> = new Map();\n    statuses: Map<string, string> = new Map();\n\n    loading: boolean = true;\n    done: boolean = false;\n    error: string;\n\n    constructor(protected cryptoService: CryptoService, protected apiService: ApiService,\n      private i18nService: I18nService) { }\n\n    async ngOnInit() {\n        this.excludedUsers = this.users.filter(u => !this.isAccepted(u));\n        this.filteredUsers = this.users.filter(u => this.isAccepted(u));\n\n        if (this.filteredUsers.length <= 0) {\n            this.done = true;\n        }\n\n        const response = await this.getPublicKeys();\n\n        for (const entry of response.data) {\n            const publicKey = Utils.fromB64ToArray(entry.key);\n            const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer);\n            if (fingerprint != null) {\n                this.publicKeys.set(entry.id, publicKey);\n                this.fingerprints.set(entry.id, fingerprint.join('-'));\n            }\n        }\n\n        this.loading = false;\n    }\n\n    async submit() {\n        this.loading = true;\n        try {\n            const key = await this.getCryptoKey();\n            const userIdsWithKeys: any[] = [];\n            for (const user of this.filteredUsers) {\n                const publicKey = this.publicKeys.get(user.id);\n                if (publicKey == null) {\n                    continue;\n                }\n                const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer);\n                userIdsWithKeys.push({\n                    id: user.id,\n                    key: encryptedKey.encryptedString,\n                });\n            }\n            const response = await this.postConfirmRequest(userIdsWithKeys);\n\n            response.data.forEach(entry => {\n                const error = entry.error !== '' ? entry.error : this.i18nService.t('bulkConfirmMessage');\n                this.statuses.set(entry.id, error);\n            });\n\n            this.done = true;\n        } catch (e) {\n            this.error = e.message;\n        }\n        this.loading = false;\n    }\n\n    protected isAccepted(user: BulkUserDetails) {\n        return user.status === OrganizationUserStatusType.Accepted;\n    }\n\n    protected async getPublicKeys() {\n        const request = new OrganizationUserBulkRequest(this.filteredUsers.map(user => user.id));\n        return await this.apiService.postOrganizationUsersPublicKey(this.organizationId, request);\n    }\n\n    protected getCryptoKey() {\n        return this.cryptoService.getOrgKey(this.organizationId);\n    }\n\n    protected async postConfirmRequest(userIdsWithKeys: any[]) {\n        const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);\n        return await this.apiService.postOrganizationUserBulkConfirm(this.organizationId, request);\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"bulkTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"bulkTitle\"> {{'confirmUsers' | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <div class=\"card-body text-center\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> {{'loading' | i18n}} </div> <app-callout type=\"danger\" *ngIf=\"filteredUsers.length <= 0\"> {{'noSelectedUsersApplicable' | i18n}} </app-callout> <app-callout type=\"error\" *ngIf=\"error\"> {{error}} </app-callout> <ng-container *ngIf=\"!loading && !done\"> <p> {{'fingerprintEnsureIntegrityVerify' | i18n}} <a href=\"https://help.bitwarden.com/article/fingerprint-phrase/\" target=\"_blank\" rel=\"noopener\"> {{'learnMore' | i18n}}</a> </p> <table class=\"table table-hover table-list\"> <thead> <tr> <th colspan=\"2\">{{'user' | i18n}}</th> <th>{{'fingerprint' | i18n}}</th> </tr> </thead> <tr *ngFor=\"let user of filteredUsers\"> <td width=\"30\"> <app-avatar [data]=\"user | userName\" [email]=\"user.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> {{user.email}} <small class=\"text-muted d-block\" *ngIf=\"user.name\">{{user.name}}</small> </td> <td> {{fingerprints.get(user.id)}} </td> </tr> <tr *ngFor=\"let user of excludedUsers\"> <td width=\"30\"> <app-avatar [data]=\"user | userName\" [email]=\"user.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> {{user.email}} <small class=\"text-muted d-block\" *ngIf=\"user.name\">{{user.name}}</small> </td> <td> {{'bulkFilteredMessage' | i18n}} </td> </tr> </table> </ng-container> <ng-container *ngIf=\"!loading && done\"> <table class=\"table table-hover table-list\"> <thead> <tr> <th colspan=\"2\">{{'user' | i18n}}</th> <th>{{'status' | i18n}}</th> </tr> </thead> <tr *ngFor=\"let user of filteredUsers\"> <td width=\"30\"> <app-avatar [data]=\"user | userName\" [email]=\"user.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> {{user.email}} <small class=\"text-muted d-block\" *ngIf=\"user.name\">{{user.name}}</small> </td> <td *ngIf=\"statuses.has(user.id)\"> {{statuses.get(user.id)}} </td> <td *ngIf=\"!statuses.has(user.id)\"> {{'bulkFilteredMessage' | i18n}} </td> </tr> </table> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" *ngIf=\"!done\" [disabled]=\"loading\" (click)=\"submit()\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'confirm' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </div> </div> </div> ","import {\n    Component,\n    Input,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { OrganizationUserBulkRequest } from 'jslib-common/models/request/organizationUserBulkRequest';\n\nimport { BulkUserDetails } from './bulk-status.component';\n\n@Component({\n    selector: 'app-bulk-remove',\n    templateUrl: 'bulk-remove.component.html',\n})\nexport class BulkRemoveComponent {\n\n    @Input() organizationId: string;\n    @Input() users: BulkUserDetails[];\n\n    statuses: Map<string, string> = new Map();\n\n    loading: boolean = false;\n    done: boolean = false;\n    error: string;\n\n    constructor(protected apiService: ApiService, protected i18nService: I18nService) { }\n\n    async submit() {\n        this.loading = true;\n        try {\n            const response = await this.deleteUsers();\n\n            response.data.forEach(entry => {\n                const error = entry.error !== '' ? entry.error : this.i18nService.t('bulkRemovedMessage');\n                this.statuses.set(entry.id, error);\n            });\n            this.done = true;\n        } catch (e) {\n            this.error = e.message;\n        }\n\n        this.loading = false;\n    }\n\n    protected async deleteUsers() {\n        const request = new OrganizationUserBulkRequest(this.users.map(user => user.id));\n        return await this.apiService.deleteManyOrganizationUsers(this.organizationId, request);\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"bulkTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"bulkTitle\"> {{'removeUsers' | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <app-callout type=\"danger\" *ngIf=\"users.length <= 0\"> {{'noSelectedUsersApplicable' | i18n}} </app-callout> <app-callout type=\"error\" *ngIf=\"error\"> {{error}} </app-callout> <ng-container *ngIf=\"!done\"> <app-callout type=\"warning\" *ngIf=\"users.length > 0 && !error\"> {{'removeUsersWarning' | i18n}} </app-callout> <table class=\"table table-hover table-list\"> <thead> <tr> <th colspan=\"2\">{{'user' | i18n}}</th> </tr> </thead> <tr *ngFor=\"let user of users\"> <td width=\"30\"> <app-avatar [data]=\"user | userName\" [email]=\"user.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> {{user.email}} <small class=\"text-muted d-block\" *ngIf=\"user.name\">{{user.name}}</small> </td> </tr> </table> </ng-container> <ng-container *ngIf=\"done\"> <table class=\"table table-hover table-list\"> <thead> <tr> <th colspan=\"2\">{{'user' | i18n}}</th> <th>{{'status' | i18n}}</th> </tr> </thead> <tr *ngFor=\"let user of users\"> <td width=\"30\"> <app-avatar [data]=\"user | userName\" [email]=\"user.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> {{user.email}} <small class=\"text-muted d-block\" *ngIf=\"user.name\">{{user.name}}</small> </td> <td *ngIf=\"statuses.has(user.id)\"> {{statuses.get(user.id)}} </td> <td *ngIf=\"!statuses.has(user.id)\"> {{'bulkFilteredMessage' | i18n}} </td> </tr> </table> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" *ngIf=\"!done && users.length > 0\" [disabled]=\"loading\" (click)=\"submit()\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'removeUsers' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </div> </div> </div> ","import { Component } from '@angular/core';\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { ProviderUserStatusType } from 'jslib-common/enums/providerUserStatusType';\n\nexport interface BulkUserDetails {\n    id: string;\n    name: string;\n    email: string;\n    status: OrganizationUserStatusType | ProviderUserStatusType;\n}\n\ntype BulkStatusEntry = {\n    user: BulkUserDetails,\n    error: boolean,\n    message: string,\n};\n\n@Component({\n    selector: 'app-bulk-status',\n    templateUrl: 'bulk-status.component.html',\n})\nexport class BulkStatusComponent {\n\n    users: BulkStatusEntry[];\n    loading: boolean = false;\n\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"bulkTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"bulkTitle\"> {{'bulkConfirmStatus' | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <div class=\"card-body text-center\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> {{'loading' | i18n}} </div> <table class=\"table table-hover table-list\" *ngIf=\"!loading\"> <thead> <tr> <th colspan=\"2\">{{'user' | i18n}}</th> <th>{{'status' | i18n}}</th> </tr> </thead> <tr *ngFor=\"let item of users\"> <td width=\"30\"> <app-avatar [data]=\"item.user | userName\" [email]=\"item.user.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> {{item.user.email}} <small class=\"text-muted d-block\" *ngIf=\"item.user.name\">{{item.user.name}}</small> </td> <td class=\"text-danger\" *ngIf=\"item.error\"> {{item.message}} </td> <td *ngIf=\"!item.error\"> {{item.message}} </td> </tr> </table> </div> <div class=\"modal-footer\"> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </div> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { OrganizationUserResetPasswordRequest } from 'jslib-common/models/request/organizationUserResetPasswordRequest';\n\n@Component({\n    selector: 'app-reset-password',\n    templateUrl: 'reset-password.component.html',\n})\nexport class ResetPasswordComponent implements OnInit {\n    @Input() name: string;\n    @Input() email: string;\n    @Input() id: string;\n    @Input() organizationId: string;\n    @Output() onPasswordReset = new EventEmitter();\n\n    enforcedPolicyOptions: MasterPasswordPolicyOptions;\n    newPassword: string = null;\n    showPassword: boolean = false;\n    masterPasswordScore: number;\n    formPromise: Promise<any>;\n    private newPasswordStrengthTimeout: any;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private platformUtilsService: PlatformUtilsService, private passwordGenerationService: PasswordGenerationService,\n        private policyService: PolicyService, private cryptoService: CryptoService, private logService: LogService) { }\n\n    async ngOnInit() {\n        // Get Enforced Policy Options\n        this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n    }\n\n    get loggedOutWarningName() {\n        return this.name != null ? this.name : this.i18nService.t('thisUser');\n    }\n\n    async generatePassword() {\n        const options = (await this.passwordGenerationService.getOptions())[0];\n        this.newPassword = await this.passwordGenerationService.generatePassword(options);\n        this.updatePasswordStrength();\n    }\n\n    togglePassword() {\n        this.showPassword = !this.showPassword;\n        document.getElementById('newPassword').focus();\n    }\n\n    copy(value: string) {\n        if (value == null) {\n            return;\n        }\n\n        this.platformUtilsService.copyToClipboard(value, { window: window });\n        this.platformUtilsService.showToast('info', null,\n            this.i18nService.t('valueCopied', this.i18nService.t('password')));\n    }\n\n    async submit() {\n        // Validation\n        if (this.newPassword == null || this.newPassword === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassRequired'));\n            return false;\n        }\n\n        if (this.newPassword.length < 8) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassLength'));\n            return false;\n        }\n\n        if (this.enforcedPolicyOptions != null &&\n            !this.policyService.evaluateMasterPassword(this.masterPasswordScore, this.newPassword,\n                this.enforcedPolicyOptions)) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPasswordPolicyRequirementsNotMet'));\n            return;\n        }\n\n        if (this.masterPasswordScore < 3) {\n            const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n                this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n                'warning');\n            if (!result) {\n                return false;\n            }\n        }\n\n        // Get user Information (kdf type, kdf iterations, resetPasswordKey, private key) and change password\n        try {\n            this.formPromise = this.apiService.getOrganizationUserResetPasswordDetails(this.organizationId, this.id)\n                .then(async response => {\n                    if (response == null) {\n                        throw new Error(this.i18nService.t('resetPasswordDetailsError'));\n                    }\n\n                    const kdfType = response.kdf;\n                    const kdfIterations = response.kdfIterations;\n                    const resetPasswordKey = response.resetPasswordKey;\n                    const encryptedPrivateKey = response.encryptedPrivateKey;\n\n                    // Decrypt Organization's encrypted Private Key with org key\n                    const orgSymKey = await this.cryptoService.getOrgKey(this.organizationId);\n                    const decPrivateKey = await this.cryptoService.decryptToBytes(new EncString(encryptedPrivateKey), orgSymKey);\n\n                    // Decrypt User's Reset Password Key to get EncKey\n                    const decValue = await this.cryptoService.rsaDecrypt(resetPasswordKey, decPrivateKey);\n                    const userEncKey = new SymmetricCryptoKey(decValue);\n\n                    // Create new key and hash new password\n                    const newKey = await this.cryptoService.makeKey(this.newPassword, this.email.trim().toLowerCase(),\n                        kdfType, kdfIterations);\n                    const newPasswordHash = await this.cryptoService.hashPassword(this.newPassword, newKey);\n\n                    // Create new encKey for the User\n                    const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n                    // Create request\n                    const request = new OrganizationUserResetPasswordRequest();\n                    request.key = newEncKey[1].encryptedString;\n                    request.newMasterPasswordHash = newPasswordHash;\n\n                    // Change user's password\n                    return this.apiService.putOrganizationUserResetPassword(this.organizationId, this.id, request);\n                });\n\n            await this.formPromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('resetPasswordSuccess'));\n            this.onPasswordReset.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    updatePasswordStrength() {\n        if (this.newPasswordStrengthTimeout != null) {\n            clearTimeout(this.newPasswordStrengthTimeout);\n        }\n        this.newPasswordStrengthTimeout = setTimeout(() => {\n            const strengthResult = this.passwordGenerationService.passwordStrength(this.newPassword,\n                this.getPasswordStrengthUserInput());\n            this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n        }, 300);\n    }\n\n    private getPasswordStrengthUserInput() {\n        let userInput: string[] = [];\n        const atPosition = this.email.indexOf('@');\n        if (atPosition > -1) {\n            userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n        }\n        if (this.name != null && this.name !== '') {\n            userInput = userInput.concat(this.name.trim().toLowerCase().split(' '));\n        }\n        return userInput;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"resetPasswordTitle\"> <div class=\"modal-dialog\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"resetPasswordTitle\"> {{'resetPassword' | i18n}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <app-callout type=\"warning\">{{'resetPasswordLoggedOutWarning' | i18n: loggedOutWarningName}} </app-callout> <app-callout type=\"info\" [enforcedPolicyOptions]=\"enforcedPolicyOptions\" enforcedPolicyMessage=\"{{'resetPasswordMasterPasswordPolicyInEffect' | i18n}}\" *ngIf=\"enforcedPolicyOptions\"> </app-callout> <div class=\"row\"> <div class=\"col form-group\"> <div class=\"d-flex\"> <label for=\"newPassword\">{{'newPassword' | i18n}}</label> <div class=\"ml-auto d-flex\"> <a href=\"#\" class=\"d-block mr-2 fa-icon-above-input\" appStopClick appA11yTitle=\"{{'generatePassword' | i18n}}\" (click)=\"generatePassword()\"> <i class=\"fa fa-lg fa-fw fa-refresh\" aria-hidden=\"true\"></i> </a> </div> </div> <div class=\"input-group mb-1\"> <input id=\"newPassword\" class=\"form-control text-monospace\" appAutofocus type=\"{{showPassword ? 'text' : 'password'}}\" name=\"NewPassword\" [(ngModel)]=\"newPassword\" required appInputVerbatim autocomplete=\"new-password\" (input)=\"updatePasswordStrength()\"> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword()\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'copyPassword' | i18n}}\" (click)=\"copy(newPassword)\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </div> <app-password-strength [score]=\"masterPasswordScore\" [showText]=\"true\"> </app-password-strength> </div> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CollectionData } from 'jslib-common/models/data/collectionData';\nimport { Collection } from 'jslib-common/models/domain/collection';\nimport { OrganizationUserInviteRequest } from 'jslib-common/models/request/organizationUserInviteRequest';\nimport { OrganizationUserUpdateRequest } from 'jslib-common/models/request/organizationUserUpdateRequest';\nimport { SelectionReadOnlyRequest } from 'jslib-common/models/request/selectionReadOnlyRequest';\nimport { CollectionDetailsResponse } from 'jslib-common/models/response/collectionResponse';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { PermissionsApi } from 'jslib-common/models/api/permissionsApi';\n\n@Component({\n    selector: 'app-user-add-edit',\n    templateUrl: 'user-add-edit.component.html',\n})\nexport class UserAddEditComponent implements OnInit {\n    @Input() name: string;\n    @Input() organizationUserId: string;\n    @Input() organizationId: string;\n    @Input() usesKeyConnector: boolean = false;\n    @Output() onSavedUser = new EventEmitter();\n    @Output() onDeletedUser = new EventEmitter();\n\n    loading = true;\n    editMode: boolean = false;\n    title: string;\n    emails: string;\n    type: OrganizationUserType = OrganizationUserType.User;\n    permissions = new PermissionsApi();\n    showCustom = false;\n    access: 'all' | 'selected' = 'selected';\n    collections: CollectionView[] = [];\n    formPromise: Promise<any>;\n    deletePromise: Promise<any>;\n    organizationUserType = OrganizationUserType;\n\n    manageAllCollectionsCheckboxes = [\n        {\n            id: 'createNewCollections',\n            get: () => this.permissions.createNewCollections,\n            set: (v: boolean) => this.permissions.createNewCollections = v,\n        },\n        {\n            id: 'editAnyCollection',\n            get: () => this.permissions.editAnyCollection,\n            set: (v: boolean) => this.permissions.editAnyCollection = v,\n        },\n        {\n            id: 'deleteAnyCollection',\n            get: () => this.permissions.deleteAnyCollection,\n            set: (v: boolean) => this.permissions.deleteAnyCollection = v,\n        },\n    ];\n\n    manageAssignedCollectionsCheckboxes = [\n        {\n            id: 'editAssignedCollections',\n            get: () => this.permissions.editAssignedCollections,\n            set: (v: boolean) => this.permissions.editAssignedCollections = v,\n        },\n        {\n            id: 'deleteAssignedCollections',\n            get: () => this.permissions.deleteAssignedCollections,\n            set: (v: boolean) => this.permissions.deleteAssignedCollections = v,\n        },\n    ];\n\n    get customUserTypeSelected(): boolean {\n        return this.type === OrganizationUserType.Custom;\n    }\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private collectionService: CollectionService,\n        private platformUtilsService: PlatformUtilsService, private logService: LogService) { }\n\n    async ngOnInit() {\n        this.editMode = this.loading = this.organizationUserId != null;\n        await this.loadCollections();\n\n        if (this.editMode) {\n            this.editMode = true;\n            this.title = this.i18nService.t('editUser');\n            try {\n                const user = await this.apiService.getOrganizationUser(this.organizationId, this.organizationUserId);\n                this.access = user.accessAll ? 'all' : 'selected';\n                this.type = user.type;\n                if (user.type === OrganizationUserType.Custom) {\n                    this.permissions = user.permissions;\n                }\n                if (user.collections != null && this.collections != null) {\n                    user.collections.forEach(s => {\n                        const collection = this.collections.filter(c => c.id === s.id);\n                        if (collection != null && collection.length > 0) {\n                            (collection[0] as any).checked = true;\n                            collection[0].readOnly = s.readOnly;\n                            collection[0].hidePasswords = s.hidePasswords;\n                        }\n                    });\n                }\n            } catch (e) {\n                this.logService.error(e);\n            }\n        } else {\n            this.title = this.i18nService.t('inviteUser');\n        }\n\n        this.loading = false;\n    }\n\n    async loadCollections() {\n        const response = await this.apiService.getCollections(this.organizationId);\n        const collections = response.data.map(r =>\n            new Collection(new CollectionData(r as CollectionDetailsResponse)));\n        this.collections = await this.collectionService.decryptMany(collections);\n    }\n\n    check(c: CollectionView, select?: boolean) {\n        (c as any).checked = select == null ? !(c as any).checked : select;\n        if (!(c as any).checked) {\n            c.readOnly = false;\n        }\n    }\n\n    selectAll(select: boolean) {\n        this.collections.forEach(c => this.check(c, select));\n    }\n\n    setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {\n        Object.assign(p, clearPermissions ? new PermissionsApi() : this.permissions);\n        return p;\n    }\n\n    handleDependentPermissions() {\n        // Manage Password Reset must have Manage Users enabled\n        if (this.permissions.manageResetPassword && !this.permissions.manageUsers) {\n            this.permissions.manageUsers = true;\n            (document.getElementById('manageUsers') as HTMLInputElement).checked = true;\n            this.platformUtilsService.showToast('info', null, this.i18nService.t('resetPasswordManageUsers'));\n        }\n    }\n\n    async submit() {\n        let collections: SelectionReadOnlyRequest[] = null;\n        if (this.access !== 'all') {\n            collections = this.collections.filter(c => (c as any).checked)\n                .map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));\n        }\n\n        try {\n            if (this.editMode) {\n                const request = new OrganizationUserUpdateRequest();\n                request.accessAll = this.access === 'all';\n                request.type = this.type;\n                request.collections = collections;\n                request.permissions = this.setRequestPermissions(request.permissions ?? new PermissionsApi(), request.type !== OrganizationUserType.Custom);\n                this.formPromise = this.apiService.putOrganizationUser(this.organizationId, this.organizationUserId,\n                    request);\n            } else {\n                const request = new OrganizationUserInviteRequest();\n                request.emails = this.emails.trim().split(/\\s*,\\s*/);\n                request.accessAll = this.access === 'all';\n                request.type = this.type;\n                request.permissions = this.setRequestPermissions(request.permissions ?? new PermissionsApi(), request.type !== OrganizationUserType.Custom);\n                request.collections = collections;\n                this.formPromise = this.apiService.postOrganizationUserInvite(this.organizationId, request);\n            }\n            await this.formPromise;\n            this.toasterService.popAsync('success', null,\n                this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name));\n            this.onSavedUser.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async delete() {\n        if (!this.editMode) {\n            return;\n        }\n\n        const message = this.usesKeyConnector ? 'removeUserConfirmationKeyConnector' : 'removeUserConfirmation';\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t(message), this.name, this.i18nService.t('yes'), this.i18nService.t('no'), 'warning'\n        );\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.deletePromise = this.apiService.deleteOrganizationUser(this.organizationId, this.organizationUserId);\n            await this.deletePromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.name));\n            this.onDeletedUser.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"userAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"userAddEditTitle\"> {{title}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"modal-body\" *ngIf=\"!loading\"> <ng-container *ngIf=\"!editMode\"> <p>{{'inviteUserDesc' | i18n}}</p> <div class=\"form-group mb-4\"> <label for=\"emails\">{{'email' | i18n}}</label> <input id=\"emails\" class=\"form-control\" type=\"text\" name=\"Emails\" [(ngModel)]=\"emails\" required appAutoFocus> <small class=\"text-muted\">{{'inviteMultipleEmailDesc' | i18n : '20'}}</small> </div> </ng-container> <h3> {{'userType' | i18n}} <a target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\" href=\"https://bitwarden.com/help/article/user-types-access-control/#user-types\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </h3> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"userType\" id=\"userTypeUser\" [value]=\"organizationUserType.User\" [(ngModel)]=\"type\"> <label class=\"form-check-label\" for=\"userTypeUser\"> {{'user' | i18n}} <small>{{'userDesc' | i18n}}</small> </label> </div> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"userType\" id=\"userTypeManager\" [value]=\"organizationUserType.Manager\" [(ngModel)]=\"type\"> <label class=\"form-check-label\" for=\"userTypeManager\"> {{'manager' | i18n}} <small>{{'managerDesc' | i18n}}</small> </label> </div> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"userType\" id=\"userTypeAdmin\" [value]=\"organizationUserType.Admin\" [(ngModel)]=\"type\"> <label class=\"form-check-label\" for=\"userTypeAdmin\"> {{'admin' | i18n}} <small>{{'adminDesc' | i18n}}</small> </label> </div> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"userType\" id=\"userTypeOwner\" [value]=\"organizationUserType.Owner\" [(ngModel)]=\"type\"> <label class=\"form-check-label\" for=\"userTypeOwner\"> {{'owner' | i18n}} <small>{{'ownerDesc' | i18n}}</small> </label> </div> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"userType\" id=\"userTypeCustom\" [value]=\"organizationUserType.Custom\" [(ngModel)]=\"type\"> <label class=\"form-check-label\" for=\"userTypeCustom\"> {{'custom' | i18n}} <small>{{'customDesc' | i18n}}</small> </label> </div> <ng-container *ngIf=\"customUserTypeSelected\"> <h3 class=\"mt-4 d-flex\"> {{'permissions' | i18n}} </h3> <div class=\"row\"> <div class=\"col-6\"> <div class=\"mb-3\"> <label class=\"font-weight-bold mb-0\">Manager Permissions</label> <hr class=\"my-0 mr-2\"/> <app-nested-checkbox parentId=\"manageAssignedCollections\" [checkboxes]=\"manageAssignedCollectionsCheckboxes\"> </app-nested-checkbox> </div> </div> <div class=\"col-6\"> <div class=\"mb-3\"> <label class=\"font-weight-bold mb-0\">Admin Permissions</label> <hr class=\"my-0 mr-2\"/> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"accessEventLogs\" id=\"accessEventLogs\" [(ngModel)]=\"permissions.accessEventLogs\"> <label class=\"form-check-label font-weight-normal\" for=\"accessEventLogs\"> {{'accessEventLogs' | i18n}} </label> </div> </div> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"accessImportExport\" id=\"accessImportExport\" [(ngModel)]=\"permissions.accessImportExport\"> <label class=\"form-check-label font-weight-normal\" for=\"accessImportExport\"> {{'accessImportExport' | i18n}} </label> </div> </div> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"accessReports\" id=\"accessReports\" [(ngModel)]=\"permissions.accessReports\"> <label class=\"form-check-label font-weight-normal\" for=\"accessReports\"> {{'accessReports' | i18n}} </label> </div> </div> <app-nested-checkbox parentId=\"manageAllCollections\" [checkboxes]=\"manageAllCollectionsCheckboxes\"> </app-nested-checkbox> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"manageGroups\" id=\"manageGroups\" [(ngModel)]=\"permissions.manageGroups\"> <label class=\"form-check-label font-weight-normal\" for=\"manageGroups\"> {{'manageGroups' | i18n}} </label> </div> </div> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"manageSso\" id=\"managePolicies\" [(ngModel)]=\"permissions.manageSso\"> <label class=\"form-check-label font-weight-normal\" for=\"manageSso\"> {{'manageSso' | i18n}} </label> </div> </div> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"managePolicies\" id=\"managePolicies\" [(ngModel)]=\"permissions.managePolicies\"> <label class=\"form-check-label font-weight-normal\" for=\"managePolicies\"> {{'managePolicies' | i18n}} </label> </div> </div> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"manageUsers\" id=\"manageUsers\" [(ngModel)]=\"permissions.manageUsers\" (change)=\"handleDependentPermissions()\"> <label class=\"form-check-label font-weight-normal\" for=\"manageUsers\"> {{'manageUsers' | i18n}} </label> </div> </div> <div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" name=\"manageResetPassword\" id=\"manageResetPassword\" [(ngModel)]=\"permissions.manageResetPassword\" (change)=\"handleDependentPermissions()\"> <label class=\"form-check-label font-weight-normal\" for=\"manageResetPassword\"> {{'manageResetPassword' | i18n}} </label> </div> </div> </div> </div> </div> </ng-container> <h3 class=\"mt-4 d-flex\"> <div class=\"mb-3\"> {{'accessControl' | i18n}} <a target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\" href=\"https://bitwarden.com/help/article/user-types-access-control/#access-control\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <div class=\"ml-auto\" *ngIf=\"access === 'selected' && collections && collections.length\"> <button type=\"button\" (click)=\"selectAll(true)\" class=\"btn btn-link btn-sm py-0\"> {{'selectAll' | i18n}} </button> <button type=\"button\" (click)=\"selectAll(false)\" class=\"btn btn-link btn-sm py-0\"> {{'unselectAll' | i18n}} </button> </div> </h3> <div class=\"form-group\" [ngClass]=\"{'mb-0': access !== 'selected'}\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"radio\" name=\"access\" id=\"accessAll\" value=\"all\" [(ngModel)]=\"access\"> <label class=\"form-check-label\" for=\"accessAll\"> {{'userAccessAllItems' | i18n}} </label> </div> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"radio\" name=\"access\" id=\"accessSelected\" value=\"selected\" [(ngModel)]=\"access\"> <label class=\"form-check-label\" for=\"accessSelected\"> {{'userAccessSelectedCollections' | i18n}} </label> </div> </div> <ng-container *ngIf=\"access === 'selected'\"> <div *ngIf=\"!collections || !collections.length\"> {{'noCollectionsInList' | i18n}} </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"collections && collections.length\"> <thead> <tr> <th>&nbsp;</th> <th>{{'name' | i18n}}</th> <th width=\"100\" class=\"text-center\">{{'hidePasswords' | i18n}}</th> <th width=\"100\" class=\"text-center\">{{'readOnly' | i18n}}</th> </tr> </thead> <tbody> <tr *ngFor=\"let c of collections; let i = index\"> <td class=\"table-list-checkbox\" (click)=\"check(c)\"> <input type=\"checkbox\" [(ngModel)]=\"c.checked\" name=\"Collection[{{i}}].Checked\" appStopProp> </td> <td (click)=\"check(c)\"> {{c.name}} </td> <td class=\"text-center\"> <input type=\"checkbox\" [(ngModel)]=\"c.hidePasswords\" name=\"Collection[{{i}}].HidePasswords\" [disabled]=\"!c.checked\"> </td> <td class=\"text-center\"> <input type=\"checkbox\" [(ngModel)]=\"c.readOnly\" name=\"Collection[{{i}}].ReadOnly\" [disabled]=\"!c.checked\"> </td> </tr> </tbody> </table> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\"> {{'cancel' | i18n}} </button> <div class=\"ml-auto\"> <button #deleteBtn type=\"button\" (click)=\"delete()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{'delete' | i18n}}\" *ngIf=\"editMode\" [disabled]=\"deleteBtn.loading\" [appApiAction]=\"deletePromise\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </div> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n    selector: 'app-nested-checkbox',\n    templateUrl: 'nested-checkbox.component.html',\n})\nexport class NestedCheckboxComponent {\n    @Input() parentId: string;\n    @Input() checkboxes: { id: string, get: () => boolean, set: (v: boolean) => void; }[];\n    @Output() onSavedUser = new EventEmitter();\n    @Output() onDeletedUser = new EventEmitter();\n\n    get parentIndeterminate() {\n        return !this.parentChecked &&\n            this.checkboxes.some(c => c.get());\n    }\n\n    get parentChecked() {\n        return this.checkboxes.every(c => c.get());\n    }\n\n    set parentChecked(value: boolean) {\n        this.checkboxes.forEach(c => {\n            c.set(value);\n        });\n    }\n\n    pascalize(s: string) {\n        return Utils.camelToPascalCase(s);\n    }\n}\n","<div class=\"form-group mb-0\"> <div class=\"form-check mt-1 form-check-block\"> <input class=\"form-check-input\" type=\"checkbox\" [name]=\"pascalize(parentId)\" [id]=\"parentId\" [(ngModel)]=\"parentChecked\" [indeterminate]=\"parentIndeterminate\"> <label class=\"form-check-label font-weight-normal\" [for]=\"parentId\"> {{parentId | i18n}} </label> </div> <div class=\"form-group form-group-child-check mb-0\"> <div class=\"form-check mt-1\" *ngFor=\"let c of checkboxes\"> <input class=\"form-check-input\" type=\"checkbox\" [name]=\"pascalize(c.id)\" [id]=\"c.id\" [ngModel]=\"c.get()\" (ngModelChange)=\"c.set($event)\"> <label class=\"form-check-label font-weight-normal\" [for]=\"c.id\"> {{c.id | i18n}} </label> </div> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { OrganizationUserUpdateGroupsRequest } from 'jslib-common/models/request/organizationUserUpdateGroupsRequest';\nimport { GroupResponse } from 'jslib-common/models/response/groupResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n    selector: 'app-user-groups',\n    templateUrl: 'user-groups.component.html',\n})\nexport class UserGroupsComponent implements OnInit {\n    @Input() name: string;\n    @Input() organizationUserId: string;\n    @Input() organizationId: string;\n    @Output() onSavedUser = new EventEmitter();\n\n    loading = true;\n    groups: GroupResponse[] = [];\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    async ngOnInit() {\n        const groupsResponse = await this.apiService.getGroups(this.organizationId);\n        const groups = groupsResponse.data.map(r => r);\n        groups.sort(Utils.getSortFunction(this.i18nService, 'name'));\n        this.groups = groups;\n\n        try {\n            const userGroups = await this.apiService.getOrganizationUserGroups(\n                this.organizationId, this.organizationUserId);\n            if (userGroups != null && this.groups != null) {\n                userGroups.forEach(ug => {\n                    const group = this.groups.filter(g => g.id === ug);\n                    if (group != null && group.length > 0) {\n                        (group[0] as any).checked = true;\n                    }\n                });\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        this.loading = false;\n    }\n\n    check(g: GroupResponse, select?: boolean) {\n        (g as any).checked = select == null ? !(g as any).checked : select;\n        if (!(g as any).checked) {\n            (g as any).readOnly = false;\n        }\n    }\n\n    selectAll(select: boolean) {\n        this.groups.forEach(g => this.check(g, select));\n    }\n\n    async submit() {\n        const request = new OrganizationUserUpdateGroupsRequest();\n        request.groupIds = this.groups.filter(g => (g as any).checked).map(g => g.id);\n\n        try {\n            this.formPromise = this.apiService.putOrganizationUserGroups(this.organizationId, this.organizationUserId,\n                request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('editedGroupsForUser', this.name));\n            this.onSavedUser.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"groupAccessTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"groupAccessTitle\"> {{'groupAccess' | i18n}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"modal-body\" *ngIf=\"!loading\"> <p>{{'groupAccessUserDesc' | i18n}}</p> <div *ngIf=\"!groups || !groups.length\"> {{'noGroupsInList' | i18n}} </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"groups && groups.length\"> <tbody> <tr *ngFor=\"let g of groups; let i = index\"> <td class=\"table-list-checkbox\" (click)=\"check(g)\"> <input type=\"checkbox\" [(ngModel)]=\"g.checked\" name=\"Groups[{{i}}].Checked\" appStopProp> </td> <td (click)=\"check(g)\"> {{g.name}} </td> </tr> </tbody> </table> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { PolicyResponse } from 'jslib-common/models/response/policyResponse';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { PolicyEditComponent } from './policy-edit.component';\n\nimport { PolicyListService } from '../../services/policy-list.service';\nimport { BasePolicy } from '../policies/base-policy.component';\n\n@Component({\n    selector: 'app-org-policies',\n    templateUrl: 'policies.component.html',\n})\nexport class PoliciesComponent implements OnInit {\n    @ViewChild('editTemplate', { read: ViewContainerRef, static: true }) editModalRef: ViewContainerRef;\n\n    loading = true;\n    organizationId: string;\n    policies: BasePolicy[];\n    organization: Organization;\n\n    private orgPolicies: PolicyResponse[];\n    private policiesEnabledMap: Map<PolicyType, boolean> = new Map<PolicyType, boolean>();\n\n    constructor(private apiService: ApiService, private route: ActivatedRoute,\n        private modalService: ModalService, private userService: UserService,\n        private policyListService: PolicyListService, private router: Router) { }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            this.organization = await this.userService.getOrganization(this.organizationId);\n            if (this.organization == null || !this.organization.usePolicies) {\n                this.router.navigate(['/organizations', this.organizationId]);\n                return;\n            }\n\n            this.policies = this.policyListService.getPolicies();\n\n            await this.load();\n\n            // Handle policies component launch from Event message\n            this.route.queryParams.pipe(first()).subscribe(async qParams => {\n                if (qParams.policyId != null) {\n                    const policyIdFromEvents: string = qParams.policyId;\n                    for (const orgPolicy of this.orgPolicies) {\n                        if (orgPolicy.id === policyIdFromEvents) {\n                            for (let i = 0; i < this.policies.length; i++) {\n                                if (this.policies[i].type === orgPolicy.type) {\n                                    this.edit(this.policies[i]);\n                                    break;\n                                }\n                            }\n                            break;\n                        }\n                    }\n                }\n            });\n        });\n    }\n\n    async load() {\n        const response = await this.apiService.getPolicies(this.organizationId);\n        this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];\n        this.orgPolicies.forEach(op => {\n            this.policiesEnabledMap.set(op.type, op.enabled);\n        });\n\n        this.loading = false;\n    }\n\n    async edit(policy: BasePolicy) {\n        const [modal] = await this.modalService.openViewRef(PolicyEditComponent, this.editModalRef, comp => {\n            comp.policy = policy;\n            comp.organizationId = this.organizationId;\n            comp.policiesEnabledMap = this.policiesEnabledMap;\n            comp.onSavedPolicy.subscribe(() => {\n                modal.close();\n                this.load();\n            });\n        });\n    }\n}\n","<div class=\"page-header d-flex\"> <h1>{{'policies' | i18n}}</h1> </div> <ng-container *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <table class=\"table table-hover table-list\" *ngIf=\"!loading\"> <tbody> <tr *ngFor=\"let p of policies\"> <td *ngIf=\"p.display(organization)\"> <a href=\"#\" appStopClick (click)=\"edit(p)\">{{p.name | i18n}}</a> <span class=\"badge badge-success\" *ngIf=\"policiesEnabledMap.get(p.type)\">{{'enabled' | i18n}}</span> <small class=\"text-muted d-block\">{{p.description | i18n}}</small> </td> </tr> </tbody> </table> <ng-template #editTemplate></ng-template> ","import {\n    ChangeDetectorRef,\n    Component,\n    ComponentFactoryResolver,\n    EventEmitter,\n    Input,\n    Output,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\nimport { PolicyRequest } from 'jslib-common/models/request/policyRequest';\n\nimport { PolicyResponse } from 'jslib-common/models/response/policyResponse';\n\nimport { BasePolicy, BasePolicyComponent } from '../policies/base-policy.component';\n\n@Component({\n    selector: 'app-policy-edit',\n    templateUrl: 'policy-edit.component.html',\n})\nexport class PolicyEditComponent {\n    @Input() policy: BasePolicy;\n    @Input() organizationId: string;\n    @Input() policiesEnabledMap: Map<PolicyType, boolean> = new Map<PolicyType, boolean>();\n    @Output() onSavedPolicy = new EventEmitter();\n\n    @ViewChild('policyForm', { read: ViewContainerRef, static: true }) policyFormRef: ViewContainerRef;\n\n    policyType = PolicyType;\n    loading = true;\n    enabled = false;\n    formPromise: Promise<any>;\n    defaultTypes: any[];\n    policyComponent: BasePolicyComponent;\n\n    private policyResponse: PolicyResponse;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private componentFactoryResolver: ComponentFactoryResolver,\n        private cdr: ChangeDetectorRef, private logService: LogService) {\n    }\n\n    async ngAfterViewInit() {\n        await this.load();\n        this.loading = false;\n\n        const factory = this.componentFactoryResolver.resolveComponentFactory(this.policy.component);\n        this.policyComponent = this.policyFormRef.createComponent(factory).instance as BasePolicyComponent;\n        this.policyComponent.policy = this.policy;\n        this.policyComponent.policyResponse = this.policyResponse;\n\n        this.cdr.detectChanges();\n    }\n\n    async load() {\n        try {\n            this.policyResponse = await this.apiService.getPolicy(this.organizationId, this.policy.type);\n        } catch (e) {\n            if (e.statusCode === 404) {\n                this.policyResponse = new PolicyResponse({Enabled: false});\n            } else {\n                throw e;\n            }\n        }\n    }\n\n    async submit() {\n        let request: PolicyRequest;\n        try {\n            request = await this.policyComponent.buildRequest(this.policiesEnabledMap);\n        } catch (e) {\n            this.toasterService.pop('error', null, e);\n            return;\n        }\n\n        try {\n            this.formPromise = this.apiService.putPolicy(this.organizationId, this.policy.type, request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('editedPolicyId', this.i18nService.t(this.policy.name)));\n            this.onSavedPolicy.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"policiesEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"policiesEditTitle\">{{'editPolicy' | i18n}} - {{policy.name | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <div class=\"modal-body\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div [hidden]=\"loading\"> <p>{{policy.description | i18n}}</p> <ng-template #policyForm></ng-template> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\"> {{'cancel' | i18n}} </button> </div> </form> </div> </div> ","import {\n    Component,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport {\n    ActivatedRoute,\n    Router\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\n\nimport { OrganizationKeysRequest } from 'jslib-common/models/request/organizationKeysRequest';\nimport { OrganizationUpdateRequest } from 'jslib-common/models/request/organizationUpdateRequest';\n\nimport { OrganizationResponse } from 'jslib-common/models/response/organizationResponse';\n\nimport { ApiKeyComponent } from '../../settings/api-key.component';\nimport { PurgeVaultComponent } from '../../settings/purge-vault.component';\nimport { TaxInfoComponent } from '../../settings/tax-info.component';\n\nimport { DeleteOrganizationComponent } from './delete-organization.component';\n\n@Component({\n    selector: 'app-org-account',\n    templateUrl: 'account.component.html',\n})\nexport class AccountComponent {\n    @ViewChild('deleteOrganizationTemplate', { read: ViewContainerRef, static: true }) deleteModalRef: ViewContainerRef;\n    @ViewChild('purgeOrganizationTemplate', { read: ViewContainerRef, static: true }) purgeModalRef: ViewContainerRef;\n    @ViewChild('apiKeyTemplate', { read: ViewContainerRef, static: true }) apiKeyModalRef: ViewContainerRef;\n    @ViewChild('rotateApiKeyTemplate', { read: ViewContainerRef, static: true }) rotateApiKeyModalRef: ViewContainerRef;\n    @ViewChild(TaxInfoComponent) taxInfo: TaxInfoComponent;\n\n    selfHosted = false;\n    loading = true;\n    canUseApi = false;\n    org: OrganizationResponse;\n    formPromise: Promise<any>;\n    taxFormPromise: Promise<any>;\n\n    private organizationId: string;\n\n    constructor(private modalService: ModalService,\n        private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private route: ActivatedRoute,\n        private syncService: SyncService, private platformUtilsService: PlatformUtilsService,\n        private cryptoService: CryptoService, private logService: LogService,\n        private router: Router) { }\n\n    async ngOnInit() {\n        this.selfHosted = this.platformUtilsService.isSelfHost();\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            try {\n                this.org = await this.apiService.getOrganization(this.organizationId);\n                this.canUseApi = this.org.useApi;\n            } catch (e) {\n                this.logService.error(e);\n            }\n        });\n        this.loading = false;\n    }\n\n    async submit() {\n        try {\n            const request = new OrganizationUpdateRequest();\n            request.name = this.org.name;\n            request.businessName = this.org.businessName;\n            request.billingEmail = this.org.billingEmail;\n            request.identifier = this.org.identifier;\n\n            // Backfill pub/priv key if necessary\n            if (!this.org.hasPublicAndPrivateKeys) {\n                const orgShareKey = await this.cryptoService.getOrgKey(this.organizationId);\n                const orgKeys = await this.cryptoService.makeKeyPair(orgShareKey);\n                request.keys = new OrganizationKeysRequest(orgKeys[0], orgKeys[1].encryptedString);\n            }\n\n            this.formPromise = this.apiService.putOrganization(this.organizationId, request).then(() => {\n                return this.syncService.fullSync(true);\n            });\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('organizationUpdated'));\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async submitTaxInfo() {\n        this.taxFormPromise = this.taxInfo.submitTaxInfo();\n        await this.taxFormPromise;\n        this.toasterService.popAsync('success', null, this.i18nService.t('taxInfoUpdated'));\n    }\n\n    async deleteOrganization() {\n        await this.modalService.openViewRef(DeleteOrganizationComponent, this.deleteModalRef, comp => {\n            comp.organizationId = this.organizationId;\n            comp.onSuccess.subscribe(() => {\n                this.router.navigate(['/']);\n            });\n        });\n    }\n\n    async purgeVault() {\n        await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef, comp => {\n            comp.organizationId = this.organizationId;\n        });\n    }\n\n    async viewApiKey() {\n        await this.modalService.openViewRef(ApiKeyComponent, this.apiKeyModalRef, comp => {\n            comp.keyType = 'organization';\n            comp.entityId = this.organizationId;\n            comp.postKey = this.apiService.postOrganizationApiKey.bind(this.apiService);\n            comp.scope = 'api.organization';\n            comp.grantType = 'client_credentials';\n            comp.apiKeyTitle = 'apiKey';\n            comp.apiKeyWarning = 'apiKeyWarning';\n            comp.apiKeyDescription = 'apiKeyDesc';\n        });\n    }\n\n    async rotateApiKey() {\n        await this.modalService.openViewRef(ApiKeyComponent, this.rotateApiKeyModalRef, comp => {\n            comp.keyType = 'organization';\n            comp.isRotation = true;\n            comp.entityId = this.organizationId;\n            comp.postKey = this.apiService.postOrganizationRotateApiKey.bind(this.apiService);\n            comp.scope = 'api.organization';\n            comp.grantType = 'client_credentials';\n            comp.apiKeyTitle = 'apiKey';\n            comp.apiKeyWarning = 'apiKeyWarning';\n            comp.apiKeyDescription = 'apiKeyRotateDesc';\n        });\n    }\n}\n","<div class=\"page-header\"> <h1>{{'myOrganization' | i18n}}</h1> </div> <div *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <form *ngIf=\"org && !loading\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"name\">{{'organizationName' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"org.name\" [disabled]=\"selfHosted\"> </div> <div class=\"form-group\"> <label for=\"billingEmail\">{{'billingEmail' | i18n}}</label> <input id=\"billingEmail\" class=\"form-control\" type=\"text\" name=\"BillingEmail\" [(ngModel)]=\"org.billingEmail\" [disabled]=\"selfHosted\"> </div> <div class=\"form-group\"> <label for=\"businessName\">{{'businessName' | i18n}}</label> <input id=\"businessName\" class=\"form-control\" type=\"text\" name=\"BusinessName\" [(ngModel)]=\"org.businessName\" [disabled]=\"selfHosted\"> </div> <div class=\"form-group\"> <label for=\"identifier\">{{'identifier' | i18n}}</label> <input id=\"identifier\" class=\"form-control\" type=\"text\" name=\"Identifier\" [(ngModel)]=\"org.identifier\"> </div> </div> <div class=\"col-6\"> <app-avatar data=\"{{org.name}}\" dynamic=\"true\" size=\"75\" fontSize=\"35\"></app-avatar> </div> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> </form> <ng-container *ngIf=\"canUseApi\"> <div class=\"secondary-header border-0 mb-0\"> <h1>{{'apiKey' | i18n}}</h1> </div> <p> {{'apiKeyDesc' | i18n}} <a href=\"https://docs.bitwarden.com\" target=\"_blank\" rel=\"noopener\"> {{'learnMore' | i18n}} </a> </p> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"viewApiKey()\">{{'viewApiKey' | i18n}}</button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"rotateApiKey()\">{{'rotateApiKey' | i18n}}</button> </ng-container> <div class=\"secondary-header border-0 mb-0\"> <h1>{{'taxInformation' | i18n}}</h1> </div> <p>{{'taxInformationDesc' | i18n}}</p> <div *ngIf=\"!org || loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <form *ngIf=\"org && !loading\" #formTax (ngSubmit)=\"submitTaxInfo()\" [appApiAction]=\"taxFormPromise\" ngNativeValidate> <app-tax-info></app-tax-info> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"formTax.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> </form> <div class=\"secondary-header text-danger border-0 mb-0\"> <h1>{{'dangerZone' | i18n}}</h1> </div> <div class=\"card border-danger\"> <div class=\"card-body\"> <p>{{'dangerZoneDesc' | i18n}}</p> <button type=\"button\" class=\"btn btn-outline-danger\" (click)=\"deleteOrganization()\">{{'deleteOrganization' | i18n}}</button> <button type=\"button\" class=\"btn btn-outline-danger\" (click)=\"purgeVault()\">{{'purgeVault' | i18n}}</button> </div> </div> <ng-template #deleteOrganizationTemplate></ng-template> <ng-template #purgeOrganizationTemplate></ng-template> <ng-template #apiKeyTemplate></ng-template> <ng-template #rotateApiKeyTemplate></ng-template> ","import { TaxInfoUpdateRequest } from './taxInfoUpdateRequest';\n\nexport class OrganizationTaxInfoUpdateRequest extends TaxInfoUpdateRequest {\n    taxId: string;\n    line1: string;\n    line2: string;\n    city: string;\n    state: string;\n}\n","export class TaxInfoUpdateRequest {\n    country: string;\n    postalCode: string;\n}\n","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { UserBillingComponent } from '../../settings/user-billing.component';\n\n@Component({\n    selector: 'app-org-billing',\n    templateUrl: '../../settings/user-billing.component.html',\n})\nexport class OrganizationBillingComponent extends UserBillingComponent implements OnInit {\n    constructor(apiService: ApiService, i18nService: I18nService, toasterService: ToasterService,\n        private route: ActivatedRoute, platformUtilsService: PlatformUtilsService,\n        logService: LogService) {\n        super(apiService, i18nService, toasterService, platformUtilsService, logService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            await this.load();\n            this.firstLoaded = true;\n        });\n    }\n}\n","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { OrganizationSubscriptionResponse } from 'jslib-common/models/response/organizationSubscriptionResponse';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PlanType } from 'jslib-common/enums/planType';\n\n@Component({\n    selector: 'app-org-subscription',\n    templateUrl: 'organization-subscription.component.html',\n})\nexport class OrganizationSubscriptionComponent implements OnInit {\n    loading = false;\n    firstLoaded = false;\n    organizationId: string;\n    adjustSeatsAdd = true;\n    showAdjustSeats = false;\n    showAdjustSeatAutoscale = false;\n    adjustStorageAdd = true;\n    showAdjustStorage = false;\n    showUpdateLicense = false;\n    showDownloadLicense = false;\n    showChangePlan = false;\n    sub: OrganizationSubscriptionResponse;\n    selfHosted = false;\n\n    userOrg: Organization;\n\n    removeSponsorshipPromise: Promise<any>;\n    cancelPromise: Promise<any>;\n    reinstatePromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n        private i18nService: I18nService, private toasterService: ToasterService,\n        private messagingService: MessagingService, private route: ActivatedRoute,\n        private userService: UserService, private logService: LogService) {\n        this.selfHosted = platformUtilsService.isSelfHost();\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            await this.load();\n            this.firstLoaded = true;\n        });\n    }\n\n    async load() {\n        if (this.loading) {\n            return;\n        }\n\n        this.loading = true;\n        this.userOrg = await this.userService.getOrganization(this.organizationId);\n        this.sub = await this.apiService.getOrganizationSubscription(this.organizationId);\n        this.loading = false;\n    }\n\n    async reinstate() {\n        if (this.loading) {\n            return;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('reinstateConfirmation'),\n            this.i18nService.t('reinstateSubscription'), this.i18nService.t('yes'), this.i18nService.t('cancel'));\n        if (!confirmed) {\n            return;\n        }\n\n        try {\n            this.reinstatePromise = this.apiService.postOrganizationReinstate(this.organizationId);\n            await this.reinstatePromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('reinstated'));\n            this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async cancel() {\n        if (this.loading) {\n            return;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('cancelConfirmation'),\n            this.i18nService.t('cancelSubscription'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return;\n        }\n\n        try {\n            this.cancelPromise = this.apiService.postOrganizationCancel(this.organizationId);\n            await this.cancelPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription'));\n            this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async changePlan() {\n        this.showChangePlan = !this.showChangePlan;\n    }\n\n    closeChangePlan(changed: boolean) {\n        this.showChangePlan = false;\n    }\n\n    downloadLicense() {\n        this.showDownloadLicense = !this.showDownloadLicense;\n    }\n\n    closeDownloadLicense() {\n        this.showDownloadLicense = false;\n    }\n\n    updateLicense() {\n        if (this.loading) {\n            return;\n        }\n        this.showUpdateLicense = true;\n    }\n\n    closeUpdateLicense(updated: boolean) {\n        this.showUpdateLicense = false;\n        if (updated) {\n            this.load();\n            this.messagingService.send('updatedOrgLicense');\n        }\n    }\n\n    subscriptionAdjusted() {\n        this.load();\n    }\n\n    adjustStorage(add: boolean) {\n        this.adjustStorageAdd = add;\n        this.showAdjustStorage = true;\n    }\n\n    closeStorage(load: boolean) {\n        this.showAdjustStorage = false;\n        if (load) {\n            this.load();\n        }\n    }\n\n    async removeSponsorship() {\n        const isConfirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('removeSponsorshipConfirmation'),\n            this.i18nService.t('removeSponsorship'),\n            this.i18nService.t('remove'), this.i18nService.t('cancel'), 'warning');\n\n        if (!isConfirmed) {\n            return;\n        }\n\n        try {\n            this.removeSponsorshipPromise = this.apiService.deleteRemoveSponsorship(this.organizationId);\n            await this.removeSponsorshipPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('removeSponsorshipSuccess'));\n            await this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    get isExpired() {\n        return this.sub != null && this.sub.expiration != null &&\n            new Date(this.sub.expiration) < new Date();\n    }\n\n    get subscriptionMarkedForCancel() {\n        return this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate;\n    }\n\n    get subscription() {\n        return this.sub != null ? this.sub.subscription : null;\n    }\n\n    get nextInvoice() {\n        return this.sub != null ? this.sub.upcomingInvoice : null;\n    }\n\n    get storagePercentage() {\n        return this.sub != null && this.sub.maxStorageGb ?\n            +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2) : 0;\n    }\n\n    get storageProgressWidth() {\n        return this.storagePercentage < 5 ? 5 : 0;\n    }\n\n    get billingInterval() {\n        const monthly = !this.sub.plan.isAnnual;\n        return monthly ? 'month' : 'year';\n    }\n\n    get storageGbPrice() {\n        return this.sub.plan.additionalStoragePricePerGb;\n    }\n\n    get seatPrice() {\n        return this.sub.plan.seatPrice;\n    }\n\n    get seats() {\n        return this.sub.seats;\n    }\n\n    get maxAutoscaleSeats() {\n        return this.sub.maxAutoscaleSeats;\n    }\n\n    get canAdjustSeats() {\n        return this.sub.plan.hasAdditionalSeatsOption;\n    }\n\n    get isSponsoredSubscription(): boolean {\n        return this.sub.subscription?.items.some(i => i.sponsoredSubscriptionItem);\n    }\n\n    get canDownloadLicense() {\n        return (this.sub.planType !== PlanType.Free && this.subscription == null) ||\n            (this.subscription != null && !this.subscription.cancelled);\n    }\n\n    get subscriptionDesc() {\n        if (this.sub.planType === PlanType.Free) {\n            return this.i18nService.t('subscriptionFreePlan', this.sub.seats.toString());\n        } else if (this.sub.planType === PlanType.FamiliesAnnually || this.sub.planType === PlanType.FamiliesAnnually2019) {\n            if (this.isSponsoredSubscription) {\n                return this.i18nService.t('subscriptionSponsoredFamiliesPlan', this.sub.seats.toString());\n            } else {\n                return this.i18nService.t('subscriptionFamiliesPlan', this.sub.seats.toString());\n            }\n        } else if (this.sub.maxAutoscaleSeats === this.sub.seats && this.sub.seats != null) {\n            return this.i18nService.t('subscriptionMaxReached', this.sub.seats.toString());\n        } else if (this.sub.maxAutoscaleSeats == null) {\n            return this.i18nService.t('subscriptionUserSeatsUnlimitedAutoscale');\n        } else {\n            return this.i18nService.t('subscriptionUserSeatsLimitedAutoscale', this.sub.maxAutoscaleSeats.toString());\n        }\n    }\n\n    get showChangePlanButton() {\n        return this.subscription == null && this.sub.planType === PlanType.Free && !this.showChangePlan;\n    }\n}\n","<div class=\"page-header\"> <h1> {{'subscription' | i18n}} <small *ngIf=\"firstLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </small> </h1> </div> <ng-container *ngIf=\"!firstLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"sub\"> <app-callout type=\"warning\" title=\"{{'canceled' | i18n}}\" *ngIf=\"subscription && subscription.cancelled\"> {{'subscriptionCanceled' | i18n}}</app-callout> <app-callout type=\"warning\" title=\"{{'pendingCancellation' | i18n}}\" *ngIf=\"subscriptionMarkedForCancel\"> <p>{{'subscriptionPendingCanceled' | i18n}}</p> <button #reinstateBtn type=\"button\" class=\"btn btn-outline-secondary btn-submit\" (click)=\"reinstate()\" [appApiAction]=\"reinstatePromise\" [disabled]=\"reinstateBtn.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'reinstateSubscription' | i18n}}</span> </button> </app-callout> <ng-container *ngIf=\"!selfHosted\"> <div class=\"row\"> <div class=\"col-4\"> <dl> <dt>{{'billingPlan' | i18n}}</dt> <dd>{{sub.plan.name}}</dd> <ng-container *ngIf=\"subscription\"> <dt>{{'status' | i18n}}</dt> <dd> <span class=\"text-capitalize\">{{isSponsoredSubscription ? 'sponsored' : subscription.status || '-'}}</span> <span class=\"badge badge-warning\" *ngIf=\"subscriptionMarkedForCancel\">{{'pendingCancellation' | i18n}}</span> </dd> <dt>{{'nextCharge' | i18n}}</dt> <dd>{{nextInvoice ? ((nextInvoice.date | date: 'mediumDate') + ', ' + (nextInvoice.amount | currency:'$')) : '-'}} </dd> </ng-container> </dl> </div> <div class=\"col-8\" *ngIf=\"subscription\"> <strong class=\"d-block mb-1\">{{'details' | i18n}}</strong> <table class=\"table\"> <tbody> <tr *ngFor=\"let i of subscription.items\"> <td> {{i.name}} {{i.quantity > 1 ? '&times;' + i.quantity : ''}} @ {{i.amount | currency:'$'}} </td> <td> {{(i.quantity * i.amount) | currency:'$'}} /{{i.interval | i18n}} </td> </tr> </tbody> </table> </div> <ng-container *ngIf=\"userOrg?.providerId != null\"> <div class=\"col-sm\"> <dl> <dt>{{'provider' | i18n}}</dt> <dd>{{'yourProviderIs' | i18n : userOrg.providerName}}</dd> </dl> </div> </ng-container> </div> <ng-container> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"changePlan()\" *ngIf=\"showChangePlanButton\"> {{'changeBillingPlan' | i18n}} </button> <app-change-plan [organizationId]=\"organizationId\" (onChanged)=\"closeChangePlan(true)\" (onCanceled)=\"closeChangePlan(false)\" *ngIf=\"showChangePlan\"></app-change-plan> </ng-container> <h2 class=\"spaced-header\">{{'manageSubscription' | i18n}}</h2> <p class=\"mb-4\">{{subscriptionDesc}}</p> <ng-container *ngIf=\"subscription && canAdjustSeats && !subscription.cancelled && !subscriptionMarkedForCancel\"> <div class=\"mt-3\"> <app-adjust-subscription [seatPrice]=\"seatPrice\" [organizationId]=\"organizationId\" [interval]=\"billingInterval\" [currentSeatCount]=\"seats\" [maxAutoscaleSeats]=\"maxAutoscaleSeats\" (onAdjusted)=\"subscriptionAdjusted()\"> </app-adjust-subscription> </div> </ng-container> <button #removeSponsorshipBtn type=\"button\" class=\"btn btn-outline-danger btn-submit\" (click)=\"removeSponsorship()\" [appApiAction]=\"removeSponsorshipPromise\" [disabled]=\"removeSponsorshipBtn.loading\" *ngIf=\"isSponsoredSubscription\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'removeSponsorship' | i18n}}</span> </button> <h2 class=\"spaced-header\">{{'storage' | i18n}}</h2> <p>{{'subscriptionStorage' | i18n : sub.maxStorageGb || 0 : sub.storageName || '0 MB'}}</p> <div class=\"progress\"> <div class=\"progress-bar bg-success\" role=\"progressbar\" [ngStyle]=\"{width: storageProgressWidth + '%' }\" [attr.aria-valuenow]=\"storagePercentage\" aria-valuemin=\"0\" aria-valuemax=\"100\"> {{(storagePercentage / 100) | percent}}</div> </div> <ng-container *ngIf=\"subscription && !subscription.cancelled && !subscriptionMarkedForCancel\"> <div class=\"mt-3\"> <div class=\"d-flex\" *ngIf=\"!showAdjustStorage\"> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"adjustStorage(true)\"> {{'addStorage' | i18n}} </button> <button type=\"button\" class=\"btn btn-outline-secondary ml-1\" (click)=\"adjustStorage(false)\"> {{'removeStorage' | i18n}} </button> </div> <app-adjust-storage [storageGbPrice]=\"storageGbPrice\" [add]=\"adjustStorageAdd\" [organizationId]=\"organizationId\" [interval]=\"billingInterval\" (onAdjusted)=\"closeStorage(true)\" (onCanceled)=\"closeStorage(false)\" *ngIf=\"showAdjustStorage\"></app-adjust-storage> </div> </ng-container> <h2 class=\"spaced-header\">{{'additionalOptions' | i18n}}</h2> <p class=\"mb-4\"> {{'additionalOptionsDesc' | i18n }} </p> <div class=\"d-flex\"> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"downloadLicense()\" *ngIf=\"canDownloadLicense\" [disabled]=\"showDownloadLicense\"> {{'downloadLicense' | i18n}} </button> <button #cancelBtn type=\"button\" class=\"btn btn-outline-danger btn-submit ml-1\" (click)=\"cancel()\" [appApiAction]=\"cancelPromise\" [disabled]=\"cancelBtn.loading\" *ngIf=\"subscription && !subscription.cancelled && !subscriptionMarkedForCancel\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'cancelSubscription' | i18n}}</span> </button> </div> <div class=\"mt-3\" *ngIf=\"showDownloadLicense\"> <app-download-license [organizationId]=\"organizationId\" (onDownloaded)=\"closeDownloadLicense()\" (onCanceled)=\"closeDownloadLicense()\"></app-download-license> </div> </ng-container> <ng-container *ngIf=\"selfHosted\"> <dl> <dt>{{'billingPlan' | i18n}}</dt> <dd>{{sub.plan.name}}</dd> <dt>{{'expiration' | i18n}}</dt> <dd *ngIf=\"sub.expiration\"> {{sub.expiration | date:'mediumDate'}} <span *ngIf=\"isExpired\" class=\"text-danger ml-2\"> <i class=\"fa fa-exclamation-triangle\" aria-hidden=\"true\"></i> {{'licenseIsExpired' | i18n}} </span> </dd> <dd *ngIf=\"!sub.expiration\">{{'neverExpires' | i18n}}</dd> </dl> <div> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"updateLicense()\"> {{'updateLicense' | i18n}} </button> <a href=\"https://vault.bitwarden.com\" target=\"_blank\" rel=\"noopener\" class=\"btn btn-outline-secondary\"> {{'manageSubscription' | i18n}} </a> </div> <div class=\"card mt-3\" *ngIf=\"showUpdateLicense\"> <div class=\"card-body\"> <button type=\"button\" class=\"close\" appA11yTitle=\"{{'cancel' | i18n}}\" (click)=\"closeUpdateLicense(false)\"><span aria-hidden=\"true\">&times;</span></button> <h3 class=\"card-body-header\">{{'updateLicense' | i18n}}</h3> <app-update-license [organizationId]=\"organizationId\" (onUpdated)=\"closeUpdateLicense(true)\" (onCanceled)=\"closeUpdateLicense(false)\"></app-update-license> </div> </div> </ng-container> </ng-container> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { PlanType } from 'jslib-common/enums/planType';\nimport { ProductType } from 'jslib-common/enums/productType';\n\n@Component({\n    selector: 'app-change-plan',\n    templateUrl: 'change-plan.component.html',\n})\nexport class ChangePlanComponent {\n    @Input() organizationId: string;\n    @Output() onChanged = new EventEmitter();\n    @Output() onCanceled = new EventEmitter();\n\n    formPromise: Promise<any>;\n    defaultUpgradePlan: PlanType = PlanType.FamiliesAnnually;\n    defaultUpgradeProduct: ProductType = ProductType.Families;\n\n    constructor(private logService: LogService) { }\n\n    async submit() {\n        try {\n            this.onChanged.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    cancel() {\n        this.onCanceled.emit();\n    }\n}\n","<div class=\"card card-org-plans\"> <div class=\"card-body\"> <button type=\"button\" class=\"close\" appA11yTitle=\"{{'cancel' | i18n}}\" (click)=\"cancel()\"><span aria-hidden=\"true\">&times;</span></button> <h2 class=\"card-body-header\">{{'changeBillingPlan' | i18n}}</h2> <p class=\"mb-0\">{{'changeBillingPlanUpgrade' | i18n}}</p> <app-organization-plans [showFree]=\"false\" [showCancel]=\"true\" [plan]=\"defaultUpgradePlan\" [product]=\"defaultUpgradeProduct\" [organizationId]=\"organizationId\" (onCanceled)=\"cancel()\"> </app-organization-plans> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { OrganizationSubscriptionUpdateRequest } from 'jslib-common/models/request/organizationSubscriptionUpdateRequest';\n\n@Component({\n    selector: 'app-adjust-subscription',\n    templateUrl: 'adjust-subscription.component.html',\n})\nexport class AdjustSubscription {\n    @Input() organizationId: string;\n    @Input() maxAutoscaleSeats: number;\n    @Input() currentSeatCount: number;\n    @Input() seatPrice = 0;\n    @Input() interval = 'year';\n    @Output() onAdjusted = new EventEmitter();\n\n    formPromise: Promise<any>;\n    limitSubscription: boolean;\n    newSeatCount: number;\n    newMaxSeats: number;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    ngOnInit() {\n        this.limitSubscription = this.maxAutoscaleSeats != null;\n        this.newSeatCount = this.currentSeatCount;\n        this.newMaxSeats = this.maxAutoscaleSeats;\n    }\n\n    async submit() {\n        try {\n            const seatAdjustment = this.newSeatCount - this.currentSeatCount;\n            const request = new OrganizationSubscriptionUpdateRequest(seatAdjustment, this.newMaxSeats);\n            this.formPromise = this.apiService.postOrganizationUpdateSubscription(this.organizationId, request);\n\n            await this.formPromise;\n\n            this.toasterService.popAsync('success', null, this.i18nService.t('subscriptionUpdated'));\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.onAdjusted.emit();\n    }\n\n    limitSubscriptionChanged() {\n        if (!this.limitSubscription) {\n            this.newMaxSeats = null;\n        }\n    }\n\n    get adjustedSeatTotal(): number {\n        return this.newSeatCount * this.seatPrice;\n    }\n\n    get maxSeatTotal(): number {\n        return this.newMaxSeats * this.seatPrice;\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"newSeatCount\">{{'subscriptionSeats' | i18n}}</label> <input id=\"newSeatCount\" class=\"form-control\" type=\"number\" name=\"NewSeatCount\" [(ngModel)]=\"newSeatCount\" min=\"0\" step=\"1\" required> <small class=\"d-block text-muted mb-4\"> <strong>{{'total' | i18n}}:</strong> {{newSeatCount || 0}} &times; {{seatPrice | currency:'$'}} = {{adjustedSeatTotal | currency:'$'}} / {{interval | i18n}} </small> </div> </div> <div class=\"row mb-4\"> <div class=\"form-group col-sm\"> <div class=\"form-check\"> <input id=\"limitSubscription\" class=\"form-check-input\" type=\"checkbox\" name=\"LimitSubscription\" [(ngModel)]=\"limitSubscription\" (change)=\"limitSubscriptionChanged()\"> <label for=\"limitSubscription\">{{'limitSubscription' | i18n}}</label> </div> <small class=\"d-block text-muted\">{{'limitSubscriptionDesc' | i18n}}</small> </div> </div> <div class=\"row mb-4\" [hidden]=\"!limitSubscription\"> <div class=\"form-group col-sm\"> <label for=\"maxAutoscaleSeats\">{{'maxSeatLimit' | i18n}}</label> <input id=\"maxAutoscaleSeats\" class=\"form-control col-6\" type=\"number\" name=\"MaxAutoscaleSeats\" [(ngModel)]=\"newMaxSeats\" [min]=\"newSeatCount == null ? 1 : newSeatCount\" step=\"1\" [required]=\"limitSubscription\"> <small class=\"d-block text-muted\"> <strong>{{'maxSeatCost' | i18n}}:</strong> {{newMaxSeats || 0}} &times; {{seatPrice | currency:'$'}} = {{maxSeatTotal | currency:'$'}} / {{interval | i18n}} </small> </div> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> </div> </form> <app-payment [showMethods]=\"false\"></app-payment> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Component({\n    selector: 'app-download-license',\n    templateUrl: 'download-license.component.html',\n})\nexport class DownloadLicenseComponent {\n    @Input() organizationId: string;\n    @Output() onDownloaded = new EventEmitter();\n    @Output() onCanceled = new EventEmitter();\n\n    installationId: string;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n        private logService: LogService) { }\n\n    async submit() {\n        if (this.installationId == null || this.installationId === '') {\n            return;\n        }\n\n        try {\n            this.formPromise = this.apiService.getOrganizationLicense(this.organizationId, this.installationId);\n            const license = await this.formPromise;\n            const licenseString = JSON.stringify(license, null, 2);\n            this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_organization_license.json');\n            this.onDownloaded.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    cancel() {\n        this.onCanceled.emit();\n    }\n}\n","<form #form class=\"card\" (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"card-body\"> <button type=\"button\" class=\"close\" appA11yTitle=\"{{'cancel' | i18n}}\" (click)=\"cancel()\"><span aria-hidden=\"true\">&times;</span></button> <h3 class=\"card-body-header\">{{'downloadLicense' | i18n}}</h3> <div class=\"row\"> <div class=\"form-group col-6\"> <div class=\"d-flex\"> <label for=\"installationId\">{{'enterInstallationId' | i18n}}</label> <a class=\"ml-auto\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\" href=\"https://help.bitwarden.com/article/licensing-on-premise/#organization-account-sharing\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <input id=\"installationId\" class=\"form-control\" type=\"text\" name=\"InstallationId\" [(ngModel)]=\"installationId\" required> </div> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"cancel()\"> {{'cancel' | i18n}} </button> </div> </form> ","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Component({\n    selector: 'app-org-settings',\n    templateUrl: 'settings.component.html',\n})\nexport class SettingsComponent {\n    access2fa = false;\n    selfHosted: boolean;\n\n    constructor(private route: ActivatedRoute, private userService: UserService,\n        private platformUtilsService: PlatformUtilsService) { }\n\n    ngOnInit() {\n        this.route.parent.params.subscribe(async params => {\n            this.selfHosted = await this.platformUtilsService.isSelfHost();\n            const organization = await this.userService.getOrganization(params.organizationId);\n            this.access2fa = organization.use2fa;\n        });\n    }\n}\n","<div class=\"container page-content\"> <div class=\"row\"> <div class=\"col-3\"> <div class=\"card\"> <div class=\"card-header\">{{'settings' | i18n}}</div> <div class=\"list-group list-group-flush\"> <a routerLink=\"account\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'myOrganization' | i18n}} </a> <a routerLink=\"subscription\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'subscription' | i18n}} </a> <a routerLink=\"billing\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"!selfHosted\"> {{'billing' | i18n}} </a> <a routerLink=\"two-factor\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"access2fa\"> {{'twoStepLogin' | i18n}} </a> </div> </div> </div> <div class=\"col-9\"> <router-outlet></router-outlet> </div> </div> </div> ","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorDuoComponent } from '../../settings/two-factor-duo.component';\nimport { TwoFactorSetupComponent as BaseTwoFactorSetupComponent } from '../../settings/two-factor-setup.component';\n\n@Component({\n    selector: 'app-two-factor-setup',\n    templateUrl: '../../settings/two-factor-setup.component.html',\n})\nexport class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {\n    constructor(apiService: ApiService, userService: UserService,\n        modalService: ModalService, messagingService: MessagingService,\n        policyService: PolicyService, private route: ActivatedRoute) {\n        super(apiService, userService, modalService, messagingService, policyService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            await super.ngOnInit();\n        });\n    }\n\n    async manage(type: TwoFactorProviderType) {\n        switch (type) {\n            case TwoFactorProviderType.OrganizationDuo:\n                const duoComp = await this.openModal(this.duoModalRef, TwoFactorDuoComponent);\n                duoComp.type = TwoFactorProviderType.OrganizationDuo;\n                duoComp.organizationId = this.organizationId;\n                duoComp.onUpdated.subscribe((enabled: boolean) => {\n                    this.updateStatus(enabled, TwoFactorProviderType.OrganizationDuo);\n                });\n                break;\n            default:\n                break;\n        }\n    }\n\n    protected getTwoFactorProviders() {\n        return this.apiService.getTwoFactorOrganizationProviders(this.organizationId);\n    }\n\n    protected filterProvider(type: TwoFactorProviderType) {\n        return type !== TwoFactorProviderType.OrganizationDuo;\n    }\n}\n","import {\n    Component,\n    OnDestroy,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { UpdateTwoFactorAuthenticatorRequest } from 'jslib-common/models/request/updateTwoFactorAuthenticatorRequest';\nimport { TwoFactorAuthenticatorResponse } from 'jslib-common/models/response/twoFactorAuthenticatorResponse';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n    selector: 'app-two-factor-authenticator',\n    templateUrl: 'two-factor-authenticator.component.html',\n})\nexport class TwoFactorAuthenticatorComponent extends TwoFactorBaseComponent implements OnInit, OnDestroy {\n    type = TwoFactorProviderType.Authenticator;\n    key: string;\n    token: string;\n    formPromise: Promise<any>;\n\n    private qrScript: HTMLScriptElement;\n\n    constructor(apiService: ApiService, i18nService: I18nService,\n        toasterService: ToasterService, userVerificationService: UserVerificationService,\n        platformUtilsService: PlatformUtilsService, logService: LogService,\n        private userService: UserService) {\n        super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService);\n        this.qrScript = window.document.createElement('script');\n        this.qrScript.src = 'scripts/qrious.min.js';\n        this.qrScript.async = true;\n    }\n\n    ngOnInit() {\n        window.document.body.appendChild(this.qrScript);\n    }\n\n    ngOnDestroy() {\n        window.document.body.removeChild(this.qrScript);\n    }\n\n    auth(authResponse: any) {\n        super.auth(authResponse);\n        return this.processResponse(authResponse.response);\n    }\n\n    submit() {\n        if (this.enabled) {\n            return super.disable(this.formPromise);\n        } else {\n            return this.enable();\n        }\n    }\n\n    protected async enable() {\n        const request = await this.buildRequestModel(UpdateTwoFactorAuthenticatorRequest);\n        request.token = this.token;\n        request.key = this.key;\n\n        return super.enable(async () => {\n            this.formPromise = this.apiService.putTwoFactorAuthenticator(request);\n            const response = await this.formPromise;\n            await this.processResponse(response);\n        });\n    }\n\n    private async processResponse(response: TwoFactorAuthenticatorResponse) {\n        this.token = null;\n        this.enabled = response.enabled;\n        this.key = response.key;\n        const email = await this.userService.getEmail();\n        window.setTimeout(() => {\n            const qr = new (window as any).QRious({\n                element: document.getElementById('qr'),\n                value: 'otpauth://totp/Bitwarden:' + encodeURIComponent(email) +\n                    '?secret=' + encodeURIComponent(this.key) + '&issuer=Bitwarden',\n                size: 160,\n            });\n        }, 100);\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"2faAuthenticatorTitle\"> <div class=\"modal-dialog\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"2faAuthenticatorTitle\"> {{'twoStepLogin' | i18n}} <small>{{'authenticatorAppTitle' | i18n}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <app-two-factor-verify [organizationId]=\"organizationId\" [type]=\"type\" (onAuthed)=\"auth($event)\" *ngIf=\"!authed\"> </app-two-factor-verify> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"authed\"> <div class=\"modal-body\"> <ng-container *ngIf=\"!enabled\"> <img class=\"float-right mfaType0\" alt=\"Authenticator app logo\"> <p>{{'twoStepAuthenticatorDesc' | i18n}}</p> <p> <strong>1. {{'twoStepAuthenticatorDownloadApp' | i18n}}</strong> </p> </ng-container> <ng-container *ngIf=\"enabled\"> <app-callout type=\"success\" title=\"{{'enabled' | i18n}}\" icon=\"fa-check-circle\"> <p>{{'twoStepLoginProviderEnabled' | i18n}}</p> {{'twoStepAuthenticatorReaddDesc' | i18n}} </app-callout> <img class=\"float-right mfaType0\" alt=\"Authenticator app logo\"> <p>{{'twoStepAuthenticatorNeedApp' | i18n}}</p> </ng-container> <ul class=\"fa-ul\"> <li> <i class=\"fa-li fa fa-apple\"></i>{{'iosDevices' | i18n}}: <a href=\"https://itunes.apple.com/us/app/authy/id494168017?mt=8\" target=\"_blank\" rel=\"noopener\">Authy</a> </li> <li> <i class=\"fa-li fa fa-android\"></i>{{'androidDevices' | i18n}}: <a href=\"https://play.google.com/store/apps/details?id=com.authy.authy\" target=\"_blank\" rel=\"noopener\">Authy</a> </li> <li> <i class=\"fa-li fa fa-windows\"></i>{{'windowsDevices' | i18n}}: <a href=\"https://www.microsoft.com/p/authenticator/9wzdncrfj3rj\" target=\"_blank\" rel=\"noopener\">Microsoft Authenticator</a> </li> </ul> <p>{{'twoStepAuthenticatorAppsRecommended' | i18n}}</p> <p *ngIf=\"!enabled\"> <strong>2. {{'twoStepAuthenticatorScanCode' | i18n}}</strong> </p> <hr *ngIf=\"enabled\"> <p class=\"text-center\" [ngClass]=\"{'mb-0': enabled}\"> <canvas id=\"qr\"></canvas><br> <code appA11yTitle=\"{{'key' | i18n}}\">{{key}}</code> </p> <ng-container *ngIf=\"!enabled\"> <label for=\"token\">3. {{'twoStepAuthenticatorEnterCode' | i18n}}</label> <input id=\"token\" type=\"text\" name=\"Token\" class=\"form-control\" [(ngModel)]=\"token\" required appInputVerbatim> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span *ngIf=\"!enabled\">{{'enable' | i18n}}</span> <span *ngIf=\"enabled\">{{'disable' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> </div> ","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { TwoFactorEmailRequest } from 'jslib-common/models/request/twoFactorEmailRequest';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\nimport { UpdateTwoFactorEmailRequest } from 'jslib-common/models/request/updateTwoFactorEmailRequest';\nimport { TwoFactorEmailResponse } from 'jslib-common/models/response/twoFactorEmailResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n    selector: 'app-two-factor-email',\n    templateUrl: 'two-factor-email.component.html',\n})\nexport class TwoFactorEmailComponent extends TwoFactorBaseComponent {\n    type = TwoFactorProviderType.Email;\n    email: string;\n    token: string;\n    sentEmail: string;\n    formPromise: Promise<any>;\n    emailPromise: Promise<any>;\n\n    constructor(apiService: ApiService, i18nService: I18nService,\n        toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n        logService: LogService, userVerificationService: UserVerificationService,\n        private userService: UserService) {\n        super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService);\n    }\n\n    auth(authResponse: any) {\n        super.auth(authResponse);\n        return this.processResponse(authResponse.response);\n    }\n\n    submit() {\n        if (this.enabled) {\n            return super.disable(this.formPromise);\n        } else {\n            return this.enable();\n        }\n    }\n\n    async sendEmail() {\n        try {\n            const request = await this.buildRequestModel(TwoFactorEmailRequest);\n            request.email = this.email;\n            this.emailPromise = this.apiService.postTwoFactorEmailSetup(request);\n            await this.emailPromise;\n            this.sentEmail = this.email;\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    protected async enable() {\n        const request = await this.buildRequestModel(UpdateTwoFactorEmailRequest);\n        request.email = this.email;\n        request.token = this.token;\n\n        return super.enable(async () => {\n            this.formPromise = this.apiService.putTwoFactorEmail(request);\n            const response = await this.formPromise;\n            await this.processResponse(response);\n        });\n    }\n\n    private async processResponse(response: TwoFactorEmailResponse) {\n        this.token = null;\n        this.email = response.email;\n        this.enabled = response.enabled;\n        if (!this.enabled && (this.email == null || this.email === '')) {\n            this.email = await this.userService.getEmail();\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"2faEmailTitle\"> <div class=\"modal-dialog\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"2faEmailTitle\"> {{'twoStepLogin' | i18n}} <small>{{'emailTitle' | i18n}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <app-two-factor-verify [organizationId]=\"organizationId\" [type]=\"type\" (onAuthed)=\"auth($event)\" *ngIf=\"!authed\"> </app-two-factor-verify> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"authed\"> <div class=\"modal-body\"> <ng-container *ngIf=\"enabled\"> <app-callout type=\"success\" title=\"{{'enabled' | i18n}}\" icon=\"fa-check-circle\"> {{'twoStepLoginProviderEnabled' | i18n}} </app-callout> <strong>{{'email' | i18n}}:</strong> {{email}} </ng-container> <ng-container *ngIf=\"!enabled\"> <p class=\"d-flex\"> <span class=\"mr-3\">{{'twoFactorEmailDesc' | i18n}}</span> <img class=\"float-right ml-auto mfaType1\" alt=\"Email logo\"> </p> <div class=\"form-group\"> <label for=\"email\">1. {{'twoFactorEmailEnterEmail' | i18n}}</label> <input id=\"email\" type=\"text\" name=\"Email\" class=\"form-control\" [(ngModel)]=\"email\" required inputmode=\"email\" appInputVerbatim=\"false\"> </div> <div class=\"mb-3 d-flex\"> <button #sendBtn type=\"button\" class=\"btn btn-outline-primary btn-sm btn-submit align-self-start\" (click)=\"sendEmail()\" [appApiAction]=\"emailPromise\" [disabled]=\"sendBtn.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'sendEmail' | i18n}}</span> </button> <span class=\"text-success ml-3\" *ngIf=\"sentEmail\"> {{'verificationCodeEmailSent' | i18n : sentEmail}} </span> </div> <div class=\"form-group\"> <label for=\"token\">2. {{'twoFactorEmailEnterCode' | i18n}}</label> <input id=\"token\" type=\"text\" name=\"Token\" class=\"form-control\" [(ngModel)]=\"token\" required appInputVerbatim> </div> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span *ngIf=\"!enabled\">{{'enable' | i18n}}</span> <span *ngIf=\"enabled\">{{'disable' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> </div> ","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { TwoFactorRecoverResponse } from 'jslib-common/models/response/twoFactorRescoverResponse';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\n@Component({\n    selector: 'app-two-factor-recovery',\n    templateUrl: 'two-factor-recovery.component.html',\n})\nexport class TwoFactorRecoveryComponent {\n    type = -1;\n    code: string;\n    authed: boolean;\n    twoFactorProviderType = TwoFactorProviderType;\n\n    constructor(private i18nService: I18nService) { }\n\n    auth(authResponse: any) {\n        this.authed = true;\n        this.processResponse(authResponse.response);\n    }\n\n    print() {\n        const w = window.open();\n        w.document.write('<div style=\"font-size: 18px; text-align: center;\">' +\n            '<p>' + this.i18nService.t('twoFactorRecoveryYourCode') + ':</p>' +\n            '<code style=\"font-family: Menlo, Monaco, Consolas, \\'Courier New\\', monospace;\">' +\n            this.code + '</code></div>' +\n            '<p style=\"text-align: center;\">' + new Date() + '</p>');\n        w.onafterprint = () => w.close();\n        w.print();\n    }\n\n    private formatString(s: string) {\n        if (s == null) {\n            return null;\n        }\n        return s.replace(/(.{4})/g, '$1 ').trim().toUpperCase();\n    }\n\n    private processResponse(response: TwoFactorRecoverResponse) {\n        this.code = this.formatString(response.code);\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"2faRecoveryTitle\"> <div class=\"modal-dialog\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"2faRecoveryTitle\"> {{'twoStepLogin' | i18n}} <small>{{'recoveryCodeTitle' | i18n}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <app-two-factor-verify [organizationId]=\"organizationId\" [type]=\"type\" (onAuthed)=\"auth($event)\" *ngIf=\"!authed\"> </app-two-factor-verify> <ng-container *ngIf=\"authed\"> <div class=\"modal-body text-center\"> <ng-container *ngIf=\"code\"> <p>{{'twoFactorRecoveryYourCode' | i18n}}:</p> <code class=\"text-lg\">{{code}}</code> </ng-container> <ng-container *ngIf=\"!code\"> {{'twoFactorRecoveryNoCode' | i18n}} </ng-container> </div> <div class=\"modal-footer\"> <button type=\"button\" class=\"btn btn-primary\" (click)=\"print()\" *ngIf=\"code\">{{'printCode' | i18n}}</button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </ng-container> </div> </div> </div> ","import {\n    Component,\n    NgZone,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { SecretVerificationRequest } from 'jslib-common/models/request/secretVerificationRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from 'jslib-common/models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from 'jslib-common/models/request/updateTwoFactorWebAuthnRequest';\nimport {\n    ChallengeResponse,\n    TwoFactorWebAuthnResponse,\n} from 'jslib-common/models/response/twoFactorWebAuthnResponse';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n    selector: 'app-two-factor-webauthn',\n    templateUrl: 'two-factor-webauthn.component.html',\n})\nexport class TwoFactorWebAuthnComponent extends TwoFactorBaseComponent {\n    type = TwoFactorProviderType.WebAuthn;\n    name: string;\n    keys: any[];\n    keyIdAvailable: number = null;\n    keysConfiguredCount = 0;\n    webAuthnError: boolean;\n    webAuthnListening: boolean;\n    webAuthnResponse: PublicKeyCredential;\n    challengePromise: Promise<ChallengeResponse>;\n    formPromise: Promise<any>;\n\n    constructor(apiService: ApiService, i18nService: I18nService,\n        toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n        private ngZone: NgZone, logService: LogService, userVerificationService: UserVerificationService) {\n        super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService);\n    }\n\n    auth(authResponse: any) {\n        super.auth(authResponse);\n        this.processResponse(authResponse.response);\n    }\n\n    async submit() {\n        if (this.webAuthnResponse == null || this.keyIdAvailable == null) {\n            // Should never happen.\n            return Promise.reject();\n        }\n        const request = await this.buildRequestModel(UpdateTwoFactorWebAuthnRequest);\n        request.deviceResponse = this.webAuthnResponse;\n        request.id = this.keyIdAvailable;\n        request.name = this.name;\n\n        return super.enable(async () => {\n            this.formPromise = this.apiService.putTwoFactorWebAuthn(request);\n            const response = await this.formPromise;\n            await this.processResponse(response);\n        });\n    }\n\n    disable() {\n        return super.disable(this.formPromise);\n    }\n\n    async remove(key: any) {\n        if (this.keysConfiguredCount <= 1 || key.removePromise != null) {\n            return;\n        }\n        const name = key.name != null ? key.name : this.i18nService.t('webAuthnkeyX', key.id);\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('removeU2fConfirmation'), name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return;\n        }\n        const request = await this.buildRequestModel(UpdateTwoFactorWebAuthnDeleteRequest);\n        request.id = key.id;\n        try {\n            key.removePromise = this.apiService.deleteTwoFactorWebAuthn(request);\n            const response = await key.removePromise;\n            key.removePromise = null;\n            await this.processResponse(response);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async readKey() {\n        if (this.keyIdAvailable == null) {\n            return;\n        }\n        const request = await this.buildRequestModel(SecretVerificationRequest);\n        try {\n            this.challengePromise = this.apiService.getTwoFactorWebAuthnChallenge(request);\n            const challenge = await this.challengePromise;\n            this.readDevice(challenge);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    private readDevice(webAuthnChallenge: ChallengeResponse) {\n        // tslint:disable-next-line\n        console.log('listening for key...');\n        this.resetWebAuthn(true);\n\n        navigator.credentials.create({\n            publicKey: webAuthnChallenge,\n        }).then((data: PublicKeyCredential) => {\n            this.ngZone.run(() => {\n                this.webAuthnListening = false;\n                this.webAuthnResponse = data;\n            });\n        }).catch(err => {\n            // tslint:disable-next-line\n            console.error(err);\n            this.resetWebAuthn(false);\n            // TODO: Should we display the actual error?\n            this.webAuthnError = true;\n        });\n    }\n\n    private resetWebAuthn(listening = false) {\n        this.webAuthnResponse = null;\n        this.webAuthnError = false;\n        this.webAuthnListening = listening;\n    }\n\n    private processResponse(response: TwoFactorWebAuthnResponse) {\n        this.resetWebAuthn();\n        this.keys = [];\n        this.keyIdAvailable = null;\n        this.name = null;\n        this.keysConfiguredCount = 0;\n        for (let i = 1; i <= 5; i++) {\n            if (response.keys != null) {\n                const key = response.keys.filter(k => k.id === i);\n                if (key.length > 0) {\n                    this.keysConfiguredCount++;\n                    this.keys.push({\n                        id: i, name: key[0].name,\n                        configured: true,\n                        migrated: key[0].migrated,\n                        removePromise: null,\n                    });\n                    continue;\n                }\n            }\n            this.keys.push({ id: i, name: null, configured: false, removePromise: null });\n            if (this.keyIdAvailable == null) {\n                this.keyIdAvailable = i;\n            }\n        }\n        this.enabled = response.enabled;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"2faU2fTitle\"> <div class=\"modal-dialog modal-lg\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"2faU2fTitle\"> {{'twoStepLogin' | i18n}} <small>{{'webAuthnTitle' | i18n}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <app-two-factor-verify [organizationId]=\"organizationId\" [type]=\"type\" (onAuthed)=\"auth($event)\" *ngIf=\"!authed\"> </app-two-factor-verify> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"authed\"> <div class=\"modal-body\"> <app-callout type=\"success\" title=\"{{'enabled' | i18n}}\" icon=\"fa-check-circle\" *ngIf=\"enabled\"> {{'twoStepLoginProviderEnabled' | i18n}} </app-callout> <app-callout type=\"warning\"> <p>{{'twoFactorWebAuthnWarning' | i18n}}</p> <ul class=\"mb-0\"> <li>{{'twoFactorWebAuthnSupportWeb' | i18n}}</li> </ul> </app-callout> <img class=\"float-right ml-5 mfaType7\" alt=\"FIDO2 WebAuthn logo'\"> <ul class=\"fa-ul\"> <li *ngFor=\"let k of keys; let i = index\" #removeKeyBtn [appApiAction]=\"k.removePromise\"> <i class=\"fa-li fa fa-key\"></i> <strong *ngIf=\"!k.configured || !k.name\">{{'webAuthnkeyX' | i18n : i + 1}}</strong> <strong *ngIf=\"k.configured && k.name\">{{k.name}}</strong> <ng-container *ngIf=\"k.configured && !removeKeyBtn.loading\"> <ng-container *ngIf=\"k.migrated\"> <span>{{'webAuthnMigrated' | i18n}}</span> </ng-container> </ng-container> <ng-container *ngIf=\"keysConfiguredCount > 1 && k.configured\"> <i class=\"fa fa-spin fa-spinner text-muted fa-fw\" title=\"{{'loading' | i18n}}\" *ngIf=\"removeKeyBtn.loading\" aria-hidden=\"true\"></i> - <a href=\"#\" appStopClick (click)=\"remove(k)\">{{'remove' | i18n}}</a> </ng-container> </li> </ul> <hr> <p>{{'twoFactorWebAuthnAdd' | i18n}}:</p> <ol> <li>{{'twoFactorU2fGiveName' | i18n}}</li> <li>{{'twoFactorU2fPlugInReadKey' | i18n}}</li> <li>{{'twoFactorU2fTouchButton' | i18n}}</li> <li>{{'twoFactorU2fSaveForm' | i18n}}</li> </ol> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"name\">{{'name' | i18n}}</label> <input id=\"name\" type=\"text\" name=\"Name\" class=\"form-control\" [(ngModel)]=\"name\" [disabled]=\"!keyIdAvailable\"> </div> </div> <button type=\"button\" (click)=\"readKey()\" class=\"btn btn-outline-secondary mr-2\" [disabled]=\"readKeyBtn.loading || webAuthnListening || !keyIdAvailable\" #readKeyBtn [appApiAction]=\"challengePromise\"> {{'readKey' | i18n}} </button> <ng-container *ngIf=\"readKeyBtn.loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" aria-hidden=\"true\"></i> </ng-container> <ng-container *ngIf=\"!readKeyBtn.loading\"> <ng-container *ngIf=\"webAuthnListening\"> <i class=\"fa fa-spinner fa-spin text-muted\" aria-hidden=\"true\"></i> {{'twoFactorU2fWaiting' | i18n}}... </ng-container> <ng-container *ngIf=\"webAuthnResponse\"> <i class=\"fa fa-check-circle text-success\" aria-hidden=\"true\"></i> {{'twoFactorU2fClickSave' | i18n}} </ng-container> <ng-container *ngIf=\"webAuthnError\"> <i class=\"fa fa-warning text-danger\" aria-hidden=\"true\"></i> {{'twoFactorU2fProblemReadingTryAgain' | i18n}} </ng-container> </ng-container> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.loading || !webAuthnResponse\"> <i class=\"fa fa-spinner fa-spin\" *ngIf=\"form.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span *ngIf=\"!form.loading\">{{'save' | i18n}}</span> </button> <button #disableBtn type=\"button\" class=\"btn btn-outline-secondary btn-submit\" [appApiAction]=\"disablePromise\" [disabled]=\"disableBtn.loading\" (click)=\"disable()\" *ngIf=\"enabled\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'disableAllKeys' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> </div> ","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { UpdateTwoFactorYubioOtpRequest } from 'jslib-common/models/request/updateTwoFactorYubioOtpRequest';\nimport { TwoFactorYubiKeyResponse } from 'jslib-common/models/response/twoFactorYubiKeyResponse';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorBaseComponent } from './two-factor-base.component';\n\n@Component({\n    selector: 'app-two-factor-yubikey',\n    templateUrl: 'two-factor-yubikey.component.html',\n})\nexport class TwoFactorYubiKeyComponent extends TwoFactorBaseComponent {\n    type = TwoFactorProviderType.Yubikey;\n    keys: any[];\n    nfc = false;\n\n    formPromise: Promise<any>;\n    disablePromise: Promise<any>;\n\n    constructor(apiService: ApiService, i18nService: I18nService,\n        toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n        logService: LogService, userVerificationService: UserVerificationService) {\n        super(apiService, i18nService, toasterService, platformUtilsService, logService, userVerificationService);\n    }\n\n    auth(authResponse: any) {\n        super.auth(authResponse);\n        this.processResponse(authResponse.response);\n    }\n\n    async submit() {\n        const request = await this.buildRequestModel(UpdateTwoFactorYubioOtpRequest);\n        request.key1 = this.keys != null && this.keys.length > 0 ? this.keys[0].key : null;\n        request.key2 = this.keys != null && this.keys.length > 1 ? this.keys[1].key : null;\n        request.key3 = this.keys != null && this.keys.length > 2 ? this.keys[2].key : null;\n        request.key4 = this.keys != null && this.keys.length > 3 ? this.keys[3].key : null;\n        request.key5 = this.keys != null && this.keys.length > 4 ? this.keys[4].key : null;\n        request.nfc = this.nfc;\n\n        return super.enable(async () => {\n            this.formPromise = this.apiService.putTwoFactorYubiKey(request);\n            const response = await this.formPromise;\n            await this.processResponse(response);\n            this.toasterService.popAsync('success', null, this.i18nService.t('yubikeysUpdated'));\n        });\n    }\n\n    disable() {\n        return super.disable(this.disablePromise);\n    }\n\n    remove(key: any) {\n        key.existingKey = null;\n        key.key = null;\n    }\n\n    private processResponse(response: TwoFactorYubiKeyResponse) {\n        this.enabled = response.enabled;\n        this.keys = [\n            { key: response.key1, existingKey: this.padRight(response.key1) },\n            { key: response.key2, existingKey: this.padRight(response.key2) },\n            { key: response.key3, existingKey: this.padRight(response.key3) },\n            { key: response.key4, existingKey: this.padRight(response.key4) },\n            { key: response.key5, existingKey: this.padRight(response.key5) },\n        ];\n        this.nfc = response.nfc || !response.enabled;\n    }\n\n    private padRight(str: string, character = '•', size = 44) {\n        if (str == null || character == null || str.length >= size) {\n            return str;\n        }\n        const max = (size - str.length) / character.length;\n        for (let i = 0; i < max; i++) {\n            str += character;\n        }\n        return str;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"2faYubiKeyTitle\"> <div class=\"modal-dialog modal-lg\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"2faYubiKeyTitle\"> {{'twoStepLogin' | i18n}} <small>YubiKey</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <app-two-factor-verify [organizationId]=\"organizationId\" [type]=\"type\" (onAuthed)=\"auth($event)\" *ngIf=\"!authed\"> </app-two-factor-verify> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"authed\" autocomplete=\"off\"> <div class=\"modal-body\"> <app-callout type=\"success\" title=\"{{'enabled' | i18n}}\" icon=\"fa-check-circle\" *ngIf=\"enabled\"> {{'twoStepLoginProviderEnabled' | i18n}} </app-callout> <app-callout type=\"warning\"> <p>{{'twoFactorYubikeyWarning' | i18n}}</p> <ul class=\"mb-0\"> <li>{{'twoFactorYubikeySupportUsb' | i18n}}</li> <li>{{'twoFactorYubikeySupportMobile' | i18n}}</li> </ul> </app-callout> <img class=\"float-right mfaType3\" alt=\"YubiKey OTP security key logo\"> <p>{{'twoFactorYubikeyAdd' | i18n}}:</p> <ol> <li>{{'twoFactorYubikeyPlugIn' | i18n}}</li> <li>{{'twoFactorYubikeySelectKey' | i18n}}</li> <li>{{'twoFactorYubikeyTouchButton' | i18n}}</li> <li>{{'twoFactorYubikeySaveForm' | i18n}}</li> </ol> <hr> <div class=\"row\"> <div class=\"form-group col-6\" *ngFor=\"let k of keys; let i = index\"> <label for=\"key{{i + 1}}\">{{'yubikeyX' | i18n : i + 1}}</label> <input id=\"key{{i + 1}}\" type=\"password\" name=\"Key{{i + 1}}\" class=\"form-control\" [(ngModel)]=\"k.key\" *ngIf=\"!k.existingKey\" appInputVerbatim autocomplete=\"new-password\"> <div class=\"d-flex\" *ngIf=\"k.existingKey\"> <span class=\"mr-2\">{{k.existingKey}}</span> <button type=\"button\" class=\"btn btn-link text-danger ml-auto\" (click)=\"remove(k)\" appA11yTitle=\"{{'remove' | i18n}}\"> <i class=\"fa fa-minus-circle fa-lg\" aria-hidden=\"true\"></i> </button> </div> </div> </div> <strong class=\"d-block mb-2\">{{'nfcSupport' | i18n}}</strong> <div class=\"form-check\"> <input type=\"checkbox\" class=\"form-check-input\" id=\"nfc\" name=\"Nfc\" [(ngModel)]=\"nfc\"> <label class=\"form-check-label\" for=\"nfc\">{{'twoFactorYubikeySupportsNfc' | i18n}}</label> </div> <small class=\"form-text text-muted\">{{'twoFactorYubikeySupportsNfcDesc' | i18n}}</small> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button #disableBtn type=\"button\" class=\"btn btn-outline-secondary btn-submit\" [appApiAction]=\"disablePromise\" [disabled]=\"disableBtn.loading\" (click)=\"disable()\" *ngIf=\"enabled\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'disableAllKeys' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> </div> ","import {\n    Component,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\nimport {\n    Toast,\n    ToasterService,\n} from 'angular2-toaster';\n\nimport { first } from 'rxjs/operators';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\nimport { ValidationService } from 'jslib-angular/services/validation.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PlanSponsorshipType } from 'jslib-common/enums/planSponsorshipType';\nimport { PlanType } from 'jslib-common/enums/planType';\nimport { ProductType } from 'jslib-common/enums/productType';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { OrganizationSponsorshipRedeemRequest } from 'jslib-common/models/request/organization/organizationSponsorshipRedeemRequest';\n\nimport { DeleteOrganizationComponent } from 'src/app/organizations/settings/delete-organization.component';\n\nimport { OrganizationPlansComponent } from 'src/app/settings/organization-plans.component';\n\n@Component({\n    selector: 'families-for-enterprise-setup',\n    templateUrl: 'families-for-enterprise-setup.component.html',\n})\nexport class FamiliesForEnterpriseSetupComponent implements OnInit {\n    @ViewChild(OrganizationPlansComponent, { static: false })\n    set organizationPlansComponent(value: OrganizationPlansComponent) {\n        if (!value) {\n            return;\n        }\n\n        value.plan = PlanType.FamiliesAnnually;\n        value.product = ProductType.Families;\n        value.acceptingSponsorship = true;\n        value.onSuccess.subscribe(this.onOrganizationCreateSuccess.bind(this));\n    }\n\n    @ViewChild('deleteOrganizationTemplate', { read: ViewContainerRef, static: true }) deleteModalRef: ViewContainerRef;\n\n    loading = true;\n    badToken = false;\n    formPromise: Promise<any>;\n\n    token: string;\n    existingFamilyOrganizations: Organization[];\n\n    showNewOrganization: boolean = false;\n    _organizationPlansComponent: OrganizationPlansComponent;\n    _selectedFamilyOrganizationId: string = '';\n\n    constructor(private router: Router, private toasterService: ToasterService,\n        private i18nService: I18nService, private route: ActivatedRoute,\n        private apiService: ApiService, private syncService: SyncService,\n        private validationService: ValidationService, private userService: UserService,\n        private modalService: ModalService) { }\n\n    async ngOnInit() {\n        document.body.classList.remove('layout_frontend');\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            const error = qParams.token == null;\n            if (error) {\n                const toast: Toast = {\n                    type: 'error',\n                    title: null,\n                    body: this.i18nService.t('sponsoredFamiliesAcceptFailed'),\n                    timeout: 10000,\n                };\n                this.toasterService.popAsync(toast);\n                this.router.navigate(['/']);\n                return;\n            }\n\n            this.token = qParams.token;\n\n            await this.syncService.fullSync(true);\n            this.badToken = !await this.apiService.postPreValidateSponsorshipToken(this.token);\n            this.loading = false;\n\n            this.existingFamilyOrganizations = (await this.userService.getAllOrganizations())\n                .filter(o => o.planProductType === ProductType.Families);\n\n            if (this.existingFamilyOrganizations.length === 0) {\n                this.selectedFamilyOrganizationId = 'createNew';\n            }\n        });\n    }\n\n    async submit() {\n        this.formPromise = this.doSubmit(this._selectedFamilyOrganizationId);\n        await this.formPromise;\n        this.formPromise = null;\n    }\n\n    get selectedFamilyOrganizationId() {\n        return this._selectedFamilyOrganizationId;\n    }\n\n    set selectedFamilyOrganizationId(value: string) {\n        this._selectedFamilyOrganizationId = value;\n        this.showNewOrganization = value === 'createNew';\n    }\n\n    private async doSubmit(organizationId: string) {\n        try {\n            const request = new OrganizationSponsorshipRedeemRequest();\n            request.planSponsorshipType = PlanSponsorshipType.FamiliesForEnterprise;\n            request.sponsoredOrganizationId = organizationId;\n\n            await this.apiService.postRedeemSponsorship(this.token, request);\n            this.toasterService.popAsync('success', null, this.i18nService.t('sponsoredFamiliesOfferRedeemed'));\n            await this.syncService.fullSync(true);\n\n            this.router.navigate(['/']);\n        } catch (e) {\n            if (this.showNewOrganization) {\n                await this.modalService.openViewRef(DeleteOrganizationComponent, this.deleteModalRef, comp => {\n                    comp.organizationId = organizationId;\n                    comp.descriptionKey = 'orgCreatedSponsorshipInvalid';\n                    comp.onSuccess.subscribe(() => {\n                        this.router.navigate(['/']);\n                    });\n                });\n            }\n            this.validationService.showError(this.i18nService.t('sponsorshipTokenHasExpired'));\n        }\n    }\n\n    private async onOrganizationCreateSuccess(value: any) {\n        // Use newly created organization id\n        await this.doSubmit(value.organizationId);\n    }\n}\n","<div class=\"container page-content\"> <div class=\"page-header\"> <h1>{{'sponsoredFamiliesOffer' | i18n}}</h1> </div> <div *ngIf=\"loading\" class=\"mt-5 d-flex justify-content-center\"> <i class=\"fa fa-spinner fa-spin fa-2x text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div *ngIf=\"!loading && badToken\" class=\"mt-5 d-flex justify-content-center\"> <span>{{'badToken' | i18n}}</span> </div> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"!loading && !badToken\"> <p> <span>{{'acceptBitwardenFamiliesHelp' | i18n}}</span> </p> <div class=\"form-group col-6\"> <label for=\"availableSponsorshipOrg\">{{ 'sponsoredFamiliesSelectOffer' | i18n}}</label> <select id=\"availableSponsorshipOrg\" name=\"Available Sponsorship Organization\" [(ngModel)]=\"selectedFamilyOrganizationId\" class=\"form-control\" required> <option value=\"\" disabled=\"disabled\">-- {{'select' | i18n}} --</option> <option value=\"createNew\">{{'newFamiliesOrganization' | i18n}}</option> <option *ngFor=\"let o of existingFamilyOrganizations\" [ngValue]=\"o.id\">{{o.name}}</option> </select> </div> <div *ngIf=\"showNewOrganization\" class=\"col-12\"> <app-organization-plans></app-organization-plans> </div> <div class=\"form-group col-6\" *ngIf=\"!showNewOrganization\"> <button class=\"btn btn-primary mt-2 btn-submit\" [disabled]=\"form.loading\" type=\"submit\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'acceptOffer' | i18n}}</span> </button> </div> </form> </div> <ng-template #deleteOrganizationTemplate></ng-template> ","export enum PlanSponsorshipType {\n    FamiliesForEnterprise = 0,\n}\n","import { Component } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { ExportComponent as BaseExportComponent } from '../../tools/export.component';\n\n@Component({\n    selector: 'app-org-export',\n    templateUrl: '../../tools/export.component.html',\n})\nexport class ExportComponent extends BaseExportComponent {\n    constructor(cryptoService: CryptoService, i18nService: I18nService,\n        platformUtilsService: PlatformUtilsService, exportService: ExportService,\n        eventService: EventService, private route: ActivatedRoute, policyService: PolicyService,\n        logService: LogService, userVerificationService: UserVerificationService, fb: FormBuilder) {\n        super(cryptoService, i18nService, platformUtilsService, exportService, eventService, policyService,\n            logService, userVerificationService, fb);\n    }\n\n    async ngOnInit() {\n        await super.ngOnInit();\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n        });\n    }\n\n    async checkExportDisabled() {\n        return;\n    }\n\n    getExportData() {\n        return this.exportService.getOrganizationExport(this.organizationId, this.format);\n    }\n\n    getFileName() {\n        return super.getFileName('org');\n    }\n\n    async collectEvent(): Promise<any> {\n        // TODO\n        // await this.eventService.collect(EventType.Organization_ClientExportedVault);\n    }\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport {\n    ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent,\n} from '../../tools/exposed-passwords-report.component';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Component({\n    selector: 'app-exposed-passwords-report',\n    templateUrl: '../../tools/exposed-passwords-report.component.html',\n})\nexport class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent {\n    manageableCiphers: Cipher[];\n\n    constructor(cipherService: CipherService, auditService: AuditService,\n        modalService: ModalService, messagingService: MessagingService,\n        userService: UserService, passwordRepromptService: PasswordRepromptService, private route: ActivatedRoute) {\n        super(cipherService, auditService, modalService, messagingService, userService, passwordRepromptService);\n    }\n\n    ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            this.manageableCiphers = await this.cipherService.getAll();\n            super.ngOnInit();\n        });\n    }\n\n    getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n    }\n\n    canManageCipher(c: CipherView): boolean {\n        return this.manageableCiphers.some(x => x.id === c.id);\n    }\n}\n","import { AttachmentResponse } from '../response/attachmentResponse';\n\nexport class AttachmentData {\n    id: string;\n    url: string;\n    fileName: string;\n    key: string;\n    size: string;\n    sizeName: string;\n\n    constructor(response?: AttachmentResponse) {\n        if (response == null) {\n            return;\n        }\n        this.id = response.id;\n        this.url = response.url;\n        this.fileName = response.fileName;\n        this.key = response.key;\n        this.size = response.size;\n        this.sizeName = response.sizeName;\n    }\n}\n","import { CardApi } from '../api/cardApi';\n\nexport class CardData {\n    cardholderName: string;\n    brand: string;\n    number: string;\n    expMonth: string;\n    expYear: string;\n    code: string;\n\n    constructor(data?: CardApi) {\n        if (data == null) {\n            return;\n        }\n\n        this.cardholderName = data.cardholderName;\n        this.brand = data.brand;\n        this.number = data.number;\n        this.expMonth = data.expMonth;\n        this.expYear = data.expYear;\n        this.code = data.code;\n    }\n}\n","import { FieldType } from '../../enums/fieldType';\nimport { LinkedIdType } from '../../enums/linkedIdType';\n\nimport { FieldApi } from '../api/fieldApi';\n\nexport class FieldData {\n    type: FieldType;\n    name: string;\n    value: string;\n    linkedId: LinkedIdType;\n\n    constructor(response?: FieldApi) {\n        if (response == null) {\n            return;\n        }\n        this.type = response.type;\n        this.name = response.name;\n        this.value = response.value;\n        this.linkedId = response.linkedId;\n    }\n}\n","import { IdentityApi } from '../api/identityApi';\n\nexport class IdentityData {\n    title: string;\n    firstName: string;\n    middleName: string;\n    lastName: string;\n    address1: string;\n    address2: string;\n    address3: string;\n    city: string;\n    state: string;\n    postalCode: string;\n    country: string;\n    company: string;\n    email: string;\n    phone: string;\n    ssn: string;\n    username: string;\n    passportNumber: string;\n    licenseNumber: string;\n\n    constructor(data?: IdentityApi) {\n        if (data == null) {\n            return;\n        }\n\n        this.title = data.title;\n        this.firstName = data.firstName;\n        this.middleName = data.middleName;\n        this.lastName = data.lastName;\n        this.address1 = data.address1;\n        this.address2 = data.address2;\n        this.address3 = data.address3;\n        this.city = data.city;\n        this.state = data.state;\n        this.postalCode = data.postalCode;\n        this.country = data.country;\n        this.company = data.company;\n        this.email = data.email;\n        this.phone = data.phone;\n        this.ssn = data.ssn;\n        this.username = data.username;\n        this.passportNumber = data.passportNumber;\n        this.licenseNumber = data.licenseNumber;\n    }\n}\n","import { LoginApi } from '../api/loginApi';\n\nimport { LoginUriData } from './loginUriData';\n\nexport class LoginData {\n    uris: LoginUriData[];\n    username: string;\n    password: string;\n    passwordRevisionDate: string;\n    totp: string;\n    autofillOnPageLoad: boolean;\n\n    constructor(data?: LoginApi) {\n        if (data == null) {\n            return;\n        }\n\n        this.username = data.username;\n        this.password = data.password;\n        this.passwordRevisionDate = data.passwordRevisionDate;\n        this.totp = data.totp;\n        this.autofillOnPageLoad = data.autofillOnPageLoad;\n\n        if (data.uris) {\n            this.uris = data.uris.map(u => new LoginUriData(u));\n        }\n    }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriApi } from '../api/loginUriApi';\n\nexport class LoginUriData {\n    uri: string;\n    match: UriMatchType = null;\n\n    constructor(data?: LoginUriApi) {\n        if (data == null) {\n            return;\n        }\n        this.uri = data.uri;\n        this.match = data.match;\n    }\n}\n","import { PasswordHistoryResponse } from '../response/passwordHistoryResponse';\n\nexport class PasswordHistoryData {\n    password: string;\n    lastUsedDate: string;\n\n    constructor(response?: PasswordHistoryResponse) {\n        if (response == null) {\n            return;\n        }\n\n        this.password = response.password;\n        this.lastUsedDate = response.lastUsedDate;\n    }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteApi } from '../api/secureNoteApi';\n\nexport class SecureNoteData {\n    type: SecureNoteType;\n\n    constructor(data?: SecureNoteApi) {\n        if (data == null) {\n            return;\n        }\n\n        this.type = data.type;\n    }\n}\n","import { AttachmentData } from '../data/attachmentData';\n\nimport { AttachmentView } from '../view/attachmentView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nimport { CryptoService } from '../../abstractions/crypto.service';\n\nimport { Utils } from '../../misc/utils';\n\nexport class Attachment extends Domain {\n    id: string;\n    url: string;\n    size: string;\n    sizeName: string;\n    key: EncString;\n    fileName: EncString;\n\n    constructor(obj?: AttachmentData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.size = obj.size;\n        this.buildDomainModel(this, obj, {\n            id: null,\n            url: null,\n            sizeName: null,\n            fileName: null,\n            key: null,\n        }, alreadyEncrypted, ['id', 'url', 'sizeName']);\n    }\n\n    async decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<AttachmentView> {\n        const view = await this.decryptObj(new AttachmentView(this), {\n            fileName: null,\n        }, orgId, encKey);\n\n        if (this.key != null) {\n            let cryptoService: CryptoService;\n            const containerService = (Utils.global as any).bitwardenContainerService;\n            if (containerService) {\n                cryptoService = containerService.getCryptoService();\n            } else {\n                throw new Error('global bitwardenContainerService not initialized.');\n            }\n\n            try {\n                const orgKey = await cryptoService.getOrgKey(orgId);\n                const decValue = await cryptoService.decryptToBytes(this.key, orgKey ?? encKey);\n                view.key = new SymmetricCryptoKey(decValue);\n            } catch (e) {\n                // TODO: error?\n            }\n        }\n\n        return view;\n    }\n\n    toAttachmentData(): AttachmentData {\n        const a = new AttachmentData();\n        a.size = this.size;\n        this.buildDataModel(this, a, {\n            id: null,\n            url: null,\n            sizeName: null,\n            fileName: null,\n            key: null,\n        }, ['id', 'url', 'sizeName']);\n        return a;\n    }\n}\n","import { PasswordHistoryData } from '../data/passwordHistoryData';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nimport { PasswordHistoryView } from '../view/passwordHistoryView';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class Password extends Domain {\n    password: EncString;\n    lastUsedDate: Date;\n\n    constructor(obj?: PasswordHistoryData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            password: null,\n        }, alreadyEncrypted);\n        this.lastUsedDate = new Date(obj.lastUsedDate);\n    }\n\n    decrypt(orgId: string, encKey?: SymmetricCryptoKey): Promise<PasswordHistoryView> {\n         return this.decryptObj(new PasswordHistoryView(this), {\n            password: null,\n        }, orgId, encKey);\n    }\n\n    toPasswordHistoryData(): PasswordHistoryData {\n        const ph = new PasswordHistoryData();\n        ph.lastUsedDate = this.lastUsedDate.toISOString();\n        this.buildDataModel(this, ph, {\n            password: null,\n        });\n        return ph;\n    }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherCreateRequest {\n    cipher: CipherRequest;\n    collectionIds: string[];\n\n    constructor(cipher: Cipher) {\n        this.cipher = new CipherRequest(cipher);\n        this.collectionIds = cipher.collectionIds;\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class CardApi extends BaseResponse {\n    cardholderName: string;\n    brand: string;\n    number: string;\n    expMonth: string;\n    expYear: string;\n    code: string;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.cardholderName = this.getResponseProperty('CardholderName');\n        this.brand = this.getResponseProperty('Brand');\n        this.number = this.getResponseProperty('Number');\n        this.expMonth = this.getResponseProperty('ExpMonth');\n        this.expYear = this.getResponseProperty('ExpYear');\n        this.code = this.getResponseProperty('Code');\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { FieldType } from '../../enums/fieldType';\nimport { LinkedIdType } from '../../enums/linkedIdType';\n\nexport class FieldApi extends BaseResponse {\n    name: string;\n    value: string;\n    type: FieldType;\n    linkedId: LinkedIdType;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.type = this.getResponseProperty('Type');\n        this.name = this.getResponseProperty('Name');\n        this.value = this.getResponseProperty('Value');\n        this.linkedId = this.getResponseProperty('linkedId');\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nexport class IdentityApi extends BaseResponse {\n    title: string;\n    firstName: string;\n    middleName: string;\n    lastName: string;\n    address1: string;\n    address2: string;\n    address3: string;\n    city: string;\n    state: string;\n    postalCode: string;\n    country: string;\n    company: string;\n    email: string;\n    phone: string;\n    ssn: string;\n    username: string;\n    passportNumber: string;\n    licenseNumber: string;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.title = this.getResponseProperty('Title');\n        this.firstName = this.getResponseProperty('FirstName');\n        this.middleName = this.getResponseProperty('MiddleName');\n        this.lastName = this.getResponseProperty('LastName');\n        this.address1 = this.getResponseProperty('Address1');\n        this.address2 = this.getResponseProperty('Address2');\n        this.address3 = this.getResponseProperty('Address3');\n        this.city = this.getResponseProperty('City');\n        this.state = this.getResponseProperty('State');\n        this.postalCode = this.getResponseProperty('PostalCode');\n        this.country = this.getResponseProperty('Country');\n        this.company = this.getResponseProperty('Company');\n        this.email = this.getResponseProperty('Email');\n        this.phone = this.getResponseProperty('Phone');\n        this.ssn = this.getResponseProperty('SSN');\n        this.username = this.getResponseProperty('Username');\n        this.passportNumber = this.getResponseProperty('PassportNumber');\n        this.licenseNumber = this.getResponseProperty('LicenseNumber');\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { LoginUriApi } from './loginUriApi';\n\nexport class LoginApi extends BaseResponse {\n    uris: LoginUriApi[];\n    username: string;\n    password: string;\n    passwordRevisionDate: string;\n    totp: string;\n    autofillOnPageLoad: boolean;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.username = this.getResponseProperty('Username');\n        this.password = this.getResponseProperty('Password');\n        this.passwordRevisionDate = this.getResponseProperty('PasswordRevisionDate');\n        this.totp = this.getResponseProperty('Totp');\n        this.autofillOnPageLoad = this.getResponseProperty('AutofillOnPageLoad');\n\n        const uris = this.getResponseProperty('Uris');\n        if (uris != null) {\n            this.uris = uris.map((u: any) => new LoginUriApi(u));\n        }\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { UriMatchType } from '../../enums/uriMatchType';\n\nexport class LoginUriApi extends BaseResponse {\n    uri: string;\n    match: UriMatchType = null;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.uri = this.getResponseProperty('Uri');\n        const match = this.getResponseProperty('Match');\n        this.match = match != null ? match : null;\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nimport { SecureNoteType } from '../../enums/secureNoteType';\n\nexport class SecureNoteApi extends BaseResponse {\n    type: SecureNoteType;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n        this.type = this.getResponseProperty('Type');\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    forwardRef,\n    HostListener,\n    Input,\n    Renderer2,\n} from '@angular/core';\nimport {\n    ControlValueAccessor,\n    NgControl,\n    NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\n// ref: https://juristr.com/blog/2018/02/ng-true-value-directive/\n@Directive({\n    selector: 'input[type=checkbox][appTrueFalseValue]',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => TrueFalseValueDirective),\n            multi: true,\n        },\n    ],\n})\nexport class TrueFalseValueDirective implements ControlValueAccessor {\n    @Input() trueValue = true;\n    @Input() falseValue = false;\n\n    constructor(private elementRef: ElementRef, private renderer: Renderer2) { }\n\n    @HostListener('change', ['$event'])\n    onHostChange(ev: any) {\n        this.propagateChange(ev.target.checked ? this.trueValue : this.falseValue);\n    }\n\n    writeValue(obj: any): void {\n        if (obj === this.trueValue) {\n            this.renderer.setProperty(this.elementRef.nativeElement, 'checked', true);\n        } else {\n            this.renderer.setProperty(this.elementRef.nativeElement, 'checked', false);\n        }\n    }\n\n    registerOnChange(fn: any): void {\n        this.propagateChange = fn;\n    }\n\n    registerOnTouched(fn: any): void { /* nothing */ }\n\n    setDisabledState?(isDisabled: boolean): void { /* nothing */ }\n\n    private propagateChange = (_: any) => { /* nothing */ };\n}\n","import {\n    Directive,\n    ElementRef,\n    HostListener,\n    Input,\n} from '@angular/core';\n\n@Directive({\n    selector: '[appFallbackSrc]',\n})\nexport class FallbackSrcDirective {\n    @Input('appFallbackSrc') appFallbackSrc: string;\n\n    constructor(private el: ElementRef) {\n    }\n\n    @HostListener('error') onError() {\n        this.el.nativeElement.src = this.appFallbackSrc;\n    }\n}\n","import { Component } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { ImportService } from 'jslib-common/abstractions/import.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ImportComponent as BaseImportComponent } from '../../tools/import.component';\n\n@Component({\n    selector: 'app-org-import',\n    templateUrl: '../../tools/import.component.html',\n})\nexport class ImportComponent extends BaseImportComponent {\n    organizationName: string;\n\n    constructor(i18nService: I18nService, toasterService: ToasterService,\n        importService: ImportService, router: Router, private route: ActivatedRoute,\n        platformUtilsService: PlatformUtilsService, policyService: PolicyService,\n        private userService: UserService, logService: LogService) {\n        super(i18nService, toasterService, importService, router, platformUtilsService, policyService, logService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organizationId = params.organizationId;\n            this.successNavigate = ['organizations', this.organizationId, 'vault'];\n            await super.ngOnInit();\n            this.importBlockedByPolicy = false;\n        });\n        const organization = await this.userService.getOrganization(this.organizationId);\n        this.organizationName = organization.name;\n    }\n\n    async submit() {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('importWarning', this.organizationName),\n            this.i18nService.t('warning'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return;\n        }\n        super.submit();\n    }\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport {\n    InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponent,\n} from '../../tools/inactive-two-factor-report.component';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Component({\n    selector: 'app-inactive-two-factor-report',\n    templateUrl: '../../tools/inactive-two-factor-report.component.html',\n})\nexport class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent {\n    constructor(cipherService: CipherService, modalService: ModalService,\n        messagingService: MessagingService, userService: UserService,\n        private route: ActivatedRoute, logService: LogService, passwordRepromptService: PasswordRepromptService) {\n        super(cipherService, modalService, messagingService, userService, logService, passwordRepromptService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            await super.ngOnInit();\n        });\n    }\n\n    getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n    }\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport {\n    ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent,\n} from '../../tools/reused-passwords-report.component';\n\n@Component({\n    selector: 'app-reused-passwords-report',\n    templateUrl: '../../tools/reused-passwords-report.component.html',\n})\nexport class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent {\n    manageableCiphers: Cipher[];\n\n    constructor(cipherService: CipherService, modalService: ModalService,\n        messagingService: MessagingService, userService: UserService, passwordRepromptService: PasswordRepromptService,\n        private route: ActivatedRoute) {\n        super(cipherService, modalService, messagingService, userService, passwordRepromptService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            this.manageableCiphers = await this.cipherService.getAll();\n            await super.ngOnInit();\n        });\n    }\n\n    getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n    }\n\n    canManageCipher(c: CipherView): boolean {\n        return this.manageableCiphers.some(x => x.id === c.id);\n    }\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Component({\n    selector: 'app-org-tools',\n    templateUrl: 'tools.component.html',\n})\nexport class ToolsComponent {\n    organization: Organization;\n    accessReports = false;\n    loading = true;\n\n    constructor(private route: ActivatedRoute, private userService: UserService,\n        private messagingService: MessagingService) { }\n\n    ngOnInit() {\n        this.route.parent.params.subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            // TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now\n            // since all paid plans include useTotp\n            this.accessReports = this.organization.useTotp;\n            this.loading = false;\n        });\n    }\n\n    upgradeOrganization() {\n        this.messagingService.send('upgradeOrganization', { organizationId: this.organization.id });\n    }\n}\n","<div class=\"container page-content\"> <ng-container *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"!loading\"> <div class=\"row\"> <div class=\"col-3\"> <div class=\"card mb-4\" *ngIf=\"organization.canAccessImportExport\"> <div class=\"card-header\">{{'tools' | i18n}}</div> <div class=\"list-group list-group-flush\"> <a routerLink=\"import\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'importData' | i18n}} </a> <a routerLink=\"export\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'exportVault' | i18n}} </a> </div> </div> <div class=\"card\" *ngIf=\"organization.canAccessReports\"> <div class=\"card-header d-flex\"> {{'reports' | i18n}} <div class=\"ml-auto\"> <a href=\"#\" appStopClick class=\"badge badge-primary\" *ngIf=\"!accessReports\" (click)=\"upgradeOrganization()\"> {{'upgrade' | i18n}} </a> </div> </div> <div class=\"list-group list-group-flush\"> <a routerLink=\"exposed-passwords-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'exposedPasswordsReport' | i18n}} </a> <a routerLink=\"reused-passwords-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'reusedPasswordsReport' | i18n}} </a> <a routerLink=\"weak-passwords-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'weakPasswordsReport' | i18n}} </a> <a routerLink=\"unsecured-websites-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'unsecuredWebsitesReport' | i18n}} </a> <a routerLink=\"inactive-two-factor-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'inactive2faReport' | i18n}} </a> </div> </div> </div> <div class=\"col-9\"> <router-outlet></router-outlet> </div> </div> </ng-container> </div> ","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport {\n    UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponent,\n} from '../../tools/unsecured-websites-report.component';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Component({\n    selector: 'app-unsecured-websites-report',\n    templateUrl: '../../tools/unsecured-websites-report.component.html',\n})\nexport class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent {\n    constructor(cipherService: CipherService, modalService: ModalService,\n        messagingService: MessagingService, userService: UserService, passwordRepromptService: PasswordRepromptService,\n        private route: ActivatedRoute) {\n        super(cipherService, modalService, messagingService, userService, passwordRepromptService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            await super.ngOnInit();\n        });\n    }\n\n    getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n    }\n}\n","import { Component } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport {\n    WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent,\n} from '../../tools/weak-passwords-report.component';\n\n@Component({\n    selector: 'app-weak-passwords-report',\n    templateUrl: '../../tools/weak-passwords-report.component.html',\n})\nexport class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent {\n    manageableCiphers: Cipher[];\n\n    constructor(cipherService: CipherService, passwordGenerationService: PasswordGenerationService,\n        modalService: ModalService, messagingService: MessagingService,\n        userService: UserService, passwordRepromptService: PasswordRepromptService, private route: ActivatedRoute) {\n        super(cipherService, passwordGenerationService, modalService, messagingService, userService,\n            passwordRepromptService);\n    }\n\n    async ngOnInit() {\n        this.route.parent.parent.params.subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            this.manageableCiphers = await this.cipherService.getAll();\n            await super.ngOnInit();\n        });\n    }\n\n    getAllCiphers(): Promise<CipherView[]> {\n        return this.cipherService.getAllFromApiForOrganization(this.organization.id);\n    }\n\n    canManageCipher(c: CipherView): boolean {\n        return this.manageableCiphers.some(x => x.id === c.id);\n    }\n}\n","import {\n    ChangeDetectorRef,\n    Component,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { EntityEventsComponent } from '../manage/entity-events.component';\nimport { AddEditComponent } from './add-edit.component';\nimport { AttachmentsComponent } from './attachments.component';\nimport { CiphersComponent } from './ciphers.component';\nimport { CollectionsComponent } from './collections.component';\nimport { GroupingsComponent } from './groupings.component';\n\nconst BroadcasterSubscriptionId = 'OrgVaultComponent';\n\n@Component({\n    selector: 'app-org-vault',\n    templateUrl: 'vault.component.html',\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n    @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n    @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n    @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n    @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n    @ViewChild('collections', { read: ViewContainerRef, static: true }) collectionsModalRef: ViewContainerRef;\n    @ViewChild('eventsTemplate', { read: ViewContainerRef, static: true }) eventsModalRef: ViewContainerRef;\n\n    organization: Organization;\n    collectionId: string = null;\n    type: CipherType = null;\n    deleted: boolean = false;\n    trashCleanupWarning: string = null;\n\n    constructor(private route: ActivatedRoute, private userService: UserService,\n        private router: Router, private changeDetectorRef: ChangeDetectorRef,\n        private syncService: SyncService, private i18nService: I18nService,\n        private modalService: ModalService, private messagingService: MessagingService,\n        private broadcasterService: BroadcasterService, private ngZone: NgZone,\n        private platformUtilsService: PlatformUtilsService) { }\n\n    ngOnInit() {\n        this.trashCleanupWarning = this.i18nService.t('trashCleanupWarningSelfHosted');\n\n        this.route.parent.params.pipe(first()).subscribe(async params => {\n            this.organization = await this.userService.getOrganization(params.organizationId);\n            this.groupingsComponent.organization = this.organization;\n            this.ciphersComponent.organization = this.organization;\n\n            this.route.queryParams.pipe(first()).subscribe(async qParams => {\n                this.ciphersComponent.searchText = this.groupingsComponent.searchText = qParams.search;\n                if (!this.organization.canViewAllCollections) {\n                    await this.syncService.fullSync(false);\n                    this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n                        this.ngZone.run(async () => {\n                            switch (message.command) {\n                                case 'syncCompleted':\n                                    if (message.successfully) {\n                                        await Promise.all([\n                                            this.groupingsComponent.load(),\n                                            this.ciphersComponent.refresh(),\n                                        ]);\n                                        this.changeDetectorRef.detectChanges();\n                                    }\n                                    break;\n                            }\n                        });\n                    });\n                }\n                await this.groupingsComponent.load();\n\n                if (qParams == null) {\n                    this.groupingsComponent.selectedAll = true;\n                    await this.ciphersComponent.reload();\n                } else {\n                    if (qParams.deleted) {\n                        this.groupingsComponent.selectedTrash = true;\n                        await this.filterDeleted(true);\n                    } else if (qParams.type) {\n                        const t = parseInt(qParams.type, null);\n                        this.groupingsComponent.selectedType = t;\n                        await this.filterCipherType(t, true);\n                    } else if (qParams.collectionId) {\n                        this.groupingsComponent.selectedCollectionId = qParams.collectionId;\n                        await this.filterCollection(qParams.collectionId, true);\n                    } else {\n                        this.groupingsComponent.selectedAll = true;\n                        await this.ciphersComponent.reload();\n                    }\n                }\n\n                if (qParams.viewEvents != null) {\n                    const cipher = this.ciphersComponent.ciphers.filter(c => c.id === qParams.viewEvents);\n                    if (cipher.length > 0) {\n                        this.viewEvents(cipher[0]);\n                    }\n                }\n            });\n        });\n    }\n\n    ngOnDestroy() {\n        this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n    }\n\n    async clearGroupingFilters() {\n        this.ciphersComponent.showAddNew = true;\n        this.ciphersComponent.deleted = false;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchVault');\n        await this.ciphersComponent.applyFilter();\n        this.clearFilters();\n        this.go();\n    }\n\n    async filterCipherType(type: CipherType, load = false) {\n        this.ciphersComponent.showAddNew = true;\n        this.ciphersComponent.deleted = false;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');\n        const filter = (c: CipherView) => c.type === type;\n        if (load) {\n            await this.ciphersComponent.reload(filter);\n        } else {\n            await this.ciphersComponent.applyFilter(filter);\n        }\n        this.clearFilters();\n        this.type = type;\n        this.go();\n    }\n\n    async filterCollection(collectionId: string, load = false) {\n        this.ciphersComponent.showAddNew = true;\n        this.ciphersComponent.deleted = false;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');\n        const filter = (c: CipherView) => {\n            if (collectionId === 'unassigned') {\n                return c.collectionIds == null || c.collectionIds.length === 0;\n            } else {\n                return c.collectionIds != null && c.collectionIds.indexOf(collectionId) > -1;\n            }\n        };\n        if (load) {\n            await this.ciphersComponent.reload(filter);\n        } else {\n            await this.ciphersComponent.applyFilter(filter);\n        }\n        this.clearFilters();\n        this.collectionId = collectionId;\n        this.go();\n    }\n\n    async filterDeleted(load: boolean = false) {\n        this.ciphersComponent.showAddNew = false;\n        this.ciphersComponent.deleted = true;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchTrash');\n        if (load) {\n            await this.ciphersComponent.reload(null, true);\n        } else {\n            await this.ciphersComponent.applyFilter(null);\n        }\n        this.clearFilters();\n        this.deleted = true;\n        this.go();\n    }\n\n    filterSearchText(searchText: string) {\n        this.ciphersComponent.searchText = searchText;\n        this.ciphersComponent.search(200);\n    }\n\n    async editCipherAttachments(cipher: CipherView) {\n        if (this.organization.maxStorageGb == null || this.organization.maxStorageGb === 0) {\n            this.messagingService.send('upgradeOrganization', { organizationId: cipher.organizationId });\n            return;\n        }\n\n        let madeAttachmentChanges = false;\n\n        const [modal] = await this.modalService.openViewRef(AttachmentsComponent, this.attachmentsModalRef, comp => {\n            comp.organization = this.organization;\n            comp.cipherId = cipher.id;\n            comp.onUploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n            comp.onDeletedAttachment.subscribe(() => madeAttachmentChanges = true);\n        });\n\n        modal.onClosed.subscribe(async () => {\n            if (madeAttachmentChanges) {\n                await this.ciphersComponent.refresh();\n            }\n            madeAttachmentChanges = false;\n        });\n    }\n\n    async editCipherCollections(cipher: CipherView) {\n        const [modal] = await this.modalService.openViewRef(CollectionsComponent, this.collectionsModalRef, comp => {\n            if (this.organization.canEditAnyCollection) {\n                comp.collectionIds = cipher.collectionIds;\n                comp.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n            }\n            comp.organization = this.organization;\n            comp.cipherId = cipher.id;\n            comp.onSavedCollections.subscribe(async () => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n    }\n\n    async addCipher() {\n        const component = await this.editCipher(null);\n        component.organizationId = this.organization.id;\n        component.type = this.type;\n        if (this.organization.canEditAnyCollection) {\n            component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n        }\n        if (this.collectionId != null) {\n            component.collectionIds = [this.collectionId];\n        }\n    }\n\n    async editCipher(cipher: CipherView) {\n        const [modal, childComponent] = await this.modalService.openViewRef(AddEditComponent, this.cipherAddEditModalRef, comp => {\n            comp.organization = this.organization;\n            comp.cipherId = cipher == null ? null : cipher.id;\n            comp.onSavedCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n            comp.onDeletedCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n            comp.onRestoredCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n\n        return childComponent;\n    }\n\n    async cloneCipher(cipher: CipherView) {\n        const component = await this.editCipher(cipher);\n        component.cloneMode = true;\n        component.organizationId = this.organization.id;\n        if (this.organization.canEditAnyCollection) {\n            component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);\n        }\n        // Regardless of Admin state, the collection Ids need to passed manually as they are not assigned value\n        // in the add-edit componenet\n        component.collectionIds = cipher.collectionIds;\n    }\n\n    async viewEvents(cipher: CipherView) {\n        await this.modalService.openViewRef(EntityEventsComponent, this.eventsModalRef, comp => {\n            comp.name = cipher.name;\n            comp.organizationId = this.organization.id;\n            comp.entityId = cipher.id;\n            comp.showUser = true;\n            comp.entity = 'cipher';\n        });\n    }\n\n    private clearFilters() {\n        this.collectionId = null;\n        this.type = null;\n        this.deleted = false;\n    }\n\n    private go(queryParams: any = null) {\n        if (queryParams == null) {\n            queryParams = {\n                type: this.type,\n                collectionId: this.collectionId,\n                deleted: this.deleted ? true : null,\n            };\n        }\n\n        this.router.navigate([], {\n            relativeTo: this.route,\n            queryParams: queryParams,\n            replaceUrl: true,\n        });\n    }\n}\n","<div class=\"container page-content\"> <div class=\"row\"> <div class=\"col-3\"> <app-org-vault-groupings [showFolders]=\"false\" [showFavorites]=\"false\" [showTrash]=\"true\" (onAllClicked)=\"clearGroupingFilters()\" (onCipherTypeClicked)=\"filterCipherType($event)\" (onCollectionClicked)=\"filterCollection($event.id)\" (onSearchTextChanged)=\"filterSearchText($event)\" (onTrashClicked)=\"filterDeleted()\"> </app-org-vault-groupings> </div> <div class=\"col-9\"> <div class=\"page-header d-flex\"> <h1> {{'vault' | i18n}} <small #actionSpinner [appApiAction]=\"ciphersComponent.actionPromise\"> <ng-container *ngIf=\"actionSpinner.loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> </small> </h1> <div class=\"ml-auto d-flex\"> <app-vault-bulk-actions [ciphersComponent]=\"ciphersComponent\" [deleted]=\"deleted\" [organization]=\"organization\"> </app-vault-bulk-actions> <button type=\"button\" class=\"btn btn-outline-primary btn-sm ml-auto\" (click)=\"addCipher()\" *ngIf=\"!deleted\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i>{{'addItem' | i18n}} </button> </div> </div> <app-callout type=\"warning\" *ngIf=\"deleted\" icon=\"fa-warning\"> {{trashCleanupWarning}} </app-callout> <app-org-vault-ciphers (onCipherClicked)=\"editCipher($event)\" (onAttachmentsClicked)=\"editCipherAttachments($event)\" (onAddCipher)=\"addCipher()\" (onCollectionsClicked)=\"editCipherCollections($event)\" (onEventsClicked)=\"viewEvents($event)\" (onCloneClicked)=\"cloneCipher($event)\"> </app-org-vault-ciphers> </div> </div> </div> <ng-template #attachments></ng-template> <ng-template #cipherAddEdit></ng-template> <ng-template #collections></ng-template> <ng-template #eventsTemplate></ng-template> ","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherData } from 'jslib-common/models/data/cipherData';\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { Organization } from 'jslib-common/models/domain/organization';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from '../../vault/attachments.component';\n\n@Component({\n    selector: 'app-org-vault-attachments',\n    templateUrl: '../../vault/attachments.component.html',\n})\nexport class AttachmentsComponent extends BaseAttachmentsComponent {\n    viewOnly = false;\n    organization: Organization;\n\n    constructor(cipherService: CipherService, i18nService: I18nService,\n        cryptoService: CryptoService, userService: UserService,\n        platformUtilsService: PlatformUtilsService, apiService: ApiService,\n        logService: LogService) {\n        super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService,\n            logService);\n    }\n\n    protected async reupload(attachment: AttachmentView) {\n        if (this.organization.canEditAnyCollection && this.showFixOldAttachments(attachment)) {\n            await super.reuploadCipherAttachment(attachment, true);\n        }\n    }\n\n    protected async loadCipher() {\n        if (!this.organization.canEditAnyCollection) {\n            return await super.loadCipher();\n        }\n        const response = await this.apiService.getCipherAdmin(this.cipherId);\n        return new Cipher(new CipherData(response));\n    }\n\n    protected saveCipherAttachment(file: File) {\n        return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file, this.organization.canEditAnyCollection);\n    }\n\n    protected deleteCipherAttachment(attachmentId: string) {\n        if (!this.organization.canEditAnyCollection) {\n            return super.deleteCipherAttachment(attachmentId);\n        }\n        return this.apiService.deleteCipherAttachmentAdmin(this.cipherId, attachmentId);\n    }\n\n    protected showFixOldAttachments(attachment: AttachmentView) {\n        return attachment.key == null && this.organization.canEditAnyCollection;\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { ErrorResponse } from 'jslib-common/models/response/errorResponse';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Directive()\nexport class AttachmentsComponent implements OnInit {\n    @Input() cipherId: string;\n    @Output() onUploadedAttachment = new EventEmitter();\n    @Output() onDeletedAttachment = new EventEmitter();\n    @Output() onReuploadedAttachment = new EventEmitter();\n\n    cipher: CipherView;\n    cipherDomain: Cipher;\n    hasUpdatedKey: boolean;\n    canAccessAttachments: boolean;\n    formPromise: Promise<any>;\n    deletePromises: { [id: string]: Promise<any>; } = {};\n    reuploadPromises: { [id: string]: Promise<any>; } = {};\n    emergencyAccessId?: string = null;\n\n    constructor(protected cipherService: CipherService, protected i18nService: I18nService,\n        protected cryptoService: CryptoService, protected userService: UserService,\n        protected platformUtilsService: PlatformUtilsService, protected apiService: ApiService,\n        protected win: Window, private logService: LogService) { }\n\n    async ngOnInit() {\n        await this.init();\n    }\n\n    async submit() {\n        if (!this.hasUpdatedKey) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('updateKey'));\n            return;\n        }\n\n        const fileEl = document.getElementById('file') as HTMLInputElement;\n        const files = fileEl.files;\n        if (files == null || files.length === 0) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('selectFile'));\n            return;\n        }\n\n        if (files[0].size > 524288000) { // 500 MB\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('maxFileSize'));\n            return;\n        }\n\n        try {\n            this.formPromise = this.saveCipherAttachment(files[0]);\n            this.cipherDomain = await this.formPromise;\n            this.cipher = await this.cipherDomain.decrypt();\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('attachmentSaved'));\n            this.onUploadedAttachment.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        // reset file input\n        // ref: https://stackoverflow.com/a/20552042\n        fileEl.type = '';\n        fileEl.type = 'file';\n        fileEl.value = '';\n    }\n\n    async delete(attachment: AttachmentView) {\n        if (this.deletePromises[attachment.id] != null) {\n            return;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteAttachmentConfirmation'), this.i18nService.t('deleteAttachment'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return;\n        }\n\n        try {\n            this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n            await this.deletePromises[attachment.id];\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedAttachment'));\n            const i = this.cipher.attachments.indexOf(attachment);\n            if (i > -1) {\n                this.cipher.attachments.splice(i, 1);\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        this.deletePromises[attachment.id] = null;\n        this.onDeletedAttachment.emit();\n    }\n\n    async download(attachment: AttachmentView) {\n        const a = (attachment as any);\n        if (a.downloading) {\n            return;\n        }\n\n        if (!this.canAccessAttachments) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('premiumRequired'),\n                this.i18nService.t('premiumRequiredDesc'));\n            return;\n        }\n\n        let url: string;\n        try {\n            const attachmentDownloadResponse = await this.apiService.getAttachmentData(this.cipher.id, attachment.id,\n                this.emergencyAccessId);\n            url = attachmentDownloadResponse.url;\n        } catch (e) {\n            if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n                url = attachment.url;\n            } else if (e instanceof ErrorResponse) {\n                throw new Error((e as ErrorResponse).getSingleMessage());\n            } else {\n                throw e;\n            }\n        }\n\n        a.downloading = true;\n        const response = await fetch(new Request(url, { cache: 'no-store' }));\n        if (response.status !== 200) {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n            a.downloading = false;\n            return;\n        }\n\n        try {\n            const buf = await response.arrayBuffer();\n            const key = attachment.key != null ? attachment.key :\n                await this.cryptoService.getOrgKey(this.cipher.organizationId);\n            const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n            this.platformUtilsService.saveFile(this.win, decBuf, null, attachment.fileName);\n        } catch (e) {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n        }\n\n        a.downloading = false;\n    }\n\n    protected async init() {\n        this.cipherDomain = await this.loadCipher();\n        this.cipher = await this.cipherDomain.decrypt();\n\n        this.hasUpdatedKey = await this.cryptoService.hasEncKey();\n        const canAccessPremium = await this.userService.canAccessPremium();\n        this.canAccessAttachments = canAccessPremium || this.cipher.organizationId != null;\n\n        if (!this.canAccessAttachments) {\n            const confirmed = await this.platformUtilsService.showDialog(\n                this.i18nService.t('premiumRequiredDesc'), this.i18nService.t('premiumRequired'),\n                this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n            if (confirmed) {\n                this.platformUtilsService.launchUri('https://vault.bitwarden.com/#/?premium=purchase');\n            }\n        } else if (!this.hasUpdatedKey) {\n            const confirmed = await this.platformUtilsService.showDialog(\n                this.i18nService.t('updateKey'), this.i18nService.t('featureUnavailable'),\n                this.i18nService.t('learnMore'), this.i18nService.t('cancel'), 'warning');\n            if (confirmed) {\n                this.platformUtilsService.launchUri('https://help.bitwarden.com/article/update-encryption-key/');\n            }\n        }\n    }\n\n    protected async reuploadCipherAttachment(attachment: AttachmentView, admin: boolean) {\n        const a = (attachment as any);\n        if (attachment.key != null || a.downloading || this.reuploadPromises[attachment.id] != null) {\n            return;\n        }\n\n        try {\n            this.reuploadPromises[attachment.id] = Promise.resolve().then(async () => {\n                // 1. Download\n                a.downloading = true;\n                const response = await fetch(new Request(attachment.url, { cache: 'no-store' }));\n                if (response.status !== 200) {\n                    this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n                    a.downloading = false;\n                    return;\n                }\n\n                try {\n                    // 2. Resave\n                    const buf = await response.arrayBuffer();\n                    const key = attachment.key != null ? attachment.key :\n                        await this.cryptoService.getOrgKey(this.cipher.organizationId);\n                    const decBuf = await this.cryptoService.decryptFromBytes(buf, key);\n                    this.cipherDomain = await this.cipherService.saveAttachmentRawWithServer(\n                        this.cipherDomain, attachment.fileName, decBuf, admin);\n                    this.cipher = await this.cipherDomain.decrypt();\n\n                    // 3. Delete old\n                    this.deletePromises[attachment.id] = this.deleteCipherAttachment(attachment.id);\n                    await this.deletePromises[attachment.id];\n                    const foundAttachment = this.cipher.attachments.filter(a2 => a2.id === attachment.id);\n                    if (foundAttachment.length > 0) {\n                        const i = this.cipher.attachments.indexOf(foundAttachment[0]);\n                        if (i > -1) {\n                            this.cipher.attachments.splice(i, 1);\n                        }\n                    }\n\n                    this.platformUtilsService.showToast('success', null, this.i18nService.t('attachmentSaved'));\n                    this.onReuploadedAttachment.emit();\n                } catch (e) {\n                    this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n                }\n\n                a.downloading = false;\n            });\n            await this.reuploadPromises[attachment.id];\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    protected loadCipher() {\n        return this.cipherService.get(this.cipherId);\n    }\n\n    protected saveCipherAttachment(file: File) {\n        return this.cipherService.saveAttachmentWithServer(this.cipherDomain, file);\n    }\n\n    protected deleteCipherAttachment(attachmentId: string) {\n        return this.cipherService.deleteAttachmentWithServer(this.cipher.id, attachmentId);\n    }\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CipherData } from 'jslib-common/models/data/cipherData';\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherCollectionsRequest } from 'jslib-common/models/request/cipherCollectionsRequest';\n\nimport { CollectionsComponent as BaseCollectionsComponent } from '../../vault/collections.component';\n\n@Component({\n    selector: 'app-org-vault-collections',\n    templateUrl: '../../vault/collections.component.html',\n})\nexport class CollectionsComponent extends BaseCollectionsComponent {\n    organization: Organization;\n\n    constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n        i18nService: I18nService, cipherService: CipherService,\n        private apiService: ApiService, logService: LogService) {\n        super(collectionService, platformUtilsService, i18nService, cipherService, logService);\n        this.allowSelectNone = true;\n    }\n\n    protected async loadCipher() {\n        if (!this.organization.canViewAllCollections) {\n            return await super.loadCipher();\n        }\n        const response = await this.apiService.getCipherAdmin(this.cipherId);\n        return new Cipher(new CipherData(response));\n    }\n\n    protected loadCipherCollections() {\n        if (!this.organization.canViewAllCollections) {\n            return super.loadCipherCollections();\n        }\n        return this.collectionIds;\n    }\n\n    protected loadCollections() {\n        if (!this.organization.canViewAllCollections) {\n            return super.loadCollections();\n        }\n        return Promise.resolve(this.collections);\n    }\n\n    protected saveCollections() {\n        if (this.organization.canEditAnyCollection) {\n            const request = new CipherCollectionsRequest(this.cipherDomain.collectionIds);\n            return this.apiService.putCipherCollectionsAdmin(this.cipherId, request);\n        } else {\n            return super.saveCollections();\n        }\n    }\n}\n","export class CipherCollectionsRequest {\n    collectionIds: string[];\n\n    constructor(collectionIds: string[]) {\n        this.collectionIds = collectionIds == null ? [] : collectionIds;\n    }\n}\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherBulkDeleteRequest } from 'jslib-common/models/request/cipherBulkDeleteRequest';\n\n@Component({\n    selector: 'app-vault-bulk-delete',\n    templateUrl: 'bulk-delete.component.html',\n})\nexport class BulkDeleteComponent {\n    @Input() cipherIds: string[] = [];\n    @Input() permanent: boolean = false;\n    @Input() organization: Organization;\n    @Output() onDeleted = new EventEmitter();\n\n    formPromise: Promise<any>;\n\n    constructor(private cipherService: CipherService, private toasterService: ToasterService,\n        private i18nService: I18nService, private apiService: ApiService) { }\n\n    async submit() {\n        if (!this.organization || !this.organization.canEditAnyCollection) {\n            await this.deleteCiphers();\n        } else {\n            await this.deleteCiphersAdmin();\n        }\n\n        await this.formPromise;\n\n        this.onDeleted.emit();\n        this.toasterService.popAsync('success', null, this.i18nService.t(this.permanent ? 'permanentlyDeletedItems'\n            : 'deletedItems'));\n    }\n\n    private async deleteCiphers() {\n        if (this.permanent) {\n            this.formPromise = await this.cipherService.deleteManyWithServer(this.cipherIds);\n        } else {\n            this.formPromise = await this.cipherService.softDeleteManyWithServer(this.cipherIds);\n        }\n    }\n\n    private async deleteCiphersAdmin() {\n        const deleteRequest = new CipherBulkDeleteRequest(this.cipherIds, this.organization.id);\n        if (this.permanent) {\n            this.formPromise = await this.apiService.deleteManyCiphersAdmin(deleteRequest);\n        } else {\n            this.formPromise = await this.apiService.putDeleteManyCiphersAdmin(deleteRequest);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"deleteSelectedTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-sm\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"deleteSelectedTitle\"> {{(permanent ? 'permanentlyDeleteSelected' : 'deleteSelected') | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> {{(permanent ? 'permanentlyDeleteSelectedItemsDesc' : 'deleteSelectedItemsDesc') | i18n: cipherIds.length}} </div> <div class=\"modal-footer\"> <button appAutoFocus type=\"submit\" class=\"btn btn-danger btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{(permanent ? 'permanentlyDelete' : 'delete') | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","export class CipherBulkDeleteRequest {\n    ids: string[];\n    organizationId: string;\n\n    constructor(ids: string[], organizationId?: string) {\n        this.ids = ids == null ? [] : ids;\n        this.organizationId = organizationId;\n    }\n}\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { FolderView } from 'jslib-common/models/view/folderView';\n\n@Component({\n    selector: 'app-vault-bulk-move',\n    templateUrl: 'bulk-move.component.html',\n})\nexport class BulkMoveComponent implements OnInit {\n    @Input() cipherIds: string[] = [];\n    @Output() onMoved = new EventEmitter();\n\n    folderId: string = null;\n    folders: FolderView[] = [];\n    formPromise: Promise<any>;\n\n    constructor(private cipherService: CipherService, private toasterService: ToasterService,\n        private i18nService: I18nService, private folderService: FolderService) { }\n\n    async ngOnInit() {\n        this.folders = await this.folderService.getAllDecrypted();\n        this.folderId = this.folders[0].id;\n    }\n\n    async submit() {\n        this.formPromise = this.cipherService.moveManyWithServer(this.cipherIds, this.folderId);\n        await this.formPromise;\n        this.onMoved.emit();\n        this.toasterService.popAsync('success', null, this.i18nService.t('movedItems'));\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"moveSelectedTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-sm\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"moveSelectedTitle\"> {{'moveSelected' | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{'moveSelectedItemsDesc' | i18n: cipherIds.length}}</p> <div class=\"form-group\"> <label for=\"folder\">{{'folder' | i18n}}</label> <select id=\"folder\" name=\"FolderId\" [(ngModel)]=\"folderId\" class=\"form-control\"> <option *ngFor=\"let f of folders\" [ngValue]=\"f.id\">{{f.name}}</option> </select> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\n@Component({\n    selector: 'app-vault-bulk-restore',\n    templateUrl: 'bulk-restore.component.html',\n})\nexport class BulkRestoreComponent {\n    @Input() cipherIds: string[] = [];\n    @Output() onRestored = new EventEmitter();\n\n    formPromise: Promise<any>;\n\n    constructor(private cipherService: CipherService, private toasterService: ToasterService,\n        private i18nService: I18nService) { }\n\n    async submit() {\n        this.formPromise = this.cipherService.restoreManyWithServer(this.cipherIds);\n        await this.formPromise;\n        this.onRestored.emit();\n        this.toasterService.popAsync('success', null, this.i18nService.t('restoredItems'));\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"restoreSelectedTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-sm\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"restoreSelectedTitle\"> {{'restoreSelected' | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> {{'restoreSelectedItemsDesc' | i18n: cipherIds.length}} </div> <div class=\"modal-footer\"> <button appAutoFocus type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'restore' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n    selector: 'app-vault-bulk-share',\n    templateUrl: 'bulk-share.component.html',\n})\nexport class BulkShareComponent implements OnInit {\n    @Input() ciphers: CipherView[] = [];\n    @Input() organizationId: string;\n    @Output() onShared = new EventEmitter();\n\n    nonShareableCount = 0;\n    collections: CollectionView[] = [];\n    organizations: Organization[] = [];\n    shareableCiphers: CipherView[] = [];\n    formPromise: Promise<any>;\n\n    private writeableCollections: CollectionView[] = [];\n\n    constructor(private cipherService: CipherService, private toasterService: ToasterService,\n        private i18nService: I18nService, private collectionService: CollectionService,\n        private userService: UserService, private logService: LogService) { }\n\n    async ngOnInit() {\n        this.shareableCiphers = this.ciphers.filter(c => !c.hasOldAttachments && c.organizationId == null);\n        this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;\n        const allCollections = await this.collectionService.getAllDecrypted();\n        this.writeableCollections = allCollections.filter(c => !c.readOnly);\n        this.organizations = await this.userService.getAllOrganizations();\n        if (this.organizationId == null && this.organizations.length > 0) {\n            this.organizationId = this.organizations[0].id;\n        }\n        this.filterCollections();\n    }\n\n    ngOnDestroy() {\n        this.selectAll(false);\n    }\n\n    filterCollections() {\n        this.selectAll(false);\n        if (this.organizationId == null || this.writeableCollections.length === 0) {\n            this.collections = [];\n        } else {\n            this.collections = this.writeableCollections.filter(c => c.organizationId === this.organizationId);\n        }\n    }\n\n    async submit() {\n        const checkedCollectionIds = this.collections.filter(c => (c as any).checked).map(c => c.id);\n        try {\n            this.formPromise = this.cipherService.shareManyWithServer(this.shareableCiphers, this.organizationId,\n                checkedCollectionIds);\n            await this.formPromise;\n            this.onShared.emit();\n            const orgName = this.organizations.find(o => o.id === this.organizationId)?.name ?? this.i18nService.t('organization');\n            this.toasterService.popAsync('success', null, this.i18nService.t('movedItemsToOrg', orgName));\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    check(c: CollectionView, select?: boolean) {\n        (c as any).checked = select == null ? !(c as any).checked : select;\n    }\n\n    selectAll(select: boolean) {\n        const collections = select ? this.collections : this.writeableCollections;\n        collections.forEach(c => this.check(c, select));\n    }\n\n    get canSave() {\n        if (this.shareableCiphers != null && this.shareableCiphers.length > 0 && this.collections != null) {\n            for (let i = 0; i < this.collections.length; i++) {\n                if ((this.collections[i] as any).checked) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"moveSelectedToOrgTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"moveSelectedToOrgTitle\"> {{'moveSelectedToOrg' | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{'moveManyToOrgDesc' | i18n}}</p> <p>{{'moveSelectedItemsCountDesc' | i18n: this.ciphers.length : shareableCiphers.length : nonShareableCount}} </p> <div class=\"form-group\"> <label for=\"organization\">{{'organization' | i18n}}</label> <select id=\"organization\" name=\"OrganizationId\" [(ngModel)]=\"organizationId\" class=\"form-control\" (change)=\"filterCollections()\"> <option *ngFor=\"let o of organizations\" [ngValue]=\"o.id\">{{o.name}}</option> </select> </div> <div class=\"d-flex\"> <h3>{{'collections' | i18n}}</h3> <div class=\"ml-auto d-flex\" *ngIf=\"collections && collections.length\"> <button type=\"button\" (click)=\"selectAll(true)\" class=\"btn btn-link btn-sm py-0\"> {{'selectAll' | i18n}} </button> <button type=\"button\" (click)=\"selectAll(false)\" class=\"btn btn-link btn-sm py-0\"> {{'unselectAll' | i18n}} </button> </div> </div> <div *ngIf=\"!collections || !collections.length\"> {{'noCollectionsInList' | i18n}} </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"collections && collections.length\"> <tbody> <tr *ngFor=\"let c of collections; let i = index\" (click)=\"check(c)\"> <td class=\"table-list-checkbox\"> <input type=\"checkbox\" [(ngModel)]=\"c.checked\" name=\"Collection[{{i}}].Checked\" appStopProp> </td> <td> {{c.name}} </td> </tr> </tbody> </table> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit manual\" [disabled]=\"form.loading || !canSave\" [ngClass]=\"{loading:form.loading}\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { ActivatedRoute } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { SendAccess } from 'jslib-common/models/domain/sendAccess';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { SendAccessView } from 'jslib-common/models/view/sendAccessView';\n\nimport { SendType } from 'jslib-common/enums/sendType';\nimport { SendAccessRequest } from 'jslib-common/models/request/sendAccessRequest';\nimport { ErrorResponse } from 'jslib-common/models/response/errorResponse';\n\nimport { SendAccessResponse } from 'jslib-common/models/response/sendAccessResponse';\n\n@Component({\n    selector: 'app-send-access',\n    templateUrl: 'access.component.html',\n})\nexport class AccessComponent implements OnInit {\n    send: SendAccessView;\n    sendType = SendType;\n    downloading = false;\n    loading = true;\n    passwordRequired = false;\n    formPromise: Promise<SendAccessResponse>;\n    password: string;\n    showText = false;\n    unavailable = false;\n    error = false;\n    hideEmail = false;\n\n    private id: string;\n    private key: string;\n    private decKey: SymmetricCryptoKey;\n    private accessRequest: SendAccessRequest;\n\n    constructor(private i18nService: I18nService, private cryptoFunctionService: CryptoFunctionService,\n        private apiService: ApiService, private platformUtilsService: PlatformUtilsService,\n        private route: ActivatedRoute, private cryptoService: CryptoService) {\n    }\n\n    get sendText() {\n        if (this.send == null || this.send.text == null) {\n            return null;\n        }\n        return this.showText ? this.send.text.text : this.send.text.maskedText;\n    }\n\n    get expirationDate() {\n        if (this.send == null || this.send.expirationDate == null) {\n            return null;\n        }\n        return this.send.expirationDate;\n    }\n\n    get creatorIdentifier() {\n        if (this.send == null || this.send.creatorIdentifier == null) {\n            return null;\n        }\n        return this.send.creatorIdentifier;\n    }\n\n    ngOnInit() {\n        this.route.params.subscribe(async params => {\n            this.id = params.sendId;\n            this.key = params.key;\n            if (this.key == null || this.id == null) {\n                return;\n            }\n            await this.load();\n        });\n    }\n\n    async download() {\n        if (this.send == null || this.decKey == null) {\n            return;\n        }\n\n        if (this.downloading) {\n            return;\n        }\n\n\n        const downloadData = await this.apiService.getSendFileDownloadData(this.send, this.accessRequest);\n\n        if (Utils.isNullOrWhitespace(downloadData.url)) {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('missingSendFile'));\n            return;\n        }\n\n        this.downloading = true;\n        const response = await fetch(new Request(downloadData.url, { cache: 'no-store' }));\n        if (response.status !== 200) {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n            this.downloading = false;\n            return;\n        }\n\n        try {\n            const buf = await response.arrayBuffer();\n            const decBuf = await this.cryptoService.decryptFromBytes(buf, this.decKey);\n            this.platformUtilsService.saveFile(window, decBuf, null, this.send.file.fileName);\n        } catch (e) {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n        }\n\n        this.downloading = false;\n    }\n\n    copyText() {\n        this.platformUtilsService.copyToClipboard(this.send.text.text);\n        this.platformUtilsService.showToast('success', null,\n            this.i18nService.t('valueCopied', this.i18nService.t('sendTypeText')));\n    }\n\n    toggleText() {\n        this.showText = !this.showText;\n    }\n\n    async load() {\n        this.unavailable = false;\n        this.error = false;\n        this.hideEmail = false;\n        const keyArray = Utils.fromUrlB64ToArray(this.key);\n        this.accessRequest = new SendAccessRequest();\n        if (this.password != null) {\n            const passwordHash = await this.cryptoFunctionService.pbkdf2(this.password, keyArray, 'sha256', 100000);\n            this.accessRequest.password = Utils.fromBufferToB64(passwordHash);\n        }\n        try {\n            let sendResponse: SendAccessResponse = null;\n            if (this.loading) {\n                sendResponse = await this.apiService.postSendAccess(this.id, this.accessRequest);\n            } else {\n                this.formPromise = this.apiService.postSendAccess(this.id, this.accessRequest);\n                sendResponse = await this.formPromise;\n            }\n            this.passwordRequired = false;\n            const sendAccess = new SendAccess(sendResponse);\n            this.decKey = await this.cryptoService.makeSendKey(keyArray);\n            this.send = await sendAccess.decrypt(this.decKey);\n            this.showText = this.send.text != null ? !this.send.text.hidden : true;\n        } catch (e) {\n            if (e instanceof ErrorResponse) {\n                if (e.statusCode === 401) {\n                    this.passwordRequired = true;\n                } else if (e.statusCode === 404) {\n                    this.unavailable = true;\n                } else {\n                    this.error = true;\n                }\n            }\n        }\n        this.loading = false;\n        this.hideEmail = this.creatorIdentifier == null && !this.passwordRequired && !this.loading && !this.unavailable;\n    }\n}\n","<form #form (ngSubmit)=\"load()\" [appApiAction]=\"formPromise\" class=\"container\" ngNativeValidate> <div class=\"row justify-content-center mt-5\"> <div class=\"col-12\"> <p class=\"lead text-center mb-4\">Bitwarden Send</p> </div> <div class=\"col-12 text-center\" *ngIf=\"creatorIdentifier != null\"> <p>{{'sendCreatorIdentifier' | i18n: creatorIdentifier }}</p> </div> <div class=\"col-8\" *ngIf=\"hideEmail\"> <app-callout type=\"warning\" title=\"{{'warning' | i18n}}\"> {{'viewSendHiddenEmailWarning' | i18n }} <a href=\"https://bitwarden.com/help/article/receive-send/\" target=\"_blank\">{{'learnMore' | i18n}}</a>. </app-callout> </div> </div> <div class=\"row justify-content-center\"> <div class=\"col-5\"> <div class=\"card d-block\"> <div class=\"card-body\" *ngIf=\"loading\" class=\"text-center\"> <i class=\"fa fa-spinner fa-spin fa-2x text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"card-body\" *ngIf=\"!loading && passwordRequired\"> <p>{{'sendProtectedPassword' | i18n}}</p> <p>{{'sendProtectedPasswordDontKnow' | i18n}}</p> <div class=\"form-group\"> <label for=\"password\">{{'password' | i18n}}</label> <input id=\"password\" type=\"password\" name=\"Password\" class=\"text-monospace form-control\" [(ngModel)]=\"password\" required appInputVerbatim appAutofocus> </div> <div class=\"d-flex\"> <button type=\"submit\" class=\"btn btn-primary btn-block btn-submit\" [disabled]=\"form.loading\"> <span> <i class=\"fa fa-sign-in\" aria-hidden=\"true\"></i> {{'continue' | i18n}} </span> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </div> </div> <div class=\"card-body\" *ngIf=\"!loading && unavailable\"> {{'sendAccessUnavailable' | i18n}} </div> <div class=\"card-body\" *ngIf=\"!loading && error\"> {{'unexpectedError' | i18n}} </div> <div class=\"card-body\" *ngIf=\"!loading && !passwordRequired && send\"> <p class=\"text-center\"><b>{{send.name}}</b></p> <hr> <ng-container *ngIf=\"send.type === sendType.Text\"> <app-callout *ngIf=\"send.text.hidden\" type=\"tip\">{{'sendHiddenByDefault' | i18n}}</app-callout> <div class=\"form-group\"> <textarea id=\"text\" rows=\"8\" name=\"Text\" [(ngModel)]=\"sendText\" class=\"form-control\" readonly=\"readonly\"></textarea> </div> <button class=\"btn btn-block btn-link\" type=\"button\" (click)=\"toggleText()\" *ngIf=\"send.text.hidden\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showText, 'fa-eye-slash': showText}\"></i> {{'toggleVisibility' | i18n}} </button> <button class=\"btn btn-block btn-link\" type=\"button\" (click)=\"copyText()\"> <i class=\"fa fa-copy\" aria-hidden=\"true\"></i> {{'copyValue' | i18n}} </button> </ng-container> <ng-container *ngIf=\"send.type === sendType.File\"> <p>{{send.file.fileName}}</p> <button class=\"btn btn-primary btn-block\" type=\"button\" (click)=\"download()\" *ngIf=\"!downloading\"> <i class=\"fa fa-download\" aria-hidden=\"true\"></i> {{'downloadFile' | i18n}} ({{send.file.sizeName}})</button> <button class=\"btn btn-primary btn-block\" type=\"button\" *ngIf=\"downloading\" disabled=\"true\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </ng-container> <p *ngIf=\"expirationDate\" class=\"text-center text-muted\">Expires: {{expirationDate | date: 'medium'}}</p> </div> </div> </div> <div class=\"col-12 text-center mt-5 text-muted\"> <p class=\"mb-0\">{{'sendAccessTaglineProductDesc' | i18n}}<br> {{'sendAccessTaglineLearnMore' | i18n}} <a href=\"https://www.bitwarden.com/products/send/\" target=\"_blank\">Bitwarden Send</a>. </p> </div> </div> </form> ","import {\n    Component,\n    NgZone,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport { SendView } from 'jslib-common/models/view/sendView';\n\nimport { SendComponent as BaseSendComponent } from 'jslib-angular/components/send/send.component';\n\nimport { AddEditComponent } from './add-edit.component';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nconst BroadcasterSubscriptionId = 'SendComponent';\n\n@Component({\n    selector: 'app-send',\n    templateUrl: 'send.component.html',\n})\nexport class SendComponent extends BaseSendComponent {\n    @ViewChild('sendAddEdit', { read: ViewContainerRef, static: true }) sendAddEditModalRef: ViewContainerRef;\n\n    constructor(sendService: SendService, i18nService: I18nService,\n        platformUtilsService: PlatformUtilsService, environmentService: EnvironmentService,\n        ngZone: NgZone, searchService: SearchService, policyService: PolicyService, userService: UserService,\n        private modalService: ModalService, private broadcasterService: BroadcasterService,\n        logService: LogService) {\n        super(sendService, i18nService, platformUtilsService, environmentService, ngZone, searchService,\n            policyService, userService, logService);\n    }\n\n    async ngOnInit() {\n        await super.ngOnInit();\n        await this.load();\n\n        // Broadcaster subscription - load if sync completes in the background\n        this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n            this.ngZone.run(async () => {\n                switch (message.command) {\n                    case 'syncCompleted':\n                        if (message.successfully) {\n                            await this.load();\n                        }\n                        break;\n                }\n            });\n        });\n    }\n\n    ngOnDestroy() {\n        this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n    }\n\n    async addSend() {\n        if (this.disableSend) {\n            return;\n        }\n\n        const component = await this.editSend(null);\n        component.type = this.type;\n    }\n\n    async editSend(send: SendView) {\n        const [modal, childComponent] = await this.modalService.openViewRef(AddEditComponent, this.sendAddEditModalRef, comp => {\n            comp.sendId = send == null ? null : send.id;\n            comp.onSavedSend.subscribe(async (s: SendView) => {\n                modal.close();\n                await this.load();\n            });\n            comp.onDeletedSend.subscribe(async (s: SendView) => {\n                modal.close();\n                await this.load();\n            });\n        });\n\n        return childComponent;\n    }\n}\n","<div class=\"container page-content\"> <app-callout type=\"warning\" title=\"{{'sendDisabled' | i18n}}\" *ngIf=\"disableSend\"> <span>{{'sendDisabledWarning' | i18n}}</span> </app-callout> <div class=\"row\"> <div class=\"col-3 groupings\"> <div class=\"card vault-filters\"> <div class=\"card-header d-flex\"> {{'filters' | i18n}} </div> <div class=\"card-body\"> <input type=\"search\" placeholder=\"{{searchPlaceholder || ('searchSends' | i18n)}}\" id=\"search\" class=\"form-control\" [(ngModel)]=\"searchText\" (input)=\"searchTextChanged()\" autocomplete=\"off\" appAutofocus> <ul class=\"fa-ul card-ul\"> <li [ngClass]=\"{active: selectedAll}\"> <a href=\"#\" appStopClick (click)=\"selectAll()\"> <i class=\"fa-li fa fa-fw fa-th\"></i>{{'allSends' | i18n}} </a> </li> </ul> <h3>{{'types' | i18n}}</h3> <ul class=\"fa-ul card-ul\"> <li [ngClass]=\"{active: selectedType === sendType.Text}\"> <a href=\"#\" appStopClick (click)=\"selectType(sendType.Text)\"> <i class=\"fa-li fa fa-fw fa-file-text-o\"></i>{{'sendTypeText' | i18n}} </a> </li> <li [ngClass]=\"{active: selectedType === sendType.File}\"> <a href=\"#\" appStopClick (click)=\"selectType(sendType.File)\"> <i class=\"fa-li fa fa-fw fa-file-o\"></i>{{'sendTypeFile' | i18n}} </a> </li> </ul> </div> </div> </div> <div class=\"col-9\"> <div class=\"page-header d-flex\"> <h1> {{'send' | i18n}} <small #actionSpinner [appApiAction]=\"actionPromise\"> <ng-container *ngIf=\"actionSpinner.loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> </small> </h1> <div class=\"ml-auto d-flex\"> <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" (click)=\"addSend()\" [disabled]=\"disableSend\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i>{{'createSend' | i18n}} </button> </div> </div> <table class=\"table table-hover table-list\" *ngIf=\"filteredSends && filteredSends.length\"> <tbody> <tr *ngFor=\"let s of filteredSends\"> <td class=\"table-list-icon\"> <div class=\"icon\" aria-hidden=\"true\"> <i class=\"fa fa-fw fa-lg fa-file-o\" *ngIf=\"s.type == sendType.File\"></i> <i class=\"fa fa-fw fa-lg fa-file-text-o\" *ngIf=\"s.type == sendType.Text\"></i> </div> </td> <td class=\"reduced-lh wrap\"> <a href=\"#\" appStopClick appStopProp (click)=\"editSend(s)\">{{s.name}}</a> <ng-container *ngIf=\"s.disabled\"> <i class=\"fa fa-warning\" appStopProp title=\"{{'disabled' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'disabled' | i18n}}</span> </ng-container> <ng-container *ngIf=\"s.password\"> <i class=\"fa fa-key\" appStopProp title=\"{{'password' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'password' | i18n}}</span> </ng-container> <ng-container *ngIf=\"s.maxAccessCountReached\"> <i class=\"fa fa-ban\" appStopProp title=\"{{'maxAccessCountReached' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'maxAccessCountReached' | i18n}}</span> </ng-container> <ng-container *ngIf=\"s.expired\"> <i class=\"fa fa-clock-o\" appStopProp title=\"{{'expired' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'expired' | i18n}}</span> </ng-container> <ng-container *ngIf=\"s.pendingDelete\"> <i class=\"fa fa-trash\" appStopProp title=\"{{'pendingDeletion' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'pendingDeletion' | i18n}}</span> </ng-container> <br> <small appStopProp>{{s.deletionDate | date:'medium'}}</small> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" id=\"dropdownMenuButton\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"dropdownMenuButton\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"copy(s)\"> <i class=\"fa fa-fw fa-copy\" aria-hidden=\"true\"></i> {{'copySendLink' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"removePassword(s)\" *ngIf=\"s.password && !disableSend\"> <i class=\"fa fa-fw fa-undo\" aria-hidden=\"true\"></i> {{'removePassword' | i18n}} </a> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick (click)=\"delete(s)\"> <i class=\"fa fa-fw fa-trash-o\" aria-hidden=\"true\"></i> {{'delete' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> <div class=\"no-items\" *ngIf=\"filteredSends && !filteredSends.length\"> <ng-container *ngIf=\"!loaded\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"loaded\"> <p>{{'noSendsInList' | i18n}}</p> <button (click)=\"addSend()\" class=\"btn btn-outline-primary\" [disabled]=\"disableSend\"> <i class=\"fa fa-plus fa-fw\"></i>{{'createSend' | i18n}}</button> </ng-container> </div> </div> </div> </div> <ng-template #sendAddEdit></ng-template> ","import { DatePipe } from '@angular/common';\n\nimport { Component } from '@angular/core';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AddEditComponent as BaseAddEditComponent } from 'jslib-angular/components/send/add-edit.component';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\n@Component({\n    selector: 'app-send-add-edit',\n    templateUrl: 'add-edit.component.html',\n})\nexport class AddEditComponent extends BaseAddEditComponent {\n    constructor(i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n        environmentService: EnvironmentService, datePipe: DatePipe,\n        sendService: SendService, userService: UserService,\n        messagingService: MessagingService, policyService: PolicyService,\n        logService: LogService) {\n        super(i18nService, platformUtilsService, environmentService, datePipe, sendService, userService,\n            messagingService, policyService, logService);\n    }\n\n    async copyLinkToClipboard(link: string): Promise<void | boolean> {\n        // Copy function on web depends on the modal being open or not. Since this event occurs during a transition\n        // of the modal closing we need to add a small delay to make sure state of the DOM is consistent.\n        return new Promise(resolve => {\n            window.setTimeout(() => resolve(super.copyLinkToClipboard(link)), 500);\n        });\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"sendAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate autocomplete=\"off\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"sendAddEditTitle\">{{title}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"send\"> <app-callout *ngIf=\"disableSend\"> <span>{{'sendDisabledWarning' | i18n}}</span> </app-callout> <app-callout *ngIf=\"!disableSend && disableHideEmail\"> <span>{{'sendOptionsPolicyInEffect' | i18n}}</span> <ul class=\"mb-0\"> <li>{{'sendDisableHideEmailInEffect' | i18n}}</li> </ul> </app-callout> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"name\">{{'name' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"send.name\" required [readOnly]=\"disableSend\"> <small class=\"form-text text-muted\">{{'sendNameDesc' | i18n}}</small> </div> </div> <div class=\"row\" *ngIf=\"!editMode\"> <div class=\"col-6 form-group\"> <label>{{'whatTypeOfSend' | i18n}}</label> <div class=\"form-check\" *ngFor=\"let o of typeOptions\"> <input class=\"form-check-input\" type=\"radio\" [(ngModel)]=\"send.type\" name=\"Type_{{o.value}}\" id=\"type_{{o.value}}\" [value]=\"o.value\" (change)=\"typeChanged(o)\" [checked]=\"send.type === o.value\"> <label class=\"form-check-label\" for=\"type_{{o.value}}\"> {{o.name}} </label> </div> </div> </div> <ng-container *ngIf=\"send.type === sendType.Text\"> <div class=\"form-group\"> <label for=\"text\">{{'sendTypeText' | i18n}}</label> <textarea id=\"text\" name=\"Text.Text\" rows=\"6\" [(ngModel)]=\"send.text.text\" class=\"form-control\" [readOnly]=\"disableSend\"></textarea> <small class=\"form-text text-muted\">{{'sendTextDesc' | i18n}}</small> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" [(ngModel)]=\"send.text.hidden\" id=\"text-hidden\" name=\"Text.Hidden\" [disabled]=\"disableSend\"> <label class=\"form-check-label\" for=\"text-hidden\">{{'textHiddenByDefault' | i18n}}</label> </div> </div> </ng-container> <ng-container *ngIf=\"send.type === sendType.File\"> <div class=\"form-group\"> <div *ngIf=\"editMode\"> <strong class=\"d-block\">{{'file' | i18n}}</strong> {{send.file.fileName}} ({{send.file.sizeName}}) </div> <div *ngIf=\"!editMode\"> <label for=\"file\">{{'file' | i18n}}</label> <input type=\"file\" id=\"file\" class=\"form-control-file\" name=\"file\" required [disabled]=\"disableSend\"> <small class=\"form-text text-muted\">{{'sendFileDesc' | i18n}} {{'maxFileSize' | i18n}}</small> </div> </div> </ng-container> <h3 class=\"mt-5\">{{'share' | i18n}}</h3> <div class=\"form-group\" *ngIf=\"link\"> <label for=\"link\">{{'sendLinkLabel' | i18n}}</label> <input type=\"text\" readonly=\"readonly\" id=\"link\" name=\"Link\" [(ngModel)]=\"link\" class=\"form-control\"> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" [(ngModel)]=\"copyLink\" id=\"copy-link\" name=\"CopyLink\"> <label class=\"form-check-label\" for=\"copy-link\">{{'copySendLinkOnSave' | i18n}}</label> </div> </div> <div id=\"options-header\" class=\"section-header d-flex flex-row align-items-center mt-5\" (click)=\"toggleOptions()\"> <h3 class=\"mb-0 mr-2\">{{'options' | i18n}}</h3> <a class=\"mb-1\" href=\"#\" appStopClick role=\"button\"> <i class=\"fa\" aria-hidden=\"true\" [ngClass]=\"{'fa-chevron-down': !showOptions, 'fa-chevron-up': showOptions}\"></i> </a> </div> <div id=\"options\" [hidden]=\"!showOptions\"> <app-send-efflux-dates [initialDeletionDate]=\"send.deletionDate\" [initialExpirationDate]=\"send.expirationDate\" [editMode]=\"editMode\" [disabled]=\"disableSend\" (datesChanged)=\"setDates($event)\"> </app-send-efflux-dates> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"maxAccessCount\">{{'maxAccessCount' | i18n}}</label> <input id=\"maxAccessCount\" class=\"form-control\" type=\"number\" name=\"MaxAccessCount\" [(ngModel)]=\"send.maxAccessCount\" min=\"1\" [readOnly]=\"disableSend\"> <div class=\"form-text text-muted small\">{{'maxAccessCountDesc' | i18n}}</div> </div> <div class=\"col-6 form-group\" *ngIf=\"editMode\"> <label for=\"accessCount\">{{'currentAccessCount' | i18n}}</label> <input id=\"accessCount\" class=\"form-control\" type=\"text\" name=\"AccessCount\" readonly=\"readonly\" [(ngModel)]=\"send.accessCount\"> </div> </div> <div class=\"row\"> <div class=\"col-6 form-group\"> <label for=\"password\" *ngIf=\"!hasPassword\">{{'password' | i18n}}</label> <label for=\"password\" *ngIf=\"hasPassword\">{{'newPassword' | i18n}}</label> <div class=\"input-group\"> <input id=\"password\" class=\"form-control text-monospace\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"Password\" [(ngModel)]=\"password\" [readOnly]=\"disableSend\"> <div class=\"input-group-append\"> <button type=\"button\" class=\"btn btn-outline-secondary\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePasswordVisible()\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> </div> </div> <div class=\"form-text text-muted small\">{{'sendPasswordDesc' | i18n}}</div> </div> </div> <div class=\"form-group\"> <label for=\"notes\">{{'notes' | i18n}}</label> <textarea id=\"notes\" name=\"Notes\" rows=\"6\" [(ngModel)]=\"send.notes\" class=\"form-control\" [readOnly]=\"disableSend\"></textarea> <div class=\"form-text text-muted small\">{{'sendNotesDesc' | i18n}}</div> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" [(ngModel)]=\"send.hideEmail\" id=\"hideEmail\" name=\"HideEmail\" [disabled]=\"(disableHideEmail && !send.hideEmail) || disableSend\"> <label class=\"form-check-label\" for=\"hideEmail\"> {{'hideEmail' | i18n}} </label> </div> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" [(ngModel)]=\"send.disabled\" id=\"disabled\" name=\"Disabled\" [disabled]=\"disableSend\"> <label class=\"form-check-label\" for=\"disabled\">{{'disableThisSend' | i18n}}</label> </div> </div> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit manual\" [ngClass]=\"{loading:form.loading}\" [disabled]=\"form.loading || disableSend\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\"> {{'cancel' | i18n}} </button> <div class=\"ml-auto\" *ngIf=\"send\"> <button #deleteBtn type=\"button\" (click)=\"delete()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{'delete' | i18n}}\" *ngIf=\"editMode\" [disabled]=\"deleteBtn.loading\" [appApiAction]=\"deletePromise\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </div> </div> </form> </div> </div> ","import { SendType } from '../../enums/sendType';\nimport { Utils } from '../../misc/utils';\n\nimport { Send } from '../domain/send';\nimport { SymmetricCryptoKey } from '../domain/symmetricCryptoKey';\n\nimport { SendFileView } from './sendFileView';\nimport { SendTextView } from './sendTextView';\nimport { View } from './view';\n\nexport class SendView implements View {\n    id: string = null;\n    accessId: string = null;\n    name: string = null;\n    notes: string = null;\n    key: ArrayBuffer;\n    cryptoKey: SymmetricCryptoKey;\n    type: SendType = null;\n    text = new SendTextView();\n    file = new SendFileView();\n    maxAccessCount?: number = null;\n    accessCount: number = 0;\n    revisionDate: Date = null;\n    deletionDate: Date = null;\n    expirationDate: Date = null;\n    password: string = null;\n    disabled: boolean = false;\n    hideEmail: boolean = false;\n\n    constructor(s?: Send) {\n        if (!s) {\n            return;\n        }\n\n        this.id = s.id;\n        this.accessId = s.accessId;\n        this.type = s.type;\n        this.maxAccessCount = s.maxAccessCount;\n        this.accessCount = s.accessCount;\n        this.revisionDate = s.revisionDate;\n        this.deletionDate = s.deletionDate;\n        this.expirationDate = s.expirationDate;\n        this.disabled = s.disabled;\n        this.password = s.password;\n        this.hideEmail = s.hideEmail;\n    }\n\n    get urlB64Key(): string {\n        return Utils.fromBufferToUrlB64(this.key);\n    }\n\n    get maxAccessCountReached(): boolean {\n        if (this.maxAccessCount == null) {\n            return false;\n        }\n        return this.accessCount >= this.maxAccessCount;\n    }\n\n    get expired(): boolean {\n        if (this.expirationDate == null) {\n            return false;\n        }\n        return this.expirationDate <= new Date();\n    }\n\n    get pendingDelete(): boolean {\n        return this.deletionDate <= new Date();\n    }\n}\n","import { DatePipe } from '@angular/common';\n\nimport { Component } from '@angular/core';\n\nimport { ControlContainer, NgForm } from '@angular/forms';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { EffluxDatesComponent as BaseEffluxDatesComponent } from 'jslib-angular/components/send/efflux-dates.component';\n\n@Component({\n    selector: 'app-send-efflux-dates',\n    templateUrl: 'efflux-dates.component.html',\n    viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n})\nexport class EffluxDatesComponent extends BaseEffluxDatesComponent {\n    constructor(protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n        protected datePipe: DatePipe) {\n        super(i18nService, platformUtilsService, datePipe);\n    }\n}\n","<div class=\"row\" [formGroup]=\"datesForm\"> <div class=\"col-6 form-group\"> <label for=\"deletionDate\">{{'deletionDate' | i18n}}</label> <ng-template #deletionDateCustom> <ng-container [ngSwitch]=\"browserPath\"> <ng-container *ngSwitchCase=\"'firefox'\"> <div class=\"d-flex justify-content-around\"> <input id=\"deletionDateCustomFallback\" class=\"form-control mt-1\" type=\"date\" name=\"DeletionDateFallback\" formControlName=\"fallbackDeletionDate\" required placeholder=\"MM/DD/YYYY\" [readOnly]=\"disableSend\" data-date-format=\"mm/dd/yyyy\"> <input id=\"deletionTimeCustomFallback\" class=\"form-control mt-1 ml-1\" type=\"time\" name=\"DeletionTimeDate\" formControlName=\"fallbackDeletionTime\" required placeholder=\"HH:MM AM/PM\" [readOnly]=\"disableSend\"> </div> </ng-container> <ng-container *ngSwitchCase=\"'safari'\"> <div class=\"d-flex justify-content-around\"> <input id=\"deletionDateCustomFallback\" class=\"form-control mt-1\" type=\"date\" name=\"DeletionDateFallback\" formControlName=\"fallbackDeletionDate\" required placeholder=\"MM/DD/YYYY\" [readOnly]=\"disableSend\" data-date-format=\"mm/dd/yyyy\"> <select id=\"deletionTimeCustomFallback\" class=\"form-control mt-1 ml-1\" [required]=\"!editMode\" formControlName=\"fallbackDeletionTime\" name=\"SafariDeletionTime\"> <option *ngFor=\"let o of safariDeletionTimePresetOptions\" [ngValue]=\"o.twentyFourHour\">{{o.twelveHour}}</option> </select> </div> </ng-container> <ng-container *ngSwitchDefault> <input id=\"deletionDateCustom\" class=\"form-control mt-1\" type=\"datetime-local\" name=\"DeletionDate\" formControlName=\"defaultDeletionDateTime\" required placeholder=\"MM/DD/YYYY HH:MM AM/PM\" [readOnly]=\"disabled\"> </ng-container> </ng-container> </ng-template> <div *ngIf=\"!editMode\"> <select id=\"deletionDate\" name=\"SelectedDeletionDatePreset\" formControlName=\"selectedDeletionDatePreset\" class=\"form-control\" required> <option *ngFor=\"let o of deletionDatePresets\" [ngValue]=\"o.value\">{{o.name}} </option> </select> <ng-container *ngIf=\"selectedDeletionDatePreset.value === 0\"> <ng-container *ngTemplateOutlet=\"deletionDateCustom\"> </ng-container> </ng-container> </div> <div *ngIf=\"editMode\"> <ng-container *ngTemplateOutlet=\"deletionDateCustom\"> </ng-container> </div> <div class=\"form-text text-muted small\">{{'deletionDateDesc' | i18n}}</div> </div> <div class=\"col-6 form-group\"> <div class=\"d-flex\"> <label for=\"expirationDate\">{{'expirationDate' | i18n}}</label> <a href=\"#\" appStopClick (click)=\"clearExpiration()\" class=\"ml-auto\" *ngIf=\"editMode && !disabled\"> {{'clear' | i18n}} </a> </div> <ng-template #expirationDateCustom> <ng-container [ngSwitch]=\"browserPath\"> <div *ngSwitchCase=\"'firefox'\" class=\"d-flex justify-content-around\"> <input id=\"expirationDateCustomFallback\" class=\"form-control mt-1\" type=\"date\" name=\"ExpirationDateFallback\" formControlName=\"fallbackExpirationDate\" [required]=\"!editMode\" placeholder=\"MM/DD/YYYY\" [readOnly]=\"disabled\" data-date-format=\"mm/dd/yyyy\"> <input id=\"expirationTimeCustomFallback\" class=\"form-control mt-1 ml-1\" type=\"time\" name=\"ExpirationTimeFallback\" formControlName=\"fallbackExpirationTime\" [required]=\"!editMode\" placeholder=\"HH:MM AM/PM\" [readOnly]=\"disabled\"> </div> <div *ngSwitchCase=\"'safari'\" class=\"d-flex justify-content-around\"> <input id=\"expirationDateCustomFallback\" class=\"form-control mt-1\" type=\"date\" name=\"ExpirationDateFallback\" formControlName=\"fallbackExpirationDate\" [required]=\"!editMode\" placeholder=\"MM/DD/YYYY\" [readOnly]=\"disabled\" data-date-format=\"mm/dd/yyyy\"> <select id=\"expirationTimeCustomFallback\" class=\"form-control mt-1 ml-1\" [required]=\"!editMode\" formControlName=\"fallbackExpirationTime\" name=\"SafariExpirationTime\"> <option *ngFor=\"let o of safariExpirationTimePresetOptions\" [ngValue]=\"o.twentyFourHour\">{{o.twelveHour}}</option> </select> </div> <ng-container *ngSwitchDefault> <input id=\"expirationDateCustom\" class=\"form-control mt-1\" type=\"datetime-local\" name=\"ExpirationDate\" formControlName=\"defaultExpirationDateTime\" placeholder=\"MM/DD/YYYY HH:MM AM/PM\" [readOnly]=\"disabled\"> </ng-container> </ng-container> </ng-template> <div *ngIf=\"!editMode\"> <select id=\"expirationDate\" name=\"SelectedExpirationDatePreset\" formControlName=\"selectedExpirationDatePreset\" class=\"form-control\" required> <option *ngFor=\"let o of expirationDatePresets\" [ngValue]=\"o.value\">{{o.name}} </option> </select> <ng-container *ngIf=\"selectedExpirationDatePreset.value === 0\"> <ng-container *ngTemplateOutlet=\"expirationDateCustom\"> </ng-container> </ng-container> </div> <div *ngIf=\"editMode\"> <ng-container *ngTemplateOutlet=\"expirationDateCustom\"> </ng-container> </div> <div class=\"form-text text-muted small\">{{'expirationDateDesc' | i18n}}</div> </div> </div> ","import {\n    Component,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport { ApiKeyComponent } from './api-key.component';\nimport { DeauthorizeSessionsComponent } from './deauthorize-sessions.component';\nimport { DeleteAccountComponent } from './delete-account.component';\nimport { PurgeVaultComponent } from './purge-vault.component';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\n@Component({\n    selector: 'app-account',\n    templateUrl: 'account.component.html',\n})\nexport class AccountComponent {\n    @ViewChild('deauthorizeSessionsTemplate', { read: ViewContainerRef, static: true }) deauthModalRef: ViewContainerRef;\n    @ViewChild('purgeVaultTemplate', { read: ViewContainerRef, static: true }) purgeModalRef: ViewContainerRef;\n    @ViewChild('deleteAccountTemplate', { read: ViewContainerRef, static: true }) deleteModalRef: ViewContainerRef;\n    @ViewChild('viewUserApiKeyTemplate', { read: ViewContainerRef, static: true }) viewUserApiKeyModalRef: ViewContainerRef;\n    @ViewChild('rotateUserApiKeyTemplate', { read: ViewContainerRef, static: true }) rotateUserApiKeyModalRef: ViewContainerRef;\n\n    showChangePassword = true;\n    showChangeKdf = true;\n    showChangeEmail = true;\n\n    constructor(private modalService: ModalService, private apiService: ApiService,\n        private userService: UserService, private keyConnectorService: KeyConnectorService) { }\n\n    async ngOnInit() {\n        this.showChangeEmail = this.showChangeKdf = this.showChangePassword =\n            !await this.keyConnectorService.getUsesKeyConnector();\n    }\n\n    async deauthorizeSessions() {\n        await this.modalService.openViewRef(DeauthorizeSessionsComponent, this.deauthModalRef);\n    }\n\n    async purgeVault() {\n        await this.modalService.openViewRef(PurgeVaultComponent, this.purgeModalRef);\n    }\n\n    async deleteAccount() {\n        await this.modalService.openViewRef(DeleteAccountComponent, this.deleteModalRef);\n    }\n\n    async viewUserApiKey() {\n        const entityId = await this.userService.getUserId();\n        await this.modalService.openViewRef(ApiKeyComponent, this.viewUserApiKeyModalRef, comp => {\n            comp.keyType = 'user';\n            comp.entityId = entityId;\n            comp.postKey = this.apiService.postUserApiKey.bind(this.apiService);\n            comp.scope = 'api';\n            comp.grantType = 'client_credentials';\n            comp.apiKeyTitle = 'apiKey';\n            comp.apiKeyWarning = 'userApiKeyWarning';\n            comp.apiKeyDescription = 'userApiKeyDesc';\n        });\n    }\n\n    async rotateUserApiKey() {\n        const entityId = await this.userService.getUserId();\n        await this.modalService.openViewRef(ApiKeyComponent, this.rotateUserApiKeyModalRef, comp => {\n            comp.keyType = 'user';\n            comp.isRotation = true;\n            comp.entityId = entityId;\n            comp.postKey = this.apiService.postUserRotateApiKey.bind(this.apiService);\n            comp.scope = 'api';\n            comp.grantType = 'client_credentials';\n            comp.apiKeyTitle = 'apiKey';\n            comp.apiKeyWarning = 'userApiKeyWarning';\n            comp.apiKeyDescription = 'apiKeyRotateDesc';\n        });\n    }\n}\n","<div class=\"page-header\"> <h1>{{'myAccount' | i18n}}</h1> </div> <app-profile></app-profile> <ng-container *ngIf=\"showChangeEmail\"> <div class=\"secondary-header\"> <h1>{{'changeEmail' | i18n}}</h1> </div> <app-change-email></app-change-email> </ng-container> <ng-container *ngIf=\"showChangePassword\"> <div class=\"secondary-header\"> <h1>{{'changeMasterPassword' | i18n}}</h1> </div> <app-change-password></app-change-password> </ng-container> <ng-container *ngIf=\"showChangeKdf\"> <div class=\"secondary-header\"> <h1>{{'encKeySettings' | i18n}}</h1> </div> <app-change-kdf></app-change-kdf> </ng-container> <div class=\"secondary-header border-0 mb-0\"> <h1>{{'apiKey' | i18n}}</h1> </div> <p> {{'userApiKeyDesc' | i18n}} </p> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"viewUserApiKey()\">{{'viewApiKey' | i18n}}</button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"rotateUserApiKey()\">{{'rotateApiKey' | i18n}}</button> <div class=\"secondary-header text-danger border-0 mb-0\"> <h1>{{'dangerZone' | i18n}}</h1> </div> <div class=\"card border-danger\"> <div class=\"card-body\"> <p>{{'dangerZoneDesc' | i18n}}</p> <button type=\"button\" class=\"btn btn-outline-danger\" (click)=\"deauthorizeSessions()\">{{'deauthorizeSessions' | i18n}}</button> <button type=\"button\" class=\"btn btn-outline-danger\" (click)=\"purgeVault()\">{{'purgeVault' | i18n}}</button> <button type=\"button\" class=\"btn btn-outline-danger\" (click)=\"deleteAccount()\">{{'deleteAccount' | i18n}}</button> </div> </div> <ng-template #deauthorizeSessionsTemplate></ng-template> <ng-template #purgeVaultTemplate></ng-template> <ng-template #deleteAccountTemplate></ng-template> <ng-template #viewUserApiKeyTemplate></ng-template> <ng-template #rotateUserApiKeyTemplate></ng-template> ","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { Verification } from 'jslib-common/types/verification';\n\n@Component({\n    selector: 'app-deauthorize-sessions',\n    templateUrl: 'deauthorize-sessions.component.html',\n})\nexport class DeauthorizeSessionsComponent {\n    masterPassword: Verification;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private userVerificationService: UserVerificationService,\n        private messagingService: MessagingService, private logService: LogService) { }\n\n    async submit() {\n        try {\n            this.formPromise = this.userVerificationService.buildRequest(this.masterPassword)\n                .then(request => this.apiService.postSecurityStamp(request));\n            await this.formPromise;\n            this.toasterService.popAsync('success', this.i18nService.t('sessionsDeauthorized'),\n                this.i18nService.t('logBackIn'));\n            this.messagingService.send('logout');\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"deAuthTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"deAuthTitle\">{{'deauthorizeSessions' | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{'deauthorizeSessionsDesc' | i18n}}</p> <app-callout type=\"warning\">{{'deauthorizeSessionsWarning' | i18n}}</app-callout> <app-verify-master-password [(ngModel)]=\"masterPassword\" ngDefaultControl name=\"secret\"> </app-verify-master-password> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-danger btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'deauthorizeSessions' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { Verification } from 'jslib-common/types/verification';\n\n@Component({\n    selector: 'app-delete-account',\n    templateUrl: 'delete-account.component.html',\n})\nexport class DeleteAccountComponent {\n    masterPassword: Verification;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private userVerificationService: UserVerificationService,\n        private messagingService: MessagingService, private logService: LogService) { }\n\n    async submit() {\n        try {\n            this.formPromise = this.userVerificationService.buildRequest(this.masterPassword)\n                .then(request => this.apiService.deleteAccount(request));\n            await this.formPromise;\n            this.toasterService.popAsync('success', this.i18nService.t('accountDeleted'),\n                this.i18nService.t('accountDeletedDesc'));\n            this.messagingService.send('logout');\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"deleteAccountTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"deleteAccountTitle\">{{'deleteAccount' | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{'deleteAccountDesc' | i18n}}</p> <app-callout type=\"warning\">{{'deleteAccountWarning' | i18n}}</app-callout> <app-verify-master-password [(ngModel)]=\"masterPassword\" ngDefaultControl name=\"secret\"> </app-verify-master-password> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-danger btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'deleteAccount' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { UpdateProfileRequest } from 'jslib-common/models/request/updateProfileRequest';\n\nimport { ProfileResponse } from 'jslib-common/models/response/profileResponse';\n\n@Component({\n    selector: 'app-profile',\n    templateUrl: 'profile.component.html',\n})\nexport class ProfileComponent implements OnInit {\n    loading = true;\n    profile: ProfileResponse;\n    fingerprint: string;\n    hidePasswordHint = false;\n\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private userService: UserService,\n        private cryptoService: CryptoService, private logService: LogService,\n        private keyConnectorService: KeyConnectorService) { }\n\n    async ngOnInit() {\n        this.profile = await this.apiService.getProfile();\n        this.loading = false;\n        const fingerprint = await this.cryptoService.getFingerprint(await this.userService.getUserId());\n        if (fingerprint != null) {\n            this.fingerprint = fingerprint.join('-');\n        }\n        this.hidePasswordHint = await this.keyConnectorService.getUsesKeyConnector();\n    }\n\n    async submit() {\n        try {\n            const request = new UpdateProfileRequest(this.profile.name, this.profile.masterPasswordHint);\n            this.formPromise = this.apiService.putProfile(request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('accountUpdated'));\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <form *ngIf=\"profile && !loading\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"name\">{{'name' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"profile.name\"> </div> <div class=\"form-group\"> <label for=\"email\">{{'email' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"profile.email\" readonly=\"readonly\"> </div> <div class=\"form-group\" *ngIf=\"!hidePasswordHint\"> <label for=\"masterPasswordHint\">{{'masterPassHintLabel' | i18n}}</label> <input id=\"masterPasswordHint\" class=\"form-control\" type=\"text\" name=\"MasterPasswordHint\" [(ngModel)]=\"profile.masterPasswordHint\"> </div> </div> <div class=\"col-6\"> <div class=\"mb-3\"> <app-avatar data=\"{{profile | userName}}\" [email]=\"profile.email\" dynamic=\"true\" size=\"75\" fontSize=\"35\"></app-avatar> </div> <hr> <p *ngIf=\"fingerprint\"> {{'yourAccountsFingerprint' | i18n}}: <a href=\"https://help.bitwarden.com/article/fingerprint-phrase/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i></a><br> <code>{{fingerprint}}</code> </p> </div> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> </form> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EmailRequest } from 'jslib-common/models/request/emailRequest';\nimport { EmailTokenRequest } from 'jslib-common/models/request/emailTokenRequest';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\n@Component({\n    selector: 'app-change-email',\n    templateUrl: 'change-email.component.html',\n})\nexport class ChangeEmailComponent implements OnInit {\n    masterPassword: string;\n    newEmail: string;\n    token: string;\n    tokenSent = false;\n    showTwoFactorEmailWarning = false;\n\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private cryptoService: CryptoService,\n        private messagingService: MessagingService, private userService: UserService,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        const twoFactorProviders = await this.apiService.getTwoFactorProviders();\n        this.showTwoFactorEmailWarning = twoFactorProviders.data.some(p => p.type === TwoFactorProviderType.Email &&\n            p.enabled);\n    }\n\n    async submit() {\n        const hasEncKey = await this.cryptoService.hasEncKey();\n        if (!hasEncKey) {\n            this.toasterService.popAsync('error', null, this.i18nService.t('updateKey'));\n            return;\n        }\n\n        this.newEmail = this.newEmail.trim().toLowerCase();\n        if (!this.tokenSent) {\n            const request = new EmailTokenRequest();\n            request.newEmail = this.newEmail;\n            request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n            try {\n                this.formPromise = this.apiService.postEmailToken(request);\n                await this.formPromise;\n                this.tokenSent = true;\n            } catch (e) {\n                this.logService.error(e);\n            }\n        } else {\n            const request = new EmailRequest();\n            request.token = this.token;\n            request.newEmail = this.newEmail;\n            request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n            const kdf = await this.userService.getKdf();\n            const kdfIterations = await this.userService.getKdfIterations();\n            const newKey = await this.cryptoService.makeKey(this.masterPassword, this.newEmail, kdf, kdfIterations);\n            request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n            const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n            request.key = newEncKey[1].encryptedString;\n            try {\n                this.formPromise = this.apiService.postEmail(request);\n                await this.formPromise;\n                this.reset();\n                this.toasterService.popAsync('success', this.i18nService.t('emailChanged'),\n                    this.i18nService.t('logBackIn'));\n                this.messagingService.send('logout');\n            } catch (e) {\n                this.logService.error(e);\n            }\n        }\n    }\n\n    reset() {\n        this.token = this.newEmail = this.masterPassword = null;\n        this.tokenSent = false;\n    }\n}\n","<form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <app-callout type=\"warning\" *ngIf=\"showTwoFactorEmailWarning\"> {{'changeEmailTwoFactorWarning' | i18n}} </app-callout> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <input id=\"masterPassword\" type=\"password\" name=\"MasterPasswordHash\" class=\"form-control\" [(ngModel)]=\"masterPassword\" required [readonly]=\"tokenSent\" appInputVerbatim> </div> <div class=\"form-group\"> <label for=\"newEmail\">{{'newEmail' | i18n}}</label> <input id=\"newEmail\" class=\"form-control\" type=\"text\" name=\"NewEmail\" [(ngModel)]=\"newEmail\" required [readonly]=\"tokenSent\" inputmode=\"email\" appInputVerbatim=\"false\"> </div> </div> </div> <ng-container *ngIf=\"tokenSent\"> <hr> <p>{{'changeEmailDesc' | i18n : newEmail}}</p> <app-callout type=\"warning\">{{'loggedOutWarning' | i18n}}</app-callout> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"token\">{{'code' | i18n}}</label> <input id=\"token\" class=\"form-control\" type=\"text\" name=\"Token\" [(ngModel)]=\"token\" required appInputVerbatim> </div> </div> </div> </ng-container> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span *ngIf=\"!tokenSent\">{{'continue' | i18n}}</span> <span *ngIf=\"tokenSent\">{{'changeEmail' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" *ngIf=\"tokenSent\" (click)=\"reset()\"> {{'cancel' | i18n}} </button> </form> ","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class EmailTokenRequest extends SecretVerificationRequest {\n    newEmail: string;\n    masterPasswordHash: string;\n}\n","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport {\n    ChangePasswordComponent as BaseChangePasswordComponent,\n} from 'jslib-angular/components/change-password.component';\n\nimport { EmergencyAccessStatusType } from 'jslib-common/enums/emergencyAccessStatusType';\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { CipherWithIdRequest } from 'jslib-common/models/request/cipherWithIdRequest';\nimport { EmergencyAccessUpdateRequest } from 'jslib-common/models/request/emergencyAccessUpdateRequest';\nimport { FolderWithIdRequest } from 'jslib-common/models/request/folderWithIdRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { PasswordRequest } from 'jslib-common/models/request/passwordRequest';\nimport { SendWithIdRequest } from 'jslib-common/models/request/sendWithIdRequest';\nimport { UpdateKeyRequest } from 'jslib-common/models/request/updateKeyRequest';\n\n@Component({\n    selector: 'app-change-password',\n    templateUrl: 'change-password.component.html',\n})\nexport class ChangePasswordComponent extends BaseChangePasswordComponent {\n    rotateEncKey = false;\n    currentMasterPassword: string;\n\n    constructor(i18nService: I18nService,\n        cryptoService: CryptoService, messagingService: MessagingService,\n        userService: UserService, passwordGenerationService: PasswordGenerationService,\n        platformUtilsService: PlatformUtilsService, policyService: PolicyService,\n        private folderService: FolderService, private cipherService: CipherService,\n        private syncService: SyncService, private apiService: ApiService, private sendService: SendService) {\n        super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n            platformUtilsService, policyService);\n    }\n\n    async rotateEncKeyClicked() {\n        if (this.rotateEncKey) {\n            const ciphers = await this.cipherService.getAllDecrypted();\n            let hasOldAttachments = false;\n            if (ciphers != null) {\n                for (let i = 0; i < ciphers.length; i++) {\n                    if (ciphers[i].organizationId == null && ciphers[i].hasOldAttachments) {\n                        hasOldAttachments = true;\n                        break;\n                    }\n                }\n            }\n\n            if (hasOldAttachments) {\n                const learnMore = await this.platformUtilsService.showDialog(\n                    this.i18nService.t('oldAttachmentsNeedFixDesc'), null,\n                    this.i18nService.t('learnMore'), this.i18nService.t('close'), 'warning');\n                if (learnMore) {\n                    this.platformUtilsService.launchUri(\n                        'https://help.bitwarden.com/article/attachments/#fixing-old-attachments');\n                }\n                this.rotateEncKey = false;\n                return;\n            }\n\n            const result = await this.platformUtilsService.showDialog(\n                this.i18nService.t('updateEncryptionKeyWarning') + ' ' +\n                this.i18nService.t('updateEncryptionKeyExportWarning') + ' ' +\n                this.i18nService.t('rotateEncKeyConfirmation'), this.i18nService.t('rotateEncKeyTitle'),\n                this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n            if (!result) {\n                this.rotateEncKey = false;\n            }\n        }\n    }\n\n    async submit() {\n        const hasEncKey = await this.cryptoService.hasEncKey();\n        if (!hasEncKey) {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('updateKey'));\n            return;\n        }\n\n        await super.submit();\n    }\n\n    async setupSubmitActions() {\n        if (this.currentMasterPassword == null || this.currentMasterPassword === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassRequired'));\n            return false;\n        }\n\n        if (this.rotateEncKey) {\n            await this.syncService.fullSync(true);\n        }\n\n        return super.setupSubmitActions();\n    }\n\n    async performSubmitActions(newMasterPasswordHash: string, newKey: SymmetricCryptoKey,\n        newEncKey: [SymmetricCryptoKey, EncString]) {\n        const request = new PasswordRequest();\n        request.masterPasswordHash = await this.cryptoService.hashPassword(this.currentMasterPassword, null);\n        request.newMasterPasswordHash = newMasterPasswordHash;\n        request.key = newEncKey[1].encryptedString;\n\n        try {\n            if (this.rotateEncKey) {\n                this.formPromise = this.apiService.postPassword(request).then(() => {\n                    return this.updateKey(newKey, request.newMasterPasswordHash);\n                });\n            } else {\n                this.formPromise = this.apiService.postPassword(request);\n            }\n\n            await this.formPromise;\n\n            this.platformUtilsService.showToast('success', this.i18nService.t('masterPasswordChanged'),\n                this.i18nService.t('logBackIn'));\n            this.messagingService.send('logout');\n        } catch {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n        }\n    }\n\n    private async updateKey(key: SymmetricCryptoKey, masterPasswordHash: string) {\n        const encKey = await this.cryptoService.makeEncKey(key);\n        const privateKey = await this.cryptoService.getPrivateKey();\n        let encPrivateKey: EncString = null;\n        if (privateKey != null) {\n            encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n        }\n        const request = new UpdateKeyRequest();\n        request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n        request.key = encKey[1].encryptedString;\n        request.masterPasswordHash = masterPasswordHash;\n\n        const folders = await this.folderService.getAllDecrypted();\n        for (let i = 0; i < folders.length; i++) {\n            if (folders[i].id == null) {\n                continue;\n            }\n            const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n            request.folders.push(new FolderWithIdRequest(folder));\n        }\n\n        const ciphers = await this.cipherService.getAllDecrypted();\n        for (let i = 0; i < ciphers.length; i++) {\n            if (ciphers[i].organizationId != null) {\n                continue;\n            }\n\n            const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n            request.ciphers.push(new CipherWithIdRequest(cipher));\n        }\n\n        const sends = await this.sendService.getAll();\n        await Promise.all(sends.map(async send => {\n            const cryptoKey = await this.cryptoService.decryptToBytes(send.key, null);\n            send.key = await this.cryptoService.encrypt(cryptoKey, encKey[0]) ?? send.key;\n            request.sends.push(new SendWithIdRequest(send));\n        }));\n\n        await this.apiService.postAccountKey(request);\n\n        await this.updateEmergencyAccesses(encKey[0]);\n\n        await this.updateAllResetPasswordKeys(encKey[0]);\n    }\n\n    private async updateEmergencyAccesses(encKey: SymmetricCryptoKey) {\n        const emergencyAccess = await this.apiService.getEmergencyAccessTrusted();\n        const allowedStatuses = [\n            EmergencyAccessStatusType.Confirmed,\n            EmergencyAccessStatusType.RecoveryInitiated,\n            EmergencyAccessStatusType.RecoveryApproved,\n        ];\n\n        const filteredAccesses = emergencyAccess.data.filter(d => allowedStatuses.includes(d.status));\n\n        for (const details of filteredAccesses) {\n            const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n            const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n            const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n            const updateRequest = new EmergencyAccessUpdateRequest();\n            updateRequest.type = details.type;\n            updateRequest.waitTimeDays = details.waitTimeDays;\n            updateRequest.keyEncrypted = encryptedKey.encryptedString;\n\n            await this.apiService.putEmergencyAccess(details.id, updateRequest);\n        }\n    }\n\n    private async updateAllResetPasswordKeys(encKey: SymmetricCryptoKey) {\n        const orgs = await this.userService.getAllOrganizations();\n\n        for (const org of orgs) {\n            // If not already enrolled, skip\n            if (!org.resetPasswordEnrolled) {\n                continue;\n            }\n\n            // Retrieve public key\n            const response = await this.apiService.getOrganizationKeys(org.id);\n            const publicKey = Utils.fromB64ToArray(response?.publicKey);\n\n            // Re-enroll - encrpyt user's encKey.key with organization public key\n            const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n\n            // Create/Execute request\n            const request = new OrganizationUserResetPasswordEnrollmentRequest();\n            request.resetPasswordKey = encryptedKey.encryptedString;\n\n            await this.apiService.putOrganizationUserResetPasswordEnrollment(org.id, org.userId, request);\n        }\n    }\n}\n","<app-callout type=\"warning\">{{'loggedOutWarning' | i18n}}</app-callout> <app-callout type=\"info\" [enforcedPolicyOptions]=\"enforcedPolicyOptions\" *ngIf=\"enforcedPolicyOptions\"> </app-callout> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate autocomplete=\"off\"> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"currentMasterPassword\">{{'currentMasterPass' | i18n}}</label> <input id=\"currentMasterPassword\" type=\"password\" name=\"MasterPasswordHash\" class=\"form-control\" [(ngModel)]=\"currentMasterPassword\" required appInputVerbatim> </div> </div> </div> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"newMasterPassword\">{{'newMasterPass' | i18n}}</label> <input id=\"newMasterPassword\" type=\"password\" name=\"NewMasterPasswordHash\" class=\"form-control mb-1\" [(ngModel)]=\"masterPassword\" (input)=\"updatePasswordStrength()\" required appInputVerbatim autocomplete=\"new-password\"> <app-password-strength [score]=\"masterPasswordScore\" [showText]=\"true\"></app-password-strength> </div> </div> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"masterPasswordRetype\">{{'confirmNewMasterPass' | i18n}}</label> <input id=\"masterPasswordRetype\" type=\"password\" name=\"MasterPasswordRetype\" class=\"form-control\" [(ngModel)]=\"masterPasswordRetype\" required appInputVerbatim autocomplete=\"new-password\"> </div> </div> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"rotateEncKey\" name=\"RotateEncKey\" [(ngModel)]=\"rotateEncKey\" (change)=\"rotateEncKeyClicked()\"> <label class=\"form-check-label\" for=\"rotateEncKey\"> {{'rotateAccountEncKey' | i18n}} </label> <a href=\"https://bitwarden.com/help/article/account-encryption-key/#rotate-your-encryption-key\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'changeMasterPassword' | i18n}}</span> </button> </form> ","export enum EmergencyAccessStatusType {\n    Invited = 0,\n    Accepted = 1,\n    Confirmed = 2,\n    RecoveryInitiated = 3,\n    RecoveryApproved = 4,\n}\n","import { EmergencyAccessType } from '../../enums/emergencyAccessType';\n\nexport class EmergencyAccessUpdateRequest {\n    type: EmergencyAccessType;\n    waitTimeDays: number;\n    keyEncrypted?: string;\n}\n","import { FolderRequest } from './folderRequest';\n\nimport { Folder } from '../domain/folder';\n\nexport class FolderWithIdRequest extends FolderRequest {\n    id: string;\n\n    constructor(folder: Folder) {\n        super(folder);\n        this.id = folder.id;\n    }\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class PasswordRequest extends SecretVerificationRequest {\n    newMasterPasswordHash: string;\n    key: string;\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nimport { Send } from '../domain/send';\n\nexport class SendRequest {\n    type: SendType;\n    fileLength?: number;\n    name: string;\n    notes: string;\n    key: string;\n    maxAccessCount?: number;\n    expirationDate: string;\n    deletionDate: string;\n    text: SendTextApi;\n    file: SendFileApi;\n    password: string;\n    disabled: boolean;\n    hideEmail: boolean;\n\n    constructor(send: Send, fileLength?: number) {\n        this.type = send.type;\n        this.fileLength = fileLength;\n        this.name = send.name ? send.name.encryptedString : null;\n        this.notes = send.notes ? send.notes.encryptedString : null;\n        this.maxAccessCount = send.maxAccessCount;\n        this.expirationDate = send.expirationDate != null ? send.expirationDate.toISOString() : null;\n        this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;\n        this.key = send.key != null ? send.key.encryptedString : null;\n        this.password = send.password;\n        this.disabled = send.disabled;\n        this.hideEmail = send.hideEmail;\n\n        switch (this.type) {\n            case SendType.Text:\n                this.text = new SendTextApi();\n                this.text.text = send.text.text != null ? send.text.text.encryptedString : null;\n                this.text.hidden = send.text.hidden;\n                break;\n            case SendType.File:\n                this.file = new SendFileApi();\n                this.file.fileName = send.file.fileName != null ? send.file.fileName.encryptedString : null;\n                break;\n            default:\n                break;\n        }\n    }\n}\n","import { CipherWithIdRequest } from './cipherWithIdRequest';\nimport { FolderWithIdRequest } from './folderWithIdRequest';\nimport { SendWithIdRequest } from './sendWithIdRequest';\n\nexport class UpdateKeyRequest {\n    ciphers: CipherWithIdRequest[] = [];\n    folders: FolderWithIdRequest[] = [];\n    sends: SendWithIdRequest[] = [];\n    masterPasswordHash: string;\n    privateKey: string;\n    key: string;\n}\n","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { KdfRequest } from 'jslib-common/models/request/kdfRequest';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\n@Component({\n    selector: 'app-change-kdf',\n    templateUrl: 'change-kdf.component.html',\n})\nexport class ChangeKdfComponent implements OnInit {\n    masterPassword: string;\n    kdfIterations: number;\n    kdf = KdfType.PBKDF2_SHA256;\n    kdfOptions: any[] = [];\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private cryptoService: CryptoService,\n        private messagingService: MessagingService, private userService: UserService,\n        private logService: LogService) {\n        this.kdfOptions = [\n            { name: 'PBKDF2 SHA-256', value: KdfType.PBKDF2_SHA256 },\n        ];\n    }\n\n    async ngOnInit() {\n        this.kdf = await this.userService.getKdf();\n        this.kdfIterations = await this.userService.getKdfIterations();\n    }\n\n    async submit() {\n        const hasEncKey = await this.cryptoService.hasEncKey();\n        if (!hasEncKey) {\n            this.toasterService.popAsync('error', null, this.i18nService.t('updateKey'));\n            return;\n        }\n\n        const request = new KdfRequest();\n        request.kdf = this.kdf;\n        request.kdfIterations = this.kdfIterations;\n        request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n        const email = await this.userService.getEmail();\n        const newKey = await this.cryptoService.makeKey(this.masterPassword, email, this.kdf, this.kdfIterations);\n        request.newMasterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n        const newEncKey = await this.cryptoService.remakeEncKey(newKey);\n        request.key = newEncKey[1].encryptedString;\n        try {\n            this.formPromise = this.apiService.postAccountKdf(request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', this.i18nService.t('encKeySettingsChanged'),\n                this.i18nService.t('logBackIn'));\n            this.messagingService.send('logout');\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<app-callout type=\"warning\">{{'loggedOutWarning' | i18n}}</app-callout> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate autocomplete=\"off\"> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"kdfMasterPassword\">{{'masterPass' | i18n}}</label> <input id=\"kdfMasterPassword\" type=\"password\" name=\"MasterPasswordHash\" class=\"form-control\" [(ngModel)]=\"masterPassword\" required appInputVerbatim> </div> </div> </div> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group mb-0\"> <label for=\"kdf\">{{'kdfAlgorithm' | i18n}}</label> <a class=\"ml-auto\" href=\"https://en.wikipedia.org/wiki/Key_derivation_function\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> <select id=\"kdf\" name=\"Kdf\" [(ngModel)]=\"kdf\" class=\"form-control\" required> <option *ngFor=\"let o of kdfOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> </div> </div> <div class=\"col-6\"> <div class=\"form-group mb-0\"> <label for=\"kdfIterations\">{{'kdfIterations' | i18n}}</label> <a class=\"ml-auto\" href=\"https://bitwarden.com/help/article/what-encryption-is-used/#pbkdf2\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> <input id=\"kdfIterations\" type=\"number\" min=\"5000\" max=\"2000000\" name=\"KdfIterations\" class=\"form-control\" [(ngModel)]=\"kdfIterations\" required> </div> </div> <div class=\"col-12\"> <div class=\"form-group\"> <div class=\"small form-text text-muted\"> <p>{{'kdfIterationsDesc' | i18n : (100000 | number)}}</p> <strong>{{'warning' | i18n}}</strong>: {{'kdfIterationsWarning' | i18n : (50000 | number)}} </div> </div> </div> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'changeKdf' | i18n}}</span> </button> </form> ","import {\n    Component,\n    OnInit,\n    ViewChild,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { PlanType } from 'jslib-common/enums/planType';\nimport { ProductType } from 'jslib-common/enums/productType';\n\nimport { OrganizationPlansComponent } from './organization-plans.component';\n\n@Component({\n    selector: 'app-create-organization',\n    templateUrl: 'create-organization.component.html',\n})\nexport class CreateOrganizationComponent implements OnInit {\n    @ViewChild(OrganizationPlansComponent, { static: true }) orgPlansComponent: OrganizationPlansComponent;\n\n    constructor(private route: ActivatedRoute) { }\n\n    ngOnInit() {\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            if (qParams.plan === 'families') {\n                this.orgPlansComponent.plan = PlanType.FamiliesAnnually;\n                this.orgPlansComponent.product = ProductType.Families;\n            } else if (qParams.plan === 'teams') {\n                this.orgPlansComponent.plan = PlanType.TeamsAnnually;\n                this.orgPlansComponent.product = ProductType.Teams;\n            } else if (qParams.plan === 'enterprise') {\n                this.orgPlansComponent.plan = PlanType.EnterpriseAnnually;\n                this.orgPlansComponent.product = ProductType.Enterprise;\n            }\n        });\n    }\n}\n","<div class=\"page-header\"> <h1>{{'newOrganization' | i18n}}</h1> </div> <p>{{'newOrganizationDesc' | i18n}}</p> <app-organization-plans></app-organization-plans> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { UpdateDomainsRequest } from 'jslib-common/models/request/updateDomainsRequest';\n\n@Component({\n    selector: 'app-domain-rules',\n    templateUrl: 'domain-rules.component.html',\n})\nexport class DomainRulesComponent implements OnInit {\n    loading = true;\n    custom: string[] = [];\n    global: any[] = [];\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    async ngOnInit() {\n        const response = await this.apiService.getSettingsDomains();\n        this.loading = false;\n        if (response.equivalentDomains != null) {\n            this.custom = response.equivalentDomains.map(d => d.join(', '));\n        }\n        if (response.globalEquivalentDomains != null) {\n            this.global = response.globalEquivalentDomains.map(d => {\n                return {\n                    domains: d.domains.join(', '),\n                    excluded: d.excluded,\n                    key: d.type,\n                };\n            });\n        }\n    }\n\n    toggleExcluded(globalDomain: any) {\n        globalDomain.excluded = !globalDomain.excluded;\n    }\n\n    customize(globalDomain: any) {\n        globalDomain.excluded = true;\n        this.custom.push(globalDomain.domains);\n    }\n\n    remove(index: number) {\n        this.custom.splice(index, 1);\n    }\n\n    add() {\n        this.custom.push('');\n    }\n\n    async submit() {\n        const request = new UpdateDomainsRequest();\n        request.excludedGlobalEquivalentDomains = this.global.filter(d => d.excluded)\n            .map(d => d.key);\n        if (request.excludedGlobalEquivalentDomains.length === 0) {\n            request.excludedGlobalEquivalentDomains = null;\n        }\n        request.equivalentDomains = this.custom.filter(d => d != null && d.trim() !== '')\n            .map(d => d.split(',').map(d2 => d2.trim()));\n        if (request.equivalentDomains.length === 0) {\n            request.equivalentDomains = null;\n        }\n\n        try {\n            this.formPromise = this.apiService.putSettingsDomains(request);\n            await this.formPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('domainsUpdated'));\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    indexTrackBy(index: number, obj: any): any {\n        return index;\n    }\n}\n","<div class=\"page-header\"> <h1>{{'domainRules' | i18n}}</h1> </div> <p>{{'domainRulesDesc' | i18n}}</p> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <h2>{{'customEqDomains' | i18n}}</h2> <p *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> <ng-container *ngIf=\"!loading\"> <div class=\"form-group d-flex\" *ngFor=\"let d of custom; let i = index; trackBy: indexTrackBy\"> <div class=\"flex-fill\"> <label for=\"customDomain_{{i}}\" class=\"sr-only\">{{'customDomainX' | i18n : (i + 1)}}</label> <textarea class=\"form-control\" name=\"CustomDomain[{{i}}]\" id=\"customDomain_{{i}}\" [(ngModel)]=\"custom[i]\" placeholder=\"{{'ex' | i18n}} google.com, gmail.com\" required></textarea> </div> <button type=\"button\" class=\"btn btn-link text-danger ml-2\" (click)=\"remove(i)\" appA11yTitle=\"{{'remove' | i18n}}\"> <i class=\"fa fa-minus-circle fa-lg\" aria-hidden=\"true\"></i> </button> </div> <button type=\"button\" (click)=\"add()\" class=\"btn btn-outline-secondary btn-sm mb-2\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i> {{'newCustomDomain' | i18n}} </button> <small class=\"text-muted d-block mb-3\">{{'newCustomDomainDesc' | i18n}}</small> </ng-container> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <h2 class=\"spaced-header\">{{'globalEqDomains' | i18n}}</h2> <p *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> <table class=\"table table-hover table-list\" *ngIf=\"!loading && global.length > 0\"> <tbody> <tr *ngFor=\"let d of global\"> <td [ngClass]=\"{'table-list-strike': d.excluded}\">{{d.domains}}</td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"toggleExcluded(d)\" *ngIf=\"!d.excluded\"> <i class=\"fa fa-fw fa-close\" aria-hidden=\"true\"></i> {{'exclude' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"toggleExcluded(d)\" *ngIf=\"d.excluded\"> <i class=\"fa fa-fw fa-plus\" aria-hidden=\"true\"></i> {{'include' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"customize(d)\"> <i class=\"fa fa-fw fa-scissors\" aria-hidden=\"true\"></i> {{'customize' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> </form> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { ThemeType } from 'jslib-common/enums/themeType';\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n    selector: 'app-options',\n    templateUrl: 'options.component.html',\n})\nexport class OptionsComponent implements OnInit {\n    vaultTimeoutAction: string = 'lock';\n    disableIcons: boolean;\n    enableGravatars: boolean;\n    enableFullWidth: boolean;\n    theme: string = null;\n    locale: string;\n    vaultTimeouts: { name: string; value: number; }[];\n    localeOptions: any[];\n    themeOptions: any[];\n\n    vaultTimeout: FormControl = new FormControl(null);\n\n    private startingLocale: string;\n    private startingTheme: string;\n\n    constructor(private storageService: StorageService, private stateService: StateService,\n        private i18nService: I18nService, private toasterService: ToasterService,\n        private vaultTimeoutService: VaultTimeoutService, private platformUtilsService: PlatformUtilsService,\n        private messagingService: MessagingService) {\n        this.vaultTimeouts = [\n            { name: i18nService.t('oneMinute'), value: 1 },\n            { name: i18nService.t('fiveMinutes'), value: 5 },\n            { name: i18nService.t('fifteenMinutes'), value: 15 },\n            { name: i18nService.t('thirtyMinutes'), value: 30 },\n            { name: i18nService.t('oneHour'), value: 60 },\n            { name: i18nService.t('fourHours'), value: 240 },\n            { name: i18nService.t('onRefresh'), value: -1 },\n        ];\n        if (this.platformUtilsService.isDev()) {\n            this.vaultTimeouts.push({ name: i18nService.t('never'), value: null });\n        }\n\n        const localeOptions: any[] = [];\n        i18nService.supportedTranslationLocales.forEach(locale => {\n            let name = locale;\n            if (i18nService.localeNames.has(locale)) {\n                name += (' - ' + i18nService.localeNames.get(locale));\n            }\n            localeOptions.push({ name: name, value: locale });\n        });\n        localeOptions.sort(Utils.getSortFunction(i18nService, 'name'));\n        localeOptions.splice(0, 0, { name: i18nService.t('default'), value: null });\n        this.localeOptions = localeOptions;\n        this.themeOptions = [\n            { name: i18nService.t('themeLight'), value: null },\n            { name: i18nService.t('themeDark'), value: ThemeType.Dark },\n            { name: i18nService.t('themeSystem'), value: ThemeType.System },\n        ];\n    }\n\n    async ngOnInit() {\n        this.vaultTimeout.setValue(await this.vaultTimeoutService.getVaultTimeout());\n        this.vaultTimeoutAction = await this.storageService.get<string>(ConstantsService.vaultTimeoutActionKey);\n        this.disableIcons = await this.storageService.get<boolean>(ConstantsService.disableFaviconKey);\n        this.enableGravatars = await this.storageService.get<boolean>('enableGravatars');\n        this.enableFullWidth = await this.storageService.get<boolean>('enableFullWidth');\n        this.locale = this.startingLocale = await this.storageService.get<string>(ConstantsService.localeKey);\n        this.theme = this.startingTheme = await this.storageService.get<ThemeType>(ConstantsService.themeKey);\n    }\n\n    async submit() {\n        if (!this.vaultTimeout.valid) {\n            this.toasterService.popAsync('error', null, this.i18nService.t('vaultTimeoutToLarge'));\n            return;\n        }\n\n        await this.vaultTimeoutService.setVaultTimeoutOptions(this.vaultTimeout.value, this.vaultTimeoutAction);\n        await this.storageService.save(ConstantsService.disableFaviconKey, this.disableIcons);\n        await this.stateService.save(ConstantsService.disableFaviconKey, this.disableIcons);\n        await this.storageService.save('enableGravatars', this.enableGravatars);\n        await this.stateService.save('enableGravatars', this.enableGravatars);\n        await this.storageService.save('enableFullWidth', this.enableFullWidth);\n        this.messagingService.send('setFullWidth');\n        if (this.theme !== this.startingTheme) {\n            await this.storageService.save(ConstantsService.themeKey, this.theme);\n            this.startingTheme = this.theme;\n            const effectiveTheme = await this.platformUtilsService.getEffectiveTheme();\n            const htmlEl = window.document.documentElement;\n            htmlEl.classList.remove('theme_' + ThemeType.Light, 'theme_' + ThemeType.Dark);\n            htmlEl.classList.add('theme_' + effectiveTheme);\n        }\n        await this.storageService.save(ConstantsService.localeKey, this.locale);\n        if (this.locale !== this.startingLocale) {\n            window.location.reload();\n        } else {\n            this.toasterService.popAsync('success', null, this.i18nService.t('optionsUpdated'));\n        }\n    }\n\n    async vaultTimeoutActionChanged(newValue: string) {\n        if (newValue === 'logOut') {\n            const confirmed = await this.platformUtilsService.showDialog(\n                this.i18nService.t('vaultTimeoutLogOutConfirmation'),\n                this.i18nService.t('vaultTimeoutLogOutConfirmationTitle'),\n                this.i18nService.t('yes'), this.i18nService.t('cancel'), 'warning');\n            if (!confirmed) {\n                this.vaultTimeoutAction = 'lock';\n                return;\n            }\n        }\n        this.vaultTimeoutAction = newValue;\n    }\n}\n","<div class=\"page-header\"> <h1>{{'options' | i18n}}</h1> </div> <p>{{'optionsDesc' | i18n}}</p> <form (ngSubmit)=\"submit()\" ngNativeValidate> <div class=\"row\"> <div class=\"col-6\"> <app-vault-timeout-input [vaultTimeouts]=\"vaultTimeouts\" [formControl]=\"vaultTimeout\" ngDefaultControl> </app-vault-timeout-input> </div> </div> <div class=\"form-group\"> <label>{{'vaultTimeoutAction' | i18n}}</label> <div class=\"form-check form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"vaultTimeoutAction\" id=\"vaultTimeoutActionLock\" value=\"lock\" [(ngModel)]=\"vaultTimeoutAction\"> <label class=\"form-check-label\" for=\"vaultTimeoutActionLock\"> {{'lock' | i18n}} <small>{{'vaultTimeoutActionLockDesc' | i18n}}</small> </label> </div> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"vaultTimeoutAction\" id=\"vaultTimeoutActionLogOut\" value=\"logOut\" [(ngModel)]=\"vaultTimeoutAction\" (ngModelChange)=\"vaultTimeoutActionChanged($event)\"> <label class=\"form-check-label\" for=\"vaultTimeoutActionLogOut\"> {{'logOut' | i18n}} <small>{{'vaultTimeoutActionLogOutDesc' | i18n}}</small> </label> </div> </div> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <div class=\"d-flex\"> <label for=\"locale\">{{'language' | i18n}}</label> <a class=\"ml-auto\" href=\"https://help.bitwarden.com/article/localization/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <select id=\"locale\" name=\"Locale\" [(ngModel)]=\"locale\" class=\"form-control\"> <option *ngFor=\"let o of localeOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> <small class=\"form-text text-muted\">{{'languageDesc' | i18n}}</small> </div> </div> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"disableIcons\" name=\"DisableIcons\" [(ngModel)]=\"disableIcons\"> <label class=\"form-check-label\" for=\"disableIcons\"> {{'disableIcons' | i18n}} </label> <a href=\"https://help.bitwarden.com/article/website-icons/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <small class=\"form-text text-muted\">{{'disableIconsDesc' | i18n}}</small> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enableGravatars\" name=\"enableGravatars\" [(ngModel)]=\"enableGravatars\"> <label class=\"form-check-label\" for=\"enableGravatars\"> {{'enableGravatars' | i18n}} </label> <a href=\"https://gravatar.com/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <small class=\"form-text text-muted\">{{'enableGravatarsDesc' | i18n}}</small> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"enableFullWidth\" name=\"enableFullWidth\" [(ngModel)]=\"enableFullWidth\"> <label class=\"form-check-label\" for=\"enableFullWidth\"> {{'enableFullWidth' | i18n}} </label> </div> <small class=\"form-text text-muted\">{{'enableFullWidthDesc' | i18n}}</small> </div> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"theme\">{{'theme' | i18n}}</label> <select id=\"theme\" name=\"theme\" [(ngModel)]=\"theme\" class=\"form-control\"> <option *ngFor=\"let o of themeOptions\" [ngValue]=\"o.value\">{{o.name}}</option> </select> <small class=\"form-text text-muted\">{{'themeDesc' | i18n}}</small> </div> </div> </div> <button type=\"submit\" class=\"btn btn-primary\"> {{'save' | i18n}} </button> </form> ","import { Component } from '@angular/core';\nimport {\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n} from '@angular/forms';\n\nimport {\n    VaultTimeoutInputComponent as VaultTimeoutInputComponentBase\n} from 'jslib-angular/components/settings/vault-timeout-input.component';\n\n@Component({\n    selector: 'app-vault-timeout-input',\n    templateUrl: 'vault-timeout-input.component.html',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: VaultTimeoutInputComponent,\n        },\n        {\n            provide: NG_VALIDATORS,\n            multi: true,\n            useExisting: VaultTimeoutInputComponent,\n        },\n    ],\n})\nexport class VaultTimeoutInputComponent extends VaultTimeoutInputComponentBase {\n}\n","<app-callout type=\"info\" *ngIf=\"vaultTimeoutPolicy\"> {{'vaultTimeoutPolicyInEffect' | i18n : vaultTimeoutPolicyHours : vaultTimeoutPolicyMinutes}} </app-callout> <div [formGroup]=\"form\"> <div class=\"form-group\"> <label for=\"vaultTimeout\">{{'vaultTimeout' | i18n}}</label> <select id=\"vaultTimeout\" name=\"VaultTimeout\" formControlName=\"vaultTimeout\" class=\"form-control\"> <option *ngFor=\"let o of vaultTimeouts\" [ngValue]=\"o.value\">{{o.name}}</option> </select> <small class=\"form-text text-muted\">{{'vaultTimeoutDesc' | i18n}}</small> </div> <div class=\"form-group\" *ngIf=\"showCustom\" formGroupName=\"custom\"> <label for=\"customVaultTimeout\">{{'customVaultTimeout' | i18n}}</label> <div class=\"row\"> <div class=\"col-6\"> <input id=\"hours\" class=\"form-control\" type=\"number\" min=\"0\" name=\"hours\" formControlName=\"hours\"> <small>{{'hours' | i18n }}</small> </div> <div class=\"col-6\"> <input id=\"minutes\" class=\"form-control\" type=\"number\" min=\"0\" name=\"minutes\" formControlName=\"minutes\"> <small>{{'minutes' | i18n }}</small> </div> </div> </div> </div> ","import {\n    AfterContentInit,\n    Component,\n    Input,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { SsoComponent } from 'jslib-angular/components/sso.component';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n    selector: 'app-link-sso',\n    templateUrl: 'link-sso.component.html',\n})\nexport class LinkSsoComponent extends SsoComponent implements AfterContentInit {\n    @Input() organization: Organization;\n    returnUri: string = '/settings/organizations';\n\n    constructor(platformUtilsService: PlatformUtilsService, i18nService: I18nService,\n        apiService: ApiService, authService: AuthService,\n        router: Router, route: ActivatedRoute,\n        cryptoFunctionService: CryptoFunctionService, passwordGenerationService: PasswordGenerationService,\n        storageService: StorageService, stateService: StateService, environmentService: EnvironmentService,\n        logService: LogService) {\n        super(authService, router,\n            i18nService, route,\n            storageService, stateService,\n            platformUtilsService, apiService,\n            cryptoFunctionService, environmentService, passwordGenerationService, logService);\n\n        this.returnUri = '/settings/organizations';\n        this.redirectUri = window.location.origin + '/sso-connector.html';\n        this.clientId = 'web';\n    }\n\n    async ngAfterContentInit() {\n        this.identifier = this.organization.identifier;\n    }\n}\n","<a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"submit(returnUri, true)\"> <i class=\"fa fa-fw fa-link\" aria-hidden=\"true\"></i> {{'linkSso' | i18n}} </a> ","import {\n    Component,\n    OnInit,\n    ViewChild,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { PaymentComponent } from './payment.component';\nimport { TaxInfoComponent } from './tax-info.component';\n\n@Component({\n    selector: 'app-premium',\n    templateUrl: 'premium.component.html',\n})\nexport class PremiumComponent implements OnInit {\n    @ViewChild(PaymentComponent) paymentComponent: PaymentComponent;\n    @ViewChild(TaxInfoComponent) taxInfoComponent: TaxInfoComponent;\n\n    canAccessPremium = false;\n    selfHosted = false;\n    premiumPrice = 10;\n    storageGbPrice = 4;\n    additionalStorage = 0;\n\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, platformUtilsService: PlatformUtilsService,\n        private tokenService: TokenService, private router: Router,\n        private messagingService: MessagingService, private syncService: SyncService,\n        private userService: UserService, private logService: LogService) {\n        this.selfHosted = platformUtilsService.isSelfHost();\n    }\n\n    async ngOnInit() {\n        this.canAccessPremium = await this.userService.canAccessPremium();\n        const premium = await this.tokenService.getPremium();\n        if (premium) {\n            this.router.navigate(['/settings/subscription']);\n            return;\n        }\n    }\n\n    async submit() {\n        let files: FileList = null;\n        if (this.selfHosted) {\n            const fileEl = document.getElementById('file') as HTMLInputElement;\n            files = fileEl.files;\n            if (files == null || files.length === 0) {\n                this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                    this.i18nService.t('selectFile'));\n                return;\n            }\n        }\n\n        try {\n            if (this.selfHosted) {\n                if (!this.tokenService.getEmailVerified()) {\n                    this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                        this.i18nService.t('verifyEmailFirst'));\n                    return;\n                }\n\n                const fd = new FormData();\n                fd.append('license', files[0]);\n                this.formPromise = this.apiService.postAccountLicense(fd).then(() => {\n                    return this.finalizePremium();\n                });\n            } else {\n                this.formPromise = this.paymentComponent.createPaymentToken().then(result => {\n                    const fd = new FormData();\n                    fd.append('paymentMethodType', result[1].toString());\n                    if (result[0] != null) {\n                        fd.append('paymentToken', result[0]);\n                    }\n                    fd.append('additionalStorageGb', (this.additionalStorage || 0).toString());\n                    fd.append('country', this.taxInfoComponent.taxInfo.country);\n                    fd.append('postalCode', this.taxInfoComponent.taxInfo.postalCode);\n                    return this.apiService.postPremium(fd);\n                }).then(paymentResponse => {\n                    if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {\n                        return this.paymentComponent.handleStripeCardPayment(paymentResponse.paymentIntentClientSecret,\n                            () => this.finalizePremium());\n                    } else {\n                        return this.finalizePremium();\n                    }\n                });\n            }\n            await this.formPromise;\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async finalizePremium() {\n        await this.apiService.refreshIdentityToken();\n        await this.syncService.fullSync(true);\n        this.toasterService.popAsync('success', null, this.i18nService.t('premiumUpdated'));\n        this.messagingService.send('purchasedPremium');\n        this.router.navigate(['/settings/subscription']);\n    }\n\n    get additionalStorageTotal(): number {\n        return this.storageGbPrice * Math.abs(this.additionalStorage || 0);\n    }\n\n    get subtotal(): number {\n        return this.premiumPrice + this.additionalStorageTotal;\n    }\n\n    get taxCharges(): number {\n        return this.taxInfoComponent != null && this.taxInfoComponent.taxRate != null ?\n            (this.taxInfoComponent.taxRate / 100) * this.subtotal :\n            0;\n    }\n\n    get total(): number {\n        return (this.subtotal + this.taxCharges) || 0;\n    }\n}\n","<div class=\"page-header\"> <h1>{{'goPremium' | i18n}}</h1> </div> <app-callout type=\"info\" *ngIf=\"canAccessPremium\" title=\"{{'youHavePremiumAccess' | i18n}}\" icon=\"fa-star\"> {{'alreadyPremiumFromOrg' | i18n}} </app-callout> <app-callout type=\"success\"> <p>{{'premiumUpgradeUnlockFeatures' | i18n}}</p> <ul class=\"fa-ul\"> <li> <i class=\"fa fa-check text-success fa-li\" aria-hidden=\"true\"></i> {{'premiumSignUpStorage' | i18n}} </li> <li> <i class=\"fa fa-check text-success fa-li\" aria-hidden=\"true\"></i> {{'premiumSignUpTwoStep' | i18n}} </li> <li> <i class=\"fa fa-check text-success fa-li\" aria-hidden=\"true\"></i> {{'premiumSignUpEmergency' |i18n}} </li> <li> <i class=\"fa fa-check text-success fa-li\" aria-hidden=\"true\"></i> {{'premiumSignUpReports' | i18n}} </li> <li> <i class=\"fa fa-check text-success fa-li\" aria-hidden=\"true\"></i> {{'premiumSignUpTotp' | i18n}} </li> <li> <i class=\"fa fa-check text-success fa-li\" aria-hidden=\"true\"></i> {{'premiumSignUpSupport' | i18n}} </li> <li> <i class=\"fa fa-check text-success fa-li\" aria-hidden=\"true\"></i> {{'premiumSignUpFuture' | i18n}} </li> </ul> <p class=\"text-lg\" [ngClass]=\"{'mb-0':!selfHosted}\">{{'premiumPrice' | i18n : (premiumPrice | currency:'$')}}</p> <a href=\"https://vault.bitwarden.com/#/settings/premium\" target=\"_blank\" rel=\"noopener\" class=\"btn btn-outline-secondary\" *ngIf=\"selfHosted\"> {{'purchasePremium' | i18n}} </a> </app-callout> <ng-container *ngIf=\"selfHosted\"> <p>{{'uploadLicenseFilePremium' | i18n}}</p> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"form-group\"> <label for=\"file\">{{'licenseFile' | i18n}}</label> <input type=\"file\" id=\"file\" class=\"form-control-file\" name=\"file\" required> <small class=\"form-text text-muted\">{{'licenseFileDesc' | i18n : 'bitwarden_premium_license.json'}}</small> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> </form> </ng-container> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"!selfHosted\"> <h2 class=\"mt-5\">{{'addons' | i18n}}</h2> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"additionalStorage\">{{'additionalStorageGb' | i18n}}</label> <input id=\"additionalStorage\" class=\"form-control\" type=\"number\" name=\"AdditionalStorageGb\" [(ngModel)]=\"additionalStorage\" min=\"0\" max=\"99\" step=\"1\" placeholder=\"{{'additionalStorageGbDesc' | i18n}}\"> <small class=\"text-muted form-text\">{{'additionalStorageIntervalDesc' | i18n : '1 GB' : (storageGbPrice | currency:'$') : ('year' | i18n)}}</small> </div> </div> <h2 class=\"spaced-header\">{{'summary' | i18n}}</h2> {{'premiumMembership' | i18n}}: {{premiumPrice | currency:'$'}} <br> {{'additionalStorageGb' | i18n}}: {{additionalStorage || 0}} GB &times; {{storageGbPrice | currency:'$'}} = {{additionalStorageTotal | currency:'$'}} <hr class=\"my-3\"> <h2 class=\"spaced-header mb-4\">{{'paymentInformation' | i18n}}</h2> <app-payment [hideBank]=\"true\"></app-payment> <app-tax-info></app-tax-info> <div id=\"price\" class=\"my-4\"> <div class=\"text-muted text-sm\"> {{ 'planPrice' | i18n }}: {{ subtotal | currency: 'USD $' }} <br/> <ng-container> {{ 'estimatedTax' | i18n }}: {{ taxCharges | currency: 'USD $' }} </ng-container> </div> <hr class=\"my-1 col-3 ml-0\"> <p class=\"text-lg\"><strong>{{'total' | i18n}}:</strong> {{total | currency:'USD $'}}/{{'year' | i18n}}</p> </div> <small class=\"text-muted font-italic\">{{'paymentChargedAnnually' | i18n}}</small> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'submit' | i18n}}</span> </button> </form> ","import {\n    Component,\n    NgZone,\n    OnDestroy,\n    OnInit,\n} from '@angular/core';\n\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nconst BroadcasterSubscriptionId = 'SettingsComponent';\n\n@Component({\n    selector: 'app-settings',\n    templateUrl: 'settings.component.html',\n})\nexport class SettingsComponent implements OnInit, OnDestroy {\n    premium: boolean;\n    selfHosted: boolean;\n    hasFamilySponsorshipAvailable: boolean;\n\n    constructor(private tokenService: TokenService, private broadcasterService: BroadcasterService,\n        private ngZone: NgZone, private platformUtilsService: PlatformUtilsService,\n        private userService: UserService) { }\n\n    async ngOnInit() {\n        this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n            this.ngZone.run(async () => {\n                switch (message.command) {\n                    case 'purchasedPremium':\n                        await this.load();\n                        break;\n                    default:\n                }\n            });\n        });\n\n        this.selfHosted = await this.platformUtilsService.isSelfHost();\n        await this.load();\n    }\n\n    ngOnDestroy() {\n        this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n    }\n\n    async load() {\n        this.premium = await this.tokenService.getPremium();\n        this.hasFamilySponsorshipAvailable = await this.userService.canManageSponsorships();\n    }\n}\n","<div class=\"container page-content\"> <div class=\"row\"> <div class=\"col-3\"> <div class=\"card\"> <div class=\"card-header\">{{'settings' | i18n}}</div> <div class=\"list-group list-group-flush\"> <a routerLink=\"account\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'myAccount' | i18n}} </a> <a routerLink=\"options\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'options' | i18n}} </a> <a routerLink=\"organizations\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'organizations' | i18n}} </a> <a routerLink=\"subscription\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"premium\"> {{'premiumMembership' | i18n}} </a> <a routerLink=\"premium\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"!premium\"> {{'goPremium' | i18n}} </a> <a routerLink=\"billing\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"!selfHosted\"> {{'billing' | i18n}} </a> <a routerLink=\"two-factor\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'twoStepLogin' | i18n}} </a> <a routerLink=\"domain-rules\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'domainRules' | i18n}} </a> <a routerLink=\"emergency-access\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'emergencyAccess' | i18n}} </a> <a routerLink=\"sponsored-families\" class=\"list-group-item\" routerLinkActive=\"active\" *ngIf=\"hasFamilySponsorshipAvailable\"> {{'sponsoredFamilies' | i18n}} </a> </div> </div> </div> <div class=\"col-9\"> <router-outlet></router-outlet> </div> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { SubscriptionResponse } from 'jslib-common/models/response/subscriptionResponse';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\n\n@Component({\n    selector: 'app-user-subscription',\n    templateUrl: 'user-subscription.component.html',\n})\nexport class UserSubscriptionComponent implements OnInit {\n    loading = false;\n    firstLoaded = false;\n    adjustStorageAdd = true;\n    showAdjustStorage = false;\n    showUpdateLicense = false;\n    sub: SubscriptionResponse;\n    selfHosted = false;\n\n    cancelPromise: Promise<any>;\n    reinstatePromise: Promise<any>;\n\n    constructor(private tokenService: TokenService, private apiService: ApiService,\n        private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n        private toasterService: ToasterService, private router: Router, private logService: LogService) {\n        this.selfHosted = platformUtilsService.isSelfHost();\n    }\n\n    async ngOnInit() {\n        await this.load();\n        this.firstLoaded = true;\n    }\n\n    async load() {\n        if (this.loading) {\n            return;\n        }\n\n        if (this.tokenService.getPremium()) {\n            this.loading = true;\n            this.sub = await this.apiService.getUserSubscription();\n        } else {\n            this.router.navigate(['/settings/premium']);\n            return;\n        }\n\n        this.loading = false;\n    }\n\n    async reinstate() {\n        if (this.loading) {\n            return;\n        }\n\n        if (this.usingInAppPurchase) {\n            this.platformUtilsService.showDialog(this.i18nService.t('manageSubscriptionFromStore'),\n                this.i18nService.t('cancelSubscription'), null, null, 'warning');\n            return;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('reinstateConfirmation'),\n            this.i18nService.t('reinstateSubscription'), this.i18nService.t('yes'), this.i18nService.t('cancel'));\n        if (!confirmed) {\n            return;\n        }\n\n        try {\n            this.reinstatePromise = this.apiService.postReinstatePremium();\n            await this.reinstatePromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('reinstated'));\n            this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async cancel() {\n        if (this.loading) {\n            return;\n        }\n\n        if (this.usingInAppPurchase) {\n            this.platformUtilsService.showDialog(this.i18nService.t('manageSubscriptionFromStore'),\n                this.i18nService.t('cancelSubscription'), null, null, 'warning');\n            return;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('cancelConfirmation'),\n            this.i18nService.t('cancelSubscription'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return;\n        }\n\n        try {\n            this.cancelPromise = this.apiService.postCancelPremium();\n            await this.cancelPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('canceledSubscription'));\n            this.load();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    downloadLicense() {\n        if (this.loading) {\n            return;\n        }\n\n        const licenseString = JSON.stringify(this.sub.license, null, 2);\n        this.platformUtilsService.saveFile(window, licenseString, null, 'bitwarden_premium_license.json');\n    }\n\n    updateLicense() {\n        if (this.loading) {\n            return;\n        }\n        this.showUpdateLicense = true;\n    }\n\n    closeUpdateLicense(load: boolean) {\n        this.showUpdateLicense = false;\n        if (load) {\n            this.load();\n        }\n    }\n\n    adjustStorage(add: boolean) {\n        if (this.usingInAppPurchase) {\n            this.platformUtilsService.showDialog(this.i18nService.t('cannotPerformInAppPurchase'),\n                this.i18nService.t(add ? 'addStorage' : 'removeStorage'), null, null, 'warning');\n            return;\n        }\n        this.adjustStorageAdd = add;\n        this.showAdjustStorage = true;\n    }\n\n    closeStorage(load: boolean) {\n        this.showAdjustStorage = false;\n        if (load) {\n            this.load();\n        }\n    }\n\n    get subscriptionMarkedForCancel() {\n        return this.subscription != null && !this.subscription.cancelled && this.subscription.cancelAtEndDate;\n    }\n\n    get subscription() {\n        return this.sub != null ? this.sub.subscription : null;\n    }\n\n    get nextInvoice() {\n        return this.sub != null ? this.sub.upcomingInvoice : null;\n    }\n\n    get storagePercentage() {\n        return this.sub != null && this.sub.maxStorageGb ?\n            +(100 * (this.sub.storageGb / this.sub.maxStorageGb)).toFixed(2) : 0;\n    }\n\n    get storageProgressWidth() {\n        return this.storagePercentage < 5 ? 5 : 0;\n    }\n\n    get usingInAppPurchase() {\n        return this.sub != null ? this.sub.usingInAppPurchase : false;\n    }\n}\n","<div class=\"page-header\"> <h1> {{'premiumMembership' | i18n}} <small *ngIf=\"firstLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </small> </h1> </div> <ng-container *ngIf=\"!firstLoaded && loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"sub\"> <app-callout type=\"warning\" title=\"{{'canceled' | i18n}}\" *ngIf=\"subscription && subscription.cancelled\"> {{'subscriptionCanceled' | i18n}}</app-callout> <app-callout type=\"warning\" title=\"{{'pendingCancellation' | i18n}}\" *ngIf=\"subscriptionMarkedForCancel\"> <p>{{'subscriptionPendingCanceled' | i18n}}</p> <button #reinstateBtn type=\"button\" class=\"btn btn-outline-secondary btn-submit\" (click)=\"reinstate()\" [appApiAction]=\"reinstatePromise\" [disabled]=\"reinstateBtn.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'reinstateSubscription' | i18n}}</span> </button> </app-callout> <dl *ngIf=\"selfHosted\"> <dt>{{'expiration' | i18n}}</dt> <dd *ngIf=\"sub.expiration\">{{sub.expiration | date:'mediumDate'}}</dd> <dd *ngIf=\"!sub.expiration\">{{'neverExpires' | i18n}}</dd> </dl> <div class=\"row\" *ngIf=\"!selfHosted\"> <div class=\"col-4\"> <dl> <dt>{{'status' | i18n}}</dt> <dd> <span class=\"text-capitalize\">{{(subscription && subscription.status) || '-'}}</span> <span class=\"badge badge-warning\" *ngIf=\"subscriptionMarkedForCancel\">{{'pendingCancellation' | i18n}}</span> </dd> <dt>{{'nextCharge' | i18n}}</dt> <dd>{{nextInvoice ? ((nextInvoice.date | date: 'mediumDate') + ', ' + (nextInvoice.amount | currency:'$')) : '-'}} </dd> </dl> </div> <div class=\"col-8\" *ngIf=\"subscription\"> <strong class=\"d-block mb-1\">{{'details' | i18n}}</strong> <table class=\"table\"> <tbody> <tr *ngFor=\"let i of subscription.items\"> <td> {{i.name}} {{i.quantity > 1 ? '&times;' + i.quantity : ''}} @ {{i.amount | currency:'$'}} </td> <td> {{(i.quantity * i.amount) | currency:'$'}} /{{i.interval | i18n}} </td> </tr> </tbody> </table> </div> </div> <ng-container *ngIf=\"selfHosted\"> <div> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"updateLicense()\"> {{'updateLicense' | i18n}} </button> <a href=\"https://vault.bitwarden.com/#/settings/subscription\" target=\"_blank\" rel=\"noopener\" class=\"btn btn-outline-secondary\"> {{'manageSubscription' | i18n}} </a> </div> <div class=\"card mt-3\" *ngIf=\"showUpdateLicense\"> <div class=\"card-body\"> <button type=\"button\" class=\"close\" appA11yTitle=\"{{'cancel' | i18n}}\" (click)=\"closeUpdateLicense(false)\"><span aria-hidden=\"true\">&times;</span></button> <h3 class=\"card-body-header\">{{'updateLicense' | i18n}}</h3> <app-update-license (onUpdated)=\"closeUpdateLicense(true)\" (onCanceled)=\"closeUpdateLicense(false)\"> </app-update-license> </div> </div> </ng-container> <ng-container *ngIf=\"!selfHosted\"> <div class=\"d-flex\"> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"downloadLicense()\" *ngIf=\"!subscription || !subscription.cancelled\"> {{'downloadLicense' | i18n}} </button> <button #cancelBtn type=\"button\" class=\"btn btn-outline-danger btn-submit ml-auto\" (click)=\"cancel()\" [appApiAction]=\"cancelPromise\" [disabled]=\"cancelBtn.loading\" *ngIf=\"subscription && !subscription.cancelled && !subscriptionMarkedForCancel\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'cancelSubscription' | i18n}}</span> </button> </div> <h2 class=\"spaced-header\">{{'storage' | i18n}}</h2> <p>{{'subscriptionStorage' | i18n : sub.maxStorageGb || 0 : sub.storageName || '0 MB'}}</p> <div class=\"progress\"> <div class=\"progress-bar bg-success\" role=\"progressbar\" [ngStyle]=\"{width: storageProgressWidth + '%' }\" [attr.aria-valuenow]=\"storagePercentage\" aria-valuemin=\"0\" aria-valuemax=\"100\"> {{(storagePercentage / 100) | percent}}</div> </div> <ng-container *ngIf=\"subscription && !subscription.cancelled && !subscriptionMarkedForCancel\"> <div class=\"mt-3\"> <div class=\"d-flex\" *ngIf=\"!showAdjustStorage\"> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"adjustStorage(true)\"> {{'addStorage' | i18n}} </button> <button type=\"button\" class=\"ml-1 btn btn-outline-secondary\" (click)=\"adjustStorage(false)\"> {{'removeStorage' | i18n}} </button> </div> <app-adjust-storage [storageGbPrice]=\"4\" [add]=\"adjustStorageAdd\" (onAdjusted)=\"closeStorage(true)\" (onCanceled)=\"closeStorage(false)\" *ngIf=\"showAdjustStorage\"></app-adjust-storage> </div> </ng-container> </ng-container> </ng-container> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { BreachAccountResponse } from 'jslib-common/models/response/breachAccountResponse';\n\n@Component({\n    selector: 'app-breach-report',\n    templateUrl: 'breach-report.component.html',\n})\nexport class BreachReportComponent implements OnInit {\n    error = false;\n    username: string;\n    checkedUsername: string;\n    breachedAccounts: BreachAccountResponse[] = [];\n    formPromise: Promise<BreachAccountResponse[]>;\n\n    constructor(private auditService: AuditService, private userService: UserService) { }\n\n    async ngOnInit() {\n        this.username = await this.userService.getEmail();\n    }\n\n    async submit() {\n        this.error = false;\n        this.username = this.username.toLowerCase();\n        try {\n            this.formPromise = this.auditService.breachedAccounts(this.username);\n            this.breachedAccounts = await this.formPromise;\n        } catch {\n            this.error = true;\n        }\n        this.checkedUsername = this.username;\n    }\n}\n","<div class=\"page-header\"> <h1>{{'dataBreachReport' | i18n}}</h1> </div> <p>{{'breachDesc' | i18n}}</p> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"row\"> <div class=\"form-group col-6\"> <label for=\"username\">{{'username' | i18n}}</label> <input id=\"username\" type=\"text\" name=\"Username\" class=\"form-control\" [(ngModel)]=\"username\" required> <small class=\"form-text text-muted\">{{'breachCheckUsernameEmail' | i18n}}</small> </div> </div> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'checkBreaches' | i18n}}</span> </button> </form> <div class=\"mt-4\" *ngIf=\"!form.loading && checkedUsername\"> <p *ngIf=\"error\">{{'reportError' | i18n}}...</p> <ng-container *ngIf=\"!error\"> <app-callout type=\"success\" title=\"{{'goodNews' | i18n}}\" *ngIf=\"!breachedAccounts.length\"> {{'breachUsernameNotFound' | i18n : checkedUsername}} </app-callout> <app-callout type=\"danger\" title=\"{{'breachFound' | i18n}}\" *ngIf=\"breachedAccounts.length\"> {{'breachUsernameFound' | i18n : checkedUsername : breachedAccounts.length}} </app-callout> <ul class=\"list-group list-group-breach\" *ngIf=\"breachedAccounts.length\"> <li *ngFor=\"let a of breachedAccounts\" class=\"list-group-item min-height-fix\"> <div class=\"row\"> <div class=\"col-2 text-center\"> <img [src]=\"a.logoPath\" alt=\"\" class=\"img-fluid\"> </div> <div class=\"col-7\"> <h3 class=\"text-lg\">{{a.title}}</h3> <p [innerHTML]=\"a.description\"></p> <p class=\"mb-1\">{{'compromisedData' | i18n}}:</p> <ul> <li *ngFor=\"let d of a.dataClasses\">{{d}}</li> </ul> </div> <div class=\"col-3\"> <dl> <dt>{{'website' | i18n}}</dt> <dd>{{a.domain}}</dd> <dt>{{'affectedUsers' | i18n}}</dt> <dd>{{a.pwnCount | number}}</dd> <dt>{{'breachOccurred' | i18n}}</dt> <dd>{{a.breachDate | date: 'mediumDate'}}</dd> <dt>{{'breachReported' | i18n}}</dt> <dd>{{a.addedDate | date: 'mediumDate'}}</dd> </dl> </div> </div> </li> </ul> </ng-container> </div> ","import {\n    Component,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n    PasswordGeneratorComponent as BasePasswordGeneratorComponent,\n} from 'jslib-angular/components/password-generator.component';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\nimport { PasswordGeneratorHistoryComponent } from './password-generator-history.component';\n\n@Component({\n    selector: 'app-password-generator',\n    templateUrl: 'password-generator.component.html',\n})\nexport class PasswordGeneratorComponent extends BasePasswordGeneratorComponent {\n    @ViewChild('historyTemplate', { read: ViewContainerRef, static: true }) historyModalRef: ViewContainerRef;\n\n    constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,\n        i18nService: I18nService, private modalService: ModalService) {\n        super(passwordGenerationService, platformUtilsService, i18nService, window);\n    }\n\n    async history() {\n        await this.modalService.openViewRef(PasswordGeneratorHistoryComponent, this.historyModalRef);\n    }\n\n    lengthChanged() {\n        document.getElementById('length').focus();\n    }\n\n    minNumberChanged() {\n        document.getElementById('min-number').focus();\n    }\n\n    minSpecialChanged() {\n        document.getElementById('min-special').focus();\n    }\n}\n","<div class=\"page-header\"> <h1>{{'passwordGenerator' | i18n}}</h1> </div> <app-callout type=\"info\" *ngIf=\"enforcedPolicyOptions?.inEffect()\"> {{'passwordGeneratorPolicyInEffect' | i18n}} </app-callout> <div class=\"card card-password bg-light my-4\"> <div class=\"card-body\"> <div class=\"password-wrapper\" [innerHTML]=\"password | colorPassword\" appSelectCopy></div> </div> </div> <div class=\"form-group\"> <div class=\"form-check form-check-inline\" *ngFor=\"let o of passTypeOptions\"> <input class=\"form-check-input\" type=\"radio\" [(ngModel)]=\"options.type\" name=\"Type_{{o.value}}\" id=\"type_{{o.value}}\" [value]=\"o.value\" (change)=\"saveOptions()\" [checked]=\"options.type === o.value\"> <label class=\"form-check-label\" for=\"type_{{o.value}}\"> {{o.name}} </label> </div> </div> <ng-container *ngIf=\"options.type === 'passphrase'\"> <div class=\"row\"> <div class=\"form-group col-4\"> <label for=\"num-words\">{{'numWords' | i18n}}</label> <input id=\"num-words\" class=\"form-control\" type=\"number\" min=\"3\" max=\"20\" [(ngModel)]=\"options.numWords\" (blur)=\"saveOptions()\"> </div> <div class=\"form-group col-4\"> <label for=\"word-separator\">{{'wordSeparator' | i18n}}</label> <input id=\"word-separator\" class=\"form-control\" type=\"text\" maxlength=\"1\" [(ngModel)]=\"options.wordSeparator\" (blur)=\"saveOptions()\"> </div> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input id=\"capitalize\" class=\"form-check-input\" type=\"checkbox\" (change)=\"saveOptions()\" [(ngModel)]=\"options.capitalize\" [disabled]=\"enforcedPolicyOptions?.capitalize\"> <label for=\"capitalize\" class=\"form-check-label\">{{'capitalize' | i18n}}</label> </div> <div class=\"form-check\"> <input id=\"include-number\" class=\"form-check-input\" type=\"checkbox\" (change)=\"saveOptions()\" [(ngModel)]=\"options.includeNumber\" [disabled]=\"enforcedPolicyOptions?.includeNumber\"> <label for=\"include-number\" class=\"form-check-label\">{{'includeNumber' | i18n}}</label> </div> </div> </ng-container> <ng-container *ngIf=\"options.type === 'password'\"> <div class=\"row\"> <div class=\"form-group col-4\"> <label for=\"length\">{{'length' | i18n}}</label> <input id=\"length\" class=\"form-control\" type=\"number\" min=\"5\" max=\"128\" [(ngModel)]=\"options.length\" (blur)=\"saveOptions()\" (change)=\"lengthChanged()\"> </div> <div class=\"form-group col-4\"> <label for=\"min-number\">{{'minNumbers' | i18n}}</label> <input id=\"min-number\" class=\"form-control\" type=\"number\" min=\"0\" max=\"9\" (blur)=\"saveOptions()\" [(ngModel)]=\"options.minNumber\" (change)=\"minNumberChanged()\"> </div> <div class=\"form-group col-4\"> <label for=\"min-special\">{{'minSpecial' | i18n}}</label> <input id=\"min-special\" class=\"form-control\" type=\"number\" min=\"0\" max=\"9\" (blur)=\"saveOptions()\" [(ngModel)]=\"options.minSpecial\" (change)=\"minSpecialChanged()\"> </div> </div> <div class=\"form-group\"> <div class=\"form-check\"> <input id=\"uppercase\" class=\"form-check-input\" type=\"checkbox\" (change)=\"saveOptions()\" [(ngModel)]=\"options.uppercase\" [disabled]=\"enforcedPolicyOptions?.useUppercase\"> <label for=\"uppercase\" class=\"form-check-label\">A-Z</label> </div> <div class=\"form-check\"> <input id=\"lowercase\" class=\"form-check-input\" type=\"checkbox\" (change)=\"saveOptions()\" [(ngModel)]=\"options.lowercase\" [disabled]=\"enforcedPolicyOptions?.useLowercase\"> <label for=\"lowercase\" class=\"form-check-label\">a-z</label> </div> <div class=\"form-check\"> <input id=\"numbers\" class=\"form-check-input\" type=\"checkbox\" (change)=\"saveOptions()\" [(ngModel)]=\"options.number\" [disabled]=\"enforcedPolicyOptions?.useNumbers\"> <label for=\"numbers\" class=\"form-check-label\">0-9</label> </div> <div class=\"form-check\"> <input id=\"special\" class=\"form-check-input\" type=\"checkbox\" (change)=\"saveOptions()\" [(ngModel)]=\"options.special\" [disabled]=\"enforcedPolicyOptions?.useSpecial\"> <label for=\"special\" class=\"form-check-label\">!@#$%^&amp;*</label> </div> <div class=\"form-check\"> <input id=\"ambiguous\" class=\"form-check-input\" type=\"checkbox\" (change)=\"saveOptions()\" [(ngModel)]=\"avoidAmbiguous\"> <label for=\"ambiguous\" class=\"form-check-label\">{{'ambiguous' | i18n}}</label> </div> </div> </ng-container> <div class=\"d-flex\"> <div> <button type=\"button\" class=\"btn btn-primary\" (click)=\"regenerate()\"> {{'regeneratePassword' | i18n}} </button> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"copy()\"> {{'copyPassword' | i18n}} </button> </div> <div class=\"ml-auto\"> <button type=\"button\" class=\"btn btn-outline-secondary\" (click)=\"history()\" appA11yTitle=\"{{'passwordHistory' | i18n}}\"> <i class=\"fa fa-clock-o fa-lg\" aria-hidden=\"true\"></i> </button> </div> </div> <ng-template #historyTemplate></ng-template> ","import { Component } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n    PasswordGeneratorHistoryComponent as BasePasswordGeneratorHistoryComponent,\n} from 'jslib-angular/components/password-generator-history.component';\n\n@Component({\n    selector: 'app-password-generator-history',\n    templateUrl: 'password-generator-history.component.html',\n})\nexport class PasswordGeneratorHistoryComponent extends BasePasswordGeneratorHistoryComponent {\n    constructor(passwordGenerationService: PasswordGenerationService, platformUtilsService: PlatformUtilsService,\n        i18nService: I18nService) {\n        super(passwordGenerationService, platformUtilsService, i18nService, window);\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"passHistoryTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <div class=\"modal-content\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"passHistoryTitle\">{{'passwordHistory' | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"history.length\"> <ul class=\"list-group list-group-flush\"> <li class=\"list-group-item d-flex\" *ngFor=\"let h of history\"> <div class=\"password-row\"> <div class=\"text-monospace password-wrapper\" [innerHTML]=\"h.password | colorPassword\" appSelectCopy></div> <small class=\"text-muted\">{{h.date | date:'medium'}}</small> </div> <div class=\"ml-auto\"> <button class=\"btn btn-link\" appA11yTitle=\"{{'copyPassword' | i18n}}\" (click)=\"copy(h.password)\"> <i class=\"fa fa-lg fa-clone\" aria-hidden=\"true\"></i> </button> </div> </li> </ul> </div> <div class=\"modal-body\" *ngIf=\"!history.length\"> {{'noPasswordsInList' | i18n}} </div> <div class=\"modal-footer\"> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\"> {{'close' | i18n}} </button> <div class=\"ml-auto\"> <button type=\"button\" (click)=\"clear()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{'clear' | i18n}}\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" aria-hidden=\"true\"></i> </button> </div> </div> </div> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Component({\n    selector: 'app-tools',\n    templateUrl: 'tools.component.html',\n})\nexport class ToolsComponent implements OnInit {\n    canAccessPremium = false;\n\n    constructor(private userService: UserService, private messagingService: MessagingService) { }\n\n    async ngOnInit() {\n        this.canAccessPremium = await this.userService.canAccessPremium();\n    }\n\n    premiumRequired() {\n        if (!this.canAccessPremium) {\n            this.messagingService.send('premiumRequired');\n            return;\n        }\n    }\n}\n","<div class=\"container page-content\"> <div class=\"row\"> <div class=\"col-3\"> <div class=\"card mb-4\"> <div class=\"card-header\">{{'tools' | i18n}}</div> <div class=\"list-group list-group-flush\"> <a routerLink=\"generator\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'passwordGenerator' | i18n}} </a> <a routerLink=\"import\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'importData' | i18n}} </a> <a routerLink=\"export\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'exportVault' | i18n}} </a> </div> </div> <div class=\"card\"> <div class=\"card-header d-flex\"> {{'reports' | i18n}} <div class=\"ml-auto\"> <a href=\"#\" appStopClick class=\"badge badge-primary\" *ngIf=\"!canAccessPremium\" (click)=\"premiumRequired()\"> {{'premium' | i18n}} </a> </div> </div> <div class=\"list-group list-group-flush\"> <a routerLink=\"exposed-passwords-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'exposedPasswordsReport' | i18n}} </a> <a routerLink=\"reused-passwords-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'reusedPasswordsReport' | i18n}} </a> <a routerLink=\"weak-passwords-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'weakPasswordsReport' | i18n}} </a> <a routerLink=\"unsecured-websites-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'unsecuredWebsitesReport' | i18n}} </a> <a routerLink=\"inactive-two-factor-report\" class=\"list-group-item\" routerLinkActive=\"active\"> {{'inactive2faReport' | i18n}} </a> <a routerLink=\"breach-report\" class=\"list-group-item d-flex\" routerLinkActive=\"active\"> {{'dataBreachReport' | i18n}} <div class=\"ml-auto\"> <span class=\"badge badge-success\" *ngIf=\"!canAccessPremium\"> {{'free' | i18n | uppercase}} </span> </div> </a> </div> </div> </div> <div class=\"col-9\"> <router-outlet></router-outlet> </div> </div> </div> ","import {\n    ChangeDetectorRef,\n    Component,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { OrganizationsComponent } from '../settings/organizations.component';\nimport { UpdateKeyComponent } from '../settings/update-key.component';\nimport { AddEditComponent } from './add-edit.component';\nimport { AttachmentsComponent } from './attachments.component';\nimport { CiphersComponent } from './ciphers.component';\nimport { CollectionsComponent } from './collections.component';\nimport { FolderAddEditComponent } from './folder-add-edit.component';\nimport { GroupingsComponent } from './groupings.component';\nimport { ShareComponent } from './share.component';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nconst BroadcasterSubscriptionId = 'VaultComponent';\n\n@Component({\n    selector: 'app-vault',\n    templateUrl: 'vault.component.html',\n})\nexport class VaultComponent implements OnInit, OnDestroy {\n    @ViewChild(GroupingsComponent, { static: true }) groupingsComponent: GroupingsComponent;\n    @ViewChild(CiphersComponent, { static: true }) ciphersComponent: CiphersComponent;\n    @ViewChild(OrganizationsComponent, { static: true }) organizationsComponent: OrganizationsComponent;\n    @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n    @ViewChild('folderAddEdit', { read: ViewContainerRef, static: true }) folderAddEditModalRef: ViewContainerRef;\n    @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n    @ViewChild('share', { read: ViewContainerRef, static: true }) shareModalRef: ViewContainerRef;\n    @ViewChild('collections', { read: ViewContainerRef, static: true }) collectionsModalRef: ViewContainerRef;\n    @ViewChild('updateKeyTemplate', { read: ViewContainerRef, static: true }) updateKeyModalRef: ViewContainerRef;\n\n    favorites: boolean = false;\n    type: CipherType = null;\n    folderId: string = null;\n    collectionId: string = null;\n    showVerifyEmail = false;\n    showBrowserOutdated = false;\n    showUpdateKey = false;\n    showPremiumCallout = false;\n    showRedeemSponsorship = false;\n    showProviders = false;\n    deleted: boolean = false;\n    trashCleanupWarning: string = null;\n\n\n    constructor(private syncService: SyncService, private route: ActivatedRoute,\n        private router: Router, private changeDetectorRef: ChangeDetectorRef,\n        private i18nService: I18nService, private modalService: ModalService,\n        private tokenService: TokenService, private cryptoService: CryptoService,\n        private messagingService: MessagingService, private userService: UserService,\n        private platformUtilsService: PlatformUtilsService, private broadcasterService: BroadcasterService,\n        private ngZone: NgZone) { }\n\n    async ngOnInit() {\n        this.showVerifyEmail = !(await this.tokenService.getEmailVerified());\n        this.showBrowserOutdated = window.navigator.userAgent.indexOf('MSIE') !== -1;\n        this.trashCleanupWarning = this.i18nService.t('trashCleanupWarningSelfHosted');\n\n        this.route.queryParams.pipe(first()).subscribe(async params => {\n            await this.syncService.fullSync(false);\n\n            this.showUpdateKey = !(await this.cryptoService.hasEncKey());\n            const canAccessPremium = await this.userService.canAccessPremium();\n            this.showPremiumCallout = !this.showVerifyEmail && !canAccessPremium &&\n                !this.platformUtilsService.isSelfHost();\n\n            this.showProviders = (await this.userService.getAllProviders()).length > 0;\n\n            const allOrgs = await this.userService.getAllOrganizations();\n            this.showRedeemSponsorship = allOrgs.some(o => o.familySponsorshipAvailable) && !allOrgs.some(o => o.familySponsorshipFriendlyName != null);\n\n            await Promise.all([\n                this.groupingsComponent.load(),\n                this.organizationsComponent.load(),\n            ]);\n\n            if (params == null) {\n                this.groupingsComponent.selectedAll = true;\n                await this.ciphersComponent.reload();\n            } else {\n                if (params.deleted) {\n                    this.groupingsComponent.selectedTrash = true;\n                    await this.filterDeleted();\n                } else if (params.favorites) {\n                    this.groupingsComponent.selectedFavorites = true;\n                    await this.filterFavorites();\n                } else if (params.type) {\n                    const t = parseInt(params.type, null);\n                    this.groupingsComponent.selectedType = t;\n                    await this.filterCipherType(t);\n                } else if (params.folderId) {\n                    this.groupingsComponent.selectedFolder = true;\n                    this.groupingsComponent.selectedFolderId = params.folderId;\n                    await this.filterFolder(params.folderId);\n                } else if (params.collectionId) {\n                    this.groupingsComponent.selectedCollectionId = params.collectionId;\n                    await this.filterCollection(params.collectionId);\n                } else {\n                    this.groupingsComponent.selectedAll = true;\n                    await this.ciphersComponent.reload();\n                }\n            }\n\n            this.broadcasterService.subscribe(BroadcasterSubscriptionId, (message: any) => {\n                this.ngZone.run(async () => {\n                    switch (message.command) {\n                        case 'syncCompleted':\n                            if (message.successfully) {\n                                await Promise.all([\n                                    this.groupingsComponent.load(),\n                                    this.organizationsComponent.load(),\n                                    this.ciphersComponent.load(this.ciphersComponent.filter),\n                                ]);\n                                this.changeDetectorRef.detectChanges();\n                            }\n                            break;\n                    }\n                });\n            });\n        });\n    }\n\n    ngOnDestroy() {\n        this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n    }\n\n    async clearGroupingFilters() {\n        this.ciphersComponent.showAddNew = true;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchVault');\n        await this.ciphersComponent.reload();\n        this.clearFilters();\n        this.go();\n    }\n\n    async filterFavorites() {\n        this.ciphersComponent.showAddNew = true;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFavorites');\n        await this.ciphersComponent.reload(c => c.favorite);\n        this.clearFilters();\n        this.favorites = true;\n        this.go();\n    }\n\n    async filterDeleted() {\n        this.ciphersComponent.showAddNew = false;\n        this.ciphersComponent.deleted = true;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchTrash');\n        await this.ciphersComponent.reload(null, true);\n        this.clearFilters();\n        this.deleted = true;\n        this.go();\n    }\n\n    async filterCipherType(type: CipherType) {\n        this.ciphersComponent.showAddNew = true;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');\n        await this.ciphersComponent.reload(c => c.type === type);\n        this.clearFilters();\n        this.type = type;\n        this.go();\n    }\n\n    async filterFolder(folderId: string) {\n        this.ciphersComponent.showAddNew = true;\n        folderId = folderId === 'none' ? null : folderId;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFolder');\n        await this.ciphersComponent.reload(c => c.folderId === folderId);\n        this.clearFilters();\n        this.folderId = folderId == null ? 'none' : folderId;\n        this.go();\n    }\n\n    async filterCollection(collectionId: string) {\n        this.ciphersComponent.showAddNew = true;\n        this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');\n        await this.ciphersComponent.reload(c => c.collectionIds != null &&\n            c.collectionIds.indexOf(collectionId) > -1);\n        this.clearFilters();\n        this.collectionId = collectionId;\n        this.go();\n    }\n\n    filterSearchText(searchText: string) {\n        this.ciphersComponent.searchText = searchText;\n        this.ciphersComponent.search(200);\n    }\n\n    async editCipherAttachments(cipher: CipherView) {\n        const canAccessPremium = await this.userService.canAccessPremium();\n        if (cipher.organizationId == null && !canAccessPremium) {\n            this.messagingService.send('premiumRequired');\n            return;\n        } else if (cipher.organizationId != null) {\n            const org = await this.userService.getOrganization(cipher.organizationId);\n            if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {\n                this.messagingService.send('upgradeOrganization', { organizationId: cipher.organizationId });\n                return;\n            }\n        }\n\n        let madeAttachmentChanges = false;\n        const [modal] = await this.modalService.openViewRef(AttachmentsComponent, this.attachmentsModalRef, comp => {\n            comp.cipherId = cipher.id;\n            comp.onUploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n            comp.onDeletedAttachment.subscribe(() => madeAttachmentChanges = true);\n            comp.onReuploadedAttachment.subscribe(() => madeAttachmentChanges = true);\n        });\n\n        modal.onClosed.subscribe(async () => {\n            if (madeAttachmentChanges) {\n                await this.ciphersComponent.refresh();\n            }\n            madeAttachmentChanges = false;\n        });\n    }\n\n    async shareCipher(cipher: CipherView) {\n        const [modal] = await this.modalService.openViewRef(ShareComponent, this.shareModalRef, comp => {\n            comp.cipherId = cipher.id;\n            comp.onSharedCipher.subscribe(async () => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n    }\n\n    async editCipherCollections(cipher: CipherView) {\n        const [modal] = await this.modalService.openViewRef(CollectionsComponent, this.collectionsModalRef, comp => {\n            comp.cipherId = cipher.id;\n            comp.onSavedCollections.subscribe(async () => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n    }\n\n    async addFolder() {\n        const [modal] = await this.modalService.openViewRef(FolderAddEditComponent, this.folderAddEditModalRef, comp => {\n            comp.folderId = null;\n            comp.onSavedFolder.subscribe(async () => {\n                modal.close();\n                await this.groupingsComponent.loadFolders();\n            });\n        });\n    }\n\n    async editFolder(folderId: string) {\n        const [modal] = await this.modalService.openViewRef(FolderAddEditComponent, this.folderAddEditModalRef, comp => {\n            comp.folderId = folderId;\n            comp.onSavedFolder.subscribe(async () => {\n                modal.close();\n                await this.groupingsComponent.loadFolders();\n            });\n            comp.onDeletedFolder.subscribe(async () => {\n                modal.close();\n                await this.groupingsComponent.loadFolders();\n                await this.filterFolder('none');\n                this.groupingsComponent.selectedFolderId = null;\n            });\n        });\n    }\n\n    async addCipher() {\n        const component = await this.editCipher(null);\n        component.type = this.type;\n        component.folderId = this.folderId === 'none' ? null : this.folderId;\n        if (this.collectionId != null) {\n            const collection = this.groupingsComponent.collections.filter(c => c.id === this.collectionId);\n            if (collection.length > 0) {\n                component.organizationId = collection[0].organizationId;\n                component.collectionIds = [this.collectionId];\n            }\n        }\n    }\n\n    async editCipher(cipher: CipherView) {\n        const [modal, childComponent] = await this.modalService.openViewRef(AddEditComponent, this.cipherAddEditModalRef, comp => {\n            comp.cipherId = cipher == null ? null : cipher.id;\n            comp.onSavedCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n            comp.onDeletedCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n            comp.onRestoredCipher.subscribe(async (c: CipherView) => {\n                modal.close();\n                await this.ciphersComponent.refresh();\n            });\n        });\n\n        return childComponent;\n    }\n\n    async cloneCipher(cipher: CipherView) {\n        const component = await this.editCipher(cipher);\n        component.cloneMode = true;\n    }\n\n    async updateKey() {\n        await this.modalService.openViewRef(UpdateKeyComponent, this.updateKeyModalRef);\n    }\n\n    private clearFilters() {\n        this.folderId = null;\n        this.collectionId = null;\n        this.favorites = false;\n        this.type = null;\n        this.deleted = false;\n    }\n\n    private go(queryParams: any = null) {\n        if (queryParams == null) {\n            queryParams = {\n                favorites: this.favorites ? true : null,\n                type: this.type,\n                folderId: this.folderId,\n                collectionId: this.collectionId,\n                deleted: this.deleted ? true : null,\n            };\n        }\n\n        this.router.navigate([], {\n            relativeTo: this.route,\n            queryParams: queryParams,\n            replaceUrl: true,\n        });\n    }\n}\n","<div class=\"container page-content\"> <div class=\"row\"> <div class=\"col-3\"> <app-vault-groupings (onAllClicked)=\"clearGroupingFilters()\" (onFavoritesClicked)=\"filterFavorites()\" (onCipherTypeClicked)=\"filterCipherType($event)\" (onFolderClicked)=\"filterFolder($event.id)\" (onAddFolder)=\"addFolder()\" (onEditFolder)=\"editFolder($event.id)\" (onCollectionClicked)=\"filterCollection($event.id)\" (onSearchTextChanged)=\"filterSearchText($event)\" (onTrashClicked)=\"filterDeleted()\"> </app-vault-groupings> </div> <div class=\"col-6\"> <div class=\"page-header d-flex\"> <h1> {{'myVault' | i18n}} <small #actionSpinner [appApiAction]=\"ciphersComponent.actionPromise\"> <ng-container *ngIf=\"actionSpinner.loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> </small> </h1> <div class=\"ml-auto d-flex\"> <app-vault-bulk-actions [ciphersComponent]=\"ciphersComponent\" [deleted]=\"deleted\"> </app-vault-bulk-actions> <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" (click)=\"addCipher()\" *ngIf=\"!deleted\"> <i class=\"fa fa-plus fa-fw\" aria-hidden=\"true\"></i>{{'addItem' | i18n}} </button> </div> </div> <app-callout type=\"warning\" *ngIf=\"deleted\" icon=\"fa-warning\"> {{trashCleanupWarning}} </app-callout> <app-vault-ciphers (onCipherClicked)=\"editCipher($event)\" (onAttachmentsClicked)=\"editCipherAttachments($event)\" (onAddCipher)=\"addCipher()\" (onShareClicked)=\"shareCipher($event)\" (onCollectionsClicked)=\"editCipherCollections($event)\" (onCloneClicked)=\"cloneCipher($event)\"> </app-vault-ciphers> </div> <div class=\"col-3\"> <div class=\"card border-warning mb-4\" *ngIf=\"showUpdateKey\"> <div class=\"card-header bg-warning text-white\"> <i class=\"fa fa-warning fa-fw\" aria-hidden=\"true\"></i> {{'updateKeyTitle' | i18n}} </div> <div class=\"card-body\"> <p>{{'updateEncryptionKeyShortDesc' | i18n}}</p> <button class=\"btn btn-block btn-outline-secondary\" type=\"button\" (click)=\"updateKey()\"> {{'updateEncryptionKey' | i18n}} </button> </div> </div> <app-verify-email *ngIf=\"showVerifyEmail\" class=\"d-block mb-4\"></app-verify-email> <div class=\"card border-warning mb-4\" *ngIf=\"showBrowserOutdated\"> <div class=\"card-header bg-warning text-white\"> <i class=\"fa fa-warning fa-fw\" aria-hidden=\"true\"></i> {{'updateBrowser' | i18n}} </div> <div class=\"card-body\"> <p>{{'updateBrowserDesc' | i18n}}</p> <a class=\"btn btn-block btn-outline-secondary\" target=\"_blank\" href=\"https://browser-update.org/update-browser.html\" rel=\"noopener\"> {{'updateBrowser' | i18n}} </a> </div> </div> <div class=\"card border-success mb-4\" *ngIf=\"showPremiumCallout\"> <div class=\"card-header bg-success text-white\"> <i class=\"fa fa-star fa-fw\" aria-hidden=\"true\"></i> {{'goPremium' | i18n}} </div> <div class=\"card-body\"> <p>{{'premiumUpgradeUnlockFeatures' | i18n}}</p> <a class=\"btn btn-block btn-outline-secondary\" routerLink=\"/settings/premium\"> {{'goPremium' | i18n}} </a> </div> </div> <div class=\"card mb-4\"> <div class=\"card-header d-flex\"> {{'organizations' | i18n}} <a class=\"ml-auto\" href=\"https://help.bitwarden.com/article/what-is-an-organization/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <div class=\"card-body\"> <app-organizations [vault]=\"true\"></app-organizations> </div> </div> <div class=\"card border-success mb-4\" *ngIf=\"showRedeemSponsorship\"> <div class=\"card-header bg-success text-white\"> {{'freeFamiliesPlan' | i18n}} </div> <div class=\"card-body\"> <p>{{'sponsoredFamiliesEligible' | i18n}}</p> <a class=\"btn btn-block btn-outline-secondary\" routerLink=\"/settings/sponsored-families\"> {{'redeemNow' | i18n}} </a> </div> </div> <div class=\"card mt-4\" *ngIf=\"showProviders\"> <div class=\"card-header d-flex\"> {{'providers' | i18n}} <a class=\"ml-auto\" href=\"https://bitwarden.com/help/article/about-providers/\" target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </div> <div class=\"card-body\"> <app-providers vault=\"true\"></app-providers> </div> </div> </div> </div> </div> <ng-template #attachments></ng-template> <ng-template #folderAddEdit></ng-template> <ng-template #cipherAddEdit></ng-template> <ng-template #share></ng-template> <ng-template #collections></ng-template> <ng-template #updateKeyTemplate></ng-template> ","import { Component } from '@angular/core';\n\nimport {\n    Toast,\n    ToasterService,\n} from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\n\nimport { CipherWithIdRequest } from 'jslib-common/models/request/cipherWithIdRequest';\nimport { FolderWithIdRequest } from 'jslib-common/models/request/folderWithIdRequest';\nimport { UpdateKeyRequest } from 'jslib-common/models/request/updateKeyRequest';\n\n@Component({\n    selector: 'app-update-key',\n    templateUrl: 'update-key.component.html',\n})\nexport class UpdateKeyComponent {\n    masterPassword: string;\n    formPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private cryptoService: CryptoService,\n        private messagingService: MessagingService, private syncService: SyncService,\n        private folderService: FolderService, private cipherService: CipherService,\n        private logService: LogService) { }\n\n    async submit() {\n        const hasEncKey = await this.cryptoService.hasEncKey();\n        if (hasEncKey) {\n            return;\n        }\n\n        if (this.masterPassword == null || this.masterPassword === '') {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassRequired'));\n            return;\n        }\n\n        try {\n            this.formPromise = this.makeRequest().then(request => {\n                return this.apiService.postAccountKey(request);\n            });\n            await this.formPromise;\n            const toast: Toast = {\n                type: 'success',\n                title: this.i18nService.t('keyUpdated'),\n                body: this.i18nService.t('logBackInOthersToo'),\n                timeout: 15000,\n            };\n            this.toasterService.popAsync(toast);\n            this.messagingService.send('logout');\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    private async makeRequest(): Promise<UpdateKeyRequest> {\n        const key = await this.cryptoService.getKey();\n        const encKey = await this.cryptoService.makeEncKey(key);\n        const privateKey = await this.cryptoService.getPrivateKey();\n        let encPrivateKey: EncString = null;\n        if (privateKey != null) {\n            encPrivateKey = await this.cryptoService.encrypt(privateKey, encKey[0]);\n        }\n        const request = new UpdateKeyRequest();\n        request.privateKey = encPrivateKey != null ? encPrivateKey.encryptedString : null;\n        request.key = encKey[1].encryptedString;\n        request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, null);\n\n        await this.syncService.fullSync(true);\n\n        const folders = await this.folderService.getAllDecrypted();\n        for (let i = 0; i < folders.length; i++) {\n            if (folders[i].id == null) {\n                continue;\n            }\n            const folder = await this.folderService.encrypt(folders[i], encKey[0]);\n            request.folders.push(new FolderWithIdRequest(folder));\n        }\n\n        const ciphers = await this.cipherService.getAllDecrypted();\n        for (let i = 0; i < ciphers.length; i++) {\n            if (ciphers[i].organizationId != null) {\n                continue;\n            }\n            const cipher = await this.cipherService.encrypt(ciphers[i], encKey[0]);\n            request.ciphers.push(new CipherWithIdRequest(cipher));\n        }\n\n        return request;\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"updateEncKeyTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"updateEncKeyTitle\">{{'updateEncryptionKey' | i18n}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p>{{'updateEncryptionKeyShortDesc' | i18n}} {{'updateEncryptionKeyDesc' | i18n}} <a href=\"https://help.bitwarden.com/article/update-encryption-key/\" target=\"_blank\" rel=\"noopener\">{{'learnMore' | i18n}}</a> </p> <app-callout type=\"warning\">{{'updateEncryptionKeyWarning' | i18n}}</app-callout> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <input id=\"masterPassword\" type=\"password\" name=\"MasterPasswordHash\" class=\"form-control\" [(ngModel)]=\"masterPassword\" required appAutofocus appInputVerbatim> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'updateEncryptionKey' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'close' | i18n}}</button> </div> </form> </div> </div> ","import { Component } from '@angular/core';\n\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport {\n    FolderAddEditComponent as BaseFolderAddEditComponent,\n} from 'jslib-angular/components/folder-add-edit.component';\n\n@Component({\n    selector: 'app-folder-add-edit',\n    templateUrl: 'folder-add-edit.component.html',\n})\nexport class FolderAddEditComponent extends BaseFolderAddEditComponent {\n    constructor(folderService: FolderService, i18nService: I18nService,\n        platformUtilsService: PlatformUtilsService, logService: LogService) {\n        super(folderService, i18nService, platformUtilsService, logService);\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"folderAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-sm\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"folderAddEditTitle\">{{title}}</h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <label for=\"name\">{{'name' | i18n}}</label> <input id=\"name\" class=\"form-control\" type=\"text\" name=\"Name\" [(ngModel)]=\"folder.name\" required appAutofocus> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> <div class=\"ml-auto\"> <button #deleteBtn type=\"button\" (click)=\"delete()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{'delete' | i18n}}\" *ngIf=\"editMode\" [disabled]=\"deleteBtn.loading\" [appApiAction]=\"deletePromise\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </div> </div> </form> </div> </div> ","import {\n    Component,\n    OnDestroy,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { ShareComponent as BaseShareComponent } from 'jslib-angular/components/share.component';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\n@Component({\n    selector: 'app-vault-share',\n    templateUrl: 'share.component.html',\n})\nexport class ShareComponent extends BaseShareComponent implements OnDestroy {\n    constructor(collectionService: CollectionService, platformUtilsService: PlatformUtilsService,\n        i18nService: I18nService, userService: UserService,\n        cipherService: CipherService, logService: LogService) {\n        super(collectionService, platformUtilsService, i18nService, userService, cipherService,\n            logService);\n    }\n\n    ngOnDestroy() {\n        this.selectAll(false);\n    }\n\n    check(c: CollectionView, select?: boolean) {\n        (c as any).checked = select == null ? !(c as any).checked : select;\n    }\n\n    selectAll(select: boolean) {\n        const collections = select ? this.collections : this.writeableCollections;\n        collections.forEach(c => this.check(c, select));\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"shareTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"shareTitle\"> {{'moveToOrganization' | i18n}} <small *ngIf=\"cipher\">{{cipher.name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"!organizations || !organizations.length\"> {{'noOrganizationsList' | i18n}} </div> <div class=\"modal-body\" *ngIf=\"organizations && organizations.length\"> <p>{{'moveToOrgDesc' | i18n}}</p> <div class=\"form-group\"> <label for=\"organization\">{{'organization' | i18n}}</label> <select id=\"organization\" name=\"OrganizationId\" [(ngModel)]=\"organizationId\" class=\"form-control\" (change)=\"filterCollections()\"> <option *ngFor=\"let o of organizations\" [ngValue]=\"o.id\">{{o.name}}</option> </select> </div> <div class=\"d-flex\"> <h3>{{'collections' | i18n}}</h3> <div class=\"ml-auto d-flex\" *ngIf=\"collections && collections.length\"> <button type=\"button\" (click)=\"selectAll(true)\" class=\"btn btn-link btn-sm py-0\"> {{'selectAll' | i18n}} </button> <button type=\"button\" (click)=\"selectAll(false)\" class=\"btn btn-link btn-sm py-0\"> {{'unselectAll' | i18n}} </button> </div> </div> <div *ngIf=\"!collections || !collections.length\"> {{'noCollectionsInList' | i18n}} </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"collections && collections.length\"> <tbody> <tr *ngFor=\"let c of collections; let i = index\" (click)=\"check(c)\"> <td class=\"table-list-checkbox\"> <input type=\"checkbox\" [(ngModel)]=\"c.checked\" name=\"Collection[{{i}}].Checked\" appStopProp> </td> <td> {{c.name}} </td> </tr> </tbody> </table> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit manual\" [disabled]=\"form.loading || !canSave\" [ngClass]=\"{loading:form.loading}\" *ngIf=\"organizations && organizations.length\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <a href=\"#\" routerLink=\"/settings/create-organization\" class=\"btn btn-primary\" *ngIf=\"!organizations || !organizations.length\"> {{'newOrganization' | i18n}} </a> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import { Component } from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\n@Component({\n    selector: 'app-verify-email',\n    templateUrl: 'verify-email.component.html',\n})\nexport class VerifyEmailComponent {\n    actionPromise: Promise<any>;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    async send() {\n        if (this.actionPromise != null) {\n            return;\n        }\n        try {\n            this.actionPromise = this.apiService.postAccountVerifyEmail();\n            await this.actionPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('checkInboxForVerification'));\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.actionPromise = null;\n    }\n}\n","<div class=\"card border-warning\"> <div class=\"card-header bg-warning text-white\"> <i class=\"fa fa-envelope-o fa-fw\" aria-hidden=\"true\"></i> {{'verifyEmail' | i18n}} </div> <div class=\"card-body\"> <p>{{'verifyEmailDesc' | i18n}}</p> <button type=\"button\" class=\"btn btn-block btn-outline-secondary btn-submit\" #sendBtn [appApiAction]=\"actionPromise\" [disabled]=\"sendBtn.loading\" (click)=\"send()\"> <i class=\"fa fa-spin fa-spinner\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span> {{'sendEmail' | i18n}} </span> </button> </div> </div> ","import {\n    Component,\n    Input,\n    OnInit,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Provider } from 'jslib-common/models/domain/provider';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n    selector: 'app-providers',\n    templateUrl: 'providers.component.html',\n})\nexport class ProvidersComponent implements OnInit {\n    @Input() vault = false;\n\n    providers: Provider[];\n    loaded: boolean = false;\n    actionPromise: Promise<any>;\n\n    constructor(private userService: UserService, private i18nService: I18nService) { }\n\n    async ngOnInit() {\n        document.body.classList.remove('layout_frontend');\n        await this.load();\n    }\n\n    async load() {\n        const providers = await this.userService.getAllProviders();\n        providers.sort(Utils.getSortFunction(this.i18nService, 'name'));\n        this.providers = providers;\n        this.loaded = true;\n    }\n}\n","<ng-container *ngIf=\"vault\"> <p *ngIf=\"!loaded\" class=\"text-muted\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> <ng-container *ngIf=\"loaded\"> <ul class=\"fa-ul card-ul carets\" *ngIf=\"providers && providers.length\"> <li *ngFor=\"let p of providers\"> <a [routerLink]=\"['/providers', p.id]\" class=\"text-body\"> <i class=\"fa-li fa fa-caret-right\" aria-hidden=\"true\"></i> {{p.name}} <ng-container *ngIf=\"!p.enabled\"> <i class=\"fa fa-exclamation-triangle text-danger\" title=\"{{'providerIsDisabled' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'providerIsDisabled' | i18n}}</span> </ng-container> </a> </li> </ul> </ng-container> </ng-container> <ng-container *ngIf=\"!vault\"> <app-navbar></app-navbar> <div class=\"container page-content\"> <div class=\"page-header d-flex\"> <h1>{{'providers' | i18n}}</h1> </div> <p *ngIf=\"!loaded\" class=\"text-muted\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </p> <ng-container *ngIf=\"loaded\"> <table class=\"table table-hover table-list\" *ngIf=\"providers && providers.length\"> <tbody> <tr *ngFor=\"let p of providers\"> <td width=\"30\"> <app-avatar [data]=\"p.name\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> <a href=\"#\" [routerLink]=\"['/providers', p.id]\">{{p.name}}</a> <ng-container *ngIf=\"!p.enabled\"> <i class=\"fa fa-exclamation-triangle text-danger\" title=\"{{'providerIsDisabled' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'providerIsDisabled' | i18n}}</span> </ng-container> </td> </tr> </tbody> </table> </ng-container> </div> <app-footer></app-footer> </ng-container> ","import { Injectable } from '@angular/core';\nimport {\n    ActivatedRouteSnapshot,\n    CanActivate,\n    Router,\n} from '@angular/router';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Injectable()\nexport class OrganizationGuardService implements CanActivate {\n    constructor(private userService: UserService, private router: Router,\n        private toasterService: ToasterService, private i18nService: I18nService) { }\n\n    async canActivate(route: ActivatedRouteSnapshot) {\n        const org = await this.userService.getOrganization(route.params.organizationId);\n        if (org == null) {\n            this.router.navigate(['/']);\n            return false;\n        }\n        if (!org.isOwner && !org.enabled) {\n            this.toasterService.popAsync('error', null, this.i18nService.t('organizationIsDisabled'));\n            this.router.navigate(['/']);\n            return false;\n        }\n\n        return true;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    ActivatedRouteSnapshot,\n    CanActivate,\n    Router,\n} from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Permissions } from 'jslib-common/enums/permissions';\n\n@Injectable()\nexport class OrganizationTypeGuardService implements CanActivate {\n    constructor(private userService: UserService, private router: Router) { }\n\n    async canActivate(route: ActivatedRouteSnapshot) {\n        const org = await this.userService.getOrganization(route.params.organizationId);\n        const permissions = route.data == null ? null : route.data.permissions as Permissions[];\n\n        if (\n            (permissions.indexOf(Permissions.AccessEventLogs) !== -1 && org.canAccessEventLogs) ||\n            (permissions.indexOf(Permissions.AccessImportExport) !== -1 && org.canAccessImportExport) ||\n            (permissions.indexOf(Permissions.AccessReports) !== -1 && org.canAccessReports) ||\n            (permissions.indexOf(Permissions.CreateNewCollections) !== -1 && org.canCreateNewCollections) ||\n            (permissions.indexOf(Permissions.EditAnyCollection) !== -1 && org.canEditAnyCollection) ||\n            (permissions.indexOf(Permissions.DeleteAnyCollection) !== -1 && org.canDeleteAnyCollection) ||\n            (permissions.indexOf(Permissions.EditAssignedCollections) !== -1 && org.canEditAssignedCollections) ||\n            (permissions.indexOf(Permissions.DeleteAssignedCollections) !== -1 && org.canDeleteAssignedCollections) ||\n            (permissions.indexOf(Permissions.ManageGroups) !== -1 && org.canManageGroups) ||\n            (permissions.indexOf(Permissions.ManageOrganization) !== -1 && org.isOwner) ||\n            (permissions.indexOf(Permissions.ManagePolicies) !== -1 && org.canManagePolicies) ||\n            (permissions.indexOf(Permissions.ManageUsers) !== -1 && org.canManageUsers) ||\n            (permissions.indexOf(Permissions.ManageUsersPassword) !== -1 && org.canManageUsersPassword) ||\n            (permissions.indexOf(Permissions.ManageSso) !== -1 && org.canManageSso)\n        ) {\n            return true;\n        }\n\n        this.router.navigate(['/organizations', org.id]);\n        return false;\n    }\n}\n","export enum Permissions {\n    AccessEventLogs,\n    AccessImportExport,\n    AccessReports,\n    /**\n     * @deprecated Sep 29 2021: This permission has been split out to `createNewCollections`, `editAnyCollection`, and\n     * `deleteAnyCollection`. It exists here for backwards compatibility with Server versions <= 1.43.0\n     */\n    ManageAllCollections,\n    /**\n     * @deprecated Sep 29 2021: This permission has been split out to `editAssignedCollections` and\n     * `deleteAssignedCollections`. It exists here for backwards compatibility with Server versions <= 1.43.0\n     */\n    ManageAssignedCollections,\n    ManageGroups,\n    ManageOrganization ,\n    ManagePolicies,\n    ManageProvider,\n    ManageUsers,\n    ManageUsersPassword,\n    CreateNewCollections,\n    EditAnyCollection,\n    DeleteAnyCollection,\n    EditAssignedCollections,\n    DeleteAssignedCollections,\n    ManageSso,\n}\n","import { Injectable } from '@angular/core';\nimport {\n    ActivatedRouteSnapshot,\n    CanActivate,\n    Router,\n    RouterStateSnapshot,\n} from '@angular/router';\n\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class AuthGuardService implements CanActivate {\n    constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n        private router: Router, private messagingService: MessagingService, private keyConnectorService: KeyConnectorService) { }\n\n    async canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) {\n        const isAuthed = await this.userService.isAuthenticated();\n        if (!isAuthed) {\n            this.messagingService.send('authBlocked');\n            return false;\n        }\n\n        const locked = await this.vaultTimeoutService.isLocked();\n        if (locked) {\n            if (routerState != null) {\n                this.messagingService.send('lockedUrl', { url: routerState.url });\n            }\n            this.router.navigate(['lock'], { queryParams: { promptBiometric: true }});\n            return false;\n        }\n\n        if (!routerState.url.includes('remove-password') && await this.keyConnectorService.getConvertAccountRequired()) {\n            this.router.navigate(['/remove-password']);\n            return false;\n        }\n\n        return true;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    CanActivate,\n    Router,\n} from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class LockGuardService implements CanActivate {\n\n    protected homepage = 'vault';\n    constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n        private router: Router) { }\n\n    async canActivate() {\n        const isAuthed = await this.userService.isAuthenticated();\n        if (isAuthed) {\n            const locked = await this.vaultTimeoutService.isLocked();\n            if (locked) {\n                return true;\n            } else {\n                this.router.navigate([this.homepage]);\n                return false;\n            }\n        }\n\n        this.router.navigate(['']);\n        return false;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    ActivatedRouteSnapshot,\n    CanActivate,\n    Router,\n} from '@angular/router';\n\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\n@Injectable()\nexport class UnauthGuardService implements CanActivate {\n\n    protected homepage = 'vault';\n    constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService,\n        private router: Router) { }\n\n    async canActivate() {\n        const isAuthed = await this.userService.isAuthenticated();\n        if (isAuthed) {\n            const locked = await this.vaultTimeoutService.isLocked();\n            if (locked) {\n                this.router.navigate(['lock']);\n            } else {\n                this.router.navigate([this.homepage]);\n            }\n            return false;\n        }\n\n        return true;\n    }\n}\n","import {\n    Component,\n    OnInit,\n    ViewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { CipherData } from 'jslib-common/models/data/cipherData';\nimport { Cipher } from 'jslib-common/models/domain/cipher';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\nimport { EmergencyAccessViewResponse } from 'jslib-common/models/response/emergencyAccessResponse';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\nimport { EmergencyAccessAttachmentsComponent } from './emergency-access-attachments.component';\nimport { EmergencyAddEditComponent } from './emergency-add-edit.component';\n\n@Component({\n    selector: 'emergency-access-view',\n    templateUrl: 'emergency-access-view.component.html',\n})\nexport class EmergencyAccessViewComponent implements OnInit {\n    @ViewChild('cipherAddEdit', { read: ViewContainerRef, static: true }) cipherAddEditModalRef: ViewContainerRef;\n    @ViewChild('attachments', { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef;\n\n    id: string;\n    ciphers: CipherView[] = [];\n    loaded = false;\n\n    constructor(private cipherService: CipherService, private cryptoService: CryptoService,\n        private modalService: ModalService, private router: Router,\n        private route: ActivatedRoute, private apiService: ApiService) { }\n\n    ngOnInit() {\n        this.route.params.subscribe(qParams => {\n            if (qParams.id == null) {\n                return this.router.navigate(['settings/emergency-access']);\n            }\n\n            this.id = qParams.id;\n\n            this.load();\n        });\n    }\n\n    async selectCipher(cipher: CipherView) {\n        const [_, childComponent] = await this.modalService.openViewRef(EmergencyAddEditComponent, this.cipherAddEditModalRef, comp => {\n            comp.cipherId = cipher == null ? null : cipher.id;\n            comp.cipher = cipher;\n        });\n\n        return childComponent;\n    }\n\n    async load() {\n        const response = await this.apiService.postEmergencyAccessView(this.id);\n        this.ciphers = await this.getAllCiphers(response);\n        this.loaded = true;\n    }\n\n    async viewAttachments(cipher: CipherView) {\n        await this.modalService.openViewRef(EmergencyAccessAttachmentsComponent, this.attachmentsModalRef, comp => {\n            comp.cipher = cipher;\n            comp.emergencyAccessId = this.id;\n        });\n    }\n\n    protected async getAllCiphers(response: EmergencyAccessViewResponse): Promise<CipherView[]> {\n        const ciphers = response.ciphers;\n\n        const decCiphers: CipherView[] = [];\n        const oldKeyBuffer = await this.cryptoService.rsaDecrypt(response.keyEncrypted);\n        const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n        const promises: any[] = [];\n        ciphers.forEach(cipherResponse => {\n            const cipherData = new CipherData(cipherResponse);\n            const cipher = new Cipher(cipherData);\n            promises.push(cipher.decrypt(oldEncKey).then(c => decCiphers.push(c)));\n        });\n\n        await Promise.all(promises);\n        decCiphers.sort(this.cipherService.getLocaleSortingFunction());\n\n        return decCiphers;\n    }\n}\n","<div class=\"page-header\"> <h1>{{'vault' | i18n}}</h1> </div> <div class=\"mt-4\"> <ng-container *ngIf=\"ciphers.length\"> <table class=\"table table-hover table-list table-ciphers\"> <tbody> <tr *ngFor=\"let c of ciphers\"> <td class=\"table-list-icon\"> <app-vault-icon [cipher]=\"c\"></app-vault-icon> </td> <td class=\"reduced-lh wrap\"> <a href=\"#\" appStopClick (click)=\"selectCipher(c)\" title=\"{{'editItem' | i18n}}\">{{c.name}}</a> <ng-container *ngIf=\"!organization && c.organizationId\"> <i class=\"fa fa-cube\" appStopProp title=\"{{'shared' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'shared' | i18n}}</span> </ng-container> <ng-container *ngIf=\"c.hasAttachments\"> <i class=\"fa fa-paperclip\" appStopProp title=\"{{'attachments' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'attachments' | i18n}}</span> </ng-container> <br> <small>{{c.subTitle}}</small> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown *ngIf=\"c.hasAttachments\"> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" id=\"dropdownMenuButton\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"dropdownMenuButton\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"viewAttachments(c)\"> <i class=\"fa fa-fw fa-paperclip\" aria-hidden=\"true\"></i> {{'attachments' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> </ng-container> <ng-container *ngIf=\"!loaded\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> </div> <ng-template #cipherAddEdit></ng-template> <ng-template #attachments></ng-template> ","import { Component } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { AttachmentView } from 'jslib-common/models/view/attachmentView';\n\nimport { AttachmentsComponent as BaseAttachmentsComponent } from 'jslib-angular/components/attachments.component';\n\n@Component({\n    selector: 'emergency-access-attachments',\n    templateUrl: '../vault/attachments.component.html',\n})\nexport class EmergencyAccessAttachmentsComponent extends BaseAttachmentsComponent {\n    viewOnly = true;\n    canAccessAttachments = true;\n\n    constructor(cipherService: CipherService, i18nService: I18nService,\n        cryptoService: CryptoService, userService: UserService,\n        platformUtilsService: PlatformUtilsService, apiService: ApiService,\n        logService: LogService) {\n        super(cipherService, i18nService, cryptoService, userService, platformUtilsService, apiService, window,\n            logService);\n    }\n\n    protected async init() {\n        // Do nothing since cipher is already decoded\n    }\n\n    protected showFixOldAttachments(attachment: AttachmentView) {\n        return false;\n    }\n}\n","import { Component } from '@angular/core';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { TotpService } from 'jslib-common/abstractions/totp.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { AddEditComponent as BaseAddEditComponent } from '../vault/add-edit.component';\n\n@Component({\n    selector: 'app-org-vault-add-edit',\n    templateUrl: '../vault/add-edit.component.html',\n})\nexport class EmergencyAddEditComponent extends BaseAddEditComponent {\n    originalCipher: Cipher = null;\n    viewOnly = true;\n\n    constructor(cipherService: CipherService, folderService: FolderService,\n        i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n        auditService: AuditService, stateService: StateService,\n        userService: UserService, collectionService: CollectionService,\n        totpService: TotpService, passwordGenerationService: PasswordGenerationService,\n        messagingService: MessagingService, eventService: EventService, policyService: PolicyService,\n        logService: LogService, passwordRepromptService: PasswordRepromptService) {\n        super(cipherService, folderService, i18nService, platformUtilsService, auditService, stateService,\n            userService, collectionService, totpService, passwordGenerationService, messagingService,\n            eventService, policyService, passwordRepromptService, logService);\n    }\n\n    async load() {\n        this.title = this.i18nService.t('viewItem');\n    }\n\n    protected async loadCipher() {\n        return Promise.resolve(this.originalCipher);\n    }\n}\n","import {\n    Component,\n    OnInit,\n    ViewChild,\n    ViewContainerRef\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EmergencyAccessStatusType } from 'jslib-common/enums/emergencyAccessStatusType';\nimport { EmergencyAccessType } from 'jslib-common/enums/emergencyAccessType';\nimport { Utils } from 'jslib-common/misc/utils';\nimport { EmergencyAccessConfirmRequest } from 'jslib-common/models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessGranteeDetailsResponse, EmergencyAccessGrantorDetailsResponse } from 'jslib-common/models/response/emergencyAccessResponse';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe';\n\nimport { EmergencyAccessAddEditComponent } from './emergency-access-add-edit.component';\nimport { EmergencyAccessConfirmComponent } from './emergency-access-confirm.component';\nimport { EmergencyAccessTakeoverComponent } from './emergency-access-takeover.component';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\n@Component({\n    selector: 'emergency-access',\n    templateUrl: 'emergency-access.component.html',\n})\nexport class EmergencyAccessComponent implements OnInit {\n    @ViewChild('addEdit', { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef;\n    @ViewChild('takeoverTemplate', { read: ViewContainerRef, static: true}) takeoverModalRef: ViewContainerRef;\n    @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef;\n\n    canAccessPremium: boolean;\n    trustedContacts: EmergencyAccessGranteeDetailsResponse[];\n    grantedContacts: EmergencyAccessGrantorDetailsResponse[];\n    emergencyAccessType = EmergencyAccessType;\n    emergencyAccessStatusType = EmergencyAccessStatusType;\n    actionPromise: Promise<any>;\n    isOrganizationOwner: boolean;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private modalService: ModalService, private platformUtilsService: PlatformUtilsService,\n        private toasterService: ToasterService, private cryptoService: CryptoService,\n        private storageService: StorageService, private userService: UserService,\n        private messagingService: MessagingService, private userNamePipe: UserNamePipe,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        this.canAccessPremium = await this.userService.canAccessPremium();\n        const orgs = await this.userService.getAllOrganizations();\n        this.isOrganizationOwner = orgs.some(o => o.isOwner);\n        this.load();\n    }\n\n    async load() {\n        this.trustedContacts = (await this.apiService.getEmergencyAccessTrusted()).data;\n        this.grantedContacts = (await this.apiService.getEmergencyAccessGranted()).data;\n    }\n\n    async premiumRequired() {\n        if (!this.canAccessPremium) {\n            this.messagingService.send('premiumRequired');\n            return;\n        }\n    }\n\n    async edit(details: EmergencyAccessGranteeDetailsResponse) {\n        const [modal] = await this.modalService.openViewRef(EmergencyAccessAddEditComponent, this.addEditModalRef, comp => {\n            comp.name = this.userNamePipe.transform(details);\n            comp.emergencyAccessId = details?.id;\n            comp.readOnly = !this.canAccessPremium;\n            comp.onSaved.subscribe(() => {\n                modal.close();\n                this.load();\n            });\n            comp.onDeleted.subscribe(() => {\n                modal.close();\n                this.remove(details);\n            });\n        });\n    }\n\n    invite() {\n        this.edit(null);\n    }\n\n    async reinvite(contact: EmergencyAccessGranteeDetailsResponse) {\n        if (this.actionPromise != null) {\n            return;\n        }\n        this.actionPromise = this.apiService.postEmergencyAccessReinvite(contact.id);\n        await this.actionPromise;\n        this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenReinvited', contact.email));\n        this.actionPromise = null;\n    }\n\n    async confirm(contact: EmergencyAccessGranteeDetailsResponse) {\n        function updateUser() {\n            contact.status = EmergencyAccessStatusType.Confirmed;\n        }\n\n        if (this.actionPromise != null) {\n            return;\n        }\n\n        const autoConfirm = await this.storageService.get<boolean>(ConstantsService.autoConfirmFingerprints);\n        if (autoConfirm == null || !autoConfirm) {\n            const [modal] = await this.modalService.openViewRef(EmergencyAccessConfirmComponent, this.confirmModalRef, comp => {\n                comp.name = this.userNamePipe.transform(contact);\n                comp.emergencyAccessId = contact.id;\n                comp.userId = contact?.granteeId;\n                comp.onConfirmed.subscribe(async () => {\n                    modal.close();\n\n                    comp.formPromise = this.doConfirmation(contact);\n                    await comp.formPromise;\n\n                    updateUser();\n                    this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', this.userNamePipe.transform(contact)));\n                });\n            });\n            return;\n        }\n\n        this.actionPromise = this.doConfirmation(contact);\n        await this.actionPromise;\n        updateUser();\n\n        this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', this.userNamePipe.transform(contact)));\n        this.actionPromise = null;\n    }\n\n    async remove(details: EmergencyAccessGranteeDetailsResponse | EmergencyAccessGrantorDetailsResponse) {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('removeUserConfirmation'), this.userNamePipe.transform(details),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            await this.apiService.deleteEmergencyAccess(details.id);\n            this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.userNamePipe.transform(details)));\n\n            if (details instanceof EmergencyAccessGranteeDetailsResponse) {\n                this.removeGrantee(details);\n            } else {\n                this.removeGrantor(details);\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async requestAccess(details: EmergencyAccessGrantorDetailsResponse) {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('requestAccessConfirmation', details.waitTimeDays.toString()),\n            this.userNamePipe.transform(details),\n            this.i18nService.t('requestAccess'),\n            this.i18nService.t('no'),\n            'warning',\n        );\n\n        if (!confirmed) {\n            return false;\n        }\n\n        await this.apiService.postEmergencyAccessInitiate(details.id);\n\n        details.status = EmergencyAccessStatusType.RecoveryInitiated;\n        this.toasterService.popAsync('success', null, this.i18nService.t('requestSent', this.userNamePipe.transform(details)));\n    }\n\n    async approve(details: EmergencyAccessGranteeDetailsResponse) {\n        const type = this.i18nService.t(details.type === EmergencyAccessType.View ? 'view' : 'takeover');\n\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('approveAccessConfirmation', this.userNamePipe.transform(details), type),\n            this.userNamePipe.transform(details),\n            this.i18nService.t('approve'),\n            this.i18nService.t('no'),\n            'warning',\n        );\n\n        if (!confirmed) {\n            return false;\n        }\n\n        await this.apiService.postEmergencyAccessApprove(details.id);\n        details.status = EmergencyAccessStatusType.RecoveryApproved;\n\n        this.toasterService.popAsync('success', null, this.i18nService.t('emergencyApproved', this.userNamePipe.transform(details)));\n    }\n\n    async reject(details: EmergencyAccessGranteeDetailsResponse) {\n        await this.apiService.postEmergencyAccessReject(details.id);\n        details.status = EmergencyAccessStatusType.Confirmed;\n\n        this.toasterService.popAsync('success', null, this.i18nService.t('emergencyRejected', this.userNamePipe.transform(details)));\n    }\n\n    async takeover(details: EmergencyAccessGrantorDetailsResponse) {\n        const [modal] = await this.modalService.openViewRef(EmergencyAccessTakeoverComponent, this.takeoverModalRef, comp => {\n            comp.name = this.userNamePipe.transform(details);\n            comp.email = details.email;\n            comp.emergencyAccessId = details != null ? details.id : null;\n\n            comp.onDone.subscribe(() => {\n                modal.close();\n                this.toasterService.popAsync('success', null, this.i18nService.t('passwordResetFor', this.userNamePipe.transform(details)));\n            });\n        });\n    }\n\n    private removeGrantee(details: EmergencyAccessGranteeDetailsResponse) {\n        const index = this.trustedContacts.indexOf(details);\n        if (index > -1) {\n            this.trustedContacts.splice(index, 1);\n        }\n    }\n\n    private removeGrantor(details: EmergencyAccessGrantorDetailsResponse) {\n        const index = this.grantedContacts.indexOf(details);\n        if (index > -1) {\n            this.grantedContacts.splice(index, 1);\n        }\n    }\n\n    // Encrypt the master password hash using the grantees public key, and send it to bitwarden for escrow.\n    private async doConfirmation(details: EmergencyAccessGranteeDetailsResponse) {\n        const encKey = await this.cryptoService.getEncKey();\n        const publicKeyResponse = await this.apiService.getUserPublicKey(details.granteeId);\n        const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n        try {\n            this.logService.debug('User\\'s fingerprint: ' +\n                (await this.cryptoService.getFingerprint(details.granteeId, publicKey.buffer)).join('-'));\n        } catch {\n            // Ignore errors since it's just a debug message\n        }\n\n        const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer);\n        const request = new EmergencyAccessConfirmRequest();\n        request.key = encryptedKey.encryptedString;\n        await this.apiService.postEmergencyAccessConfirm(details.id, request);\n    }\n}\n","<div class=\"page-header\"> <h1>{{'emergencyAccess' | i18n}}</h1> </div> <p> {{'emergencyAccessDesc' | i18n}} <a href=\"https://bitwarden.com/help/article/emergency-access/\" target=\"_blank\" rel=\"noopener\"> {{'learnMore' | i18n}}. </a> </p> <p *ngIf=\"isOrganizationOwner\"> <b>{{'warning' | i18n }}:</b> {{'emergencyAccessOwnerWarning' | i18n}} </p> <div class=\"page-header d-flex\"> <h2> {{'trustedEmergencyContacts' | i18n}} <a href=\"#\" appStopClick class=\"badge badge-primary\" *ngIf=\"!canAccessPremium\" (click)=\"premiumRequired()\"> {{'premium' | i18n}} </a> </h2> <div class=\"ml-auto d-flex\"> <button class=\"btn btn-sm btn-outline-primary ml-3\" type=\"button\" (click)=\"invite()\" [disabled]=\"!canAccessPremium\"> <i aria-hidden=\"true\" class=\"fa fa-plus fa-fw\"></i> {{'addEmergencyContact' |i18n}} </button> </div> </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"trustedContacts && trustedContacts.length\"> <tbody> <tr *ngFor=\"let c of trustedContacts; let i = index\"> <td width=\"30\"> <app-avatar [data]=\"c | userName\" [email]=\"c.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> <a href=\"#\" appStopClick (click)=\"edit(c)\">{{c.email}}</a> <span class=\"badge badge-secondary\" *ngIf=\"c.status === emergencyAccessStatusType.Invited\">{{'invited' | i18n}}</span> <span class=\"badge badge-warning\" *ngIf=\"c.status === emergencyAccessStatusType.Accepted\">{{'accepted' | i18n}}</span> <span class=\"badge badge-warning\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryInitiated\">{{'emergencyAccessRecoveryInitiated' | i18n}}</span> <span class=\"badge badge-success\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryApproved\">{{'emergencyAccessRecoveryApproved' | i18n}}</span> <span class=\"badge badge-primary\" *ngIf=\"c.type === emergencyAccessType.View\">{{'view' | i18n}}</span> <span class=\"badge badge-primary\" *ngIf=\"c.type === emergencyAccessType.Takeover\">{{'takeover' | i18n}}</span> <small class=\"text-muted d-block\" *ngIf=\"c.name\">{{c.name}}</small> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"reinvite(c)\" *ngIf=\"c.status === emergencyAccessStatusType.Invited\"> <i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i> {{'resendInvitation' | i18n}} </a> <a class=\"dropdown-item text-success\" href=\"#\" appStopClick (click)=\"confirm(c)\" *ngIf=\"c.status === emergencyAccessStatusType.Accepted\"> <i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"></i> {{'confirm' | i18n}} </a> <a class=\"dropdown-item text-success\" href=\"#\" appStopClick (click)=\"approve(c)\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryInitiated\"> <i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"></i> {{'approve' | i18n}} </a> <a class=\"dropdown-item text-warning\" href=\"#\" appStopClick (click)=\"reject(c)\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryInitiated || c.status === emergencyAccessStatusType.RecoveryApproved\"> <i class=\"fa fa-fw fa-remove\" aria-hidden=\"true\"></i> {{'reject' | i18n}} </a> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick (click)=\"remove(c)\"> <i class=\"fa fa-fw fa-remove\" aria-hidden=\"true\"></i> {{'remove' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> <p *ngIf=\"!trustedContacts || !trustedContacts.length\">{{'noTrustedContacts' | i18n}}</p> <div class=\"page-header spaced-header\"> <h2>{{'designatedEmergencyContacts' | i18n}}</h2> </div> <table class=\"table table-hover table-list mb-0\" *ngIf=\"grantedContacts && grantedContacts.length\"> <tbody> <tr *ngFor=\"let c of grantedContacts; let i = index\"> <td width=\"30\"> <app-avatar [data]=\"c | userName\" [email]=\"c.email\" size=\"25\" [circle]=\"true\" [fontSize]=\"14\"></app-avatar> </td> <td> <span>{{c.email}}</span> <span class=\"badge badge-secondary\" *ngIf=\"c.status === emergencyAccessStatusType.Invited\">{{'invited' | i18n}}</span> <span class=\"badge badge-warning\" *ngIf=\"c.status === emergencyAccessStatusType.Accepted\">{{'accepted' | i18n}}</span> <span class=\"badge badge-warning\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryInitiated\">{{'emergencyAccessRecoveryInitiated' | i18n}}</span> <span class=\"badge badge-success\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryApproved\">{{'emergencyAccessRecoveryApproved' | i18n}}</span> <span class=\"badge badge-primary\" *ngIf=\"c.type === emergencyAccessType.View\">{{'view' | i18n}}</span> <span class=\"badge badge-primary\" *ngIf=\"c.type === emergencyAccessType.Takeover\">{{'takeover' | i18n}}</span> <small class=\"text-muted d-block\" *ngIf=\"c.name\">{{c.name}}</small> </td> <td class=\"table-list-options\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\"> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"requestAccess(c)\" *ngIf=\"c.status === emergencyAccessStatusType.Confirmed\"> <i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i> {{'requestAccess' | i18n}} </a> <a class=\"dropdown-item\" href=\"#\" appStopClick (click)=\"takeover(c)\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryApproved && c.type === emergencyAccessType.Takeover\"> <i class=\"fa fa-fw fa-key\" aria-hidden=\"true\"></i> {{'takeover' | i18n}} </a> <a class=\"dropdown-item\" [routerLink]=\"c.id\" *ngIf=\"c.status === emergencyAccessStatusType.RecoveryApproved && c.type === emergencyAccessType.View\"> <i class=\"fa fa-fw fa-eye\" aria-hidden=\"true\"></i> {{'view' | i18n}} </a> <a class=\"dropdown-item text-danger\" href=\"#\" appStopClick (click)=\"remove(c)\"> <i class=\"fa fa-fw fa-remove\" aria-hidden=\"true\"></i> {{'remove' | i18n}} </a> </div> </div> </td> </tr> </tbody> </table> <p *ngIf=\"!grantedContacts || !grantedContacts.length\">{{'noGrantedAccess' | i18n}}</p> <ng-template #addEdit></ng-template> <ng-template #takeoverTemplate></ng-template> <ng-template #confirmTemplate></ng-template> ","export enum EmergencyAccessType\n{\n    View = 0,\n    Takeover = 1,\n}\n","import { EmergencyAccessStatusType } from '../../enums/emergencyAccessStatusType';\nimport { EmergencyAccessType } from '../../enums/emergencyAccessType';\nimport { KdfType } from '../../enums/kdfType';\nimport { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\n\nexport class EmergencyAccessGranteeDetailsResponse extends BaseResponse {\n    id: string;\n    granteeId: string;\n    name: string;\n    email: string;\n    type: EmergencyAccessType;\n    status: EmergencyAccessStatusType;\n    waitTimeDays: number;\n    creationDate: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.granteeId = this.getResponseProperty('GranteeId');\n        this.name = this.getResponseProperty('Name');\n        this.email = this.getResponseProperty('Email');\n        this.type = this.getResponseProperty('Type');\n        this.status = this.getResponseProperty('Status');\n        this.waitTimeDays = this.getResponseProperty('WaitTimeDays');\n        this.creationDate = this.getResponseProperty('CreationDate');\n    }\n}\n\nexport class EmergencyAccessGrantorDetailsResponse extends BaseResponse {\n    id: string;\n    grantorId: string;\n    name: string;\n    email: string;\n    type: EmergencyAccessType;\n    status: EmergencyAccessStatusType;\n    waitTimeDays: number;\n    creationDate: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.grantorId = this.getResponseProperty('GrantorId');\n        this.name = this.getResponseProperty('Name');\n        this.email = this.getResponseProperty('Email');\n        this.type = this.getResponseProperty('Type');\n        this.status = this.getResponseProperty('Status');\n        this.waitTimeDays = this.getResponseProperty('WaitTimeDays');\n        this.creationDate = this.getResponseProperty('CreationDate');\n    }\n}\n\nexport class EmergencyAccessTakeoverResponse extends BaseResponse {\n    keyEncrypted: string;\n    kdf: KdfType;\n    kdfIterations: number;\n\n    constructor(response: any) {\n        super(response);\n\n        this.keyEncrypted = this.getResponseProperty('KeyEncrypted');\n        this.kdf = this.getResponseProperty('Kdf');\n        this.kdfIterations = this.getResponseProperty('KdfIterations');\n    }\n}\n\nexport class EmergencyAccessViewResponse extends BaseResponse {\n    keyEncrypted: string;\n    ciphers: CipherResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n\n        this.keyEncrypted = this.getResponseProperty('KeyEncrypted');\n\n        const ciphers = this.getResponseProperty('Ciphers');\n        if (ciphers != null) {\n            this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n        }\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class AttachmentResponse extends BaseResponse {\n    id: string;\n    url: string;\n    fileName: string;\n    key: string;\n    size: string;\n    sizeName: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.url = this.getResponseProperty('Url');\n        this.fileName = this.getResponseProperty('FileName');\n        this.key = this.getResponseProperty('Key');\n        this.size = this.getResponseProperty('Size');\n        this.sizeName = this.getResponseProperty('SizeName');\n    }\n}\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\n\nimport { EmergencyAccessType } from 'jslib-common/enums/emergencyAccessType';\nimport { EmergencyAccessInviteRequest } from 'jslib-common/models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessUpdateRequest } from 'jslib-common/models/request/emergencyAccessUpdateRequest';\n\n@Component({\n    selector: 'emergency-access-add-edit',\n    templateUrl: 'emergency-access-add-edit.component.html',\n})\nexport class EmergencyAccessAddEditComponent implements OnInit {\n    @Input() name: string;\n    @Input() emergencyAccessId: string;\n    @Output() onSaved = new EventEmitter();\n    @Output() onDeleted = new EventEmitter();\n\n    loading = true;\n    readOnly: boolean = false;\n    editMode: boolean = false;\n    title: string;\n    email: string;\n    type: EmergencyAccessType = EmergencyAccessType.View;\n\n    formPromise: Promise<any>;\n\n    emergencyAccessType = EmergencyAccessType;\n    waitTimes: { name: string; value: number; }[];\n    waitTime: number;\n\n    constructor(private apiService: ApiService, private i18nService: I18nService,\n        private toasterService: ToasterService, private logService: LogService) { }\n\n    async ngOnInit() {\n        this.editMode = this.loading = this.emergencyAccessId != null;\n\n        this.waitTimes = [\n            { name: this.i18nService.t('oneDay'), value: 1 },\n            { name: this.i18nService.t('days', '2'), value: 2 },\n            { name: this.i18nService.t('days', '7'), value: 7 },\n            { name: this.i18nService.t('days', '14'), value: 14 },\n            { name: this.i18nService.t('days', '30'), value: 30 },\n            { name: this.i18nService.t('days', '90'), value: 90 },\n        ];\n\n        if (this.editMode) {\n            this.editMode = true;\n            this.title = this.i18nService.t('editEmergencyContact');\n            try {\n                const emergencyAccess = await this.apiService.getEmergencyAccess(this.emergencyAccessId);\n                this.type = emergencyAccess.type;\n                this.waitTime = emergencyAccess.waitTimeDays;\n            } catch (e) {\n                this.logService.error(e);\n            }\n        } else {\n            this.title = this.i18nService.t('inviteEmergencyContact');\n            this.waitTime = this.waitTimes[2].value;\n        }\n\n        this.loading = false;\n    }\n\n    async submit() {\n        try {\n            if (this.editMode) {\n                const request = new EmergencyAccessUpdateRequest();\n                request.type = this.type;\n                request.waitTimeDays = this.waitTime;\n\n                this.formPromise = this.apiService.putEmergencyAccess(this.emergencyAccessId, request);\n            } else {\n                const request = new EmergencyAccessInviteRequest();\n                request.email = this.email.trim();\n                request.type = this.type;\n                request.waitTimeDays = this.waitTime;\n\n                this.formPromise = this.apiService.postEmergencyAccessInvite(request);\n            }\n\n            await this.formPromise;\n            this.toasterService.popAsync('success', null,\n                this.i18nService.t(this.editMode ? 'editedUserId' : 'invitedUsers', this.name));\n            this.onSaved.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async delete() {\n        this.onDeleted.emit();\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"userAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"userAddEditTitle\"> <span class=\"badge badge-primary\" *ngIf=\"readOnly\">{{'premium' | i18n}}</span> {{title}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\" *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </div> <div class=\"modal-body\" *ngIf=\"!loading\"> <ng-container *ngIf=\"!editMode\"> <p>{{'inviteEmergencyContactDesc' | i18n}}</p> <div class=\"form-group mb-4\"> <label for=\"email\">{{'email' | i18n}}</label> <input id=\"email\" class=\"form-control\" type=\"text\" name=\"Email\" [(ngModel)]=\"email\" required> </div> </ng-container> <h3> {{'userAccess' | i18n}} <a target=\"_blank\" rel=\"noopener\" appA11yTitle=\"{{'learnMore' | i18n}}\" href=\"https://bitwarden.com/help/article/emergency-access/#user-access\"> <i class=\"fa fa-question-circle-o\" aria-hidden=\"true\"></i> </a> </h3> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"userType\" id=\"emergencyTypeView\" [value]=\"emergencyAccessType.View\" [(ngModel)]=\"type\"> <label class=\"form-check-label\" for=\"emergencyTypeView\"> {{'view' | i18n}} <small>{{'viewDesc' | i18n}}</small> </label> </div> <div class=\"form-check mt-2 form-check-block\"> <input class=\"form-check-input\" type=\"radio\" name=\"userType\" id=\"emergencyTypeTakeover\" [value]=\"emergencyAccessType.Takeover\" [(ngModel)]=\"type\" [disabled]=\"readOnly\"> <label class=\"form-check-label\" for=\"emergencyTypeTakeover\"> {{'takeover' | i18n}} <small>{{'takeoverDesc' | i18n}}</small> </label> </div> <div class=\"form-group col-6 mt-4\"> <label for=\"waitTime\">{{'waitTime' | i18n}}</label> <select id=\"waitTime\" name=\"waitTime\" [(ngModel)]=\"waitTime\" class=\"form-control\" [disabled]=\"readOnly\"> <option *ngFor=\"let o of waitTimes\" [ngValue]=\"o.value\">{{o.name}}</option> </select> <small class=\"text-muted\">{{'waitTimeDesc' | i18n}}</small> </div> </div> <div class=\"modal-footer\"> <button #submitBtn type=\"submit\" class=\"btn btn-primary\" [disabled]=\"loading || submitBtn.loading || readOnly\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\" *ngIf=\"loading || submitBtn.loading\"></i> <span *ngIf=\"!loading && !submitBtn.loading\">{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> <div class=\"ml-auto\"> <button #deleteBtn type=\"button\" (click)=\"delete()\" class=\"btn btn-outline-danger\" appA11yTitle=\"{{'delete' | i18n}}\" *ngIf=\"editMode\" [disabled]=\"deleteBtn.loading\"> <i class=\"fa fa-trash-o fa-lg fa-fw\" [hidden]=\"deleteBtn.loading\" aria-hidden=\"true\"></i> <i class=\"fa fa-spinner fa-spin fa-lg fa-fw\" [hidden]=\"!deleteBtn.loading\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> </button> </div> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Component({\n    selector: 'emergency-access-confirm',\n    templateUrl: 'emergency-access-confirm.component.html',\n})\nexport class EmergencyAccessConfirmComponent implements OnInit {\n    @Input() name: string;\n    @Input() userId: string;\n    @Input() emergencyAccessId: string;\n    @Input() formPromise: Promise<any>;\n    @Output() onConfirmed = new EventEmitter();\n\n    dontAskAgain = false;\n    loading = true;\n    fingerprint: string;\n\n    constructor(private apiService: ApiService, private cryptoService: CryptoService,\n        private storageService: StorageService, private logService: LogService) { }\n\n    async ngOnInit() {\n        try {\n            const publicKeyResponse = await this.apiService.getUserPublicKey(this.userId);\n            if (publicKeyResponse != null) {\n                const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n                const fingerprint = await this.cryptoService.getFingerprint(this.userId, publicKey.buffer);\n                if (fingerprint != null) {\n                    this.fingerprint = fingerprint.join('-');\n                }\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.loading = false;\n    }\n\n    async submit() {\n        if (this.loading) {\n            return;\n        }\n\n        if (this.dontAskAgain) {\n            await this.storageService.save(ConstantsService.autoConfirmFingerprints, true);\n        }\n\n        try {\n            this.onConfirmed.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"confirmUserTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"confirmUserTitle\"> {{'confirmUser' | i18n}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <p> {{'fingerprintEnsureIntegrityVerify' | i18n}} <a href=\"https://help.bitwarden.com/article/fingerprint-phrase/\" target=\"_blank\" rel=\"noopener\"> {{'learnMore' | i18n}}</a> </p> <p><code>{{fingerprint}}</code></p> <div class=\"form-check\"> <input class=\"form-check-input\" type=\"checkbox\" id=\"dontAskAgain\" name=\"DontAskAgain\" [(ngModel)]=\"dontAskAgain\"> <label class=\"form-check-label\" for=\"dontAskAgain\"> {{'dontAskFingerprintAgain' | i18n}} </label> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'confirm' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\">{{'cancel' | i18n}}</button> </div> </form> </div> </div> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\nimport { PolicyData } from 'jslib-common/models/data/policyData';\nimport { Policy } from 'jslib-common/models/domain/policy';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\nimport { EmergencyAccessPasswordRequest } from 'jslib-common/models/request/emergencyAccessPasswordRequest';\nimport { PolicyResponse } from 'jslib-common/models/response/policyResponse';\n\nimport { ChangePasswordComponent } from 'jslib-angular/components/change-password.component';\n\n@Component({\n    selector: 'emergency-access-takeover',\n    templateUrl: 'emergency-access-takeover.component.html',\n})\nexport class EmergencyAccessTakeoverComponent extends ChangePasswordComponent implements OnInit {\n    @Output() onDone = new EventEmitter();\n    @Input() emergencyAccessId: string;\n    @Input() name: string;\n    @Input() email: string;\n    @Input() kdf: KdfType;\n    @Input() kdfIterations: number;\n\n    formPromise: Promise<any>;\n\n    constructor(i18nService: I18nService, cryptoService: CryptoService,\n        messagingService: MessagingService, userService: UserService,\n        passwordGenerationService: PasswordGenerationService,\n        platformUtilsService: PlatformUtilsService, policyService: PolicyService,\n        private apiService: ApiService, private toasterService: ToasterService, private logService: LogService) {\n        super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n            platformUtilsService, policyService);\n    }\n\n    async ngOnInit() {\n        const response = await this.apiService.getEmergencyGrantorPolicies(this.emergencyAccessId);\n        if (response.data != null && response.data.length > 0) {\n            const policies = response.data.map((policyResponse: PolicyResponse) => new Policy(new PolicyData(policyResponse)));\n            this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions(policies);\n        }\n     }\n\n    async submit() {\n        if (!await this.strongPassword()) {\n            return;\n        }\n\n        const takeoverResponse = await this.apiService.postEmergencyAccessTakeover(this.emergencyAccessId);\n\n        const oldKeyBuffer = await this.cryptoService.rsaDecrypt(takeoverResponse.keyEncrypted);\n        const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);\n\n        if (oldEncKey == null) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'), this.i18nService.t('unexpectedError'));\n            return;\n        }\n\n        const key = await this.cryptoService.makeKey(this.masterPassword, this.email, takeoverResponse.kdf, takeoverResponse.kdfIterations);\n        const masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key);\n\n        const encKey = await this.cryptoService.remakeEncKey(key, oldEncKey);\n\n        const request = new EmergencyAccessPasswordRequest();\n        request.newMasterPasswordHash = masterPasswordHash;\n        request.key = encKey[1].encryptedString;\n\n        this.apiService.postEmergencyAccessPassword(this.emergencyAccessId, request);\n\n        try {\n            this.onDone.emit();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"userAddEditTitle\"> <div class=\"modal-dialog modal-dialog-scrollable modal-lg\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"userAddEditTitle\"> {{'takeover' | i18n}} <small class=\"text-muted\" *ngIf=\"name\">{{name}}</small> </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\" appA11yTitle=\"{{'close' | i18n}}\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> <app-callout type=\"warning\">{{'loggedOutWarning' | i18n}}</app-callout> <app-callout type=\"info\" [enforcedPolicyOptions]=\"enforcedPolicyOptions\" *ngIf=\"enforcedPolicyOptions\"> </app-callout> <div class=\"row\"> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"masterPassword\">{{'newMasterPass' | i18n}}</label> <input id=\"masterPassword\" type=\"password\" name=\"NewMasterPasswordHash\" class=\"form-control mb-1\" [(ngModel)]=\"masterPassword\" (input)=\"updatePasswordStrength()\" required appInputVerbatim autocomplete=\"new-password\"> <app-password-strength [score]=\"masterPasswordScore\" [showText]=\"true\"> </app-password-strength> </div> </div> <div class=\"col-6\"> <div class=\"form-group\"> <label for=\"masterPasswordRetype\">{{'confirmNewMasterPass' | i18n}}</label> <input id=\"masterPasswordRetype\" type=\"password\" name=\"MasterPasswordRetype\" class=\"form-control\" [(ngModel)]=\"masterPasswordRetype\" required appInputVerbatim autocomplete=\"new-password\"> </div> </div> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'save' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\"> {{'cancel' | i18n}} </button> </div> </form> </div> </div> ","import {\n    Component,\n    OnInit,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { PlanSponsorshipType } from 'jslib-common/enums/planSponsorshipType';\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n    selector: 'app-sponsored-families',\n    templateUrl: 'sponsored-families.component.html',\n})\nexport class SponsoredFamiliesComponent implements OnInit {\n    loading = false;\n\n    availableSponsorshipOrgs: Organization[] = [];\n    activeSponsorshipOrgs: Organization[] = [];\n    selectedSponsorshipOrgId: string = '';\n    sponsorshipEmail: string = '';\n\n    // Conditional display properties\n    formPromise: Promise<any>;\n\n    constructor(private userService: UserService, private apiService: ApiService,\n        private i18nService: I18nService, private toasterService: ToasterService,\n        private syncService: SyncService) { }\n\n    async ngOnInit() {\n        await this.load();\n    }\n\n    async submit() {\n        this.formPromise = this.apiService.postCreateSponsorship(this.selectedSponsorshipOrgId, {\n            sponsoredEmail: this.sponsorshipEmail,\n            planSponsorshipType: PlanSponsorshipType.FamiliesForEnterprise,\n            friendlyName: this.sponsorshipEmail,\n        });\n\n        await this.formPromise;\n        this.toasterService.popAsync('success', null, this.i18nService.t('sponsorshipCreated'));\n        this.formPromise = null;\n        this.resetForm();\n        await this.load(true);\n    }\n\n    async load(forceReload: boolean = false) {\n        if (this.loading) {\n            return;\n        }\n\n        this.loading = true;\n        if (forceReload) {\n            await this.syncService.fullSync(true);\n        }\n\n        const allOrgs = await this.userService.getAllOrganizations();\n        this.availableSponsorshipOrgs = allOrgs.filter(org => org.familySponsorshipAvailable);\n\n        this.activeSponsorshipOrgs = allOrgs.filter(org => org.familySponsorshipFriendlyName !== null);\n\n        if (this.availableSponsorshipOrgs.length === 1) {\n            this.selectedSponsorshipOrgId = this.availableSponsorshipOrgs[0].id;\n        }\n        this.loading = false;\n    }\n\n\n    private async resetForm() {\n        this.sponsorshipEmail = '';\n        this.selectedSponsorshipOrgId = '';\n    }\n\n    get anyActiveSponsorships(): boolean {\n        return this.activeSponsorshipOrgs.length > 0;\n    }\n\n    get anyOrgsAvailable(): boolean {\n        return this.availableSponsorshipOrgs.length > 0;\n    }\n\n    get moreThanOneOrgAvailable(): boolean {\n        return this.availableSponsorshipOrgs.length > 1;\n    }\n}\n","<div class=\"page-header\"> <h1>{{'sponsoredFamilies' | i18n}}</h1> </div> <ng-container *ngIf=\"loading\"> <i class=\"fa fa-spinner fa-spin text-muted\" title=\"{{'loading' | i18n}}\"></i> <span class=\"sr-only\">{{'loading' | i18n}}</span> </ng-container> <ng-container *ngIf=\"!loading\"> <p> {{'sponsoredFamiliesEligible' | i18n}} </p> <div> {{'sponsoredFamiliesInclude' | i18n}}: <ul class=\"inset-list\"> <li>{{'sponsoredFamiliesPremiumAccess' | i18n}}</li> <li>{{'sponsoredFamiliesSharedCollections' | i18n}}</li> </ul> </div> <form #form (ngSubmit)=\"submit()\" [appApiAction]=\"formPromise\" ngNativeValidate *ngIf=\"anyOrgsAvailable\"> <div *ngIf=\"moreThanOneOrgAvailable\" class=\"form-group col-7\"> <label for=\"availableSponsorshipOrg\">{{ 'familiesSponsoringOrgSelect' | i18n}}</label> <select id=\"availableSponsorshipOrg\" name=\"Available Sponsorship Organization\" [(ngModel)]=\"selectedSponsorshipOrgId\" class=\"form-control\" required> <option value=\"\">-- {{'select' | i18n}} --</option> <option *ngFor=\"let o of availableSponsorshipOrgs\" [ngValue]=\"o.id\">{{o.name}}</option> </select> </div> <div class=\"form-group col-7\"> <label for=\"accountEmail\">{{'sponsoredFamiliesEmail' | i18n}}:</label> <input id=\"accountEmail\" class=\"form-control\" inputmode=\"email\" [(ngModel)]=\"sponsorshipEmail\" name=\"sponsorshipEmail\" required> <button class=\"btn btn-primary btn-submit mt-4\" type=\"submit\" [disabled]=\"form.loading\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'redeem' | i18n}}</span> </button> </div> </form> <ng-container *ngIf=\"anyActiveSponsorships\"> <div class=\"border-bottom\"> <table class=\"table table-hover table-list\"> <thead> <tr> <th>{{'recipient' | i18n}}</th> <th>{{'sponsoringOrg' | i18n}}</th> <th></th> </tr> </thead> <tbody> <ng-container *ngFor=\"let o of activeSponsorshipOrgs\"> <tr sponsoring-org-row [sponsoringOrg]=\"o\" (sponsorshipRemoved)=\"load(true)\"></tr> </ng-container> </tbody> </table> </div> <small>{{'sponsoredFamiliesLeaveCopy' | i18n}}</small> </ng-container> </ng-container> ","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Component({\n    selector: '[sponsoring-org-row]',\n    templateUrl: 'sponsoring-org-row.component.html',\n})\nexport class SponsoringOrgRowComponent {\n    @Input() sponsoringOrg: Organization = null;\n\n    @Output() sponsorshipRemoved = new EventEmitter();\n\n    revokeSponsorshipPromise: Promise<any>;\n    resendEmailPromise: Promise<any>;\n\n    constructor(private toasterService: ToasterService, private apiService: ApiService,\n        private i18nService: I18nService, private logService: LogService,\n        private platformUtilsService: PlatformUtilsService) { }\n\n    async revokeSponsorship() {\n        try {\n            this.revokeSponsorshipPromise = this.doRevokeSponsorship();\n            await this.revokeSponsorshipPromise;\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        this.revokeSponsorshipPromise = null;\n    }\n\n    async resendEmail() {\n        this.resendEmailPromise = this.apiService.postResendSponsorshipOffer(this.sponsoringOrg.id);\n        await this.resendEmailPromise;\n        this.toasterService.popAsync('success', null, this.i18nService.t('emailSent'));\n        this.resendEmailPromise = null;\n    }\n\n    private async doRevokeSponsorship() {\n        const isConfirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('revokeSponsorshipConfirmation'),\n            `${this.i18nService.t('remove')} ${this.sponsoringOrg.familySponsorshipFriendlyName}?`,\n            this.i18nService.t('remove'), this.i18nService.t('cancel'), 'warning');\n\n        if (!isConfirmed) {\n            return;\n        }\n\n        await this.apiService.deleteRevokeSponsorship(this.sponsoringOrg.id);\n        this.toasterService.popAsync('success', null, this.i18nService.t('reclaimedFreePlan'));\n        this.sponsorshipRemoved.emit();\n    }\n}\n","<td> {{sponsoringOrg.familySponsorshipFriendlyName}} </td> <td>{{sponsoringOrg.name}}</td> <td class=\"table-action-right\"> <div class=\"dropdown\" appListDropdown> <button class=\"btn btn-outline-secondary dropdown-toggle\" type=\"button\" id=\"dropdownMenuButton\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" appA11yTitle=\"{{'options' | i18n}}\"> <i class=\"fa fa-cog fa-lg\" aria-hidden=\"true\"></i> </button> <div class=\"dropdown-menu dropdown-menu-right\" aria-labelledby=\"dropdownMenuButton\"> <button #resendEmailBtn [appApiAction]=\"resendEmailPromise\" class=\"dropdown-item btn-submit\" [disabled]=\"resendEmailBtn.loading\" (click)=\"resendEmail()\" [attr.aria-label]=\"'resendEmailLabel' | i18n : sponsoringOrg.familySponsorshipFriendlyName\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'resendEmail' | i18n }}</span> </button> <button #revokeSponsorshipBtn [appApiAction]=\"revokeSponsorshipPromise\" class=\"dropdown-item text-danger btn-submit\" [disabled]=\"revokeSponsorshipBtn.loading\" (click)=\"revokeSponsorship()\" [attr.aria-label]=\"'revokeAccount' | i18n : sponsoringOrg.familySponsorshipFriendlyName\"> <i class=\"fa fa-spinner fa-spin\" title=\"{{'loading' | i18n}}\" aria-hidden=\"true\"></i> <span>{{'remove' | i18n}}</span> </button> </div> </div> </td> ","import { Component } from '@angular/core';\n\nimport { PasswordRepromptComponent as BasePasswordRepromptComponent } from 'jslib-angular/components/password-reprompt.component';\n\n@Component({\n    templateUrl: 'password-reprompt.component.html',\n})\nexport class PasswordRepromptComponent extends BasePasswordRepromptComponent {}\n","<div class=\"modal fade\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"confirmUserTitle\"> <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\"> <form class=\"modal-content\" #form (ngSubmit)=\"submit()\"> <div class=\"modal-header\"> <h2 class=\"modal-title\" id=\"confirmUserTitle\"> {{'passwordConfirmation' | i18n}} </h2> <button type=\"button\" class=\"close\" data-dismiss=\"modal\"> <span aria-hidden=\"true\">&times;</span> </button> </div> <div class=\"modal-body\"> {{'passwordConfirmationDesc' | i18n}} <div class=\"form-group\"> <label for=\"masterPassword\">{{'masterPass' | i18n}}</label> <div class=\"d-flex\"> <input id=\"masterPassword\" type=\"{{showPassword ? 'text' : 'password'}}\" name=\"MasterPassword\" class=\"text-monospace form-control\" [(ngModel)]=\"masterPassword\" required appAutofocus appInputVerbatim> <button type=\"button\" class=\"ml-1 btn btn-link\" appA11yTitle=\"{{'toggleVisibility' | i18n}}\" (click)=\"togglePassword()\"> <i class=\"fa fa-lg\" aria-hidden=\"true\" [ngClass]=\"{'fa-eye': !showPassword, 'fa-eye-slash': showPassword}\"></i> </button> </div> </div> </div> <div class=\"modal-footer\"> <button type=\"submit\" class=\"btn btn-primary btn-submit\" appBlurClick> <span>{{'ok' | i18n}}</span> </button> <button type=\"button\" class=\"btn btn-outline-secondary\" data-dismiss=\"modal\"> {{'cancel' | i18n}} </button> </div> </form> </div> </div> ","import { Directive } from '@angular/core';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { ModalRef } from './modal/modal.ref';\n\n@Directive()\nexport class PasswordRepromptComponent {\n\n    showPassword = false;\n    masterPassword = '';\n\n    constructor(private modalRef: ModalRef, private cryptoService: CryptoService, private platformUtilsService: PlatformUtilsService,\n        private i18nService: I18nService) {}\n\n    togglePassword() {\n        this.showPassword = !this.showPassword;\n    }\n\n    async submit() {\n        if (!await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, null)) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('invalidMasterPassword'));\n            return;\n        }\n\n        this.modalRef.close(true);\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    HostListener,\n} from '@angular/core';\n\n@Directive({\n    selector: '[appBlurClick]',\n})\nexport class BlurClickDirective {\n    constructor(private el: ElementRef) {\n    }\n\n    @HostListener('click') onClick() {\n        this.el.nativeElement.blur();\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class CollectionResponse extends BaseResponse {\n    id: string;\n    organizationId: string;\n    name: string;\n    externalId: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.organizationId = this.getResponseProperty('OrganizationId');\n        this.name = this.getResponseProperty('Name');\n        this.externalId = this.getResponseProperty('ExternalId');\n    }\n}\n\nexport class CollectionDetailsResponse extends CollectionResponse {\n    readOnly: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.readOnly = this.getResponseProperty('ReadOnly') || false;\n    }\n}\n\nexport class CollectionGroupDetailsResponse extends CollectionResponse {\n    groups: SelectionReadOnlyResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n        const groups = this.getResponseProperty('Groups');\n        if (groups != null) {\n            this.groups = groups.map((g: any) => new SelectionReadOnlyResponse(g));\n        }\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { GlobalDomainResponse } from './globalDomainResponse';\n\nexport class DomainsResponse extends BaseResponse {\n    equivalentDomains: string[][];\n    globalEquivalentDomains: GlobalDomainResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n        this.equivalentDomains = this.getResponseProperty('EquivalentDomains');\n        const globalEquivalentDomains = this.getResponseProperty('GlobalEquivalentDomains');\n        if (globalEquivalentDomains != null) {\n            this.globalEquivalentDomains = globalEquivalentDomains.map((d: any) => new GlobalDomainResponse(d));\n        } else {\n            this.globalEquivalentDomains = [];\n        }\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class FolderResponse extends BaseResponse {\n    id: string;\n    name: string;\n    revisionDate: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.name = this.getResponseProperty('Name');\n        this.revisionDate = this.getResponseProperty('RevisionDate');\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { PlanResponse } from './planResponse';\n\nimport { PlanType } from '../../enums/planType';\n\nexport class OrganizationResponse extends BaseResponse {\n    id: string;\n    identifier: string;\n    name: string;\n    businessName: string;\n    businessAddress1: string;\n    businessAddress2: string;\n    businessAddress3: string;\n    businessCountry: string;\n    businessTaxNumber: string;\n    billingEmail: string;\n    plan: PlanResponse;\n    planType: PlanType;\n    seats: number;\n    maxAutoscaleSeats: number;\n    maxCollections: number;\n    maxStorageGb: number;\n    useGroups: boolean;\n    useDirectory: boolean;\n    useEvents: boolean;\n    useTotp: boolean;\n    use2fa: boolean;\n    useApi: boolean;\n    useResetPassword: boolean;\n    hasPublicAndPrivateKeys: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.identifier = this.getResponseProperty('Identifier');\n        this.name = this.getResponseProperty('Name');\n        this.businessName = this.getResponseProperty('BusinessName');\n        this.businessAddress1 = this.getResponseProperty('BusinessAddress1');\n        this.businessAddress2 = this.getResponseProperty('BusinessAddress2');\n        this.businessAddress3 = this.getResponseProperty('BusinessAddress3');\n        this.businessCountry = this.getResponseProperty('BusinessCountry');\n        this.businessTaxNumber = this.getResponseProperty('BusinessTaxNumber');\n        this.billingEmail = this.getResponseProperty('BillingEmail');\n        const plan = this.getResponseProperty('Plan');\n        this.plan = plan == null ? null : new PlanResponse(plan);\n        this.planType = this.getResponseProperty('PlanType');\n        this.seats = this.getResponseProperty('Seats');\n        this.maxAutoscaleSeats = this.getResponseProperty('MaxAutoscaleSeats');\n        this.maxCollections = this.getResponseProperty('MaxCollections');\n        this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n        this.useGroups = this.getResponseProperty('UseGroups');\n        this.useDirectory = this.getResponseProperty('UseDirectory');\n        this.useEvents = this.getResponseProperty('UseEvents');\n        this.useTotp = this.getResponseProperty('UseTotp');\n        this.use2fa = this.getResponseProperty('Use2fa');\n        this.useApi = this.getResponseProperty('UseApi');\n        this.useResetPassword = this.getResponseProperty('UseResetPassword');\n        this.hasPublicAndPrivateKeys = this.getResponseProperty('HasPublicAndPrivateKeys');\n    }\n}\n","import { PlanType } from '../../enums/planType';\nimport { ProductType } from '../../enums/productType';\n\nimport { BaseResponse } from './baseResponse';\n\nexport class PlanResponse extends BaseResponse {\n    type: PlanType;\n    product: ProductType;\n    name: string;\n    isAnnual: boolean;\n    nameLocalizationKey: string;\n    descriptionLocalizationKey: string;\n    canBeUsedByBusiness: boolean;\n    baseSeats: number;\n    baseStorageGb: number;\n    maxCollections: number;\n    maxUsers: number;\n\n    hasAdditionalSeatsOption: boolean;\n    maxAdditionalSeats: number;\n    hasAdditionalStorageOption: boolean;\n    maxAdditionalStorage: number;\n    hasPremiumAccessOption: boolean;\n    trialPeriodDays: number;\n\n    hasSelfHost: boolean;\n    hasPolicies: boolean;\n    hasGroups: boolean;\n    hasDirectory: boolean;\n    hasEvents: boolean;\n    hasTotp: boolean;\n    has2fa: boolean;\n    hasApi: boolean;\n    hasSso: boolean;\n    hasResetPassword: boolean;\n    usersGetPremium: boolean;\n\n    upgradeSortOrder: number;\n    displaySortOrder: number;\n    legacyYear: number;\n    disabled: boolean;\n\n    stripePlanId: string;\n    stripeSeatPlanId: string;\n    stripeStoragePlanId: string;\n    stripePremiumAccessPlanId: string;\n    basePrice: number;\n    seatPrice: number;\n    additionalStoragePricePerGb: number;\n    premiumAccessOptionPrice: number;\n\n    constructor(response: any) {\n        super(response);\n        this.type = this.getResponseProperty('Type');\n        this.product = this.getResponseProperty('Product');\n        this.name = this.getResponseProperty('Name');\n        this.isAnnual = this.getResponseProperty('IsAnnual');\n        this.nameLocalizationKey = this.getResponseProperty('NameLocalizationKey');\n        this.descriptionLocalizationKey = this.getResponseProperty('DescriptionLocalizationKey');\n        this.canBeUsedByBusiness = this.getResponseProperty('CanBeUsedByBusiness');\n        this.baseSeats = this.getResponseProperty('BaseSeats');\n        this.baseStorageGb = this.getResponseProperty('BaseStorageGb');\n        this.maxCollections = this.getResponseProperty('MaxCollections');\n        this.maxUsers = this.getResponseProperty('MaxUsers');\n        this.hasAdditionalSeatsOption = this.getResponseProperty('HasAdditionalSeatsOption');\n        this.maxAdditionalSeats = this.getResponseProperty('MaxAdditionalSeats');\n        this.hasAdditionalStorageOption = this.getResponseProperty('HasAdditionalStorageOption');\n        this.maxAdditionalStorage = this.getResponseProperty('MaxAdditionalStorage');\n        this.hasPremiumAccessOption = this.getResponseProperty('HasPremiumAccessOption');\n        this.trialPeriodDays = this.getResponseProperty('TrialPeriodDays');\n        this.hasSelfHost = this.getResponseProperty('HasSelfHost');\n        this.hasPolicies = this.getResponseProperty('HasPolicies');\n        this.hasGroups = this.getResponseProperty('HasGroups');\n        this.hasDirectory = this.getResponseProperty('HasDirectory');\n        this.hasEvents = this.getResponseProperty('HasEvents');\n        this.hasTotp = this.getResponseProperty('HasTotp');\n        this.has2fa = this.getResponseProperty('Has2fa');\n        this.hasApi = this.getResponseProperty('HasApi');\n        this.hasSso = this.getResponseProperty('HasSso');\n        this.hasResetPassword = this.getResponseProperty('HasResetPassword');\n        this.usersGetPremium = this.getResponseProperty('UsersGetPremium');\n        this.upgradeSortOrder = this.getResponseProperty('UpgradeSortOrder');\n        this.displaySortOrder = this.getResponseProperty('SortOrder');\n        this.legacyYear = this.getResponseProperty('LegacyYear');\n        this.disabled = this.getResponseProperty('Disabled');\n        this.stripePlanId = this.getResponseProperty('StripePlanId');\n        this.stripeSeatPlanId = this.getResponseProperty('StripeSeatPlanId');\n        this.stripeStoragePlanId = this.getResponseProperty('StripeStoragePlanId');\n        this.stripePremiumAccessPlanId = this.getResponseProperty('StripePremiumAccessPlanId');\n        this.basePrice = this.getResponseProperty('BasePrice');\n        this.seatPrice = this.getResponseProperty('SeatPrice');\n        this.additionalStoragePricePerGb = this.getResponseProperty('AdditionalStoragePricePerGb');\n        this.premiumAccessOptionPrice = this.getResponseProperty('PremiumAccessOptionPrice');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SubscriptionResponse extends BaseResponse {\n    storageName: string;\n    storageGb: number;\n    maxStorageGb: number;\n    subscription: BillingSubscriptionResponse;\n    upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n    license: any;\n    expiration: string;\n    usingInAppPurchase: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.storageName = this.getResponseProperty('StorageName');\n        this.storageGb = this.getResponseProperty('StorageGb');\n        this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n        this.license = this.getResponseProperty('License');\n        this.expiration = this.getResponseProperty('Expiration');\n        this.usingInAppPurchase = this.getResponseProperty('UsingInAppPurchase');\n        const subscription = this.getResponseProperty('Subscription');\n        const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n        this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n        this.upcomingInvoice = upcomingInvoice == null ? null :\n            new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n    }\n}\n\nexport class BillingSubscriptionResponse extends BaseResponse {\n    trialStartDate: string;\n    trialEndDate: string;\n    periodStartDate: string;\n    periodEndDate: string;\n    cancelledDate: string;\n    cancelAtEndDate: boolean;\n    status: string;\n    cancelled: boolean;\n    items: BillingSubscriptionItemResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n        this.trialEndDate = this.getResponseProperty('TrialStartDate');\n        this.trialEndDate = this.getResponseProperty('TrialEndDate');\n        this.periodStartDate = this.getResponseProperty('PeriodStartDate');\n        this.periodEndDate = this.getResponseProperty('PeriodEndDate');\n        this.cancelledDate = this.getResponseProperty('CancelledDate');\n        this.cancelAtEndDate = this.getResponseProperty('CancelAtEndDate');\n        this.status = this.getResponseProperty('Status');\n        this.cancelled = this.getResponseProperty('Cancelled');\n        const items = this.getResponseProperty('Items');\n        if (items != null) {\n            this.items = items.map((i: any) => new BillingSubscriptionItemResponse(i));\n        }\n    }\n}\n\nexport class BillingSubscriptionItemResponse extends BaseResponse {\n    name: string;\n    amount: number;\n    quantity: number;\n    interval: string;\n    sponsoredSubscriptionItem: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.name = this.getResponseProperty('Name');\n        this.amount = this.getResponseProperty('Amount');\n        this.quantity = this.getResponseProperty('Quantity');\n        this.interval = this.getResponseProperty('Interval');\n        this.sponsoredSubscriptionItem = this.getResponseProperty('SponsoredSubscriptionItem');\n    }\n}\n\nexport class BillingSubscriptionUpcomingInvoiceResponse extends BaseResponse {\n    date: string;\n    amount: number;\n\n    constructor(response: any) {\n        super(response);\n        this.date = this.getResponseProperty('Date');\n        this.amount = this.getResponseProperty('Amount');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class OrganizationUserBulkPublicKeyResponse extends BaseResponse {\n    id: string;\n    userId: string;\n    key: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.userId = this.getResponseProperty('UserId');\n        this.key = this.getResponseProperty('Key');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { ProductType } from '../../enums/productType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class ProfileOrganizationResponse extends BaseResponse {\n    id: string;\n    name: string;\n    usePolicies: boolean;\n    useGroups: boolean;\n    useDirectory: boolean;\n    useEvents: boolean;\n    useTotp: boolean;\n    use2fa: boolean;\n    useApi: boolean;\n    useSso: boolean;\n    useKeyConnector: boolean;\n    useResetPassword: boolean;\n    selfHost: boolean;\n    usersGetPremium: boolean;\n    seats: number;\n    maxCollections: number;\n    maxStorageGb?: number;\n    key: string;\n    hasPublicAndPrivateKeys: boolean;\n    status: OrganizationUserStatusType;\n    type: OrganizationUserType;\n    enabled: boolean;\n    ssoBound: boolean;\n    identifier: string;\n    permissions: PermissionsApi;\n    resetPasswordEnrolled: boolean;\n    userId: string;\n    providerId: string;\n    providerName: string;\n    familySponsorshipFriendlyName: string;\n    familySponsorshipAvailable: boolean;\n    planProductType: ProductType;\n    keyConnectorEnabled: boolean;\n    keyConnectorUrl: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.name = this.getResponseProperty('Name');\n        this.usePolicies = this.getResponseProperty('UsePolicies');\n        this.useGroups = this.getResponseProperty('UseGroups');\n        this.useDirectory = this.getResponseProperty('UseDirectory');\n        this.useEvents = this.getResponseProperty('UseEvents');\n        this.useTotp = this.getResponseProperty('UseTotp');\n        this.use2fa = this.getResponseProperty('Use2fa');\n        this.useApi = this.getResponseProperty('UseApi');\n        this.useSso = this.getResponseProperty('UseSso');\n        this.useKeyConnector = this.getResponseProperty('UseKeyConnector') ?? false;\n        this.useResetPassword = this.getResponseProperty('UseResetPassword');\n        this.selfHost = this.getResponseProperty('SelfHost');\n        this.usersGetPremium = this.getResponseProperty('UsersGetPremium');\n        this.seats = this.getResponseProperty('Seats');\n        this.maxCollections = this.getResponseProperty('MaxCollections');\n        this.maxStorageGb = this.getResponseProperty('MaxStorageGb');\n        this.key = this.getResponseProperty('Key');\n        this.hasPublicAndPrivateKeys = this.getResponseProperty('HasPublicAndPrivateKeys');\n        this.status = this.getResponseProperty('Status');\n        this.type = this.getResponseProperty('Type');\n        this.enabled = this.getResponseProperty('Enabled');\n        this.ssoBound = this.getResponseProperty('SsoBound');\n        this.identifier = this.getResponseProperty('Identifier');\n        this.permissions = new PermissionsApi(this.getResponseProperty('permissions'));\n        this.resetPasswordEnrolled = this.getResponseProperty('ResetPasswordEnrolled');\n        this.userId = this.getResponseProperty('UserId');\n        this.providerId = this.getResponseProperty('ProviderId');\n        this.providerName = this.getResponseProperty('ProviderName');\n        this.familySponsorshipFriendlyName = this.getResponseProperty('FamilySponsorshipFriendlyName');\n        this.familySponsorshipAvailable = this.getResponseProperty('FamilySponsorshipAvailable');\n        this.planProductType = this.getResponseProperty('PlanProductType');\n        this.keyConnectorEnabled = this.getResponseProperty('KeyConnectorEnabled') ?? false;\n        this.keyConnectorUrl = this.getResponseProperty('KeyConnectorUrl');\n    }\n}\n","import { Utils } from '../../misc/utils';\nimport { BaseResponse } from './baseResponse';\n\nexport class TwoFactorWebAuthnResponse extends BaseResponse {\n    enabled: boolean;\n    keys: KeyResponse[];\n\n    constructor(response: any) {\n        super(response);\n        this.enabled = this.getResponseProperty('Enabled');\n        const keys = this.getResponseProperty('Keys');\n        this.keys = keys == null ? null : keys.map((k: any) => new KeyResponse(k));\n    }\n}\n\nexport class KeyResponse extends BaseResponse {\n    name: string;\n    id: number;\n    migrated: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.name = this.getResponseProperty('Name');\n        this.id = this.getResponseProperty('Id');\n        this.migrated = this.getResponseProperty('Migrated');\n    }\n}\n\nexport class ChallengeResponse extends BaseResponse implements PublicKeyCredentialCreationOptions {\n    attestation?: AttestationConveyancePreference;\n    authenticatorSelection?: AuthenticatorSelectionCriteria;\n    challenge: BufferSource;\n    excludeCredentials?: PublicKeyCredentialDescriptor[];\n    extensions?: AuthenticationExtensionsClientInputs;\n    pubKeyCredParams: PublicKeyCredentialParameters[];\n    rp: PublicKeyCredentialRpEntity;\n    timeout?: number;\n    user: PublicKeyCredentialUserEntity;\n\n    constructor(response: any) {\n        super(response);\n        this.attestation = this.getResponseProperty('attestation');\n        this.authenticatorSelection = this.getResponseProperty('authenticatorSelection');\n        this.challenge = Utils.fromUrlB64ToArray(this.getResponseProperty('challenge'));\n        this.excludeCredentials = this.getResponseProperty('excludeCredentials').map((c: any) => {\n            c.id = Utils.fromUrlB64ToArray(c.id).buffer;\n            return c;\n        });\n        this.extensions = this.getResponseProperty('extensions');\n        this.pubKeyCredParams = this.getResponseProperty('pubKeyCredParams');\n        this.rp = this.getResponseProperty('rp');\n        this.timeout = this.getResponseProperty('timeout');\n\n        const user = this.getResponseProperty('user');\n        user.id = Utils.fromUrlB64ToArray(user.id);\n\n        this.user = user;\n    }\n}\n","/**\n * Use as a Decorator on async functions, it will prevent multiple 'active' calls as the same time\n *\n * If a promise was returned from a previous call to this function, that hasn't yet resolved it will\n * be returned, instead of calling the original function again\n *\n * Results are not cached, once the promise has returned, the next call will result in a fresh call\n *\n * Read more at https://github.com/bitwarden/jslib/pull/7\n */\nexport function sequentialize(cacheKey: (args: any[]) => string) {\n    return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\n        const originalMethod: () => Promise<any> = descriptor.value;\n        const caches = new Map<any, Map<string, Promise<any>>>();\n\n        const getCache = (obj: any) => {\n            let cache = caches.get(obj);\n            if (cache != null) {\n                return cache;\n            }\n            cache = new Map<string, Promise<any>>();\n            caches.set(obj, cache);\n            return cache;\n        };\n\n        return {\n            value: function(...args: any[]) {\n                const cache = getCache(this);\n                const argsCacheKey = cacheKey(args);\n                let response = cache.get(argsCacheKey);\n                if (response != null) {\n                    return response;\n                }\n\n                const onFinally = () => {\n                    cache.delete(argsCacheKey);\n                    if (cache.size === 0) {\n                        caches.delete(this);\n                    }\n                };\n                response = originalMethod.apply(this, args).then((val: any) => {\n                    onFinally();\n                    return val;\n                }).catch((err: any) => {\n                    onFinally();\n                    throw err;\n                });\n\n                cache.set(argsCacheKey, response);\n                return response;\n            },\n        };\n    };\n}\n","import {\n    ITreeNodeObject,\n    TreeNode,\n} from '../models/domain/treeNode';\n\nexport class ServiceUtils {\n    static nestedTraverse(nodeTree: TreeNode<ITreeNodeObject>[], partIndex: number, parts: string[],\n        obj: ITreeNodeObject, parent: ITreeNodeObject, delimiter: string) {\n        if (parts.length <= partIndex) {\n            return;\n        }\n\n        const end = partIndex === parts.length - 1;\n        const partName = parts[partIndex];\n\n        for (let i = 0; i < nodeTree.length; i++) {\n            if (nodeTree[i].node.name !== parts[partIndex]) {\n                continue;\n            }\n            if (end && nodeTree[i].node.id !== obj.id) {\n                // Another node with the same name.\n                nodeTree.push(new TreeNode(obj, partName, parent));\n                return;\n            }\n            ServiceUtils.nestedTraverse(nodeTree[i].children, partIndex + 1, parts,\n                obj, nodeTree[i].node, delimiter);\n            return;\n        }\n\n        if (nodeTree.filter(n => n.node.name === partName).length === 0) {\n            if (end) {\n                nodeTree.push(new TreeNode(obj, partName, parent));\n                return;\n            }\n            const newPartName = parts[partIndex] + delimiter + parts[partIndex + 1];\n            ServiceUtils.nestedTraverse(nodeTree, 0, [newPartName, ...parts.slice(partIndex + 2)],\n                obj, parent, delimiter);\n        }\n    }\n\n    static getTreeNodeObject(nodeTree: TreeNode<ITreeNodeObject>[], id: string): TreeNode<ITreeNodeObject> {\n        for (let i = 0; i < nodeTree.length; i++) {\n            if (nodeTree[i].node.id === id) {\n                return nodeTree[i];\n            } else if (nodeTree[i].children != null) {\n                const node = ServiceUtils.getTreeNodeObject(nodeTree[i].children, id);\n                if (node !== null) {\n                    return node;\n                }\n            }\n        }\n        return null;\n    }\n}\n","import { LogLevelType } from '../enums/logLevelType';\n\nimport { LogService as LogServiceAbstraction } from '../abstractions/log.service';\n\nimport * as hrtime from 'browser-hrtime';\n\nexport class ConsoleLogService implements LogServiceAbstraction {\n    protected timersMap: Map<string, [number, number]> = new Map();\n\n    constructor(protected isDev: boolean, protected filter: (level: LogLevelType) => boolean = null) { }\n\n    debug(message: string) {\n        if (!this.isDev) {\n            return;\n        }\n        this.write(LogLevelType.Debug, message);\n    }\n\n    info(message: string) {\n        this.write(LogLevelType.Info, message);\n    }\n\n    warning(message: string) {\n        this.write(LogLevelType.Warning, message);\n    }\n\n    error(message: string) {\n        this.write(LogLevelType.Error, message);\n    }\n\n    write(level: LogLevelType, message: string) {\n        if (this.filter != null && this.filter(level)) {\n            return;\n        }\n\n        switch (level) {\n            case LogLevelType.Debug:\n                // tslint:disable-next-line\n                console.log(message);\n                break;\n            case LogLevelType.Info:\n                // tslint:disable-next-line\n                console.log(message);\n                break;\n            case LogLevelType.Warning:\n                // tslint:disable-next-line\n                console.warn(message);\n                break;\n            case LogLevelType.Error:\n                // tslint:disable-next-line\n                console.error(message);\n                break;\n            default:\n                break;\n        }\n    }\n\n    time(label: string = 'default') {\n        if (!this.timersMap.has(label)) {\n            this.timersMap.set(label, hrtime());\n        }\n    }\n\n    timeEnd(label: string = 'default'): [number, number] {\n        const elapsed = hrtime(this.timersMap.get(label));\n        this.timersMap.delete(label);\n        this.write(LogLevelType.Info, `${label}: ${elapsed[0] * 1000 + elapsed[1] / 10e6}ms`);\n        return elapsed;\n    }\n}\n","// EFF's Long Wordlist from https://www.eff.org/dice\nexport const EEFLongWordList = [\n    'abacus',\n    'abdomen',\n    'abdominal',\n    'abide',\n    'abiding',\n    'ability',\n    'ablaze',\n    'able',\n    'abnormal',\n    'abrasion',\n    'abrasive',\n    'abreast',\n    'abridge',\n    'abroad',\n    'abruptly',\n    'absence',\n    'absentee',\n    'absently',\n    'absinthe',\n    'absolute',\n    'absolve',\n    'abstain',\n    'abstract',\n    'absurd',\n    'accent',\n    'acclaim',\n    'acclimate',\n    'accompany',\n    'account',\n    'accuracy',\n    'accurate',\n    'accustom',\n    'acetone',\n    'achiness',\n    'aching',\n    'acid',\n    'acorn',\n    'acquaint',\n    'acquire',\n    'acre',\n    'acrobat',\n    'acronym',\n    'acting',\n    'action',\n    'activate',\n    'activator',\n    'active',\n    'activism',\n    'activist',\n    'activity',\n    'actress',\n    'acts',\n    'acutely',\n    'acuteness',\n    'aeration',\n    'aerobics',\n    'aerosol',\n    'aerospace',\n    'afar',\n    'affair',\n    'affected',\n    'affecting',\n    'affection',\n    'affidavit',\n    'affiliate',\n    'affirm',\n    'affix',\n    'afflicted',\n    'affluent',\n    'afford',\n    'affront',\n    'aflame',\n    'afloat',\n    'aflutter',\n    'afoot',\n    'afraid',\n    'afterglow',\n    'afterlife',\n    'aftermath',\n    'aftermost',\n    'afternoon',\n    'aged',\n    'ageless',\n    'agency',\n    'agenda',\n    'agent',\n    'aggregate',\n    'aghast',\n    'agile',\n    'agility',\n    'aging',\n    'agnostic',\n    'agonize',\n    'agonizing',\n    'agony',\n    'agreeable',\n    'agreeably',\n    'agreed',\n    'agreeing',\n    'agreement',\n    'aground',\n    'ahead',\n    'ahoy',\n    'aide',\n    'aids',\n    'aim',\n    'ajar',\n    'alabaster',\n    'alarm',\n    'albatross',\n    'album',\n    'alfalfa',\n    'algebra',\n    'algorithm',\n    'alias',\n    'alibi',\n    'alienable',\n    'alienate',\n    'aliens',\n    'alike',\n    'alive',\n    'alkaline',\n    'alkalize',\n    'almanac',\n    'almighty',\n    'almost',\n    'aloe',\n    'aloft',\n    'aloha',\n    'alone',\n    'alongside',\n    'aloof',\n    'alphabet',\n    'alright',\n    'although',\n    'altitude',\n    'alto',\n    'aluminum',\n    'alumni',\n    'always',\n    'amaretto',\n    'amaze',\n    'amazingly',\n    'amber',\n    'ambiance',\n    'ambiguity',\n    'ambiguous',\n    'ambition',\n    'ambitious',\n    'ambulance',\n    'ambush',\n    'amendable',\n    'amendment',\n    'amends',\n    'amenity',\n    'amiable',\n    'amicably',\n    'amid',\n    'amigo',\n    'amino',\n    'amiss',\n    'ammonia',\n    'ammonium',\n    'amnesty',\n    'amniotic',\n    'among',\n    'amount',\n    'amperage',\n    'ample',\n    'amplifier',\n    'amplify',\n    'amply',\n    'amuck',\n    'amulet',\n    'amusable',\n    'amused',\n    'amusement',\n    'amuser',\n    'amusing',\n    'anaconda',\n    'anaerobic',\n    'anagram',\n    'anatomist',\n    'anatomy',\n    'anchor',\n    'anchovy',\n    'ancient',\n    'android',\n    'anemia',\n    'anemic',\n    'aneurism',\n    'anew',\n    'angelfish',\n    'angelic',\n    'anger',\n    'angled',\n    'angler',\n    'angles',\n    'angling',\n    'angrily',\n    'angriness',\n    'anguished',\n    'angular',\n    'animal',\n    'animate',\n    'animating',\n    'animation',\n    'animator',\n    'anime',\n    'animosity',\n    'ankle',\n    'annex',\n    'annotate',\n    'announcer',\n    'annoying',\n    'annually',\n    'annuity',\n    'anointer',\n    'another',\n    'answering',\n    'antacid',\n    'antarctic',\n    'anteater',\n    'antelope',\n    'antennae',\n    'anthem',\n    'anthill',\n    'anthology',\n    'antibody',\n    'antics',\n    'antidote',\n    'antihero',\n    'antiquely',\n    'antiques',\n    'antiquity',\n    'antirust',\n    'antitoxic',\n    'antitrust',\n    'antiviral',\n    'antivirus',\n    'antler',\n    'antonym',\n    'antsy',\n    'anvil',\n    'anybody',\n    'anyhow',\n    'anymore',\n    'anyone',\n    'anyplace',\n    'anything',\n    'anytime',\n    'anyway',\n    'anywhere',\n    'aorta',\n    'apache',\n    'apostle',\n    'appealing',\n    'appear',\n    'appease',\n    'appeasing',\n    'appendage',\n    'appendix',\n    'appetite',\n    'appetizer',\n    'applaud',\n    'applause',\n    'apple',\n    'appliance',\n    'applicant',\n    'applied',\n    'apply',\n    'appointee',\n    'appraisal',\n    'appraiser',\n    'apprehend',\n    'approach',\n    'approval',\n    'approve',\n    'apricot',\n    'april',\n    'apron',\n    'aptitude',\n    'aptly',\n    'aqua',\n    'aqueduct',\n    'arbitrary',\n    'arbitrate',\n    'ardently',\n    'area',\n    'arena',\n    'arguable',\n    'arguably',\n    'argue',\n    'arise',\n    'armadillo',\n    'armband',\n    'armchair',\n    'armed',\n    'armful',\n    'armhole',\n    'arming',\n    'armless',\n    'armoire',\n    'armored',\n    'armory',\n    'armrest',\n    'army',\n    'aroma',\n    'arose',\n    'around',\n    'arousal',\n    'arrange',\n    'array',\n    'arrest',\n    'arrival',\n    'arrive',\n    'arrogance',\n    'arrogant',\n    'arson',\n    'art',\n    'ascend',\n    'ascension',\n    'ascent',\n    'ascertain',\n    'ashamed',\n    'ashen',\n    'ashes',\n    'ashy',\n    'aside',\n    'askew',\n    'asleep',\n    'asparagus',\n    'aspect',\n    'aspirate',\n    'aspire',\n    'aspirin',\n    'astonish',\n    'astound',\n    'astride',\n    'astrology',\n    'astronaut',\n    'astronomy',\n    'astute',\n    'atlantic',\n    'atlas',\n    'atom',\n    'atonable',\n    'atop',\n    'atrium',\n    'atrocious',\n    'atrophy',\n    'attach',\n    'attain',\n    'attempt',\n    'attendant',\n    'attendee',\n    'attention',\n    'attentive',\n    'attest',\n    'attic',\n    'attire',\n    'attitude',\n    'attractor',\n    'attribute',\n    'atypical',\n    'auction',\n    'audacious',\n    'audacity',\n    'audible',\n    'audibly',\n    'audience',\n    'audio',\n    'audition',\n    'augmented',\n    'august',\n    'authentic',\n    'author',\n    'autism',\n    'autistic',\n    'autograph',\n    'automaker',\n    'automated',\n    'automatic',\n    'autopilot',\n    'available',\n    'avalanche',\n    'avatar',\n    'avenge',\n    'avenging',\n    'avenue',\n    'average',\n    'aversion',\n    'avert',\n    'aviation',\n    'aviator',\n    'avid',\n    'avoid',\n    'await',\n    'awaken',\n    'award',\n    'aware',\n    'awhile',\n    'awkward',\n    'awning',\n    'awoke',\n    'awry',\n    'axis',\n    'babble',\n    'babbling',\n    'babied',\n    'baboon',\n    'backache',\n    'backboard',\n    'backboned',\n    'backdrop',\n    'backed',\n    'backer',\n    'backfield',\n    'backfire',\n    'backhand',\n    'backing',\n    'backlands',\n    'backlash',\n    'backless',\n    'backlight',\n    'backlit',\n    'backlog',\n    'backpack',\n    'backpedal',\n    'backrest',\n    'backroom',\n    'backshift',\n    'backside',\n    'backslid',\n    'backspace',\n    'backspin',\n    'backstab',\n    'backstage',\n    'backtalk',\n    'backtrack',\n    'backup',\n    'backward',\n    'backwash',\n    'backwater',\n    'backyard',\n    'bacon',\n    'bacteria',\n    'bacterium',\n    'badass',\n    'badge',\n    'badland',\n    'badly',\n    'badness',\n    'baffle',\n    'baffling',\n    'bagel',\n    'bagful',\n    'baggage',\n    'bagged',\n    'baggie',\n    'bagginess',\n    'bagging',\n    'baggy',\n    'bagpipe',\n    'baguette',\n    'baked',\n    'bakery',\n    'bakeshop',\n    'baking',\n    'balance',\n    'balancing',\n    'balcony',\n    'balmy',\n    'balsamic',\n    'bamboo',\n    'banana',\n    'banish',\n    'banister',\n    'banjo',\n    'bankable',\n    'bankbook',\n    'banked',\n    'banker',\n    'banking',\n    'banknote',\n    'bankroll',\n    'banner',\n    'bannister',\n    'banshee',\n    'banter',\n    'barbecue',\n    'barbed',\n    'barbell',\n    'barber',\n    'barcode',\n    'barge',\n    'bargraph',\n    'barista',\n    'baritone',\n    'barley',\n    'barmaid',\n    'barman',\n    'barn',\n    'barometer',\n    'barrack',\n    'barracuda',\n    'barrel',\n    'barrette',\n    'barricade',\n    'barrier',\n    'barstool',\n    'bartender',\n    'barterer',\n    'bash',\n    'basically',\n    'basics',\n    'basil',\n    'basin',\n    'basis',\n    'basket',\n    'batboy',\n    'batch',\n    'bath',\n    'baton',\n    'bats',\n    'battalion',\n    'battered',\n    'battering',\n    'battery',\n    'batting',\n    'battle',\n    'bauble',\n    'bazooka',\n    'blabber',\n    'bladder',\n    'blade',\n    'blah',\n    'blame',\n    'blaming',\n    'blanching',\n    'blandness',\n    'blank',\n    'blaspheme',\n    'blasphemy',\n    'blast',\n    'blatancy',\n    'blatantly',\n    'blazer',\n    'blazing',\n    'bleach',\n    'bleak',\n    'bleep',\n    'blemish',\n    'blend',\n    'bless',\n    'blighted',\n    'blimp',\n    'bling',\n    'blinked',\n    'blinker',\n    'blinking',\n    'blinks',\n    'blip',\n    'blissful',\n    'blitz',\n    'blizzard',\n    'bloated',\n    'bloating',\n    'blob',\n    'blog',\n    'bloomers',\n    'blooming',\n    'blooper',\n    'blot',\n    'blouse',\n    'blubber',\n    'bluff',\n    'bluish',\n    'blunderer',\n    'blunt',\n    'blurb',\n    'blurred',\n    'blurry',\n    'blurt',\n    'blush',\n    'blustery',\n    'boaster',\n    'boastful',\n    'boasting',\n    'boat',\n    'bobbed',\n    'bobbing',\n    'bobble',\n    'bobcat',\n    'bobsled',\n    'bobtail',\n    'bodacious',\n    'body',\n    'bogged',\n    'boggle',\n    'bogus',\n    'boil',\n    'bok',\n    'bolster',\n    'bolt',\n    'bonanza',\n    'bonded',\n    'bonding',\n    'bondless',\n    'boned',\n    'bonehead',\n    'boneless',\n    'bonelike',\n    'boney',\n    'bonfire',\n    'bonnet',\n    'bonsai',\n    'bonus',\n    'bony',\n    'boogeyman',\n    'boogieman',\n    'book',\n    'boondocks',\n    'booted',\n    'booth',\n    'bootie',\n    'booting',\n    'bootlace',\n    'bootleg',\n    'boots',\n    'boozy',\n    'borax',\n    'boring',\n    'borough',\n    'borrower',\n    'borrowing',\n    'boss',\n    'botanical',\n    'botanist',\n    'botany',\n    'botch',\n    'both',\n    'bottle',\n    'bottling',\n    'bottom',\n    'bounce',\n    'bouncing',\n    'bouncy',\n    'bounding',\n    'boundless',\n    'bountiful',\n    'bovine',\n    'boxcar',\n    'boxer',\n    'boxing',\n    'boxlike',\n    'boxy',\n    'breach',\n    'breath',\n    'breeches',\n    'breeching',\n    'breeder',\n    'breeding',\n    'breeze',\n    'breezy',\n    'brethren',\n    'brewery',\n    'brewing',\n    'briar',\n    'bribe',\n    'brick',\n    'bride',\n    'bridged',\n    'brigade',\n    'bright',\n    'brilliant',\n    'brim',\n    'bring',\n    'brink',\n    'brisket',\n    'briskly',\n    'briskness',\n    'bristle',\n    'brittle',\n    'broadband',\n    'broadcast',\n    'broaden',\n    'broadly',\n    'broadness',\n    'broadside',\n    'broadways',\n    'broiler',\n    'broiling',\n    'broken',\n    'broker',\n    'bronchial',\n    'bronco',\n    'bronze',\n    'bronzing',\n    'brook',\n    'broom',\n    'brought',\n    'browbeat',\n    'brownnose',\n    'browse',\n    'browsing',\n    'bruising',\n    'brunch',\n    'brunette',\n    'brunt',\n    'brush',\n    'brussels',\n    'brute',\n    'brutishly',\n    'bubble',\n    'bubbling',\n    'bubbly',\n    'buccaneer',\n    'bucked',\n    'bucket',\n    'buckle',\n    'buckshot',\n    'buckskin',\n    'bucktooth',\n    'buckwheat',\n    'buddhism',\n    'buddhist',\n    'budding',\n    'buddy',\n    'budget',\n    'buffalo',\n    'buffed',\n    'buffer',\n    'buffing',\n    'buffoon',\n    'buggy',\n    'bulb',\n    'bulge',\n    'bulginess',\n    'bulgur',\n    'bulk',\n    'bulldog',\n    'bulldozer',\n    'bullfight',\n    'bullfrog',\n    'bullhorn',\n    'bullion',\n    'bullish',\n    'bullpen',\n    'bullring',\n    'bullseye',\n    'bullwhip',\n    'bully',\n    'bunch',\n    'bundle',\n    'bungee',\n    'bunion',\n    'bunkbed',\n    'bunkhouse',\n    'bunkmate',\n    'bunny',\n    'bunt',\n    'busboy',\n    'bush',\n    'busily',\n    'busload',\n    'bust',\n    'busybody',\n    'buzz',\n    'cabana',\n    'cabbage',\n    'cabbie',\n    'cabdriver',\n    'cable',\n    'caboose',\n    'cache',\n    'cackle',\n    'cacti',\n    'cactus',\n    'caddie',\n    'caddy',\n    'cadet',\n    'cadillac',\n    'cadmium',\n    'cage',\n    'cahoots',\n    'cake',\n    'calamari',\n    'calamity',\n    'calcium',\n    'calculate',\n    'calculus',\n    'caliber',\n    'calibrate',\n    'calm',\n    'caloric',\n    'calorie',\n    'calzone',\n    'camcorder',\n    'cameo',\n    'camera',\n    'camisole',\n    'camper',\n    'campfire',\n    'camping',\n    'campsite',\n    'campus',\n    'canal',\n    'canary',\n    'cancel',\n    'candied',\n    'candle',\n    'candy',\n    'cane',\n    'canine',\n    'canister',\n    'cannabis',\n    'canned',\n    'canning',\n    'cannon',\n    'cannot',\n    'canola',\n    'canon',\n    'canopener',\n    'canopy',\n    'canteen',\n    'canyon',\n    'capable',\n    'capably',\n    'capacity',\n    'cape',\n    'capillary',\n    'capital',\n    'capitol',\n    'capped',\n    'capricorn',\n    'capsize',\n    'capsule',\n    'caption',\n    'captivate',\n    'captive',\n    'captivity',\n    'capture',\n    'caramel',\n    'carat',\n    'caravan',\n    'carbon',\n    'cardboard',\n    'carded',\n    'cardiac',\n    'cardigan',\n    'cardinal',\n    'cardstock',\n    'carefully',\n    'caregiver',\n    'careless',\n    'caress',\n    'caretaker',\n    'cargo',\n    'caring',\n    'carless',\n    'carload',\n    'carmaker',\n    'carnage',\n    'carnation',\n    'carnival',\n    'carnivore',\n    'carol',\n    'carpenter',\n    'carpentry',\n    'carpool',\n    'carport',\n    'carried',\n    'carrot',\n    'carrousel',\n    'carry',\n    'cartel',\n    'cartload',\n    'carton',\n    'cartoon',\n    'cartridge',\n    'cartwheel',\n    'carve',\n    'carving',\n    'carwash',\n    'cascade',\n    'case',\n    'cash',\n    'casing',\n    'casino',\n    'casket',\n    'cassette',\n    'casually',\n    'casualty',\n    'catacomb',\n    'catalog',\n    'catalyst',\n    'catalyze',\n    'catapult',\n    'cataract',\n    'catatonic',\n    'catcall',\n    'catchable',\n    'catcher',\n    'catching',\n    'catchy',\n    'caterer',\n    'catering',\n    'catfight',\n    'catfish',\n    'cathedral',\n    'cathouse',\n    'catlike',\n    'catnap',\n    'catnip',\n    'catsup',\n    'cattail',\n    'cattishly',\n    'cattle',\n    'catty',\n    'catwalk',\n    'caucasian',\n    'caucus',\n    'causal',\n    'causation',\n    'cause',\n    'causing',\n    'cauterize',\n    'caution',\n    'cautious',\n    'cavalier',\n    'cavalry',\n    'caviar',\n    'cavity',\n    'cedar',\n    'celery',\n    'celestial',\n    'celibacy',\n    'celibate',\n    'celtic',\n    'cement',\n    'census',\n    'ceramics',\n    'ceremony',\n    'certainly',\n    'certainty',\n    'certified',\n    'certify',\n    'cesarean',\n    'cesspool',\n    'chafe',\n    'chaffing',\n    'chain',\n    'chair',\n    'chalice',\n    'challenge',\n    'chamber',\n    'chamomile',\n    'champion',\n    'chance',\n    'change',\n    'channel',\n    'chant',\n    'chaos',\n    'chaperone',\n    'chaplain',\n    'chapped',\n    'chaps',\n    'chapter',\n    'character',\n    'charbroil',\n    'charcoal',\n    'charger',\n    'charging',\n    'chariot',\n    'charity',\n    'charm',\n    'charred',\n    'charter',\n    'charting',\n    'chase',\n    'chasing',\n    'chaste',\n    'chastise',\n    'chastity',\n    'chatroom',\n    'chatter',\n    'chatting',\n    'chatty',\n    'cheating',\n    'cheddar',\n    'cheek',\n    'cheer',\n    'cheese',\n    'cheesy',\n    'chef',\n    'chemicals',\n    'chemist',\n    'chemo',\n    'cherisher',\n    'cherub',\n    'chess',\n    'chest',\n    'chevron',\n    'chevy',\n    'chewable',\n    'chewer',\n    'chewing',\n    'chewy',\n    'chief',\n    'chihuahua',\n    'childcare',\n    'childhood',\n    'childish',\n    'childless',\n    'childlike',\n    'chili',\n    'chill',\n    'chimp',\n    'chip',\n    'chirping',\n    'chirpy',\n    'chitchat',\n    'chivalry',\n    'chive',\n    'chloride',\n    'chlorine',\n    'choice',\n    'chokehold',\n    'choking',\n    'chomp',\n    'chooser',\n    'choosing',\n    'choosy',\n    'chop',\n    'chosen',\n    'chowder',\n    'chowtime',\n    'chrome',\n    'chubby',\n    'chuck',\n    'chug',\n    'chummy',\n    'chump',\n    'chunk',\n    'churn',\n    'chute',\n    'cider',\n    'cilantro',\n    'cinch',\n    'cinema',\n    'cinnamon',\n    'circle',\n    'circling',\n    'circular',\n    'circulate',\n    'circus',\n    'citable',\n    'citadel',\n    'citation',\n    'citizen',\n    'citric',\n    'citrus',\n    'city',\n    'civic',\n    'civil',\n    'clad',\n    'claim',\n    'clambake',\n    'clammy',\n    'clamor',\n    'clamp',\n    'clamshell',\n    'clang',\n    'clanking',\n    'clapped',\n    'clapper',\n    'clapping',\n    'clarify',\n    'clarinet',\n    'clarity',\n    'clash',\n    'clasp',\n    'class',\n    'clatter',\n    'clause',\n    'clavicle',\n    'claw',\n    'clay',\n    'clean',\n    'clear',\n    'cleat',\n    'cleaver',\n    'cleft',\n    'clench',\n    'clergyman',\n    'clerical',\n    'clerk',\n    'clever',\n    'clicker',\n    'client',\n    'climate',\n    'climatic',\n    'cling',\n    'clinic',\n    'clinking',\n    'clip',\n    'clique',\n    'cloak',\n    'clobber',\n    'clock',\n    'clone',\n    'cloning',\n    'closable',\n    'closure',\n    'clothes',\n    'clothing',\n    'cloud',\n    'clover',\n    'clubbed',\n    'clubbing',\n    'clubhouse',\n    'clump',\n    'clumsily',\n    'clumsy',\n    'clunky',\n    'clustered',\n    'clutch',\n    'clutter',\n    'coach',\n    'coagulant',\n    'coastal',\n    'coaster',\n    'coasting',\n    'coastland',\n    'coastline',\n    'coat',\n    'coauthor',\n    'cobalt',\n    'cobbler',\n    'cobweb',\n    'cocoa',\n    'coconut',\n    'cod',\n    'coeditor',\n    'coerce',\n    'coexist',\n    'coffee',\n    'cofounder',\n    'cognition',\n    'cognitive',\n    'cogwheel',\n    'coherence',\n    'coherent',\n    'cohesive',\n    'coil',\n    'coke',\n    'cola',\n    'cold',\n    'coleslaw',\n    'coliseum',\n    'collage',\n    'collapse',\n    'collar',\n    'collected',\n    'collector',\n    'collide',\n    'collie',\n    'collision',\n    'colonial',\n    'colonist',\n    'colonize',\n    'colony',\n    'colossal',\n    'colt',\n    'coma',\n    'come',\n    'comfort',\n    'comfy',\n    'comic',\n    'coming',\n    'comma',\n    'commence',\n    'commend',\n    'comment',\n    'commerce',\n    'commode',\n    'commodity',\n    'commodore',\n    'common',\n    'commotion',\n    'commute',\n    'commuting',\n    'compacted',\n    'compacter',\n    'compactly',\n    'compactor',\n    'companion',\n    'company',\n    'compare',\n    'compel',\n    'compile',\n    'comply',\n    'component',\n    'composed',\n    'composer',\n    'composite',\n    'compost',\n    'composure',\n    'compound',\n    'compress',\n    'comprised',\n    'computer',\n    'computing',\n    'comrade',\n    'concave',\n    'conceal',\n    'conceded',\n    'concept',\n    'concerned',\n    'concert',\n    'conch',\n    'concierge',\n    'concise',\n    'conclude',\n    'concrete',\n    'concur',\n    'condense',\n    'condiment',\n    'condition',\n    'condone',\n    'conducive',\n    'conductor',\n    'conduit',\n    'cone',\n    'confess',\n    'confetti',\n    'confidant',\n    'confident',\n    'confider',\n    'confiding',\n    'configure',\n    'confined',\n    'confining',\n    'confirm',\n    'conflict',\n    'conform',\n    'confound',\n    'confront',\n    'confused',\n    'confusing',\n    'confusion',\n    'congenial',\n    'congested',\n    'congrats',\n    'congress',\n    'conical',\n    'conjoined',\n    'conjure',\n    'conjuror',\n    'connected',\n    'connector',\n    'consensus',\n    'consent',\n    'console',\n    'consoling',\n    'consonant',\n    'constable',\n    'constant',\n    'constrain',\n    'constrict',\n    'construct',\n    'consult',\n    'consumer',\n    'consuming',\n    'contact',\n    'container',\n    'contempt',\n    'contend',\n    'contented',\n    'contently',\n    'contents',\n    'contest',\n    'context',\n    'contort',\n    'contour',\n    'contrite',\n    'control',\n    'contusion',\n    'convene',\n    'convent',\n    'copartner',\n    'cope',\n    'copied',\n    'copier',\n    'copilot',\n    'coping',\n    'copious',\n    'copper',\n    'copy',\n    'coral',\n    'cork',\n    'cornball',\n    'cornbread',\n    'corncob',\n    'cornea',\n    'corned',\n    'corner',\n    'cornfield',\n    'cornflake',\n    'cornhusk',\n    'cornmeal',\n    'cornstalk',\n    'corny',\n    'coronary',\n    'coroner',\n    'corporal',\n    'corporate',\n    'corral',\n    'correct',\n    'corridor',\n    'corrode',\n    'corroding',\n    'corrosive',\n    'corsage',\n    'corset',\n    'cortex',\n    'cosigner',\n    'cosmetics',\n    'cosmic',\n    'cosmos',\n    'cosponsor',\n    'cost',\n    'cottage',\n    'cotton',\n    'couch',\n    'cough',\n    'could',\n    'countable',\n    'countdown',\n    'counting',\n    'countless',\n    'country',\n    'county',\n    'courier',\n    'covenant',\n    'cover',\n    'coveted',\n    'coveting',\n    'coyness',\n    'cozily',\n    'coziness',\n    'cozy',\n    'crabbing',\n    'crabgrass',\n    'crablike',\n    'crabmeat',\n    'cradle',\n    'cradling',\n    'crafter',\n    'craftily',\n    'craftsman',\n    'craftwork',\n    'crafty',\n    'cramp',\n    'cranberry',\n    'crane',\n    'cranial',\n    'cranium',\n    'crank',\n    'crate',\n    'crave',\n    'craving',\n    'crawfish',\n    'crawlers',\n    'crawling',\n    'crayfish',\n    'crayon',\n    'crazed',\n    'crazily',\n    'craziness',\n    'crazy',\n    'creamed',\n    'creamer',\n    'creamlike',\n    'crease',\n    'creasing',\n    'creatable',\n    'create',\n    'creation',\n    'creative',\n    'creature',\n    'credible',\n    'credibly',\n    'credit',\n    'creed',\n    'creme',\n    'creole',\n    'crepe',\n    'crept',\n    'crescent',\n    'crested',\n    'cresting',\n    'crestless',\n    'crevice',\n    'crewless',\n    'crewman',\n    'crewmate',\n    'crib',\n    'cricket',\n    'cried',\n    'crier',\n    'crimp',\n    'crimson',\n    'cringe',\n    'cringing',\n    'crinkle',\n    'crinkly',\n    'crisped',\n    'crisping',\n    'crisply',\n    'crispness',\n    'crispy',\n    'criteria',\n    'critter',\n    'croak',\n    'crock',\n    'crook',\n    'croon',\n    'crop',\n    'cross',\n    'crouch',\n    'crouton',\n    'crowbar',\n    'crowd',\n    'crown',\n    'crucial',\n    'crudely',\n    'crudeness',\n    'cruelly',\n    'cruelness',\n    'cruelty',\n    'crumb',\n    'crummiest',\n    'crummy',\n    'crumpet',\n    'crumpled',\n    'cruncher',\n    'crunching',\n    'crunchy',\n    'crusader',\n    'crushable',\n    'crushed',\n    'crusher',\n    'crushing',\n    'crust',\n    'crux',\n    'crying',\n    'cryptic',\n    'crystal',\n    'cubbyhole',\n    'cube',\n    'cubical',\n    'cubicle',\n    'cucumber',\n    'cuddle',\n    'cuddly',\n    'cufflink',\n    'culinary',\n    'culminate',\n    'culpable',\n    'culprit',\n    'cultivate',\n    'cultural',\n    'culture',\n    'cupbearer',\n    'cupcake',\n    'cupid',\n    'cupped',\n    'cupping',\n    'curable',\n    'curator',\n    'curdle',\n    'cure',\n    'curfew',\n    'curing',\n    'curled',\n    'curler',\n    'curliness',\n    'curling',\n    'curly',\n    'curry',\n    'curse',\n    'cursive',\n    'cursor',\n    'curtain',\n    'curtly',\n    'curtsy',\n    'curvature',\n    'curve',\n    'curvy',\n    'cushy',\n    'cusp',\n    'cussed',\n    'custard',\n    'custodian',\n    'custody',\n    'customary',\n    'customer',\n    'customize',\n    'customs',\n    'cut',\n    'cycle',\n    'cyclic',\n    'cycling',\n    'cyclist',\n    'cylinder',\n    'cymbal',\n    'cytoplasm',\n    'cytoplast',\n    'dab',\n    'dad',\n    'daffodil',\n    'dagger',\n    'daily',\n    'daintily',\n    'dainty',\n    'dairy',\n    'daisy',\n    'dallying',\n    'dance',\n    'dancing',\n    'dandelion',\n    'dander',\n    'dandruff',\n    'dandy',\n    'danger',\n    'dangle',\n    'dangling',\n    'daredevil',\n    'dares',\n    'daringly',\n    'darkened',\n    'darkening',\n    'darkish',\n    'darkness',\n    'darkroom',\n    'darling',\n    'darn',\n    'dart',\n    'darwinism',\n    'dash',\n    'dastardly',\n    'data',\n    'datebook',\n    'dating',\n    'daughter',\n    'daunting',\n    'dawdler',\n    'dawn',\n    'daybed',\n    'daybreak',\n    'daycare',\n    'daydream',\n    'daylight',\n    'daylong',\n    'dayroom',\n    'daytime',\n    'dazzler',\n    'dazzling',\n    'deacon',\n    'deafening',\n    'deafness',\n    'dealer',\n    'dealing',\n    'dealmaker',\n    'dealt',\n    'dean',\n    'debatable',\n    'debate',\n    'debating',\n    'debit',\n    'debrief',\n    'debtless',\n    'debtor',\n    'debug',\n    'debunk',\n    'decade',\n    'decaf',\n    'decal',\n    'decathlon',\n    'decay',\n    'deceased',\n    'deceit',\n    'deceiver',\n    'deceiving',\n    'december',\n    'decency',\n    'decent',\n    'deception',\n    'deceptive',\n    'decibel',\n    'decidable',\n    'decimal',\n    'decimeter',\n    'decipher',\n    'deck',\n    'declared',\n    'decline',\n    'decode',\n    'decompose',\n    'decorated',\n    'decorator',\n    'decoy',\n    'decrease',\n    'decree',\n    'dedicate',\n    'dedicator',\n    'deduce',\n    'deduct',\n    'deed',\n    'deem',\n    'deepen',\n    'deeply',\n    'deepness',\n    'deface',\n    'defacing',\n    'defame',\n    'default',\n    'defeat',\n    'defection',\n    'defective',\n    'defendant',\n    'defender',\n    'defense',\n    'defensive',\n    'deferral',\n    'deferred',\n    'defiance',\n    'defiant',\n    'defile',\n    'defiling',\n    'define',\n    'definite',\n    'deflate',\n    'deflation',\n    'deflator',\n    'deflected',\n    'deflector',\n    'defog',\n    'deforest',\n    'defraud',\n    'defrost',\n    'deftly',\n    'defuse',\n    'defy',\n    'degraded',\n    'degrading',\n    'degrease',\n    'degree',\n    'dehydrate',\n    'deity',\n    'dejected',\n    'delay',\n    'delegate',\n    'delegator',\n    'delete',\n    'deletion',\n    'delicacy',\n    'delicate',\n    'delicious',\n    'delighted',\n    'delirious',\n    'delirium',\n    'deliverer',\n    'delivery',\n    'delouse',\n    'delta',\n    'deluge',\n    'delusion',\n    'deluxe',\n    'demanding',\n    'demeaning',\n    'demeanor',\n    'demise',\n    'democracy',\n    'democrat',\n    'demote',\n    'demotion',\n    'demystify',\n    'denatured',\n    'deniable',\n    'denial',\n    'denim',\n    'denote',\n    'dense',\n    'density',\n    'dental',\n    'dentist',\n    'denture',\n    'deny',\n    'deodorant',\n    'deodorize',\n    'departed',\n    'departure',\n    'depict',\n    'deplete',\n    'depletion',\n    'deplored',\n    'deploy',\n    'deport',\n    'depose',\n    'depraved',\n    'depravity',\n    'deprecate',\n    'depress',\n    'deprive',\n    'depth',\n    'deputize',\n    'deputy',\n    'derail',\n    'deranged',\n    'derby',\n    'derived',\n    'desecrate',\n    'deserve',\n    'deserving',\n    'designate',\n    'designed',\n    'designer',\n    'designing',\n    'deskbound',\n    'desktop',\n    'deskwork',\n    'desolate',\n    'despair',\n    'despise',\n    'despite',\n    'destiny',\n    'destitute',\n    'destruct',\n    'detached',\n    'detail',\n    'detection',\n    'detective',\n    'detector',\n    'detention',\n    'detergent',\n    'detest',\n    'detonate',\n    'detonator',\n    'detoxify',\n    'detract',\n    'deuce',\n    'devalue',\n    'deviancy',\n    'deviant',\n    'deviate',\n    'deviation',\n    'deviator',\n    'device',\n    'devious',\n    'devotedly',\n    'devotee',\n    'devotion',\n    'devourer',\n    'devouring',\n    'devoutly',\n    'dexterity',\n    'dexterous',\n    'diabetes',\n    'diabetic',\n    'diabolic',\n    'diagnoses',\n    'diagnosis',\n    'diagram',\n    'dial',\n    'diameter',\n    'diaper',\n    'diaphragm',\n    'diary',\n    'dice',\n    'dicing',\n    'dictate',\n    'dictation',\n    'dictator',\n    'difficult',\n    'diffused',\n    'diffuser',\n    'diffusion',\n    'diffusive',\n    'dig',\n    'dilation',\n    'diligence',\n    'diligent',\n    'dill',\n    'dilute',\n    'dime',\n    'diminish',\n    'dimly',\n    'dimmed',\n    'dimmer',\n    'dimness',\n    'dimple',\n    'diner',\n    'dingbat',\n    'dinghy',\n    'dinginess',\n    'dingo',\n    'dingy',\n    'dining',\n    'dinner',\n    'diocese',\n    'dioxide',\n    'diploma',\n    'dipped',\n    'dipper',\n    'dipping',\n    'directed',\n    'direction',\n    'directive',\n    'directly',\n    'directory',\n    'direness',\n    'dirtiness',\n    'disabled',\n    'disagree',\n    'disallow',\n    'disarm',\n    'disarray',\n    'disaster',\n    'disband',\n    'disbelief',\n    'disburse',\n    'discard',\n    'discern',\n    'discharge',\n    'disclose',\n    'discolor',\n    'discount',\n    'discourse',\n    'discover',\n    'discuss',\n    'disdain',\n    'disengage',\n    'disfigure',\n    'disgrace',\n    'dish',\n    'disinfect',\n    'disjoin',\n    'disk',\n    'dislike',\n    'disliking',\n    'dislocate',\n    'dislodge',\n    'disloyal',\n    'dismantle',\n    'dismay',\n    'dismiss',\n    'dismount',\n    'disobey',\n    'disorder',\n    'disown',\n    'disparate',\n    'disparity',\n    'dispatch',\n    'dispense',\n    'dispersal',\n    'dispersed',\n    'disperser',\n    'displace',\n    'display',\n    'displease',\n    'disposal',\n    'dispose',\n    'disprove',\n    'dispute',\n    'disregard',\n    'disrupt',\n    'dissuade',\n    'distance',\n    'distant',\n    'distaste',\n    'distill',\n    'distinct',\n    'distort',\n    'distract',\n    'distress',\n    'district',\n    'distrust',\n    'ditch',\n    'ditto',\n    'ditzy',\n    'dividable',\n    'divided',\n    'dividend',\n    'dividers',\n    'dividing',\n    'divinely',\n    'diving',\n    'divinity',\n    'divisible',\n    'divisibly',\n    'division',\n    'divisive',\n    'divorcee',\n    'dizziness',\n    'dizzy',\n    'doable',\n    'docile',\n    'dock',\n    'doctrine',\n    'document',\n    'dodge',\n    'dodgy',\n    'doily',\n    'doing',\n    'dole',\n    'dollar',\n    'dollhouse',\n    'dollop',\n    'dolly',\n    'dolphin',\n    'domain',\n    'domelike',\n    'domestic',\n    'dominion',\n    'dominoes',\n    'donated',\n    'donation',\n    'donator',\n    'donor',\n    'donut',\n    'doodle',\n    'doorbell',\n    'doorframe',\n    'doorknob',\n    'doorman',\n    'doormat',\n    'doornail',\n    'doorpost',\n    'doorstep',\n    'doorstop',\n    'doorway',\n    'doozy',\n    'dork',\n    'dormitory',\n    'dorsal',\n    'dosage',\n    'dose',\n    'dotted',\n    'doubling',\n    'douche',\n    'dove',\n    'down',\n    'dowry',\n    'doze',\n    'drab',\n    'dragging',\n    'dragonfly',\n    'dragonish',\n    'dragster',\n    'drainable',\n    'drainage',\n    'drained',\n    'drainer',\n    'drainpipe',\n    'dramatic',\n    'dramatize',\n    'drank',\n    'drapery',\n    'drastic',\n    'draw',\n    'dreaded',\n    'dreadful',\n    'dreadlock',\n    'dreamboat',\n    'dreamily',\n    'dreamland',\n    'dreamless',\n    'dreamlike',\n    'dreamt',\n    'dreamy',\n    'drearily',\n    'dreary',\n    'drench',\n    'dress',\n    'drew',\n    'dribble',\n    'dried',\n    'drier',\n    'drift',\n    'driller',\n    'drilling',\n    'drinkable',\n    'drinking',\n    'dripping',\n    'drippy',\n    'drivable',\n    'driven',\n    'driver',\n    'driveway',\n    'driving',\n    'drizzle',\n    'drizzly',\n    'drone',\n    'drool',\n    'droop',\n    'drop-down',\n    'dropbox',\n    'dropkick',\n    'droplet',\n    'dropout',\n    'dropper',\n    'drove',\n    'drown',\n    'drowsily',\n    'drudge',\n    'drum',\n    'dry',\n    'dubbed',\n    'dubiously',\n    'duchess',\n    'duckbill',\n    'ducking',\n    'duckling',\n    'ducktail',\n    'ducky',\n    'duct',\n    'dude',\n    'duffel',\n    'dugout',\n    'duh',\n    'duke',\n    'duller',\n    'dullness',\n    'duly',\n    'dumping',\n    'dumpling',\n    'dumpster',\n    'duo',\n    'dupe',\n    'duplex',\n    'duplicate',\n    'duplicity',\n    'durable',\n    'durably',\n    'duration',\n    'duress',\n    'during',\n    'dusk',\n    'dust',\n    'dutiful',\n    'duty',\n    'duvet',\n    'dwarf',\n    'dweeb',\n    'dwelled',\n    'dweller',\n    'dwelling',\n    'dwindle',\n    'dwindling',\n    'dynamic',\n    'dynamite',\n    'dynasty',\n    'dyslexia',\n    'dyslexic',\n    'each',\n    'eagle',\n    'earache',\n    'eardrum',\n    'earflap',\n    'earful',\n    'earlobe',\n    'early',\n    'earmark',\n    'earmuff',\n    'earphone',\n    'earpiece',\n    'earplugs',\n    'earring',\n    'earshot',\n    'earthen',\n    'earthlike',\n    'earthling',\n    'earthly',\n    'earthworm',\n    'earthy',\n    'earwig',\n    'easeful',\n    'easel',\n    'easiest',\n    'easily',\n    'easiness',\n    'easing',\n    'eastbound',\n    'eastcoast',\n    'easter',\n    'eastward',\n    'eatable',\n    'eaten',\n    'eatery',\n    'eating',\n    'eats',\n    'ebay',\n    'ebony',\n    'ebook',\n    'ecard',\n    'eccentric',\n    'echo',\n    'eclair',\n    'eclipse',\n    'ecologist',\n    'ecology',\n    'economic',\n    'economist',\n    'economy',\n    'ecosphere',\n    'ecosystem',\n    'edge',\n    'edginess',\n    'edging',\n    'edgy',\n    'edition',\n    'editor',\n    'educated',\n    'education',\n    'educator',\n    'eel',\n    'effective',\n    'effects',\n    'efficient',\n    'effort',\n    'eggbeater',\n    'egging',\n    'eggnog',\n    'eggplant',\n    'eggshell',\n    'egomaniac',\n    'egotism',\n    'egotistic',\n    'either',\n    'eject',\n    'elaborate',\n    'elastic',\n    'elated',\n    'elbow',\n    'eldercare',\n    'elderly',\n    'eldest',\n    'electable',\n    'election',\n    'elective',\n    'elephant',\n    'elevate',\n    'elevating',\n    'elevation',\n    'elevator',\n    'eleven',\n    'elf',\n    'eligible',\n    'eligibly',\n    'eliminate',\n    'elite',\n    'elitism',\n    'elixir',\n    'elk',\n    'ellipse',\n    'elliptic',\n    'elm',\n    'elongated',\n    'elope',\n    'eloquence',\n    'eloquent',\n    'elsewhere',\n    'elude',\n    'elusive',\n    'elves',\n    'email',\n    'embargo',\n    'embark',\n    'embassy',\n    'embattled',\n    'embellish',\n    'ember',\n    'embezzle',\n    'emblaze',\n    'emblem',\n    'embody',\n    'embolism',\n    'emboss',\n    'embroider',\n    'emcee',\n    'emerald',\n    'emergency',\n    'emission',\n    'emit',\n    'emote',\n    'emoticon',\n    'emotion',\n    'empathic',\n    'empathy',\n    'emperor',\n    'emphases',\n    'emphasis',\n    'emphasize',\n    'emphatic',\n    'empirical',\n    'employed',\n    'employee',\n    'employer',\n    'emporium',\n    'empower',\n    'emptier',\n    'emptiness',\n    'empty',\n    'emu',\n    'enable',\n    'enactment',\n    'enamel',\n    'enchanted',\n    'enchilada',\n    'encircle',\n    'enclose',\n    'enclosure',\n    'encode',\n    'encore',\n    'encounter',\n    'encourage',\n    'encroach',\n    'encrust',\n    'encrypt',\n    'endanger',\n    'endeared',\n    'endearing',\n    'ended',\n    'ending',\n    'endless',\n    'endnote',\n    'endocrine',\n    'endorphin',\n    'endorse',\n    'endowment',\n    'endpoint',\n    'endurable',\n    'endurance',\n    'enduring',\n    'energetic',\n    'energize',\n    'energy',\n    'enforced',\n    'enforcer',\n    'engaged',\n    'engaging',\n    'engine',\n    'engorge',\n    'engraved',\n    'engraver',\n    'engraving',\n    'engross',\n    'engulf',\n    'enhance',\n    'enigmatic',\n    'enjoyable',\n    'enjoyably',\n    'enjoyer',\n    'enjoying',\n    'enjoyment',\n    'enlarged',\n    'enlarging',\n    'enlighten',\n    'enlisted',\n    'enquirer',\n    'enrage',\n    'enrich',\n    'enroll',\n    'enslave',\n    'ensnare',\n    'ensure',\n    'entail',\n    'entangled',\n    'entering',\n    'entertain',\n    'enticing',\n    'entire',\n    'entitle',\n    'entity',\n    'entomb',\n    'entourage',\n    'entrap',\n    'entree',\n    'entrench',\n    'entrust',\n    'entryway',\n    'entwine',\n    'enunciate',\n    'envelope',\n    'enviable',\n    'enviably',\n    'envious',\n    'envision',\n    'envoy',\n    'envy',\n    'enzyme',\n    'epic',\n    'epidemic',\n    'epidermal',\n    'epidermis',\n    'epidural',\n    'epilepsy',\n    'epileptic',\n    'epilogue',\n    'epiphany',\n    'episode',\n    'equal',\n    'equate',\n    'equation',\n    'equator',\n    'equinox',\n    'equipment',\n    'equity',\n    'equivocal',\n    'eradicate',\n    'erasable',\n    'erased',\n    'eraser',\n    'erasure',\n    'ergonomic',\n    'errand',\n    'errant',\n    'erratic',\n    'error',\n    'erupt',\n    'escalate',\n    'escalator',\n    'escapable',\n    'escapade',\n    'escapist',\n    'escargot',\n    'eskimo',\n    'esophagus',\n    'espionage',\n    'espresso',\n    'esquire',\n    'essay',\n    'essence',\n    'essential',\n    'establish',\n    'estate',\n    'esteemed',\n    'estimate',\n    'estimator',\n    'estranged',\n    'estrogen',\n    'etching',\n    'eternal',\n    'eternity',\n    'ethanol',\n    'ether',\n    'ethically',\n    'ethics',\n    'euphemism',\n    'evacuate',\n    'evacuee',\n    'evade',\n    'evaluate',\n    'evaluator',\n    'evaporate',\n    'evasion',\n    'evasive',\n    'even',\n    'everglade',\n    'evergreen',\n    'everybody',\n    'everyday',\n    'everyone',\n    'evict',\n    'evidence',\n    'evident',\n    'evil',\n    'evoke',\n    'evolution',\n    'evolve',\n    'exact',\n    'exalted',\n    'example',\n    'excavate',\n    'excavator',\n    'exceeding',\n    'exception',\n    'excess',\n    'exchange',\n    'excitable',\n    'exciting',\n    'exclaim',\n    'exclude',\n    'excluding',\n    'exclusion',\n    'exclusive',\n    'excretion',\n    'excretory',\n    'excursion',\n    'excusable',\n    'excusably',\n    'excuse',\n    'exemplary',\n    'exemplify',\n    'exemption',\n    'exerciser',\n    'exert',\n    'exes',\n    'exfoliate',\n    'exhale',\n    'exhaust',\n    'exhume',\n    'exile',\n    'existing',\n    'exit',\n    'exodus',\n    'exonerate',\n    'exorcism',\n    'exorcist',\n    'expand',\n    'expanse',\n    'expansion',\n    'expansive',\n    'expectant',\n    'expedited',\n    'expediter',\n    'expel',\n    'expend',\n    'expenses',\n    'expensive',\n    'expert',\n    'expire',\n    'expiring',\n    'explain',\n    'expletive',\n    'explicit',\n    'explode',\n    'exploit',\n    'explore',\n    'exploring',\n    'exponent',\n    'exporter',\n    'exposable',\n    'expose',\n    'exposure',\n    'express',\n    'expulsion',\n    'exquisite',\n    'extended',\n    'extending',\n    'extent',\n    'extenuate',\n    'exterior',\n    'external',\n    'extinct',\n    'extortion',\n    'extradite',\n    'extras',\n    'extrovert',\n    'extrude',\n    'extruding',\n    'exuberant',\n    'fable',\n    'fabric',\n    'fabulous',\n    'facebook',\n    'facecloth',\n    'facedown',\n    'faceless',\n    'facelift',\n    'faceplate',\n    'faceted',\n    'facial',\n    'facility',\n    'facing',\n    'facsimile',\n    'faction',\n    'factoid',\n    'factor',\n    'factsheet',\n    'factual',\n    'faculty',\n    'fade',\n    'fading',\n    'failing',\n    'falcon',\n    'fall',\n    'false',\n    'falsify',\n    'fame',\n    'familiar',\n    'family',\n    'famine',\n    'famished',\n    'fanatic',\n    'fancied',\n    'fanciness',\n    'fancy',\n    'fanfare',\n    'fang',\n    'fanning',\n    'fantasize',\n    'fantastic',\n    'fantasy',\n    'fascism',\n    'fastball',\n    'faster',\n    'fasting',\n    'fastness',\n    'faucet',\n    'favorable',\n    'favorably',\n    'favored',\n    'favoring',\n    'favorite',\n    'fax',\n    'feast',\n    'federal',\n    'fedora',\n    'feeble',\n    'feed',\n    'feel',\n    'feisty',\n    'feline',\n    'felt-tip',\n    'feminine',\n    'feminism',\n    'feminist',\n    'feminize',\n    'femur',\n    'fence',\n    'fencing',\n    'fender',\n    'ferment',\n    'fernlike',\n    'ferocious',\n    'ferocity',\n    'ferret',\n    'ferris',\n    'ferry',\n    'fervor',\n    'fester',\n    'festival',\n    'festive',\n    'festivity',\n    'fetal',\n    'fetch',\n    'fever',\n    'fiber',\n    'fiction',\n    'fiddle',\n    'fiddling',\n    'fidelity',\n    'fidgeting',\n    'fidgety',\n    'fifteen',\n    'fifth',\n    'fiftieth',\n    'fifty',\n    'figment',\n    'figure',\n    'figurine',\n    'filing',\n    'filled',\n    'filler',\n    'filling',\n    'film',\n    'filter',\n    'filth',\n    'filtrate',\n    'finale',\n    'finalist',\n    'finalize',\n    'finally',\n    'finance',\n    'financial',\n    'finch',\n    'fineness',\n    'finer',\n    'finicky',\n    'finished',\n    'finisher',\n    'finishing',\n    'finite',\n    'finless',\n    'finlike',\n    'fiscally',\n    'fit',\n    'five',\n    'flaccid',\n    'flagman',\n    'flagpole',\n    'flagship',\n    'flagstick',\n    'flagstone',\n    'flail',\n    'flakily',\n    'flaky',\n    'flame',\n    'flammable',\n    'flanked',\n    'flanking',\n    'flannels',\n    'flap',\n    'flaring',\n    'flashback',\n    'flashbulb',\n    'flashcard',\n    'flashily',\n    'flashing',\n    'flashy',\n    'flask',\n    'flatbed',\n    'flatfoot',\n    'flatly',\n    'flatness',\n    'flatten',\n    'flattered',\n    'flatterer',\n    'flattery',\n    'flattop',\n    'flatware',\n    'flatworm',\n    'flavored',\n    'flavorful',\n    'flavoring',\n    'flaxseed',\n    'fled',\n    'fleshed',\n    'fleshy',\n    'flick',\n    'flier',\n    'flight',\n    'flinch',\n    'fling',\n    'flint',\n    'flip',\n    'flirt',\n    'float',\n    'flock',\n    'flogging',\n    'flop',\n    'floral',\n    'florist',\n    'floss',\n    'flounder',\n    'flyable',\n    'flyaway',\n    'flyer',\n    'flying',\n    'flyover',\n    'flypaper',\n    'foam',\n    'foe',\n    'fog',\n    'foil',\n    'folic',\n    'folk',\n    'follicle',\n    'follow',\n    'fondling',\n    'fondly',\n    'fondness',\n    'fondue',\n    'font',\n    'food',\n    'fool',\n    'footage',\n    'football',\n    'footbath',\n    'footboard',\n    'footer',\n    'footgear',\n    'foothill',\n    'foothold',\n    'footing',\n    'footless',\n    'footman',\n    'footnote',\n    'footpad',\n    'footpath',\n    'footprint',\n    'footrest',\n    'footsie',\n    'footsore',\n    'footwear',\n    'footwork',\n    'fossil',\n    'foster',\n    'founder',\n    'founding',\n    'fountain',\n    'fox',\n    'foyer',\n    'fraction',\n    'fracture',\n    'fragile',\n    'fragility',\n    'fragment',\n    'fragrance',\n    'fragrant',\n    'frail',\n    'frame',\n    'framing',\n    'frantic',\n    'fraternal',\n    'frayed',\n    'fraying',\n    'frays',\n    'freckled',\n    'freckles',\n    'freebase',\n    'freebee',\n    'freebie',\n    'freedom',\n    'freefall',\n    'freehand',\n    'freeing',\n    'freeload',\n    'freely',\n    'freemason',\n    'freeness',\n    'freestyle',\n    'freeware',\n    'freeway',\n    'freewill',\n    'freezable',\n    'freezing',\n    'freight',\n    'french',\n    'frenzied',\n    'frenzy',\n    'frequency',\n    'frequent',\n    'fresh',\n    'fretful',\n    'fretted',\n    'friction',\n    'friday',\n    'fridge',\n    'fried',\n    'friend',\n    'frighten',\n    'frightful',\n    'frigidity',\n    'frigidly',\n    'frill',\n    'fringe',\n    'frisbee',\n    'frisk',\n    'fritter',\n    'frivolous',\n    'frolic',\n    'from',\n    'front',\n    'frostbite',\n    'frosted',\n    'frostily',\n    'frosting',\n    'frostlike',\n    'frosty',\n    'froth',\n    'frown',\n    'frozen',\n    'fructose',\n    'frugality',\n    'frugally',\n    'fruit',\n    'frustrate',\n    'frying',\n    'gab',\n    'gaffe',\n    'gag',\n    'gainfully',\n    'gaining',\n    'gains',\n    'gala',\n    'gallantly',\n    'galleria',\n    'gallery',\n    'galley',\n    'gallon',\n    'gallows',\n    'gallstone',\n    'galore',\n    'galvanize',\n    'gambling',\n    'game',\n    'gaming',\n    'gamma',\n    'gander',\n    'gangly',\n    'gangrene',\n    'gangway',\n    'gap',\n    'garage',\n    'garbage',\n    'garden',\n    'gargle',\n    'garland',\n    'garlic',\n    'garment',\n    'garnet',\n    'garnish',\n    'garter',\n    'gas',\n    'gatherer',\n    'gathering',\n    'gating',\n    'gauging',\n    'gauntlet',\n    'gauze',\n    'gave',\n    'gawk',\n    'gazing',\n    'gear',\n    'gecko',\n    'geek',\n    'geiger',\n    'gem',\n    'gender',\n    'generic',\n    'generous',\n    'genetics',\n    'genre',\n    'gentile',\n    'gentleman',\n    'gently',\n    'gents',\n    'geography',\n    'geologic',\n    'geologist',\n    'geology',\n    'geometric',\n    'geometry',\n    'geranium',\n    'gerbil',\n    'geriatric',\n    'germicide',\n    'germinate',\n    'germless',\n    'germproof',\n    'gestate',\n    'gestation',\n    'gesture',\n    'getaway',\n    'getting',\n    'getup',\n    'giant',\n    'gibberish',\n    'giblet',\n    'giddily',\n    'giddiness',\n    'giddy',\n    'gift',\n    'gigabyte',\n    'gigahertz',\n    'gigantic',\n    'giggle',\n    'giggling',\n    'giggly',\n    'gigolo',\n    'gilled',\n    'gills',\n    'gimmick',\n    'girdle',\n    'giveaway',\n    'given',\n    'giver',\n    'giving',\n    'gizmo',\n    'gizzard',\n    'glacial',\n    'glacier',\n    'glade',\n    'gladiator',\n    'gladly',\n    'glamorous',\n    'glamour',\n    'glance',\n    'glancing',\n    'glandular',\n    'glare',\n    'glaring',\n    'glass',\n    'glaucoma',\n    'glazing',\n    'gleaming',\n    'gleeful',\n    'glider',\n    'gliding',\n    'glimmer',\n    'glimpse',\n    'glisten',\n    'glitch',\n    'glitter',\n    'glitzy',\n    'gloater',\n    'gloating',\n    'gloomily',\n    'gloomy',\n    'glorified',\n    'glorifier',\n    'glorify',\n    'glorious',\n    'glory',\n    'gloss',\n    'glove',\n    'glowing',\n    'glowworm',\n    'glucose',\n    'glue',\n    'gluten',\n    'glutinous',\n    'glutton',\n    'gnarly',\n    'gnat',\n    'goal',\n    'goatskin',\n    'goes',\n    'goggles',\n    'going',\n    'goldfish',\n    'goldmine',\n    'goldsmith',\n    'golf',\n    'goliath',\n    'gonad',\n    'gondola',\n    'gone',\n    'gong',\n    'good',\n    'gooey',\n    'goofball',\n    'goofiness',\n    'goofy',\n    'google',\n    'goon',\n    'gopher',\n    'gore',\n    'gorged',\n    'gorgeous',\n    'gory',\n    'gosling',\n    'gossip',\n    'gothic',\n    'gotten',\n    'gout',\n    'gown',\n    'grab',\n    'graceful',\n    'graceless',\n    'gracious',\n    'gradation',\n    'graded',\n    'grader',\n    'gradient',\n    'grading',\n    'gradually',\n    'graduate',\n    'graffiti',\n    'grafted',\n    'grafting',\n    'grain',\n    'granddad',\n    'grandkid',\n    'grandly',\n    'grandma',\n    'grandpa',\n    'grandson',\n    'granite',\n    'granny',\n    'granola',\n    'grant',\n    'granular',\n    'grape',\n    'graph',\n    'grapple',\n    'grappling',\n    'grasp',\n    'grass',\n    'gratified',\n    'gratify',\n    'grating',\n    'gratitude',\n    'gratuity',\n    'gravel',\n    'graveness',\n    'graves',\n    'graveyard',\n    'gravitate',\n    'gravity',\n    'gravy',\n    'gray',\n    'grazing',\n    'greasily',\n    'greedily',\n    'greedless',\n    'greedy',\n    'green',\n    'greeter',\n    'greeting',\n    'grew',\n    'greyhound',\n    'grid',\n    'grief',\n    'grievance',\n    'grieving',\n    'grievous',\n    'grill',\n    'grimace',\n    'grimacing',\n    'grime',\n    'griminess',\n    'grimy',\n    'grinch',\n    'grinning',\n    'grip',\n    'gristle',\n    'grit',\n    'groggily',\n    'groggy',\n    'groin',\n    'groom',\n    'groove',\n    'grooving',\n    'groovy',\n    'grope',\n    'ground',\n    'grouped',\n    'grout',\n    'grove',\n    'grower',\n    'growing',\n    'growl',\n    'grub',\n    'grudge',\n    'grudging',\n    'grueling',\n    'gruffly',\n    'grumble',\n    'grumbling',\n    'grumbly',\n    'grumpily',\n    'grunge',\n    'grunt',\n    'guacamole',\n    'guidable',\n    'guidance',\n    'guide',\n    'guiding',\n    'guileless',\n    'guise',\n    'gulf',\n    'gullible',\n    'gully',\n    'gulp',\n    'gumball',\n    'gumdrop',\n    'gumminess',\n    'gumming',\n    'gummy',\n    'gurgle',\n    'gurgling',\n    'guru',\n    'gush',\n    'gusto',\n    'gusty',\n    'gutless',\n    'guts',\n    'gutter',\n    'guy',\n    'guzzler',\n    'gyration',\n    'habitable',\n    'habitant',\n    'habitat',\n    'habitual',\n    'hacked',\n    'hacker',\n    'hacking',\n    'hacksaw',\n    'had',\n    'haggler',\n    'haiku',\n    'half',\n    'halogen',\n    'halt',\n    'halved',\n    'halves',\n    'hamburger',\n    'hamlet',\n    'hammock',\n    'hamper',\n    'hamster',\n    'hamstring',\n    'handbag',\n    'handball',\n    'handbook',\n    'handbrake',\n    'handcart',\n    'handclap',\n    'handclasp',\n    'handcraft',\n    'handcuff',\n    'handed',\n    'handful',\n    'handgrip',\n    'handgun',\n    'handheld',\n    'handiness',\n    'handiwork',\n    'handlebar',\n    'handled',\n    'handler',\n    'handling',\n    'handmade',\n    'handoff',\n    'handpick',\n    'handprint',\n    'handrail',\n    'handsaw',\n    'handset',\n    'handsfree',\n    'handshake',\n    'handstand',\n    'handwash',\n    'handwork',\n    'handwoven',\n    'handwrite',\n    'handyman',\n    'hangnail',\n    'hangout',\n    'hangover',\n    'hangup',\n    'hankering',\n    'hankie',\n    'hanky',\n    'haphazard',\n    'happening',\n    'happier',\n    'happiest',\n    'happily',\n    'happiness',\n    'happy',\n    'harbor',\n    'hardcopy',\n    'hardcore',\n    'hardcover',\n    'harddisk',\n    'hardened',\n    'hardener',\n    'hardening',\n    'hardhat',\n    'hardhead',\n    'hardiness',\n    'hardly',\n    'hardness',\n    'hardship',\n    'hardware',\n    'hardwired',\n    'hardwood',\n    'hardy',\n    'harmful',\n    'harmless',\n    'harmonica',\n    'harmonics',\n    'harmonize',\n    'harmony',\n    'harness',\n    'harpist',\n    'harsh',\n    'harvest',\n    'hash',\n    'hassle',\n    'haste',\n    'hastily',\n    'hastiness',\n    'hasty',\n    'hatbox',\n    'hatchback',\n    'hatchery',\n    'hatchet',\n    'hatching',\n    'hatchling',\n    'hate',\n    'hatless',\n    'hatred',\n    'haunt',\n    'haven',\n    'hazard',\n    'hazelnut',\n    'hazily',\n    'haziness',\n    'hazing',\n    'hazy',\n    'headache',\n    'headband',\n    'headboard',\n    'headcount',\n    'headdress',\n    'headed',\n    'header',\n    'headfirst',\n    'headgear',\n    'heading',\n    'headlamp',\n    'headless',\n    'headlock',\n    'headphone',\n    'headpiece',\n    'headrest',\n    'headroom',\n    'headscarf',\n    'headset',\n    'headsman',\n    'headstand',\n    'headstone',\n    'headway',\n    'headwear',\n    'heap',\n    'heat',\n    'heave',\n    'heavily',\n    'heaviness',\n    'heaving',\n    'hedge',\n    'hedging',\n    'heftiness',\n    'hefty',\n    'helium',\n    'helmet',\n    'helper',\n    'helpful',\n    'helping',\n    'helpless',\n    'helpline',\n    'hemlock',\n    'hemstitch',\n    'hence',\n    'henchman',\n    'henna',\n    'herald',\n    'herbal',\n    'herbicide',\n    'herbs',\n    'heritage',\n    'hermit',\n    'heroics',\n    'heroism',\n    'herring',\n    'herself',\n    'hertz',\n    'hesitancy',\n    'hesitant',\n    'hesitate',\n    'hexagon',\n    'hexagram',\n    'hubcap',\n    'huddle',\n    'huddling',\n    'huff',\n    'hug',\n    'hula',\n    'hulk',\n    'hull',\n    'human',\n    'humble',\n    'humbling',\n    'humbly',\n    'humid',\n    'humiliate',\n    'humility',\n    'humming',\n    'hummus',\n    'humongous',\n    'humorist',\n    'humorless',\n    'humorous',\n    'humpback',\n    'humped',\n    'humvee',\n    'hunchback',\n    'hundredth',\n    'hunger',\n    'hungrily',\n    'hungry',\n    'hunk',\n    'hunter',\n    'hunting',\n    'huntress',\n    'huntsman',\n    'hurdle',\n    'hurled',\n    'hurler',\n    'hurling',\n    'hurray',\n    'hurricane',\n    'hurried',\n    'hurry',\n    'hurt',\n    'husband',\n    'hush',\n    'husked',\n    'huskiness',\n    'hut',\n    'hybrid',\n    'hydrant',\n    'hydrated',\n    'hydration',\n    'hydrogen',\n    'hydroxide',\n    'hyperlink',\n    'hypertext',\n    'hyphen',\n    'hypnoses',\n    'hypnosis',\n    'hypnotic',\n    'hypnotism',\n    'hypnotist',\n    'hypnotize',\n    'hypocrisy',\n    'hypocrite',\n    'ibuprofen',\n    'ice',\n    'iciness',\n    'icing',\n    'icky',\n    'icon',\n    'icy',\n    'idealism',\n    'idealist',\n    'idealize',\n    'ideally',\n    'idealness',\n    'identical',\n    'identify',\n    'identity',\n    'ideology',\n    'idiocy',\n    'idiom',\n    'idly',\n    'igloo',\n    'ignition',\n    'ignore',\n    'iguana',\n    'illicitly',\n    'illusion',\n    'illusive',\n    'image',\n    'imaginary',\n    'imagines',\n    'imaging',\n    'imbecile',\n    'imitate',\n    'imitation',\n    'immature',\n    'immerse',\n    'immersion',\n    'imminent',\n    'immobile',\n    'immodest',\n    'immorally',\n    'immortal',\n    'immovable',\n    'immovably',\n    'immunity',\n    'immunize',\n    'impaired',\n    'impale',\n    'impart',\n    'impatient',\n    'impeach',\n    'impeding',\n    'impending',\n    'imperfect',\n    'imperial',\n    'impish',\n    'implant',\n    'implement',\n    'implicate',\n    'implicit',\n    'implode',\n    'implosion',\n    'implosive',\n    'imply',\n    'impolite',\n    'important',\n    'importer',\n    'impose',\n    'imposing',\n    'impotence',\n    'impotency',\n    'impotent',\n    'impound',\n    'imprecise',\n    'imprint',\n    'imprison',\n    'impromptu',\n    'improper',\n    'improve',\n    'improving',\n    'improvise',\n    'imprudent',\n    'impulse',\n    'impulsive',\n    'impure',\n    'impurity',\n    'iodine',\n    'iodize',\n    'ion',\n    'ipad',\n    'iphone',\n    'ipod',\n    'irate',\n    'irk',\n    'iron',\n    'irregular',\n    'irrigate',\n    'irritable',\n    'irritably',\n    'irritant',\n    'irritate',\n    'islamic',\n    'islamist',\n    'isolated',\n    'isolating',\n    'isolation',\n    'isotope',\n    'issue',\n    'issuing',\n    'italicize',\n    'italics',\n    'item',\n    'itinerary',\n    'itunes',\n    'ivory',\n    'ivy',\n    'jab',\n    'jackal',\n    'jacket',\n    'jackknife',\n    'jackpot',\n    'jailbird',\n    'jailbreak',\n    'jailer',\n    'jailhouse',\n    'jalapeno',\n    'jam',\n    'janitor',\n    'january',\n    'jargon',\n    'jarring',\n    'jasmine',\n    'jaundice',\n    'jaunt',\n    'java',\n    'jawed',\n    'jawless',\n    'jawline',\n    'jaws',\n    'jaybird',\n    'jaywalker',\n    'jazz',\n    'jeep',\n    'jeeringly',\n    'jellied',\n    'jelly',\n    'jersey',\n    'jester',\n    'jet',\n    'jiffy',\n    'jigsaw',\n    'jimmy',\n    'jingle',\n    'jingling',\n    'jinx',\n    'jitters',\n    'jittery',\n    'job',\n    'jockey',\n    'jockstrap',\n    'jogger',\n    'jogging',\n    'john',\n    'joining',\n    'jokester',\n    'jokingly',\n    'jolliness',\n    'jolly',\n    'jolt',\n    'jot',\n    'jovial',\n    'joyfully',\n    'joylessly',\n    'joyous',\n    'joyride',\n    'joystick',\n    'jubilance',\n    'jubilant',\n    'judge',\n    'judgingly',\n    'judicial',\n    'judiciary',\n    'judo',\n    'juggle',\n    'juggling',\n    'jugular',\n    'juice',\n    'juiciness',\n    'juicy',\n    'jujitsu',\n    'jukebox',\n    'july',\n    'jumble',\n    'jumbo',\n    'jump',\n    'junction',\n    'juncture',\n    'june',\n    'junior',\n    'juniper',\n    'junkie',\n    'junkman',\n    'junkyard',\n    'jurist',\n    'juror',\n    'jury',\n    'justice',\n    'justifier',\n    'justify',\n    'justly',\n    'justness',\n    'juvenile',\n    'kabob',\n    'kangaroo',\n    'karaoke',\n    'karate',\n    'karma',\n    'kebab',\n    'keenly',\n    'keenness',\n    'keep',\n    'keg',\n    'kelp',\n    'kennel',\n    'kept',\n    'kerchief',\n    'kerosene',\n    'kettle',\n    'kick',\n    'kiln',\n    'kilobyte',\n    'kilogram',\n    'kilometer',\n    'kilowatt',\n    'kilt',\n    'kimono',\n    'kindle',\n    'kindling',\n    'kindly',\n    'kindness',\n    'kindred',\n    'kinetic',\n    'kinfolk',\n    'king',\n    'kinship',\n    'kinsman',\n    'kinswoman',\n    'kissable',\n    'kisser',\n    'kissing',\n    'kitchen',\n    'kite',\n    'kitten',\n    'kitty',\n    'kiwi',\n    'kleenex',\n    'knapsack',\n    'knee',\n    'knelt',\n    'knickers',\n    'knoll',\n    'koala',\n    'kooky',\n    'kosher',\n    'krypton',\n    'kudos',\n    'kung',\n    'labored',\n    'laborer',\n    'laboring',\n    'laborious',\n    'labrador',\n    'ladder',\n    'ladies',\n    'ladle',\n    'ladybug',\n    'ladylike',\n    'lagged',\n    'lagging',\n    'lagoon',\n    'lair',\n    'lake',\n    'lance',\n    'landed',\n    'landfall',\n    'landfill',\n    'landing',\n    'landlady',\n    'landless',\n    'landline',\n    'landlord',\n    'landmark',\n    'landmass',\n    'landmine',\n    'landowner',\n    'landscape',\n    'landside',\n    'landslide',\n    'language',\n    'lankiness',\n    'lanky',\n    'lantern',\n    'lapdog',\n    'lapel',\n    'lapped',\n    'lapping',\n    'laptop',\n    'lard',\n    'large',\n    'lark',\n    'lash',\n    'lasso',\n    'last',\n    'latch',\n    'late',\n    'lather',\n    'latitude',\n    'latrine',\n    'latter',\n    'latticed',\n    'launch',\n    'launder',\n    'laundry',\n    'laurel',\n    'lavender',\n    'lavish',\n    'laxative',\n    'lazily',\n    'laziness',\n    'lazy',\n    'lecturer',\n    'left',\n    'legacy',\n    'legal',\n    'legend',\n    'legged',\n    'leggings',\n    'legible',\n    'legibly',\n    'legislate',\n    'lego',\n    'legroom',\n    'legume',\n    'legwarmer',\n    'legwork',\n    'lemon',\n    'lend',\n    'length',\n    'lens',\n    'lent',\n    'leotard',\n    'lesser',\n    'letdown',\n    'lethargic',\n    'lethargy',\n    'letter',\n    'lettuce',\n    'level',\n    'leverage',\n    'levers',\n    'levitate',\n    'levitator',\n    'liability',\n    'liable',\n    'liberty',\n    'librarian',\n    'library',\n    'licking',\n    'licorice',\n    'lid',\n    'life',\n    'lifter',\n    'lifting',\n    'liftoff',\n    'ligament',\n    'likely',\n    'likeness',\n    'likewise',\n    'liking',\n    'lilac',\n    'lilly',\n    'lily',\n    'limb',\n    'limeade',\n    'limelight',\n    'limes',\n    'limit',\n    'limping',\n    'limpness',\n    'line',\n    'lingo',\n    'linguini',\n    'linguist',\n    'lining',\n    'linked',\n    'linoleum',\n    'linseed',\n    'lint',\n    'lion',\n    'lip',\n    'liquefy',\n    'liqueur',\n    'liquid',\n    'lisp',\n    'list',\n    'litigate',\n    'litigator',\n    'litmus',\n    'litter',\n    'little',\n    'livable',\n    'lived',\n    'lively',\n    'liver',\n    'livestock',\n    'lividly',\n    'living',\n    'lizard',\n    'lubricant',\n    'lubricate',\n    'lucid',\n    'luckily',\n    'luckiness',\n    'luckless',\n    'lucrative',\n    'ludicrous',\n    'lugged',\n    'lukewarm',\n    'lullaby',\n    'lumber',\n    'luminance',\n    'luminous',\n    'lumpiness',\n    'lumping',\n    'lumpish',\n    'lunacy',\n    'lunar',\n    'lunchbox',\n    'luncheon',\n    'lunchroom',\n    'lunchtime',\n    'lung',\n    'lurch',\n    'lure',\n    'luridness',\n    'lurk',\n    'lushly',\n    'lushness',\n    'luster',\n    'lustfully',\n    'lustily',\n    'lustiness',\n    'lustrous',\n    'lusty',\n    'luxurious',\n    'luxury',\n    'lying',\n    'lyrically',\n    'lyricism',\n    'lyricist',\n    'lyrics',\n    'macarena',\n    'macaroni',\n    'macaw',\n    'mace',\n    'machine',\n    'machinist',\n    'magazine',\n    'magenta',\n    'maggot',\n    'magical',\n    'magician',\n    'magma',\n    'magnesium',\n    'magnetic',\n    'magnetism',\n    'magnetize',\n    'magnifier',\n    'magnify',\n    'magnitude',\n    'magnolia',\n    'mahogany',\n    'maimed',\n    'majestic',\n    'majesty',\n    'majorette',\n    'majority',\n    'makeover',\n    'maker',\n    'makeshift',\n    'making',\n    'malformed',\n    'malt',\n    'mama',\n    'mammal',\n    'mammary',\n    'mammogram',\n    'manager',\n    'managing',\n    'manatee',\n    'mandarin',\n    'mandate',\n    'mandatory',\n    'mandolin',\n    'manger',\n    'mangle',\n    'mango',\n    'mangy',\n    'manhandle',\n    'manhole',\n    'manhood',\n    'manhunt',\n    'manicotti',\n    'manicure',\n    'manifesto',\n    'manila',\n    'mankind',\n    'manlike',\n    'manliness',\n    'manly',\n    'manmade',\n    'manned',\n    'mannish',\n    'manor',\n    'manpower',\n    'mantis',\n    'mantra',\n    'manual',\n    'many',\n    'map',\n    'marathon',\n    'marauding',\n    'marbled',\n    'marbles',\n    'marbling',\n    'march',\n    'mardi',\n    'margarine',\n    'margarita',\n    'margin',\n    'marigold',\n    'marina',\n    'marine',\n    'marital',\n    'maritime',\n    'marlin',\n    'marmalade',\n    'maroon',\n    'married',\n    'marrow',\n    'marry',\n    'marshland',\n    'marshy',\n    'marsupial',\n    'marvelous',\n    'marxism',\n    'mascot',\n    'masculine',\n    'mashed',\n    'mashing',\n    'massager',\n    'masses',\n    'massive',\n    'mastiff',\n    'matador',\n    'matchbook',\n    'matchbox',\n    'matcher',\n    'matching',\n    'matchless',\n    'material',\n    'maternal',\n    'maternity',\n    'math',\n    'mating',\n    'matriarch',\n    'matrimony',\n    'matrix',\n    'matron',\n    'matted',\n    'matter',\n    'maturely',\n    'maturing',\n    'maturity',\n    'mauve',\n    'maverick',\n    'maximize',\n    'maximum',\n    'maybe',\n    'mayday',\n    'mayflower',\n    'moaner',\n    'moaning',\n    'mobile',\n    'mobility',\n    'mobilize',\n    'mobster',\n    'mocha',\n    'mocker',\n    'mockup',\n    'modified',\n    'modify',\n    'modular',\n    'modulator',\n    'module',\n    'moisten',\n    'moistness',\n    'moisture',\n    'molar',\n    'molasses',\n    'mold',\n    'molecular',\n    'molecule',\n    'molehill',\n    'mollusk',\n    'mom',\n    'monastery',\n    'monday',\n    'monetary',\n    'monetize',\n    'moneybags',\n    'moneyless',\n    'moneywise',\n    'mongoose',\n    'mongrel',\n    'monitor',\n    'monkhood',\n    'monogamy',\n    'monogram',\n    'monologue',\n    'monopoly',\n    'monorail',\n    'monotone',\n    'monotype',\n    'monoxide',\n    'monsieur',\n    'monsoon',\n    'monstrous',\n    'monthly',\n    'monument',\n    'moocher',\n    'moodiness',\n    'moody',\n    'mooing',\n    'moonbeam',\n    'mooned',\n    'moonlight',\n    'moonlike',\n    'moonlit',\n    'moonrise',\n    'moonscape',\n    'moonshine',\n    'moonstone',\n    'moonwalk',\n    'mop',\n    'morale',\n    'morality',\n    'morally',\n    'morbidity',\n    'morbidly',\n    'morphine',\n    'morphing',\n    'morse',\n    'mortality',\n    'mortally',\n    'mortician',\n    'mortified',\n    'mortify',\n    'mortuary',\n    'mosaic',\n    'mossy',\n    'most',\n    'mothball',\n    'mothproof',\n    'motion',\n    'motivate',\n    'motivator',\n    'motive',\n    'motocross',\n    'motor',\n    'motto',\n    'mountable',\n    'mountain',\n    'mounted',\n    'mounting',\n    'mourner',\n    'mournful',\n    'mouse',\n    'mousiness',\n    'moustache',\n    'mousy',\n    'mouth',\n    'movable',\n    'move',\n    'movie',\n    'moving',\n    'mower',\n    'mowing',\n    'much',\n    'muck',\n    'mud',\n    'mug',\n    'mulberry',\n    'mulch',\n    'mule',\n    'mulled',\n    'mullets',\n    'multiple',\n    'multiply',\n    'multitask',\n    'multitude',\n    'mumble',\n    'mumbling',\n    'mumbo',\n    'mummified',\n    'mummify',\n    'mummy',\n    'mumps',\n    'munchkin',\n    'mundane',\n    'municipal',\n    'muppet',\n    'mural',\n    'murkiness',\n    'murky',\n    'murmuring',\n    'muscular',\n    'museum',\n    'mushily',\n    'mushiness',\n    'mushroom',\n    'mushy',\n    'music',\n    'musket',\n    'muskiness',\n    'musky',\n    'mustang',\n    'mustard',\n    'muster',\n    'mustiness',\n    'musty',\n    'mutable',\n    'mutate',\n    'mutation',\n    'mute',\n    'mutilated',\n    'mutilator',\n    'mutiny',\n    'mutt',\n    'mutual',\n    'muzzle',\n    'myself',\n    'myspace',\n    'mystified',\n    'mystify',\n    'myth',\n    'nacho',\n    'nag',\n    'nail',\n    'name',\n    'naming',\n    'nanny',\n    'nanometer',\n    'nape',\n    'napkin',\n    'napped',\n    'napping',\n    'nappy',\n    'narrow',\n    'nastily',\n    'nastiness',\n    'national',\n    'native',\n    'nativity',\n    'natural',\n    'nature',\n    'naturist',\n    'nautical',\n    'navigate',\n    'navigator',\n    'navy',\n    'nearby',\n    'nearest',\n    'nearly',\n    'nearness',\n    'neatly',\n    'neatness',\n    'nebula',\n    'nebulizer',\n    'nectar',\n    'negate',\n    'negation',\n    'negative',\n    'neglector',\n    'negligee',\n    'negligent',\n    'negotiate',\n    'nemeses',\n    'nemesis',\n    'neon',\n    'nephew',\n    'nerd',\n    'nervous',\n    'nervy',\n    'nest',\n    'net',\n    'neurology',\n    'neuron',\n    'neurosis',\n    'neurotic',\n    'neuter',\n    'neutron',\n    'never',\n    'next',\n    'nibble',\n    'nickname',\n    'nicotine',\n    'niece',\n    'nifty',\n    'nimble',\n    'nimbly',\n    'nineteen',\n    'ninetieth',\n    'ninja',\n    'nintendo',\n    'ninth',\n    'nuclear',\n    'nuclei',\n    'nucleus',\n    'nugget',\n    'nullify',\n    'number',\n    'numbing',\n    'numbly',\n    'numbness',\n    'numeral',\n    'numerate',\n    'numerator',\n    'numeric',\n    'numerous',\n    'nuptials',\n    'nursery',\n    'nursing',\n    'nurture',\n    'nutcase',\n    'nutlike',\n    'nutmeg',\n    'nutrient',\n    'nutshell',\n    'nuttiness',\n    'nutty',\n    'nuzzle',\n    'nylon',\n    'oaf',\n    'oak',\n    'oasis',\n    'oat',\n    'obedience',\n    'obedient',\n    'obituary',\n    'object',\n    'obligate',\n    'obliged',\n    'oblivion',\n    'oblivious',\n    'oblong',\n    'obnoxious',\n    'oboe',\n    'obscure',\n    'obscurity',\n    'observant',\n    'observer',\n    'observing',\n    'obsessed',\n    'obsession',\n    'obsessive',\n    'obsolete',\n    'obstacle',\n    'obstinate',\n    'obstruct',\n    'obtain',\n    'obtrusive',\n    'obtuse',\n    'obvious',\n    'occultist',\n    'occupancy',\n    'occupant',\n    'occupier',\n    'occupy',\n    'ocean',\n    'ocelot',\n    'octagon',\n    'octane',\n    'october',\n    'octopus',\n    'ogle',\n    'oil',\n    'oink',\n    'ointment',\n    'okay',\n    'old',\n    'olive',\n    'olympics',\n    'omega',\n    'omen',\n    'ominous',\n    'omission',\n    'omit',\n    'omnivore',\n    'onboard',\n    'oncoming',\n    'ongoing',\n    'onion',\n    'online',\n    'onlooker',\n    'only',\n    'onscreen',\n    'onset',\n    'onshore',\n    'onslaught',\n    'onstage',\n    'onto',\n    'onward',\n    'onyx',\n    'oops',\n    'ooze',\n    'oozy',\n    'opacity',\n    'opal',\n    'open',\n    'operable',\n    'operate',\n    'operating',\n    'operation',\n    'operative',\n    'operator',\n    'opium',\n    'opossum',\n    'opponent',\n    'oppose',\n    'opposing',\n    'opposite',\n    'oppressed',\n    'oppressor',\n    'opt',\n    'opulently',\n    'osmosis',\n    'other',\n    'otter',\n    'ouch',\n    'ought',\n    'ounce',\n    'outage',\n    'outback',\n    'outbid',\n    'outboard',\n    'outbound',\n    'outbreak',\n    'outburst',\n    'outcast',\n    'outclass',\n    'outcome',\n    'outdated',\n    'outdoors',\n    'outer',\n    'outfield',\n    'outfit',\n    'outflank',\n    'outgoing',\n    'outgrow',\n    'outhouse',\n    'outing',\n    'outlast',\n    'outlet',\n    'outline',\n    'outlook',\n    'outlying',\n    'outmatch',\n    'outmost',\n    'outnumber',\n    'outplayed',\n    'outpost',\n    'outpour',\n    'output',\n    'outrage',\n    'outrank',\n    'outreach',\n    'outright',\n    'outscore',\n    'outsell',\n    'outshine',\n    'outshoot',\n    'outsider',\n    'outskirts',\n    'outsmart',\n    'outsource',\n    'outspoken',\n    'outtakes',\n    'outthink',\n    'outward',\n    'outweigh',\n    'outwit',\n    'oval',\n    'ovary',\n    'oven',\n    'overact',\n    'overall',\n    'overarch',\n    'overbid',\n    'overbill',\n    'overbite',\n    'overblown',\n    'overboard',\n    'overbook',\n    'overbuilt',\n    'overcast',\n    'overcoat',\n    'overcome',\n    'overcook',\n    'overcrowd',\n    'overdraft',\n    'overdrawn',\n    'overdress',\n    'overdrive',\n    'overdue',\n    'overeager',\n    'overeater',\n    'overexert',\n    'overfed',\n    'overfeed',\n    'overfill',\n    'overflow',\n    'overfull',\n    'overgrown',\n    'overhand',\n    'overhang',\n    'overhaul',\n    'overhead',\n    'overhear',\n    'overheat',\n    'overhung',\n    'overjoyed',\n    'overkill',\n    'overlabor',\n    'overlaid',\n    'overlap',\n    'overlay',\n    'overload',\n    'overlook',\n    'overlord',\n    'overlying',\n    'overnight',\n    'overpass',\n    'overpay',\n    'overplant',\n    'overplay',\n    'overpower',\n    'overprice',\n    'overrate',\n    'overreach',\n    'overreact',\n    'override',\n    'overripe',\n    'overrule',\n    'overrun',\n    'overshoot',\n    'overshot',\n    'oversight',\n    'oversized',\n    'oversleep',\n    'oversold',\n    'overspend',\n    'overstate',\n    'overstay',\n    'overstep',\n    'overstock',\n    'overstuff',\n    'oversweet',\n    'overtake',\n    'overthrow',\n    'overtime',\n    'overtly',\n    'overtone',\n    'overture',\n    'overturn',\n    'overuse',\n    'overvalue',\n    'overview',\n    'overwrite',\n    'owl',\n    'oxford',\n    'oxidant',\n    'oxidation',\n    'oxidize',\n    'oxidizing',\n    'oxygen',\n    'oxymoron',\n    'oyster',\n    'ozone',\n    'paced',\n    'pacemaker',\n    'pacific',\n    'pacifier',\n    'pacifism',\n    'pacifist',\n    'pacify',\n    'padded',\n    'padding',\n    'paddle',\n    'paddling',\n    'padlock',\n    'pagan',\n    'pager',\n    'paging',\n    'pajamas',\n    'palace',\n    'palatable',\n    'palm',\n    'palpable',\n    'palpitate',\n    'paltry',\n    'pampered',\n    'pamperer',\n    'pampers',\n    'pamphlet',\n    'panama',\n    'pancake',\n    'pancreas',\n    'panda',\n    'pandemic',\n    'pang',\n    'panhandle',\n    'panic',\n    'panning',\n    'panorama',\n    'panoramic',\n    'panther',\n    'pantomime',\n    'pantry',\n    'pants',\n    'pantyhose',\n    'paparazzi',\n    'papaya',\n    'paper',\n    'paprika',\n    'papyrus',\n    'parabola',\n    'parachute',\n    'parade',\n    'paradox',\n    'paragraph',\n    'parakeet',\n    'paralegal',\n    'paralyses',\n    'paralysis',\n    'paralyze',\n    'paramedic',\n    'parameter',\n    'paramount',\n    'parasail',\n    'parasite',\n    'parasitic',\n    'parcel',\n    'parched',\n    'parchment',\n    'pardon',\n    'parish',\n    'parka',\n    'parking',\n    'parkway',\n    'parlor',\n    'parmesan',\n    'parole',\n    'parrot',\n    'parsley',\n    'parsnip',\n    'partake',\n    'parted',\n    'parting',\n    'partition',\n    'partly',\n    'partner',\n    'partridge',\n    'party',\n    'passable',\n    'passably',\n    'passage',\n    'passcode',\n    'passenger',\n    'passerby',\n    'passing',\n    'passion',\n    'passive',\n    'passivism',\n    'passover',\n    'passport',\n    'password',\n    'pasta',\n    'pasted',\n    'pastel',\n    'pastime',\n    'pastor',\n    'pastrami',\n    'pasture',\n    'pasty',\n    'patchwork',\n    'patchy',\n    'paternal',\n    'paternity',\n    'path',\n    'patience',\n    'patient',\n    'patio',\n    'patriarch',\n    'patriot',\n    'patrol',\n    'patronage',\n    'patronize',\n    'pauper',\n    'pavement',\n    'paver',\n    'pavestone',\n    'pavilion',\n    'paving',\n    'pawing',\n    'payable',\n    'payback',\n    'paycheck',\n    'payday',\n    'payee',\n    'payer',\n    'paying',\n    'payment',\n    'payphone',\n    'payroll',\n    'pebble',\n    'pebbly',\n    'pecan',\n    'pectin',\n    'peculiar',\n    'peddling',\n    'pediatric',\n    'pedicure',\n    'pedigree',\n    'pedometer',\n    'pegboard',\n    'pelican',\n    'pellet',\n    'pelt',\n    'pelvis',\n    'penalize',\n    'penalty',\n    'pencil',\n    'pendant',\n    'pending',\n    'penholder',\n    'penknife',\n    'pennant',\n    'penniless',\n    'penny',\n    'penpal',\n    'pension',\n    'pentagon',\n    'pentagram',\n    'pep',\n    'perceive',\n    'percent',\n    'perch',\n    'percolate',\n    'perennial',\n    'perfected',\n    'perfectly',\n    'perfume',\n    'periscope',\n    'perish',\n    'perjurer',\n    'perjury',\n    'perkiness',\n    'perky',\n    'perm',\n    'peroxide',\n    'perpetual',\n    'perplexed',\n    'persecute',\n    'persevere',\n    'persuaded',\n    'persuader',\n    'pesky',\n    'peso',\n    'pessimism',\n    'pessimist',\n    'pester',\n    'pesticide',\n    'petal',\n    'petite',\n    'petition',\n    'petri',\n    'petroleum',\n    'petted',\n    'petticoat',\n    'pettiness',\n    'petty',\n    'petunia',\n    'phantom',\n    'phobia',\n    'phoenix',\n    'phonebook',\n    'phoney',\n    'phonics',\n    'phoniness',\n    'phony',\n    'phosphate',\n    'photo',\n    'phrase',\n    'phrasing',\n    'placard',\n    'placate',\n    'placidly',\n    'plank',\n    'planner',\n    'plant',\n    'plasma',\n    'plaster',\n    'plastic',\n    'plated',\n    'platform',\n    'plating',\n    'platinum',\n    'platonic',\n    'platter',\n    'platypus',\n    'plausible',\n    'plausibly',\n    'playable',\n    'playback',\n    'player',\n    'playful',\n    'playgroup',\n    'playhouse',\n    'playing',\n    'playlist',\n    'playmaker',\n    'playmate',\n    'playoff',\n    'playpen',\n    'playroom',\n    'playset',\n    'plaything',\n    'playtime',\n    'plaza',\n    'pleading',\n    'pleat',\n    'pledge',\n    'plentiful',\n    'plenty',\n    'plethora',\n    'plexiglas',\n    'pliable',\n    'plod',\n    'plop',\n    'plot',\n    'plow',\n    'ploy',\n    'pluck',\n    'plug',\n    'plunder',\n    'plunging',\n    'plural',\n    'plus',\n    'plutonium',\n    'plywood',\n    'poach',\n    'pod',\n    'poem',\n    'poet',\n    'pogo',\n    'pointed',\n    'pointer',\n    'pointing',\n    'pointless',\n    'pointy',\n    'poise',\n    'poison',\n    'poker',\n    'poking',\n    'polar',\n    'police',\n    'policy',\n    'polio',\n    'polish',\n    'politely',\n    'polka',\n    'polo',\n    'polyester',\n    'polygon',\n    'polygraph',\n    'polymer',\n    'poncho',\n    'pond',\n    'pony',\n    'popcorn',\n    'pope',\n    'poplar',\n    'popper',\n    'poppy',\n    'popsicle',\n    'populace',\n    'popular',\n    'populate',\n    'porcupine',\n    'pork',\n    'porous',\n    'porridge',\n    'portable',\n    'portal',\n    'portfolio',\n    'porthole',\n    'portion',\n    'portly',\n    'portside',\n    'poser',\n    'posh',\n    'posing',\n    'possible',\n    'possibly',\n    'possum',\n    'postage',\n    'postal',\n    'postbox',\n    'postcard',\n    'posted',\n    'poster',\n    'posting',\n    'postnasal',\n    'posture',\n    'postwar',\n    'pouch',\n    'pounce',\n    'pouncing',\n    'pound',\n    'pouring',\n    'pout',\n    'powdered',\n    'powdering',\n    'powdery',\n    'power',\n    'powwow',\n    'pox',\n    'praising',\n    'prance',\n    'prancing',\n    'pranker',\n    'prankish',\n    'prankster',\n    'prayer',\n    'praying',\n    'preacher',\n    'preaching',\n    'preachy',\n    'preamble',\n    'precinct',\n    'precise',\n    'precision',\n    'precook',\n    'precut',\n    'predator',\n    'predefine',\n    'predict',\n    'preface',\n    'prefix',\n    'preflight',\n    'preformed',\n    'pregame',\n    'pregnancy',\n    'pregnant',\n    'preheated',\n    'prelaunch',\n    'prelaw',\n    'prelude',\n    'premiere',\n    'premises',\n    'premium',\n    'prenatal',\n    'preoccupy',\n    'preorder',\n    'prepaid',\n    'prepay',\n    'preplan',\n    'preppy',\n    'preschool',\n    'prescribe',\n    'preseason',\n    'preset',\n    'preshow',\n    'president',\n    'presoak',\n    'press',\n    'presume',\n    'presuming',\n    'preteen',\n    'pretended',\n    'pretender',\n    'pretense',\n    'pretext',\n    'pretty',\n    'pretzel',\n    'prevail',\n    'prevalent',\n    'prevent',\n    'preview',\n    'previous',\n    'prewar',\n    'prewashed',\n    'prideful',\n    'pried',\n    'primal',\n    'primarily',\n    'primary',\n    'primate',\n    'primer',\n    'primp',\n    'princess',\n    'print',\n    'prior',\n    'prism',\n    'prison',\n    'prissy',\n    'pristine',\n    'privacy',\n    'private',\n    'privatize',\n    'prize',\n    'proactive',\n    'probable',\n    'probably',\n    'probation',\n    'probe',\n    'probing',\n    'probiotic',\n    'problem',\n    'procedure',\n    'process',\n    'proclaim',\n    'procreate',\n    'procurer',\n    'prodigal',\n    'prodigy',\n    'produce',\n    'product',\n    'profane',\n    'profanity',\n    'professed',\n    'professor',\n    'profile',\n    'profound',\n    'profusely',\n    'progeny',\n    'prognosis',\n    'program',\n    'progress',\n    'projector',\n    'prologue',\n    'prolonged',\n    'promenade',\n    'prominent',\n    'promoter',\n    'promotion',\n    'prompter',\n    'promptly',\n    'prone',\n    'prong',\n    'pronounce',\n    'pronto',\n    'proofing',\n    'proofread',\n    'proofs',\n    'propeller',\n    'properly',\n    'property',\n    'proponent',\n    'proposal',\n    'propose',\n    'props',\n    'prorate',\n    'protector',\n    'protegee',\n    'proton',\n    'prototype',\n    'protozoan',\n    'protract',\n    'protrude',\n    'proud',\n    'provable',\n    'proved',\n    'proven',\n    'provided',\n    'provider',\n    'providing',\n    'province',\n    'proving',\n    'provoke',\n    'provoking',\n    'provolone',\n    'prowess',\n    'prowler',\n    'prowling',\n    'proximity',\n    'proxy',\n    'prozac',\n    'prude',\n    'prudishly',\n    'prune',\n    'pruning',\n    'pry',\n    'psychic',\n    'public',\n    'publisher',\n    'pucker',\n    'pueblo',\n    'pug',\n    'pull',\n    'pulmonary',\n    'pulp',\n    'pulsate',\n    'pulse',\n    'pulverize',\n    'puma',\n    'pumice',\n    'pummel',\n    'punch',\n    'punctual',\n    'punctuate',\n    'punctured',\n    'pungent',\n    'punisher',\n    'punk',\n    'pupil',\n    'puppet',\n    'puppy',\n    'purchase',\n    'pureblood',\n    'purebred',\n    'purely',\n    'pureness',\n    'purgatory',\n    'purge',\n    'purging',\n    'purifier',\n    'purify',\n    'purist',\n    'puritan',\n    'purity',\n    'purple',\n    'purplish',\n    'purposely',\n    'purr',\n    'purse',\n    'pursuable',\n    'pursuant',\n    'pursuit',\n    'purveyor',\n    'pushcart',\n    'pushchair',\n    'pusher',\n    'pushiness',\n    'pushing',\n    'pushover',\n    'pushpin',\n    'pushup',\n    'pushy',\n    'putdown',\n    'putt',\n    'puzzle',\n    'puzzling',\n    'pyramid',\n    'pyromania',\n    'python',\n    'quack',\n    'quadrant',\n    'quail',\n    'quaintly',\n    'quake',\n    'quaking',\n    'qualified',\n    'qualifier',\n    'qualify',\n    'quality',\n    'qualm',\n    'quantum',\n    'quarrel',\n    'quarry',\n    'quartered',\n    'quarterly',\n    'quarters',\n    'quartet',\n    'quench',\n    'query',\n    'quicken',\n    'quickly',\n    'quickness',\n    'quicksand',\n    'quickstep',\n    'quiet',\n    'quill',\n    'quilt',\n    'quintet',\n    'quintuple',\n    'quirk',\n    'quit',\n    'quiver',\n    'quizzical',\n    'quotable',\n    'quotation',\n    'quote',\n    'rabid',\n    'race',\n    'racing',\n    'racism',\n    'rack',\n    'racoon',\n    'radar',\n    'radial',\n    'radiance',\n    'radiantly',\n    'radiated',\n    'radiation',\n    'radiator',\n    'radio',\n    'radish',\n    'raffle',\n    'raft',\n    'rage',\n    'ragged',\n    'raging',\n    'ragweed',\n    'raider',\n    'railcar',\n    'railing',\n    'railroad',\n    'railway',\n    'raisin',\n    'rake',\n    'raking',\n    'rally',\n    'ramble',\n    'rambling',\n    'ramp',\n    'ramrod',\n    'ranch',\n    'rancidity',\n    'random',\n    'ranged',\n    'ranger',\n    'ranging',\n    'ranked',\n    'ranking',\n    'ransack',\n    'ranting',\n    'rants',\n    'rare',\n    'rarity',\n    'rascal',\n    'rash',\n    'rasping',\n    'ravage',\n    'raven',\n    'ravine',\n    'raving',\n    'ravioli',\n    'ravishing',\n    'reabsorb',\n    'reach',\n    'reacquire',\n    'reaction',\n    'reactive',\n    'reactor',\n    'reaffirm',\n    'ream',\n    'reanalyze',\n    'reappear',\n    'reapply',\n    'reappoint',\n    'reapprove',\n    'rearrange',\n    'rearview',\n    'reason',\n    'reassign',\n    'reassure',\n    'reattach',\n    'reawake',\n    'rebalance',\n    'rebate',\n    'rebel',\n    'rebirth',\n    'reboot',\n    'reborn',\n    'rebound',\n    'rebuff',\n    'rebuild',\n    'rebuilt',\n    'reburial',\n    'rebuttal',\n    'recall',\n    'recant',\n    'recapture',\n    'recast',\n    'recede',\n    'recent',\n    'recess',\n    'recharger',\n    'recipient',\n    'recital',\n    'recite',\n    'reckless',\n    'reclaim',\n    'recliner',\n    'reclining',\n    'recluse',\n    'reclusive',\n    'recognize',\n    'recoil',\n    'recollect',\n    'recolor',\n    'reconcile',\n    'reconfirm',\n    'reconvene',\n    'recopy',\n    'record',\n    'recount',\n    'recoup',\n    'recovery',\n    'recreate',\n    'rectal',\n    'rectangle',\n    'rectified',\n    'rectify',\n    'recycled',\n    'recycler',\n    'recycling',\n    'reemerge',\n    'reenact',\n    'reenter',\n    'reentry',\n    'reexamine',\n    'referable',\n    'referee',\n    'reference',\n    'refill',\n    'refinance',\n    'refined',\n    'refinery',\n    'refining',\n    'refinish',\n    'reflected',\n    'reflector',\n    'reflex',\n    'reflux',\n    'refocus',\n    'refold',\n    'reforest',\n    'reformat',\n    'reformed',\n    'reformer',\n    'reformist',\n    'refract',\n    'refrain',\n    'refreeze',\n    'refresh',\n    'refried',\n    'refueling',\n    'refund',\n    'refurbish',\n    'refurnish',\n    'refusal',\n    'refuse',\n    'refusing',\n    'refutable',\n    'refute',\n    'regain',\n    'regalia',\n    'regally',\n    'reggae',\n    'regime',\n    'region',\n    'register',\n    'registrar',\n    'registry',\n    'regress',\n    'regretful',\n    'regroup',\n    'regular',\n    'regulate',\n    'regulator',\n    'rehab',\n    'reheat',\n    'rehire',\n    'rehydrate',\n    'reimburse',\n    'reissue',\n    'reiterate',\n    'rejoice',\n    'rejoicing',\n    'rejoin',\n    'rekindle',\n    'relapse',\n    'relapsing',\n    'relatable',\n    'related',\n    'relation',\n    'relative',\n    'relax',\n    'relay',\n    'relearn',\n    'release',\n    'relenting',\n    'reliable',\n    'reliably',\n    'reliance',\n    'reliant',\n    'relic',\n    'relieve',\n    'relieving',\n    'relight',\n    'relish',\n    'relive',\n    'reload',\n    'relocate',\n    'relock',\n    'reluctant',\n    'rely',\n    'remake',\n    'remark',\n    'remarry',\n    'rematch',\n    'remedial',\n    'remedy',\n    'remember',\n    'reminder',\n    'remindful',\n    'remission',\n    'remix',\n    'remnant',\n    'remodeler',\n    'remold',\n    'remorse',\n    'remote',\n    'removable',\n    'removal',\n    'removed',\n    'remover',\n    'removing',\n    'rename',\n    'renderer',\n    'rendering',\n    'rendition',\n    'renegade',\n    'renewable',\n    'renewably',\n    'renewal',\n    'renewed',\n    'renounce',\n    'renovate',\n    'renovator',\n    'rentable',\n    'rental',\n    'rented',\n    'renter',\n    'reoccupy',\n    'reoccur',\n    'reopen',\n    'reorder',\n    'repackage',\n    'repacking',\n    'repaint',\n    'repair',\n    'repave',\n    'repaying',\n    'repayment',\n    'repeal',\n    'repeated',\n    'repeater',\n    'repent',\n    'rephrase',\n    'replace',\n    'replay',\n    'replica',\n    'reply',\n    'reporter',\n    'repose',\n    'repossess',\n    'repost',\n    'repressed',\n    'reprimand',\n    'reprint',\n    'reprise',\n    'reproach',\n    'reprocess',\n    'reproduce',\n    'reprogram',\n    'reps',\n    'reptile',\n    'reptilian',\n    'repugnant',\n    'repulsion',\n    'repulsive',\n    'repurpose',\n    'reputable',\n    'reputably',\n    'request',\n    'require',\n    'requisite',\n    'reroute',\n    'rerun',\n    'resale',\n    'resample',\n    'rescuer',\n    'reseal',\n    'research',\n    'reselect',\n    'reseller',\n    'resemble',\n    'resend',\n    'resent',\n    'reset',\n    'reshape',\n    'reshoot',\n    'reshuffle',\n    'residence',\n    'residency',\n    'resident',\n    'residual',\n    'residue',\n    'resigned',\n    'resilient',\n    'resistant',\n    'resisting',\n    'resize',\n    'resolute',\n    'resolved',\n    'resonant',\n    'resonate',\n    'resort',\n    'resource',\n    'respect',\n    'resubmit',\n    'result',\n    'resume',\n    'resupply',\n    'resurface',\n    'resurrect',\n    'retail',\n    'retainer',\n    'retaining',\n    'retake',\n    'retaliate',\n    'retention',\n    'rethink',\n    'retinal',\n    'retired',\n    'retiree',\n    'retiring',\n    'retold',\n    'retool',\n    'retorted',\n    'retouch',\n    'retrace',\n    'retract',\n    'retrain',\n    'retread',\n    'retreat',\n    'retrial',\n    'retrieval',\n    'retriever',\n    'retry',\n    'return',\n    'retying',\n    'retype',\n    'reunion',\n    'reunite',\n    'reusable',\n    'reuse',\n    'reveal',\n    'reveler',\n    'revenge',\n    'revenue',\n    'reverb',\n    'revered',\n    'reverence',\n    'reverend',\n    'reversal',\n    'reverse',\n    'reversing',\n    'reversion',\n    'revert',\n    'revisable',\n    'revise',\n    'revision',\n    'revisit',\n    'revivable',\n    'revival',\n    'reviver',\n    'reviving',\n    'revocable',\n    'revoke',\n    'revolt',\n    'revolver',\n    'revolving',\n    'reward',\n    'rewash',\n    'rewind',\n    'rewire',\n    'reword',\n    'rework',\n    'rewrap',\n    'rewrite',\n    'rhyme',\n    'ribbon',\n    'ribcage',\n    'rice',\n    'riches',\n    'richly',\n    'richness',\n    'rickety',\n    'ricotta',\n    'riddance',\n    'ridden',\n    'ride',\n    'riding',\n    'rifling',\n    'rift',\n    'rigging',\n    'rigid',\n    'rigor',\n    'rimless',\n    'rimmed',\n    'rind',\n    'rink',\n    'rinse',\n    'rinsing',\n    'riot',\n    'ripcord',\n    'ripeness',\n    'ripening',\n    'ripping',\n    'ripple',\n    'rippling',\n    'riptide',\n    'rise',\n    'rising',\n    'risk',\n    'risotto',\n    'ritalin',\n    'ritzy',\n    'rival',\n    'riverbank',\n    'riverbed',\n    'riverboat',\n    'riverside',\n    'riveter',\n    'riveting',\n    'roamer',\n    'roaming',\n    'roast',\n    'robbing',\n    'robe',\n    'robin',\n    'robotics',\n    'robust',\n    'rockband',\n    'rocker',\n    'rocket',\n    'rockfish',\n    'rockiness',\n    'rocking',\n    'rocklike',\n    'rockslide',\n    'rockstar',\n    'rocky',\n    'rogue',\n    'roman',\n    'romp',\n    'rope',\n    'roping',\n    'roster',\n    'rosy',\n    'rotten',\n    'rotting',\n    'rotunda',\n    'roulette',\n    'rounding',\n    'roundish',\n    'roundness',\n    'roundup',\n    'roundworm',\n    'routine',\n    'routing',\n    'rover',\n    'roving',\n    'royal',\n    'rubbed',\n    'rubber',\n    'rubbing',\n    'rubble',\n    'rubdown',\n    'ruby',\n    'ruckus',\n    'rudder',\n    'rug',\n    'ruined',\n    'rule',\n    'rumble',\n    'rumbling',\n    'rummage',\n    'rumor',\n    'runaround',\n    'rundown',\n    'runner',\n    'running',\n    'runny',\n    'runt',\n    'runway',\n    'rupture',\n    'rural',\n    'ruse',\n    'rush',\n    'rust',\n    'rut',\n    'sabbath',\n    'sabotage',\n    'sacrament',\n    'sacred',\n    'sacrifice',\n    'sadden',\n    'saddlebag',\n    'saddled',\n    'saddling',\n    'sadly',\n    'sadness',\n    'safari',\n    'safeguard',\n    'safehouse',\n    'safely',\n    'safeness',\n    'saffron',\n    'saga',\n    'sage',\n    'sagging',\n    'saggy',\n    'said',\n    'saint',\n    'sake',\n    'salad',\n    'salami',\n    'salaried',\n    'salary',\n    'saline',\n    'salon',\n    'saloon',\n    'salsa',\n    'salt',\n    'salutary',\n    'salute',\n    'salvage',\n    'salvaging',\n    'salvation',\n    'same',\n    'sample',\n    'sampling',\n    'sanction',\n    'sanctity',\n    'sanctuary',\n    'sandal',\n    'sandbag',\n    'sandbank',\n    'sandbar',\n    'sandblast',\n    'sandbox',\n    'sanded',\n    'sandfish',\n    'sanding',\n    'sandlot',\n    'sandpaper',\n    'sandpit',\n    'sandstone',\n    'sandstorm',\n    'sandworm',\n    'sandy',\n    'sanitary',\n    'sanitizer',\n    'sank',\n    'santa',\n    'sapling',\n    'sappiness',\n    'sappy',\n    'sarcasm',\n    'sarcastic',\n    'sardine',\n    'sash',\n    'sasquatch',\n    'sassy',\n    'satchel',\n    'satiable',\n    'satin',\n    'satirical',\n    'satisfied',\n    'satisfy',\n    'saturate',\n    'saturday',\n    'sauciness',\n    'saucy',\n    'sauna',\n    'savage',\n    'savanna',\n    'saved',\n    'savings',\n    'savior',\n    'savor',\n    'saxophone',\n    'say',\n    'scabbed',\n    'scabby',\n    'scalded',\n    'scalding',\n    'scale',\n    'scaling',\n    'scallion',\n    'scallop',\n    'scalping',\n    'scam',\n    'scandal',\n    'scanner',\n    'scanning',\n    'scant',\n    'scapegoat',\n    'scarce',\n    'scarcity',\n    'scarecrow',\n    'scared',\n    'scarf',\n    'scarily',\n    'scariness',\n    'scarring',\n    'scary',\n    'scavenger',\n    'scenic',\n    'schedule',\n    'schematic',\n    'scheme',\n    'scheming',\n    'schilling',\n    'schnapps',\n    'scholar',\n    'science',\n    'scientist',\n    'scion',\n    'scoff',\n    'scolding',\n    'scone',\n    'scoop',\n    'scooter',\n    'scope',\n    'scorch',\n    'scorebook',\n    'scorecard',\n    'scored',\n    'scoreless',\n    'scorer',\n    'scoring',\n    'scorn',\n    'scorpion',\n    'scotch',\n    'scoundrel',\n    'scoured',\n    'scouring',\n    'scouting',\n    'scouts',\n    'scowling',\n    'scrabble',\n    'scraggly',\n    'scrambled',\n    'scrambler',\n    'scrap',\n    'scratch',\n    'scrawny',\n    'screen',\n    'scribble',\n    'scribe',\n    'scribing',\n    'scrimmage',\n    'script',\n    'scroll',\n    'scrooge',\n    'scrounger',\n    'scrubbed',\n    'scrubber',\n    'scruffy',\n    'scrunch',\n    'scrutiny',\n    'scuba',\n    'scuff',\n    'sculptor',\n    'sculpture',\n    'scurvy',\n    'scuttle',\n    'secluded',\n    'secluding',\n    'seclusion',\n    'second',\n    'secrecy',\n    'secret',\n    'sectional',\n    'sector',\n    'secular',\n    'securely',\n    'security',\n    'sedan',\n    'sedate',\n    'sedation',\n    'sedative',\n    'sediment',\n    'seduce',\n    'seducing',\n    'segment',\n    'seismic',\n    'seizing',\n    'seldom',\n    'selected',\n    'selection',\n    'selective',\n    'selector',\n    'self',\n    'seltzer',\n    'semantic',\n    'semester',\n    'semicolon',\n    'semifinal',\n    'seminar',\n    'semisoft',\n    'semisweet',\n    'senate',\n    'senator',\n    'send',\n    'senior',\n    'senorita',\n    'sensation',\n    'sensitive',\n    'sensitize',\n    'sensually',\n    'sensuous',\n    'sepia',\n    'september',\n    'septic',\n    'septum',\n    'sequel',\n    'sequence',\n    'sequester',\n    'series',\n    'sermon',\n    'serotonin',\n    'serpent',\n    'serrated',\n    'serve',\n    'service',\n    'serving',\n    'sesame',\n    'sessions',\n    'setback',\n    'setting',\n    'settle',\n    'settling',\n    'setup',\n    'sevenfold',\n    'seventeen',\n    'seventh',\n    'seventy',\n    'severity',\n    'shabby',\n    'shack',\n    'shaded',\n    'shadily',\n    'shadiness',\n    'shading',\n    'shadow',\n    'shady',\n    'shaft',\n    'shakable',\n    'shakily',\n    'shakiness',\n    'shaking',\n    'shaky',\n    'shale',\n    'shallot',\n    'shallow',\n    'shame',\n    'shampoo',\n    'shamrock',\n    'shank',\n    'shanty',\n    'shape',\n    'shaping',\n    'share',\n    'sharpener',\n    'sharper',\n    'sharpie',\n    'sharply',\n    'sharpness',\n    'shawl',\n    'sheath',\n    'shed',\n    'sheep',\n    'sheet',\n    'shelf',\n    'shell',\n    'shelter',\n    'shelve',\n    'shelving',\n    'sherry',\n    'shield',\n    'shifter',\n    'shifting',\n    'shiftless',\n    'shifty',\n    'shimmer',\n    'shimmy',\n    'shindig',\n    'shine',\n    'shingle',\n    'shininess',\n    'shining',\n    'shiny',\n    'ship',\n    'shirt',\n    'shivering',\n    'shock',\n    'shone',\n    'shoplift',\n    'shopper',\n    'shopping',\n    'shoptalk',\n    'shore',\n    'shortage',\n    'shortcake',\n    'shortcut',\n    'shorten',\n    'shorter',\n    'shorthand',\n    'shortlist',\n    'shortly',\n    'shortness',\n    'shorts',\n    'shortwave',\n    'shorty',\n    'shout',\n    'shove',\n    'showbiz',\n    'showcase',\n    'showdown',\n    'shower',\n    'showgirl',\n    'showing',\n    'showman',\n    'shown',\n    'showoff',\n    'showpiece',\n    'showplace',\n    'showroom',\n    'showy',\n    'shrank',\n    'shrapnel',\n    'shredder',\n    'shredding',\n    'shrewdly',\n    'shriek',\n    'shrill',\n    'shrimp',\n    'shrine',\n    'shrink',\n    'shrivel',\n    'shrouded',\n    'shrubbery',\n    'shrubs',\n    'shrug',\n    'shrunk',\n    'shucking',\n    'shudder',\n    'shuffle',\n    'shuffling',\n    'shun',\n    'shush',\n    'shut',\n    'shy',\n    'siamese',\n    'siberian',\n    'sibling',\n    'siding',\n    'sierra',\n    'siesta',\n    'sift',\n    'sighing',\n    'silenced',\n    'silencer',\n    'silent',\n    'silica',\n    'silicon',\n    'silk',\n    'silliness',\n    'silly',\n    'silo',\n    'silt',\n    'silver',\n    'similarly',\n    'simile',\n    'simmering',\n    'simple',\n    'simplify',\n    'simply',\n    'sincere',\n    'sincerity',\n    'singer',\n    'singing',\n    'single',\n    'singular',\n    'sinister',\n    'sinless',\n    'sinner',\n    'sinuous',\n    'sip',\n    'siren',\n    'sister',\n    'sitcom',\n    'sitter',\n    'sitting',\n    'situated',\n    'situation',\n    'sixfold',\n    'sixteen',\n    'sixth',\n    'sixties',\n    'sixtieth',\n    'sixtyfold',\n    'sizable',\n    'sizably',\n    'size',\n    'sizing',\n    'sizzle',\n    'sizzling',\n    'skater',\n    'skating',\n    'skedaddle',\n    'skeletal',\n    'skeleton',\n    'skeptic',\n    'sketch',\n    'skewed',\n    'skewer',\n    'skid',\n    'skied',\n    'skier',\n    'skies',\n    'skiing',\n    'skilled',\n    'skillet',\n    'skillful',\n    'skimmed',\n    'skimmer',\n    'skimming',\n    'skimpily',\n    'skincare',\n    'skinhead',\n    'skinless',\n    'skinning',\n    'skinny',\n    'skintight',\n    'skipper',\n    'skipping',\n    'skirmish',\n    'skirt',\n    'skittle',\n    'skydiver',\n    'skylight',\n    'skyline',\n    'skype',\n    'skyrocket',\n    'skyward',\n    'slab',\n    'slacked',\n    'slacker',\n    'slacking',\n    'slackness',\n    'slacks',\n    'slain',\n    'slam',\n    'slander',\n    'slang',\n    'slapping',\n    'slapstick',\n    'slashed',\n    'slashing',\n    'slate',\n    'slather',\n    'slaw',\n    'sled',\n    'sleek',\n    'sleep',\n    'sleet',\n    'sleeve',\n    'slept',\n    'sliceable',\n    'sliced',\n    'slicer',\n    'slicing',\n    'slick',\n    'slider',\n    'slideshow',\n    'sliding',\n    'slighted',\n    'slighting',\n    'slightly',\n    'slimness',\n    'slimy',\n    'slinging',\n    'slingshot',\n    'slinky',\n    'slip',\n    'slit',\n    'sliver',\n    'slobbery',\n    'slogan',\n    'sloped',\n    'sloping',\n    'sloppily',\n    'sloppy',\n    'slot',\n    'slouching',\n    'slouchy',\n    'sludge',\n    'slug',\n    'slum',\n    'slurp',\n    'slush',\n    'sly',\n    'small',\n    'smartly',\n    'smartness',\n    'smasher',\n    'smashing',\n    'smashup',\n    'smell',\n    'smelting',\n    'smile',\n    'smilingly',\n    'smirk',\n    'smite',\n    'smith',\n    'smitten',\n    'smock',\n    'smog',\n    'smoked',\n    'smokeless',\n    'smokiness',\n    'smoking',\n    'smoky',\n    'smolder',\n    'smooth',\n    'smother',\n    'smudge',\n    'smudgy',\n    'smuggler',\n    'smuggling',\n    'smugly',\n    'smugness',\n    'snack',\n    'snagged',\n    'snaking',\n    'snap',\n    'snare',\n    'snarl',\n    'snazzy',\n    'sneak',\n    'sneer',\n    'sneeze',\n    'sneezing',\n    'snide',\n    'sniff',\n    'snippet',\n    'snipping',\n    'snitch',\n    'snooper',\n    'snooze',\n    'snore',\n    'snoring',\n    'snorkel',\n    'snort',\n    'snout',\n    'snowbird',\n    'snowboard',\n    'snowbound',\n    'snowcap',\n    'snowdrift',\n    'snowdrop',\n    'snowfall',\n    'snowfield',\n    'snowflake',\n    'snowiness',\n    'snowless',\n    'snowman',\n    'snowplow',\n    'snowshoe',\n    'snowstorm',\n    'snowsuit',\n    'snowy',\n    'snub',\n    'snuff',\n    'snuggle',\n    'snugly',\n    'snugness',\n    'speak',\n    'spearfish',\n    'spearhead',\n    'spearman',\n    'spearmint',\n    'species',\n    'specimen',\n    'specked',\n    'speckled',\n    'specks',\n    'spectacle',\n    'spectator',\n    'spectrum',\n    'speculate',\n    'speech',\n    'speed',\n    'spellbind',\n    'speller',\n    'spelling',\n    'spendable',\n    'spender',\n    'spending',\n    'spent',\n    'spew',\n    'sphere',\n    'spherical',\n    'sphinx',\n    'spider',\n    'spied',\n    'spiffy',\n    'spill',\n    'spilt',\n    'spinach',\n    'spinal',\n    'spindle',\n    'spinner',\n    'spinning',\n    'spinout',\n    'spinster',\n    'spiny',\n    'spiral',\n    'spirited',\n    'spiritism',\n    'spirits',\n    'spiritual',\n    'splashed',\n    'splashing',\n    'splashy',\n    'splatter',\n    'spleen',\n    'splendid',\n    'splendor',\n    'splice',\n    'splicing',\n    'splinter',\n    'splotchy',\n    'splurge',\n    'spoilage',\n    'spoiled',\n    'spoiler',\n    'spoiling',\n    'spoils',\n    'spoken',\n    'spokesman',\n    'sponge',\n    'spongy',\n    'sponsor',\n    'spoof',\n    'spookily',\n    'spooky',\n    'spool',\n    'spoon',\n    'spore',\n    'sporting',\n    'sports',\n    'sporty',\n    'spotless',\n    'spotlight',\n    'spotted',\n    'spotter',\n    'spotting',\n    'spotty',\n    'spousal',\n    'spouse',\n    'spout',\n    'sprain',\n    'sprang',\n    'sprawl',\n    'spray',\n    'spree',\n    'sprig',\n    'spring',\n    'sprinkled',\n    'sprinkler',\n    'sprint',\n    'sprite',\n    'sprout',\n    'spruce',\n    'sprung',\n    'spry',\n    'spud',\n    'spur',\n    'sputter',\n    'spyglass',\n    'squabble',\n    'squad',\n    'squall',\n    'squander',\n    'squash',\n    'squatted',\n    'squatter',\n    'squatting',\n    'squeak',\n    'squealer',\n    'squealing',\n    'squeamish',\n    'squeegee',\n    'squeeze',\n    'squeezing',\n    'squid',\n    'squiggle',\n    'squiggly',\n    'squint',\n    'squire',\n    'squirt',\n    'squishier',\n    'squishy',\n    'stability',\n    'stabilize',\n    'stable',\n    'stack',\n    'stadium',\n    'staff',\n    'stage',\n    'staging',\n    'stagnant',\n    'stagnate',\n    'stainable',\n    'stained',\n    'staining',\n    'stainless',\n    'stalemate',\n    'staleness',\n    'stalling',\n    'stallion',\n    'stamina',\n    'stammer',\n    'stamp',\n    'stand',\n    'stank',\n    'staple',\n    'stapling',\n    'starboard',\n    'starch',\n    'stardom',\n    'stardust',\n    'starfish',\n    'stargazer',\n    'staring',\n    'stark',\n    'starless',\n    'starlet',\n    'starlight',\n    'starlit',\n    'starring',\n    'starry',\n    'starship',\n    'starter',\n    'starting',\n    'startle',\n    'startling',\n    'startup',\n    'starved',\n    'starving',\n    'stash',\n    'state',\n    'static',\n    'statistic',\n    'statue',\n    'stature',\n    'status',\n    'statute',\n    'statutory',\n    'staunch',\n    'stays',\n    'steadfast',\n    'steadier',\n    'steadily',\n    'steadying',\n    'steam',\n    'steed',\n    'steep',\n    'steerable',\n    'steering',\n    'steersman',\n    'stegosaur',\n    'stellar',\n    'stem',\n    'stench',\n    'stencil',\n    'step',\n    'stereo',\n    'sterile',\n    'sterility',\n    'sterilize',\n    'sterling',\n    'sternness',\n    'sternum',\n    'stew',\n    'stick',\n    'stiffen',\n    'stiffly',\n    'stiffness',\n    'stifle',\n    'stifling',\n    'stillness',\n    'stilt',\n    'stimulant',\n    'stimulate',\n    'stimuli',\n    'stimulus',\n    'stinger',\n    'stingily',\n    'stinging',\n    'stingray',\n    'stingy',\n    'stinking',\n    'stinky',\n    'stipend',\n    'stipulate',\n    'stir',\n    'stitch',\n    'stock',\n    'stoic',\n    'stoke',\n    'stole',\n    'stomp',\n    'stonewall',\n    'stoneware',\n    'stonework',\n    'stoning',\n    'stony',\n    'stood',\n    'stooge',\n    'stool',\n    'stoop',\n    'stoplight',\n    'stoppable',\n    'stoppage',\n    'stopped',\n    'stopper',\n    'stopping',\n    'stopwatch',\n    'storable',\n    'storage',\n    'storeroom',\n    'storewide',\n    'storm',\n    'stout',\n    'stove',\n    'stowaway',\n    'stowing',\n    'straddle',\n    'straggler',\n    'strained',\n    'strainer',\n    'straining',\n    'strangely',\n    'stranger',\n    'strangle',\n    'strategic',\n    'strategy',\n    'stratus',\n    'straw',\n    'stray',\n    'streak',\n    'stream',\n    'street',\n    'strength',\n    'strenuous',\n    'strep',\n    'stress',\n    'stretch',\n    'strewn',\n    'stricken',\n    'strict',\n    'stride',\n    'strife',\n    'strike',\n    'striking',\n    'strive',\n    'striving',\n    'strobe',\n    'strode',\n    'stroller',\n    'strongbox',\n    'strongly',\n    'strongman',\n    'struck',\n    'structure',\n    'strudel',\n    'struggle',\n    'strum',\n    'strung',\n    'strut',\n    'stubbed',\n    'stubble',\n    'stubbly',\n    'stubborn',\n    'stucco',\n    'stuck',\n    'student',\n    'studied',\n    'studio',\n    'study',\n    'stuffed',\n    'stuffing',\n    'stuffy',\n    'stumble',\n    'stumbling',\n    'stump',\n    'stung',\n    'stunned',\n    'stunner',\n    'stunning',\n    'stunt',\n    'stupor',\n    'sturdily',\n    'sturdy',\n    'styling',\n    'stylishly',\n    'stylist',\n    'stylized',\n    'stylus',\n    'suave',\n    'subarctic',\n    'subatomic',\n    'subdivide',\n    'subdued',\n    'subduing',\n    'subfloor',\n    'subgroup',\n    'subheader',\n    'subject',\n    'sublease',\n    'sublet',\n    'sublevel',\n    'sublime',\n    'submarine',\n    'submerge',\n    'submersed',\n    'submitter',\n    'subpanel',\n    'subpar',\n    'subplot',\n    'subprime',\n    'subscribe',\n    'subscript',\n    'subsector',\n    'subside',\n    'subsiding',\n    'subsidize',\n    'subsidy',\n    'subsoil',\n    'subsonic',\n    'substance',\n    'subsystem',\n    'subtext',\n    'subtitle',\n    'subtly',\n    'subtotal',\n    'subtract',\n    'subtype',\n    'suburb',\n    'subway',\n    'subwoofer',\n    'subzero',\n    'succulent',\n    'such',\n    'suction',\n    'sudden',\n    'sudoku',\n    'suds',\n    'sufferer',\n    'suffering',\n    'suffice',\n    'suffix',\n    'suffocate',\n    'suffrage',\n    'sugar',\n    'suggest',\n    'suing',\n    'suitable',\n    'suitably',\n    'suitcase',\n    'suitor',\n    'sulfate',\n    'sulfide',\n    'sulfite',\n    'sulfur',\n    'sulk',\n    'sullen',\n    'sulphate',\n    'sulphuric',\n    'sultry',\n    'superbowl',\n    'superglue',\n    'superhero',\n    'superior',\n    'superjet',\n    'superman',\n    'supermom',\n    'supernova',\n    'supervise',\n    'supper',\n    'supplier',\n    'supply',\n    'support',\n    'supremacy',\n    'supreme',\n    'surcharge',\n    'surely',\n    'sureness',\n    'surface',\n    'surfacing',\n    'surfboard',\n    'surfer',\n    'surgery',\n    'surgical',\n    'surging',\n    'surname',\n    'surpass',\n    'surplus',\n    'surprise',\n    'surreal',\n    'surrender',\n    'surrogate',\n    'surround',\n    'survey',\n    'survival',\n    'survive',\n    'surviving',\n    'survivor',\n    'sushi',\n    'suspect',\n    'suspend',\n    'suspense',\n    'sustained',\n    'sustainer',\n    'swab',\n    'swaddling',\n    'swagger',\n    'swampland',\n    'swan',\n    'swapping',\n    'swarm',\n    'sway',\n    'swear',\n    'sweat',\n    'sweep',\n    'swell',\n    'swept',\n    'swerve',\n    'swifter',\n    'swiftly',\n    'swiftness',\n    'swimmable',\n    'swimmer',\n    'swimming',\n    'swimsuit',\n    'swimwear',\n    'swinger',\n    'swinging',\n    'swipe',\n    'swirl',\n    'switch',\n    'swivel',\n    'swizzle',\n    'swooned',\n    'swoop',\n    'swoosh',\n    'swore',\n    'sworn',\n    'swung',\n    'sycamore',\n    'sympathy',\n    'symphonic',\n    'symphony',\n    'symptom',\n    'synapse',\n    'syndrome',\n    'synergy',\n    'synopses',\n    'synopsis',\n    'synthesis',\n    'synthetic',\n    'syrup',\n    'system',\n    't-shirt',\n    'tabasco',\n    'tabby',\n    'tableful',\n    'tables',\n    'tablet',\n    'tableware',\n    'tabloid',\n    'tackiness',\n    'tacking',\n    'tackle',\n    'tackling',\n    'tacky',\n    'taco',\n    'tactful',\n    'tactical',\n    'tactics',\n    'tactile',\n    'tactless',\n    'tadpole',\n    'taekwondo',\n    'tag',\n    'tainted',\n    'take',\n    'taking',\n    'talcum',\n    'talisman',\n    'tall',\n    'talon',\n    'tamale',\n    'tameness',\n    'tamer',\n    'tamper',\n    'tank',\n    'tanned',\n    'tannery',\n    'tanning',\n    'tantrum',\n    'tapeless',\n    'tapered',\n    'tapering',\n    'tapestry',\n    'tapioca',\n    'tapping',\n    'taps',\n    'tarantula',\n    'target',\n    'tarmac',\n    'tarnish',\n    'tarot',\n    'tartar',\n    'tartly',\n    'tartness',\n    'task',\n    'tassel',\n    'taste',\n    'tastiness',\n    'tasting',\n    'tasty',\n    'tattered',\n    'tattle',\n    'tattling',\n    'tattoo',\n    'taunt',\n    'tavern',\n    'thank',\n    'that',\n    'thaw',\n    'theater',\n    'theatrics',\n    'thee',\n    'theft',\n    'theme',\n    'theology',\n    'theorize',\n    'thermal',\n    'thermos',\n    'thesaurus',\n    'these',\n    'thesis',\n    'thespian',\n    'thicken',\n    'thicket',\n    'thickness',\n    'thieving',\n    'thievish',\n    'thigh',\n    'thimble',\n    'thing',\n    'think',\n    'thinly',\n    'thinner',\n    'thinness',\n    'thinning',\n    'thirstily',\n    'thirsting',\n    'thirsty',\n    'thirteen',\n    'thirty',\n    'thong',\n    'thorn',\n    'those',\n    'thousand',\n    'thrash',\n    'thread',\n    'threaten',\n    'threefold',\n    'thrift',\n    'thrill',\n    'thrive',\n    'thriving',\n    'throat',\n    'throbbing',\n    'throng',\n    'throttle',\n    'throwaway',\n    'throwback',\n    'thrower',\n    'throwing',\n    'thud',\n    'thumb',\n    'thumping',\n    'thursday',\n    'thus',\n    'thwarting',\n    'thyself',\n    'tiara',\n    'tibia',\n    'tidal',\n    'tidbit',\n    'tidiness',\n    'tidings',\n    'tidy',\n    'tiger',\n    'tighten',\n    'tightly',\n    'tightness',\n    'tightrope',\n    'tightwad',\n    'tigress',\n    'tile',\n    'tiling',\n    'till',\n    'tilt',\n    'timid',\n    'timing',\n    'timothy',\n    'tinderbox',\n    'tinfoil',\n    'tingle',\n    'tingling',\n    'tingly',\n    'tinker',\n    'tinkling',\n    'tinsel',\n    'tinsmith',\n    'tint',\n    'tinwork',\n    'tiny',\n    'tipoff',\n    'tipped',\n    'tipper',\n    'tipping',\n    'tiptoeing',\n    'tiptop',\n    'tiring',\n    'tissue',\n    'trace',\n    'tracing',\n    'track',\n    'traction',\n    'tractor',\n    'trade',\n    'trading',\n    'tradition',\n    'traffic',\n    'tragedy',\n    'trailing',\n    'trailside',\n    'train',\n    'traitor',\n    'trance',\n    'tranquil',\n    'transfer',\n    'transform',\n    'translate',\n    'transpire',\n    'transport',\n    'transpose',\n    'trapdoor',\n    'trapeze',\n    'trapezoid',\n    'trapped',\n    'trapper',\n    'trapping',\n    'traps',\n    'trash',\n    'travel',\n    'traverse',\n    'travesty',\n    'tray',\n    'treachery',\n    'treading',\n    'treadmill',\n    'treason',\n    'treat',\n    'treble',\n    'tree',\n    'trekker',\n    'tremble',\n    'trembling',\n    'tremor',\n    'trench',\n    'trend',\n    'trespass',\n    'triage',\n    'trial',\n    'triangle',\n    'tribesman',\n    'tribunal',\n    'tribune',\n    'tributary',\n    'tribute',\n    'triceps',\n    'trickery',\n    'trickily',\n    'tricking',\n    'trickle',\n    'trickster',\n    'tricky',\n    'tricolor',\n    'tricycle',\n    'trident',\n    'tried',\n    'trifle',\n    'trifocals',\n    'trillion',\n    'trilogy',\n    'trimester',\n    'trimmer',\n    'trimming',\n    'trimness',\n    'trinity',\n    'trio',\n    'tripod',\n    'tripping',\n    'triumph',\n    'trivial',\n    'trodden',\n    'trolling',\n    'trombone',\n    'trophy',\n    'tropical',\n    'tropics',\n    'trouble',\n    'troubling',\n    'trough',\n    'trousers',\n    'trout',\n    'trowel',\n    'truce',\n    'truck',\n    'truffle',\n    'trump',\n    'trunks',\n    'trustable',\n    'trustee',\n    'trustful',\n    'trusting',\n    'trustless',\n    'truth',\n    'try',\n    'tubby',\n    'tubeless',\n    'tubular',\n    'tucking',\n    'tuesday',\n    'tug',\n    'tuition',\n    'tulip',\n    'tumble',\n    'tumbling',\n    'tummy',\n    'turban',\n    'turbine',\n    'turbofan',\n    'turbojet',\n    'turbulent',\n    'turf',\n    'turkey',\n    'turmoil',\n    'turret',\n    'turtle',\n    'tusk',\n    'tutor',\n    'tutu',\n    'tux',\n    'tweak',\n    'tweed',\n    'tweet',\n    'tweezers',\n    'twelve',\n    'twentieth',\n    'twenty',\n    'twerp',\n    'twice',\n    'twiddle',\n    'twiddling',\n    'twig',\n    'twilight',\n    'twine',\n    'twins',\n    'twirl',\n    'twistable',\n    'twisted',\n    'twister',\n    'twisting',\n    'twisty',\n    'twitch',\n    'twitter',\n    'tycoon',\n    'tying',\n    'tyke',\n    'udder',\n    'ultimate',\n    'ultimatum',\n    'ultra',\n    'umbilical',\n    'umbrella',\n    'umpire',\n    'unabashed',\n    'unable',\n    'unadorned',\n    'unadvised',\n    'unafraid',\n    'unaired',\n    'unaligned',\n    'unaltered',\n    'unarmored',\n    'unashamed',\n    'unaudited',\n    'unawake',\n    'unaware',\n    'unbaked',\n    'unbalance',\n    'unbeaten',\n    'unbend',\n    'unbent',\n    'unbiased',\n    'unbitten',\n    'unblended',\n    'unblessed',\n    'unblock',\n    'unbolted',\n    'unbounded',\n    'unboxed',\n    'unbraided',\n    'unbridle',\n    'unbroken',\n    'unbuckled',\n    'unbundle',\n    'unburned',\n    'unbutton',\n    'uncanny',\n    'uncapped',\n    'uncaring',\n    'uncertain',\n    'unchain',\n    'unchanged',\n    'uncharted',\n    'uncheck',\n    'uncivil',\n    'unclad',\n    'unclaimed',\n    'unclamped',\n    'unclasp',\n    'uncle',\n    'unclip',\n    'uncloak',\n    'unclog',\n    'unclothed',\n    'uncoated',\n    'uncoiled',\n    'uncolored',\n    'uncombed',\n    'uncommon',\n    'uncooked',\n    'uncork',\n    'uncorrupt',\n    'uncounted',\n    'uncouple',\n    'uncouth',\n    'uncover',\n    'uncross',\n    'uncrown',\n    'uncrushed',\n    'uncured',\n    'uncurious',\n    'uncurled',\n    'uncut',\n    'undamaged',\n    'undated',\n    'undaunted',\n    'undead',\n    'undecided',\n    'undefined',\n    'underage',\n    'underarm',\n    'undercoat',\n    'undercook',\n    'undercut',\n    'underdog',\n    'underdone',\n    'underfed',\n    'underfeed',\n    'underfoot',\n    'undergo',\n    'undergrad',\n    'underhand',\n    'underline',\n    'underling',\n    'undermine',\n    'undermost',\n    'underpaid',\n    'underpass',\n    'underpay',\n    'underrate',\n    'undertake',\n    'undertone',\n    'undertook',\n    'undertow',\n    'underuse',\n    'underwear',\n    'underwent',\n    'underwire',\n    'undesired',\n    'undiluted',\n    'undivided',\n    'undocked',\n    'undoing',\n    'undone',\n    'undrafted',\n    'undress',\n    'undrilled',\n    'undusted',\n    'undying',\n    'unearned',\n    'unearth',\n    'unease',\n    'uneasily',\n    'uneasy',\n    'uneatable',\n    'uneaten',\n    'unedited',\n    'unelected',\n    'unending',\n    'unengaged',\n    'unenvied',\n    'unequal',\n    'unethical',\n    'uneven',\n    'unexpired',\n    'unexposed',\n    'unfailing',\n    'unfair',\n    'unfasten',\n    'unfazed',\n    'unfeeling',\n    'unfiled',\n    'unfilled',\n    'unfitted',\n    'unfitting',\n    'unfixable',\n    'unfixed',\n    'unflawed',\n    'unfocused',\n    'unfold',\n    'unfounded',\n    'unframed',\n    'unfreeze',\n    'unfrosted',\n    'unfrozen',\n    'unfunded',\n    'unglazed',\n    'ungloved',\n    'unglue',\n    'ungodly',\n    'ungraded',\n    'ungreased',\n    'unguarded',\n    'unguided',\n    'unhappily',\n    'unhappy',\n    'unharmed',\n    'unhealthy',\n    'unheard',\n    'unhearing',\n    'unheated',\n    'unhelpful',\n    'unhidden',\n    'unhinge',\n    'unhitched',\n    'unholy',\n    'unhook',\n    'unicorn',\n    'unicycle',\n    'unified',\n    'unifier',\n    'uniformed',\n    'uniformly',\n    'unify',\n    'unimpeded',\n    'uninjured',\n    'uninstall',\n    'uninsured',\n    'uninvited',\n    'union',\n    'uniquely',\n    'unisexual',\n    'unison',\n    'unissued',\n    'unit',\n    'universal',\n    'universe',\n    'unjustly',\n    'unkempt',\n    'unkind',\n    'unknotted',\n    'unknowing',\n    'unknown',\n    'unlaced',\n    'unlatch',\n    'unlawful',\n    'unleaded',\n    'unlearned',\n    'unleash',\n    'unless',\n    'unleveled',\n    'unlighted',\n    'unlikable',\n    'unlimited',\n    'unlined',\n    'unlinked',\n    'unlisted',\n    'unlit',\n    'unlivable',\n    'unloaded',\n    'unloader',\n    'unlocked',\n    'unlocking',\n    'unlovable',\n    'unloved',\n    'unlovely',\n    'unloving',\n    'unluckily',\n    'unlucky',\n    'unmade',\n    'unmanaged',\n    'unmanned',\n    'unmapped',\n    'unmarked',\n    'unmasked',\n    'unmasking',\n    'unmatched',\n    'unmindful',\n    'unmixable',\n    'unmixed',\n    'unmolded',\n    'unmoral',\n    'unmovable',\n    'unmoved',\n    'unmoving',\n    'unnamable',\n    'unnamed',\n    'unnatural',\n    'unneeded',\n    'unnerve',\n    'unnerving',\n    'unnoticed',\n    'unopened',\n    'unopposed',\n    'unpack',\n    'unpadded',\n    'unpaid',\n    'unpainted',\n    'unpaired',\n    'unpaved',\n    'unpeeled',\n    'unpicked',\n    'unpiloted',\n    'unpinned',\n    'unplanned',\n    'unplanted',\n    'unpleased',\n    'unpledged',\n    'unplowed',\n    'unplug',\n    'unpopular',\n    'unproven',\n    'unquote',\n    'unranked',\n    'unrated',\n    'unraveled',\n    'unreached',\n    'unread',\n    'unreal',\n    'unreeling',\n    'unrefined',\n    'unrelated',\n    'unrented',\n    'unrest',\n    'unretired',\n    'unrevised',\n    'unrigged',\n    'unripe',\n    'unrivaled',\n    'unroasted',\n    'unrobed',\n    'unroll',\n    'unruffled',\n    'unruly',\n    'unrushed',\n    'unsaddle',\n    'unsafe',\n    'unsaid',\n    'unsalted',\n    'unsaved',\n    'unsavory',\n    'unscathed',\n    'unscented',\n    'unscrew',\n    'unsealed',\n    'unseated',\n    'unsecured',\n    'unseeing',\n    'unseemly',\n    'unseen',\n    'unselect',\n    'unselfish',\n    'unsent',\n    'unsettled',\n    'unshackle',\n    'unshaken',\n    'unshaved',\n    'unshaven',\n    'unsheathe',\n    'unshipped',\n    'unsightly',\n    'unsigned',\n    'unskilled',\n    'unsliced',\n    'unsmooth',\n    'unsnap',\n    'unsocial',\n    'unsoiled',\n    'unsold',\n    'unsolved',\n    'unsorted',\n    'unspoiled',\n    'unspoken',\n    'unstable',\n    'unstaffed',\n    'unstamped',\n    'unsteady',\n    'unsterile',\n    'unstirred',\n    'unstitch',\n    'unstopped',\n    'unstuck',\n    'unstuffed',\n    'unstylish',\n    'unsubtle',\n    'unsubtly',\n    'unsuited',\n    'unsure',\n    'unsworn',\n    'untagged',\n    'untainted',\n    'untaken',\n    'untamed',\n    'untangled',\n    'untapped',\n    'untaxed',\n    'unthawed',\n    'unthread',\n    'untidy',\n    'untie',\n    'until',\n    'untimed',\n    'untimely',\n    'untitled',\n    'untoasted',\n    'untold',\n    'untouched',\n    'untracked',\n    'untrained',\n    'untreated',\n    'untried',\n    'untrimmed',\n    'untrue',\n    'untruth',\n    'unturned',\n    'untwist',\n    'untying',\n    'unusable',\n    'unused',\n    'unusual',\n    'unvalued',\n    'unvaried',\n    'unvarying',\n    'unveiled',\n    'unveiling',\n    'unvented',\n    'unviable',\n    'unvisited',\n    'unvocal',\n    'unwanted',\n    'unwarlike',\n    'unwary',\n    'unwashed',\n    'unwatched',\n    'unweave',\n    'unwed',\n    'unwelcome',\n    'unwell',\n    'unwieldy',\n    'unwilling',\n    'unwind',\n    'unwired',\n    'unwitting',\n    'unwomanly',\n    'unworldly',\n    'unworn',\n    'unworried',\n    'unworthy',\n    'unwound',\n    'unwoven',\n    'unwrapped',\n    'unwritten',\n    'unzip',\n    'upbeat',\n    'upchuck',\n    'upcoming',\n    'upcountry',\n    'update',\n    'upfront',\n    'upgrade',\n    'upheaval',\n    'upheld',\n    'uphill',\n    'uphold',\n    'uplifted',\n    'uplifting',\n    'upload',\n    'upon',\n    'upper',\n    'upright',\n    'uprising',\n    'upriver',\n    'uproar',\n    'uproot',\n    'upscale',\n    'upside',\n    'upstage',\n    'upstairs',\n    'upstart',\n    'upstate',\n    'upstream',\n    'upstroke',\n    'upswing',\n    'uptake',\n    'uptight',\n    'uptown',\n    'upturned',\n    'upward',\n    'upwind',\n    'uranium',\n    'urban',\n    'urchin',\n    'urethane',\n    'urgency',\n    'urgent',\n    'urging',\n    'urologist',\n    'urology',\n    'usable',\n    'usage',\n    'useable',\n    'used',\n    'uselessly',\n    'user',\n    'usher',\n    'usual',\n    'utensil',\n    'utility',\n    'utilize',\n    'utmost',\n    'utopia',\n    'utter',\n    'vacancy',\n    'vacant',\n    'vacate',\n    'vacation',\n    'vagabond',\n    'vagrancy',\n    'vagrantly',\n    'vaguely',\n    'vagueness',\n    'valiant',\n    'valid',\n    'valium',\n    'valley',\n    'valuables',\n    'value',\n    'vanilla',\n    'vanish',\n    'vanity',\n    'vanquish',\n    'vantage',\n    'vaporizer',\n    'variable',\n    'variably',\n    'varied',\n    'variety',\n    'various',\n    'varmint',\n    'varnish',\n    'varsity',\n    'varying',\n    'vascular',\n    'vaseline',\n    'vastly',\n    'vastness',\n    'veal',\n    'vegan',\n    'veggie',\n    'vehicular',\n    'velcro',\n    'velocity',\n    'velvet',\n    'vendetta',\n    'vending',\n    'vendor',\n    'veneering',\n    'vengeful',\n    'venomous',\n    'ventricle',\n    'venture',\n    'venue',\n    'venus',\n    'verbalize',\n    'verbally',\n    'verbose',\n    'verdict',\n    'verify',\n    'verse',\n    'version',\n    'versus',\n    'vertebrae',\n    'vertical',\n    'vertigo',\n    'very',\n    'vessel',\n    'vest',\n    'veteran',\n    'veto',\n    'vexingly',\n    'viability',\n    'viable',\n    'vibes',\n    'vice',\n    'vicinity',\n    'victory',\n    'video',\n    'viewable',\n    'viewer',\n    'viewing',\n    'viewless',\n    'viewpoint',\n    'vigorous',\n    'village',\n    'villain',\n    'vindicate',\n    'vineyard',\n    'vintage',\n    'violate',\n    'violation',\n    'violator',\n    'violet',\n    'violin',\n    'viper',\n    'viral',\n    'virtual',\n    'virtuous',\n    'virus',\n    'visa',\n    'viscosity',\n    'viscous',\n    'viselike',\n    'visible',\n    'visibly',\n    'vision',\n    'visiting',\n    'visitor',\n    'visor',\n    'vista',\n    'vitality',\n    'vitalize',\n    'vitally',\n    'vitamins',\n    'vivacious',\n    'vividly',\n    'vividness',\n    'vixen',\n    'vocalist',\n    'vocalize',\n    'vocally',\n    'vocation',\n    'voice',\n    'voicing',\n    'void',\n    'volatile',\n    'volley',\n    'voltage',\n    'volumes',\n    'voter',\n    'voting',\n    'voucher',\n    'vowed',\n    'vowel',\n    'voyage',\n    'wackiness',\n    'wad',\n    'wafer',\n    'waffle',\n    'waged',\n    'wager',\n    'wages',\n    'waggle',\n    'wagon',\n    'wake',\n    'waking',\n    'walk',\n    'walmart',\n    'walnut',\n    'walrus',\n    'waltz',\n    'wand',\n    'wannabe',\n    'wanted',\n    'wanting',\n    'wasabi',\n    'washable',\n    'washbasin',\n    'washboard',\n    'washbowl',\n    'washcloth',\n    'washday',\n    'washed',\n    'washer',\n    'washhouse',\n    'washing',\n    'washout',\n    'washroom',\n    'washstand',\n    'washtub',\n    'wasp',\n    'wasting',\n    'watch',\n    'water',\n    'waviness',\n    'waving',\n    'wavy',\n    'whacking',\n    'whacky',\n    'wham',\n    'wharf',\n    'wheat',\n    'whenever',\n    'whiff',\n    'whimsical',\n    'whinny',\n    'whiny',\n    'whisking',\n    'whoever',\n    'whole',\n    'whomever',\n    'whoopee',\n    'whooping',\n    'whoops',\n    'why',\n    'wick',\n    'widely',\n    'widen',\n    'widget',\n    'widow',\n    'width',\n    'wieldable',\n    'wielder',\n    'wife',\n    'wifi',\n    'wikipedia',\n    'wildcard',\n    'wildcat',\n    'wilder',\n    'wildfire',\n    'wildfowl',\n    'wildland',\n    'wildlife',\n    'wildly',\n    'wildness',\n    'willed',\n    'willfully',\n    'willing',\n    'willow',\n    'willpower',\n    'wilt',\n    'wimp',\n    'wince',\n    'wincing',\n    'wind',\n    'wing',\n    'winking',\n    'winner',\n    'winnings',\n    'winter',\n    'wipe',\n    'wired',\n    'wireless',\n    'wiring',\n    'wiry',\n    'wisdom',\n    'wise',\n    'wish',\n    'wisplike',\n    'wispy',\n    'wistful',\n    'wizard',\n    'wobble',\n    'wobbling',\n    'wobbly',\n    'wok',\n    'wolf',\n    'wolverine',\n    'womanhood',\n    'womankind',\n    'womanless',\n    'womanlike',\n    'womanly',\n    'womb',\n    'woof',\n    'wooing',\n    'wool',\n    'woozy',\n    'word',\n    'work',\n    'worried',\n    'worrier',\n    'worrisome',\n    'worry',\n    'worsening',\n    'worshiper',\n    'worst',\n    'wound',\n    'woven',\n    'wow',\n    'wrangle',\n    'wrath',\n    'wreath',\n    'wreckage',\n    'wrecker',\n    'wrecking',\n    'wrench',\n    'wriggle',\n    'wriggly',\n    'wrinkle',\n    'wrinkly',\n    'wrist',\n    'writing',\n    'written',\n    'wrongdoer',\n    'wronged',\n    'wrongful',\n    'wrongly',\n    'wrongness',\n    'wrought',\n    'xbox',\n    'xerox',\n    'yahoo',\n    'yam',\n    'yanking',\n    'yapping',\n    'yard',\n    'yarn',\n    'yeah',\n    'yearbook',\n    'yearling',\n    'yearly',\n    'yearning',\n    'yeast',\n    'yelling',\n    'yelp',\n    'yen',\n    'yesterday',\n    'yiddish',\n    'yield',\n    'yin',\n    'yippee',\n    'yo-yo',\n    'yodel',\n    'yoga',\n    'yogurt',\n    'yonder',\n    'yoyo',\n    'yummy',\n    'zap',\n    'zealous',\n    'zebra',\n    'zen',\n    'zeppelin',\n    'zero',\n    'zestfully',\n    'zesty',\n    'zigzagged',\n    'zipfile',\n    'zipping',\n    'zippy',\n    'zips',\n    'zit',\n    'zodiac',\n    'zombie',\n    'zone',\n    'zoning',\n    'zookeeper',\n    'zoologist',\n    'zoology',\n    'zoom',\n];\n","import { Cipher } from './cipher';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Cipher as CipherDomain } from '../domain/cipher';\n\nexport class CipherWithIds extends Cipher {\n    id: string;\n    collectionIds: string[];\n\n    // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n    build(o: CipherView | CipherDomain) {\n        this.id = o.id;\n        super.build(o);\n        this.collectionIds = o.collectionIds;\n    }\n}\n","import { Collection } from './collection';\n\nimport { CollectionView } from '../view/collectionView';\n\nimport { Collection as CollectionDomain } from '../domain/collection';\n\nexport class CollectionWithId extends Collection {\n    id: string;\n\n    // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n    build(o: CollectionView | CollectionDomain) {\n        this.id = o.id;\n        super.build(o);\n    }\n}\n","import { Folder } from './folder';\n\nimport { FolderView } from '../view/folderView';\n\nimport { Folder as FolderDomain } from '../domain/folder';\n\nexport class FolderWithId extends Folder {\n    id: string;\n\n    // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n    build(o: FolderView | FolderDomain) {\n        this.id = o.id;\n        super.build(o);\n    }\n}\n","import { FolderData } from '../data/folderData';\n\nimport { FolderView } from '../view/folderView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\n\nexport class Folder extends Domain {\n    id: string;\n    name: EncString;\n    revisionDate: Date;\n\n    constructor(obj?: FolderData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            id: null,\n            name: null,\n        }, alreadyEncrypted, ['id']);\n\n        this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n    }\n\n    decrypt(): Promise<FolderView> {\n        return this.decryptObj(new FolderView(this), {\n            name: null,\n        }, null);\n    }\n}\n","import { FolderResponse } from '../response/folderResponse';\n\nexport class FolderData {\n    id: string;\n    userId: string;\n    name: string;\n    revisionDate: string;\n\n    constructor(response: FolderResponse, userId: string) {\n        this.userId = userId;\n        this.name = response.name;\n        this.id = response.id;\n        this.revisionDate = response.revisionDate;\n    }\n}\n","import { ImportResult } from '../../models/domain/importResult';\nimport { BaseImporter } from '../baseImporter';\nimport { Importer } from '../importer';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { FieldType } from '../../enums/fieldType';\nimport { CipherView } from '../../models/view/cipherView';\nimport { CipherImportContext } from './cipherImportContext';\n\nexport const IgnoredProperties = ['ainfo', 'autosubmit', 'notesplain', 'ps', 'scope', 'tags', 'title', 'uuid', 'notes'];\n\nexport abstract class OnePasswordCsvImporter extends BaseImporter implements Importer {\n    protected loginPropertyParsers = [this.setLoginUsername, this.setLoginPassword, this.setLoginUris];\n    protected creditCardPropertyParsers = [this.setCreditCardNumber, this.setCreditCardVerification, this.setCreditCardCardholderName, this.setCreditCardExpiry];\n    protected identityPropertyParsers = [this.setIdentityFirstName, this.setIdentityInitial, this.setIdentityLastName, this.setIdentityUserName, this.setIdentityEmail, this.setIdentityPhone, this.setIdentityCompany];\n\n    abstract setCipherType(value: any, cipher: CipherView): void;\n\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true, {\n            quoteChar: '\"',\n            escapeChar: '\\\\',\n        });\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (this.isNullOrWhitespace(this.getProp(value, 'title'))) {\n                return;\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(this.getProp(value, 'title'), '--');\n\n            this.setNotes(value, cipher);\n\n            this.setCipherType(value, cipher);\n\n            let altUsername: string = null;\n            for (const property in value) {\n                if (!value.hasOwnProperty(property) || this.isNullOrWhitespace(value[property])) {\n                    continue;\n                }\n\n                const context = new CipherImportContext(value, property, cipher);\n                if (cipher.type === CipherType.Login && this.setKnownLoginValue(context)) {\n                    continue;\n                } else if (cipher.type === CipherType.Card && this.setKnownCreditCardValue(context)) {\n                    continue;\n                } else if (cipher.type === CipherType.Identity && this.setKnownIdentityValue(context)) {\n                    continue;\n                }\n\n                altUsername = this.setUnknownValue(context, altUsername);\n            }\n\n            if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(altUsername) &&\n                this.isNullOrWhitespace(cipher.login.username) && altUsername.indexOf('://') === -1) {\n                cipher.login.username = altUsername;\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    protected getProp(obj: any, name: string): any {\n        const lowerObj = Object.entries(obj).reduce((agg: any, entry: [string, any]) => {\n            agg[entry[0].toLowerCase()] = entry[1];\n            return agg;\n        }, {});\n        return lowerObj[name.toLowerCase()];\n    }\n\n    protected getPropByRegexp(obj: any, regexp: RegExp): any {\n        const matchingKeys = Object.keys(obj).reduce((agg: string[], key: string) => {\n            if (key.match(regexp)) {\n                agg.push(key);\n            }\n            return agg;\n        }, []);\n        if (matchingKeys.length === 0) {\n            return null;\n        } else {\n            return obj[matchingKeys[0]];\n        }\n    }\n\n    protected getPropIncluding(obj: any, name: string): any {\n        const includesMap = Object.keys(obj).reduce((agg: string[], entry: string) => {\n            if (entry.toLowerCase().includes(name.toLowerCase())) {\n                agg.push(entry);\n            }\n            return agg;\n        }, []);\n        if (includesMap.length === 0) {\n            return null;\n        } else {\n            return obj[includesMap[0]];\n        }\n    }\n\n    protected setNotes(importRecord: any, cipher: CipherView) {\n        cipher.notes = this.getValueOrDefault(this.getProp(importRecord, 'notesPlain'), '') + '\\n' +\n            this.getValueOrDefault(this.getProp(importRecord, 'notes'), '') + '\\n';\n        cipher.notes.trim();\n\n    }\n\n    protected setKnownLoginValue(context: CipherImportContext): boolean {\n        return this.loginPropertyParsers.reduce((agg: boolean, func) => {\n            if (!agg) {\n                agg = func.bind(this)(context);\n            }\n            return agg;\n        }, false);\n    }\n\n    protected setKnownCreditCardValue(context: CipherImportContext): boolean {\n        return this.creditCardPropertyParsers.reduce((agg: boolean, func) => {\n            if (!agg) {\n                agg = func.bind(this)(context);\n            }\n            return agg;\n        }, false);\n    }\n\n    protected setKnownIdentityValue(context: CipherImportContext): boolean {\n        return this.identityPropertyParsers.reduce((agg: boolean, func) => {\n            if (!agg) {\n                agg = func.bind(this)(context);\n            }\n            return agg;\n        }, false);\n    }\n\n    protected setUnknownValue(context: CipherImportContext, altUsername: string): string {\n        if (IgnoredProperties.indexOf(context.lowerProperty) === -1 && !context.lowerProperty.startsWith('section:') &&\n            !context.lowerProperty.startsWith('section ')) {\n            if (altUsername == null && context.lowerProperty === 'email') {\n                return context.importRecord[context.property];\n            }\n            else if (context.lowerProperty === 'created date' || context.lowerProperty === 'modified date') {\n                const readableDate = new Date(parseInt(context.importRecord[context.property], 10) * 1000).toUTCString();\n                this.processKvp(context.cipher, '1Password ' + context.property, readableDate);\n                return null;\n            }\n            if (context.lowerProperty.includes('password') || context.lowerProperty.includes('key') || context.lowerProperty.includes('secret')) {\n                this.processKvp(context.cipher, context.property, context.importRecord[context.property], FieldType.Hidden);\n            } else {\n                this.processKvp(context.cipher, context.property, context.importRecord[context.property]);\n            }\n        }\n        return null;\n    }\n\n    protected setIdentityFirstName(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.identity.firstName) && context.lowerProperty.includes('first name')) {\n            context.cipher.identity.firstName = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setIdentityInitial(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.identity.middleName) && context.lowerProperty.includes('initial')) {\n            context.cipher.identity.middleName = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setIdentityLastName(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.identity.lastName) && context.lowerProperty.includes('last name')) {\n            context.cipher.identity.lastName = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setIdentityUserName(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.identity.username) && context.lowerProperty.includes('username')) {\n            context.cipher.identity.username = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setIdentityCompany(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.identity.company) && context.lowerProperty.includes('company')) {\n            context.cipher.identity.company = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setIdentityPhone(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.identity.phone) && context.lowerProperty.includes('default phone')) {\n            context.cipher.identity.phone = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setIdentityEmail(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.identity.email) && context.lowerProperty.includes('email')) {\n            context.cipher.identity.email = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setCreditCardNumber(context: CipherImportContext): boolean {\n        if (this.isNullOrWhitespace(context.cipher.card.number) && context.lowerProperty.includes('number')) {\n            context.cipher.card.number = context.importRecord[context.property];\n            context.cipher.card.brand = this.getCardBrand(context.cipher.card.number);\n            return true;\n        }\n        return false;\n    }\n\n    protected setCreditCardVerification(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.card.code) && context.lowerProperty.includes('verification number')) {\n            context.cipher.card.code = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setCreditCardCardholderName(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.card.cardholderName) && context.lowerProperty.includes('cardholder name')) {\n            context.cipher.card.cardholderName = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setCreditCardExpiry(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.card.expiration) && context.lowerProperty.includes('expiry date') &&\n            context.importRecord[context.property].length === 7) {\n            context.cipher.card.expMonth = (context.importRecord[context.property] as string).substr(0, 2);\n            if (context.cipher.card.expMonth[0] === '0') {\n                context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n            }\n            context.cipher.card.expYear = (context.importRecord[context.property] as string).substr(3, 4);\n            return true;\n        }\n        return false;\n    }\n\n    protected setLoginPassword(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.login.password) && context.lowerProperty === 'password') {\n            context.cipher.login.password = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setLoginUsername(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.login.username) && context.lowerProperty === 'username') {\n            context.cipher.login.username = context.importRecord[context.property];\n            return true;\n        }\n        return false;\n    }\n\n    protected setLoginUris(context: CipherImportContext) {\n        if ((context.cipher.login.uris == null || context.cipher.login.uris.length === 0) && context.lowerProperty === 'urls') {\n            const urls = context.importRecord[context.property].split(this.newLineRegex);\n            context.cipher.login.uris = this.makeUriArray(urls);\n            return true;\n        } else if ((context.lowerProperty === 'url')) {\n            if (context.cipher.login.uris == null) {\n                context.cipher.login.uris = [];\n            }\n            context.cipher.login.uris.concat(this.makeUriArray(context.importRecord[context.property]));\n            return true;\n        }\n        return false;\n    }\n}\n","export enum NotificationType {\n    SyncCipherUpdate = 0,\n    SyncCipherCreate = 1,\n    SyncLoginDelete = 2,\n    SyncFolderDelete = 3,\n    SyncCiphers = 4,\n\n    SyncVault = 5,\n    SyncOrgKeys = 6,\n    SyncFolderCreate = 7,\n    SyncFolderUpdate = 8,\n    SyncCipherDelete = 9,\n    SyncSettings = 10,\n\n    LogOut = 11,\n\n    SyncSendCreate = 12,\n    SyncSendUpdate = 13,\n    SyncSendDelete = 14,\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendFileData } from './sendFileData';\nimport { SendTextData } from './sendTextData';\n\nimport { SendResponse } from '../response/sendResponse';\n\nexport class SendData {\n    id: string;\n    accessId: string;\n    userId: string;\n    type: SendType;\n    name: string;\n    notes: string;\n    file: SendFileData;\n    text: SendTextData;\n    key: string;\n    maxAccessCount?: number;\n    accessCount: number;\n    revisionDate: string;\n    expirationDate: string;\n    deletionDate: string;\n    password: string;\n    disabled: boolean;\n    hideEmail: boolean;\n\n    constructor(response?: SendResponse, userId?: string) {\n        if (response == null) {\n            return;\n        }\n\n        this.id = response.id;\n        this.accessId = response.accessId;\n        this.userId = userId;\n        this.type = response.type;\n        this.name = response.name;\n        this.notes = response.notes;\n        this.key = response.key;\n        this.maxAccessCount = response.maxAccessCount;\n        this.accessCount = response.accessCount;\n        this.revisionDate = response.revisionDate;\n        this.expirationDate = response.expirationDate;\n        this.deletionDate = response.deletionDate;\n        this.password = response.password;\n        this.disabled = response.disable;\n        this.hideEmail = response.hideEmail;\n\n        switch (this.type) {\n            case SendType.Text:\n                this.text = new SendTextData(response.text);\n                break;\n            case SendType.File:\n                this.file = new SendFileData(response.file);\n                break;\n            default:\n                break;\n        }\n    }\n}\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport 'bootstrap';\nimport 'jquery';\nimport 'popper.js';\n\n// tslint:disable-next-line\nrequire('../scss/styles.scss');\n\nimport { AppModule } from './app.module';\n\nif (process.env.NODE_ENV === 'production') {\n    enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, { preserveWhitespaces: true });\n","// extracted by mini-css-extract-plugin\nexport {};","import { ToasterModule } from 'angular2-toaster';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\n\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n\nimport { AppComponent } from './app.component';\nimport { OssRoutingModule } from './oss-routing.module';\nimport { OssModule } from './oss.module';\nimport { ServicesModule } from './services/services.module';\nimport { WildcardRoutingModule } from './wildcard-routing.module';\n\n@NgModule({\n    imports: [\n        OssModule,\n        BrowserAnimationsModule,\n        FormsModule,\n        ServicesModule,\n        ToasterModule.forRoot(),\n        InfiniteScrollModule,\n        DragDropModule,\n        OssRoutingModule,\n        WildcardRoutingModule, // Needs to be last to catch all non-existing routes\n    ],\n    declarations: [\n        AppComponent,\n    ],\n    bootstrap: [AppComponent],\n})\nexport class AppModule { }\n","import * as jq from 'jquery';\nimport Swal from 'sweetalert2';\n\nimport {\n    BodyOutputType,\n    Toast,\n    ToasterConfig,\n    ToasterService,\n} from 'angular2-toaster';\n\nimport {\n    Component,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    SecurityContext,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport {\n    NavigationEnd,\n    Router,\n} from '@angular/router';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { NotificationsService } from 'jslib-common/abstractions/notifications.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { SettingsService } from 'jslib-common/abstractions/settings.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { TokenService } from 'jslib-common/abstractions/token.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { PolicyListService } from './services/policy-list.service';\nimport { RouterService } from './services/router.service';\n\nimport { DisableSendPolicy } from './organizations/policies/disable-send.component';\nimport { MasterPasswordPolicy } from './organizations/policies/master-password.component';\nimport { PasswordGeneratorPolicy } from './organizations/policies/password-generator.component';\nimport { PersonalOwnershipPolicy } from './organizations/policies/personal-ownership.component';\nimport { RequireSsoPolicy } from './organizations/policies/require-sso.component';\nimport { ResetPasswordPolicy } from './organizations/policies/reset-password.component';\nimport { SendOptionsPolicy } from './organizations/policies/send-options.component';\nimport { SingleOrgPolicy } from './organizations/policies/single-org.component';\nimport { TwoFactorAuthenticationPolicy } from './organizations/policies/two-factor-authentication.component';\n\nconst BroadcasterSubscriptionId = 'AppComponent';\nconst IdleTimeout = 60000 * 10; // 10 minutes\n\n@Component({\n    selector: 'app-root',\n    templateUrl: 'app.component.html',\n})\nexport class AppComponent implements OnDestroy, OnInit {\n\n    toasterConfig: ToasterConfig = new ToasterConfig({\n        showCloseButton: true,\n        mouseoverTimerStop: true,\n        animation: 'flyRight',\n        limit: 5,\n    });\n\n    private lastActivity: number = null;\n    private idleTimer: number = null;\n    private isIdle = false;\n\n    constructor(\n        private broadcasterService: BroadcasterService, private userService: UserService,\n        private tokenService: TokenService, private folderService: FolderService,\n        private settingsService: SettingsService, private syncService: SyncService,\n        private passwordGenerationService: PasswordGenerationService, private cipherService: CipherService,\n        private authService: AuthService, private router: Router,\n        private toasterService: ToasterService, private i18nService: I18nService,\n        private platformUtilsService: PlatformUtilsService, private ngZone: NgZone,\n        private vaultTimeoutService: VaultTimeoutService, private storageService: StorageService,\n        private cryptoService: CryptoService, private collectionService: CollectionService,\n        private sanitizer: DomSanitizer, private searchService: SearchService,\n        private notificationsService: NotificationsService, private routerService: RouterService,\n        private stateService: StateService, private eventService: EventService,\n        private policyService: PolicyService, protected policyListService: PolicyListService,\n        private keyConnectorService: KeyConnectorService) { }\n\n    ngOnInit() {\n        this.ngZone.runOutsideAngular(() => {\n            window.onmousemove = () => this.recordActivity();\n            window.onmousedown = () => this.recordActivity();\n            window.ontouchstart = () => this.recordActivity();\n            window.onclick = () => this.recordActivity();\n            window.onscroll = () => this.recordActivity();\n            window.onkeypress = () => this.recordActivity();\n        });\n\n        this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => {\n            this.ngZone.run(async () => {\n                switch (message.command) {\n                    case 'loggedIn':\n                    case 'loggedOut':\n                    case 'unlocked':\n                        this.notificationsService.updateConnection(false);\n                        break;\n                    case 'authBlocked':\n                        this.router.navigate(['/']);\n                        break;\n                    case 'logout':\n                        this.logOut(!!message.expired);\n                        break;\n                    case 'lockVault':\n                        await this.vaultTimeoutService.lock();\n                        break;\n                    case 'locked':\n                        this.notificationsService.updateConnection(false);\n                        this.router.navigate(['lock']);\n                        break;\n                    case 'lockedUrl':\n                        window.setTimeout(() => this.routerService.setPreviousUrl(message.url), 500);\n                        break;\n                    case 'syncStarted':\n                        break;\n                    case 'syncCompleted':\n                        break;\n                    case 'upgradeOrganization':\n                        const upgradeConfirmed = await this.platformUtilsService.showDialog(\n                            this.i18nService.t('upgradeOrganizationDesc'), this.i18nService.t('upgradeOrganization'),\n                            this.i18nService.t('upgradeOrganization'), this.i18nService.t('cancel'));\n                        if (upgradeConfirmed) {\n                            this.router.navigate(['organizations', message.organizationId, 'settings', 'billing']);\n                        }\n                        break;\n                    case 'premiumRequired':\n                        const premiumConfirmed = await this.platformUtilsService.showDialog(\n                            this.i18nService.t('premiumRequiredDesc'), this.i18nService.t('premiumRequired'),\n                            this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n                        if (premiumConfirmed) {\n                            this.router.navigate(['settings/premium']);\n                        }\n                        break;\n                    case 'emailVerificationRequired':\n                        const emailVerificationConfirmed = await this.platformUtilsService.showDialog(\n                            this.i18nService.t('emailVerificationRequiredDesc'),\n                            this.i18nService.t('emailVerificationRequired'),\n                            this.i18nService.t('learnMore'), this.i18nService.t('cancel'));\n                        if (emailVerificationConfirmed) {\n                            this.platformUtilsService.launchUri('https://bitwarden.com/help/article/create-bitwarden-account/');\n                        }\n                        break;\n                    case 'showToast':\n                        if (typeof message.text === \"string\" && typeof crypto.subtle === 'undefined') {\n                            message.title=\"This browser requires HTTPS to use the web vault\";\n                            message.text=\"Check the Vaultwarden wiki for details on how to enable it\";\n                        }\n                        this.showToast(message);\n                        break;\n                    case 'setFullWidth':\n                        this.setFullWidth();\n                        break;\n                    case 'convertAccountToKeyConnector':\n                        this.keyConnectorService.setConvertAccountRequired(true);\n                        this.router.navigate(['/remove-password']);\n                        break;\n                    default:\n                        break;\n                }\n            });\n        });\n\n        this.router.events.subscribe(event => {\n            if (event instanceof NavigationEnd) {\n                const modals = Array.from(document.querySelectorAll('.modal'));\n                for (const modal of modals) {\n                    (jq(modal) as any).modal('hide');\n                }\n\n                if (document.querySelector('.swal-modal') != null) {\n                    Swal.close(undefined);\n                }\n            }\n        });\n\n        this.policyListService.addPolicies([\n            new TwoFactorAuthenticationPolicy(),\n            new MasterPasswordPolicy(),\n            new PasswordGeneratorPolicy(),\n            new SingleOrgPolicy(),\n            new RequireSsoPolicy(),\n            new PersonalOwnershipPolicy(),\n            new DisableSendPolicy(),\n            new SendOptionsPolicy(),\n            new ResetPasswordPolicy(),\n        ]);\n\n        this.setFullWidth();\n    }\n\n    ngOnDestroy() {\n        this.broadcasterService.unsubscribe(BroadcasterSubscriptionId);\n    }\n\n    private async logOut(expired: boolean) {\n        await this.eventService.uploadEvents();\n        const userId = await this.userService.getUserId();\n\n        await Promise.all([\n            this.eventService.clearEvents(),\n            this.syncService.setLastSync(new Date(0)),\n            this.tokenService.clearToken(),\n            this.cryptoService.clearKeys(),\n            this.userService.clear(),\n            this.settingsService.clear(userId),\n            this.cipherService.clear(userId),\n            this.folderService.clear(userId),\n            this.collectionService.clear(userId),\n            this.policyService.clear(userId),\n            this.passwordGenerationService.clear(),\n            this.stateService.purge(),\n            this.keyConnectorService.clear(),\n        ]);\n\n        this.searchService.clearIndex();\n        this.authService.logOut(async () => {\n            if (expired) {\n                this.toasterService.popAsync('warning', this.i18nService.t('loggedOut'),\n                    this.i18nService.t('loginExpired'));\n            }\n\n            Swal.close();\n            this.router.navigate(['/']);\n        });\n    }\n\n    private async recordActivity() {\n        const now = (new Date()).getTime();\n        if (this.lastActivity != null && now - this.lastActivity < 250) {\n            return;\n        }\n\n        this.lastActivity = now;\n        this.storageService.save(ConstantsService.lastActiveKey, now);\n\n        // Idle states\n        if (this.isIdle) {\n            this.isIdle = false;\n            this.idleStateChanged();\n        }\n        if (this.idleTimer != null) {\n            window.clearTimeout(this.idleTimer);\n            this.idleTimer = null;\n        }\n        this.idleTimer = window.setTimeout(() => {\n            if (!this.isIdle) {\n                this.isIdle = true;\n                this.idleStateChanged();\n            }\n        }, IdleTimeout);\n    }\n\n    private showToast(msg: any) {\n        const toast: Toast = {\n            type: msg.type,\n            title: msg.title,\n        };\n        if (typeof (msg.text) === 'string') {\n            toast.body = msg.text;\n        } else if (msg.text.length === 1) {\n            toast.body = msg.text[0];\n        } else {\n            let message = '';\n            msg.text.forEach((t: string) =>\n                message += ('<p>' + this.sanitizer.sanitize(SecurityContext.HTML, t) + '</p>'));\n            toast.body = message;\n            toast.bodyOutputType = BodyOutputType.TrustedHtml;\n        }\n        if (msg.options != null) {\n            if (msg.options.trustedHtml === true) {\n                toast.bodyOutputType = BodyOutputType.TrustedHtml;\n            }\n            if (msg.options.timeout != null && msg.options.timeout > 0) {\n                toast.timeout = msg.options.timeout;\n            }\n        }\n        this.toasterService.popAsync(toast);\n    }\n\n    private idleStateChanged() {\n        if (this.isIdle) {\n            this.notificationsService.disconnectFromInactivity();\n        } else {\n            this.notificationsService.reconnectFromActivity();\n        }\n    }\n\n    private async setFullWidth() {\n        const enableFullWidth = await this.storageService.get<boolean>('enableFullWidth');\n        if (enableFullWidth) {\n            document.body.classList.add('full-width');\n        } else {\n            document.body.classList.remove('full-width');\n        }\n    }\n}\n","<toaster-container [toasterconfig]=\"toasterConfig\" aria-live=\"polite\"></toaster-container> <router-outlet></router-outlet> ","import { BroadcasterService as BroadcasterServiceAbstraction } from '../abstractions/broadcaster.service';\n\nexport class BroadcasterService implements BroadcasterServiceAbstraction {\n    subscribers: Map<string, (message: any) => any> = new Map<string, (message: any) => any>();\n\n    send(message: any, id?: string) {\n        if (id != null) {\n            if (this.subscribers.has(id)) {\n                this.subscribers.get(id)(message);\n            }\n            return;\n        }\n\n        this.subscribers.forEach(value => {\n            value(message);\n        });\n    }\n\n    subscribe(id: string, messageCallback: (message: any) => any) {\n        this.subscribers.set(id, messageCallback);\n    }\n\n    unsubscribe(id: string) {\n        if (this.subscribers.has(id)) {\n            this.subscribers.delete(id);\n        }\n    }\n}\n","import { PolicyType } from '../../enums/policyType';\n\nexport class PolicyRequest {\n    type: PolicyType;\n    enabled: boolean;\n    data: any;\n}\n","export function getDomain(host: string): string | null {\n    return null;\n}\n\nexport function isValid(host: string): boolean {\n    return true;\n}\n","import { NgModule } from '@angular/core';\nimport {\n    RouterModule,\n    Routes,\n} from '@angular/router';\n\nimport { FrontendLayoutComponent } from './layouts/frontend-layout.component';\nimport { OrganizationLayoutComponent } from './layouts/organization-layout.component';\nimport { UserLayoutComponent } from './layouts/user-layout.component';\n\nimport { AcceptEmergencyComponent } from './accounts/accept-emergency.component';\nimport { AcceptOrganizationComponent } from './accounts/accept-organization.component';\nimport { HintComponent } from './accounts/hint.component';\nimport { LockComponent } from './accounts/lock.component';\nimport { LoginComponent } from './accounts/login.component';\nimport { RecoverDeleteComponent } from './accounts/recover-delete.component';\nimport { RecoverTwoFactorComponent } from './accounts/recover-two-factor.component';\nimport { RegisterComponent } from './accounts/register.component';\nimport { RemovePasswordComponent } from './accounts/remove-password.component';\nimport { SetPasswordComponent } from './accounts/set-password.component';\nimport { SsoComponent } from './accounts/sso.component';\nimport { TwoFactorComponent } from './accounts/two-factor.component';\nimport { UpdateTempPasswordComponent } from './accounts/update-temp-password.component';\nimport { VerifyEmailTokenComponent } from './accounts/verify-email-token.component';\nimport { VerifyRecoverDeleteComponent } from './accounts/verify-recover-delete.component';\n\nimport { CollectionsComponent as OrgManageCollectionsComponent } from './organizations/manage/collections.component';\nimport { EventsComponent as OrgEventsComponent } from './organizations/manage/events.component';\nimport { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component';\nimport { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component';\nimport { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component';\nimport { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component';\n\nimport { AccountComponent as OrgAccountComponent } from './organizations/settings/account.component';\nimport { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';\nimport { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';\nimport { SettingsComponent as OrgSettingsComponent } from './organizations/settings/settings.component';\nimport {\n    TwoFactorSetupComponent as OrgTwoFactorSetupComponent,\n} from './organizations/settings/two-factor-setup.component';\n\nimport { FamiliesForEnterpriseSetupComponent } from './organizations/sponsorships/families-for-enterprise-setup.component';\nimport { ExportComponent as OrgExportComponent } from './organizations/tools/export.component';\nimport {\n    ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent,\n} from './organizations/tools/exposed-passwords-report.component';\nimport { ImportComponent as OrgImportComponent } from './organizations/tools/import.component';\nimport {\n    InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent,\n} from './organizations/tools/inactive-two-factor-report.component';\nimport {\n    ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent,\n} from './organizations/tools/reused-passwords-report.component';\nimport { ToolsComponent as OrgToolsComponent } from './organizations/tools/tools.component';\nimport {\n    UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent,\n} from './organizations/tools/unsecured-websites-report.component';\nimport {\n    WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent,\n} from './organizations/tools/weak-passwords-report.component';\n\nimport { VaultComponent as OrgVaultComponent } from './organizations/vault/vault.component';\n\nimport { AccessComponent } from './send/access.component';\nimport { SendComponent } from './send/send.component';\n\nimport { AccountComponent } from './settings/account.component';\nimport { CreateOrganizationComponent } from './settings/create-organization.component';\nimport { DomainRulesComponent } from './settings/domain-rules.component';\nimport { OptionsComponent } from './settings/options.component';\nimport { OrganizationsComponent } from './settings/organizations.component';\nimport { PremiumComponent } from './settings/premium.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { TwoFactorSetupComponent } from './settings/two-factor-setup.component';\nimport { UserBillingComponent } from './settings/user-billing.component';\nimport { UserSubscriptionComponent } from './settings/user-subscription.component';\n\nimport { BreachReportComponent } from './tools/breach-report.component';\nimport { ExportComponent } from './tools/export.component';\nimport { ExposedPasswordsReportComponent } from './tools/exposed-passwords-report.component';\nimport { ImportComponent } from './tools/import.component';\nimport { InactiveTwoFactorReportComponent } from './tools/inactive-two-factor-report.component';\nimport { PasswordGeneratorComponent } from './tools/password-generator.component';\nimport { ReusedPasswordsReportComponent } from './tools/reused-passwords-report.component';\nimport { ToolsComponent } from './tools/tools.component';\nimport { UnsecuredWebsitesReportComponent } from './tools/unsecured-websites-report.component';\nimport { WeakPasswordsReportComponent } from './tools/weak-passwords-report.component';\n\nimport { VaultComponent } from './vault/vault.component';\n\nimport { OrganizationGuardService } from './services/organization-guard.service';\nimport { OrganizationTypeGuardService } from './services/organization-type-guard.service';\n\nimport { AuthGuardService } from 'jslib-angular/services/auth-guard.service';\nimport { LockGuardService } from 'jslib-angular/services/lock-guard.service';\nimport { UnauthGuardService } from 'jslib-angular/services/unauth-guard.service';\n\nimport { Permissions } from 'jslib-common/enums/permissions';\n\nimport { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';\nimport { EmergencyAccessComponent } from './settings/emergency-access.component';\nimport { SponsoredFamiliesComponent } from './settings/sponsored-families.component';\n\nconst routes: Routes = [\n    {\n        path: '',\n        component: FrontendLayoutComponent,\n        children: [\n            { path: '', pathMatch: 'full', component: LoginComponent, canActivate: [UnauthGuardService] },\n            { path: '2fa', component: TwoFactorComponent, canActivate: [UnauthGuardService] },\n            {\n                path: 'register', component: RegisterComponent,\n                canActivate: [UnauthGuardService],\n                data: { titleId: 'createAccount' },\n            },\n            {\n                path: 'sso', component: SsoComponent,\n                canActivate: [UnauthGuardService],\n                data: { titleId: 'enterpriseSingleSignOn' },\n            },\n            {\n                path: 'set-password', component: SetPasswordComponent,\n                data: { titleId: 'setMasterPassword' },\n            },\n            {\n                path: 'hint', component: HintComponent,\n                canActivate: [UnauthGuardService],\n                data: { titleId: 'passwordHint' },\n            },\n            {\n                path: 'lock',\n                component: LockComponent,\n                canActivate: [LockGuardService],\n            },\n            { path: 'verify-email', component: VerifyEmailTokenComponent },\n            {\n                path: 'accept-organization',\n                component: AcceptOrganizationComponent,\n                data: { titleId: 'joinOrganization' },\n            },\n            {\n                path: 'accept-emergency',\n                component: AcceptEmergencyComponent,\n                data: { titleId: 'acceptEmergency' },\n            },\n            { path: 'recover', pathMatch: 'full', redirectTo: 'recover-2fa' },\n            {\n                path: 'recover-2fa',\n                component: RecoverTwoFactorComponent,\n                canActivate: [UnauthGuardService],\n                data: { titleId: 'recoverAccountTwoStep' },\n            },\n            {\n                path: 'recover-delete',\n                component: RecoverDeleteComponent,\n                canActivate: [UnauthGuardService],\n                data: { titleId: 'deleteAccount' },\n            },\n            {\n                path: 'verify-recover-delete',\n                component: VerifyRecoverDeleteComponent,\n                canActivate: [UnauthGuardService],\n                data: { titleId: 'deleteAccount' },\n            },\n            {\n                path: 'send/:sendId/:key',\n                component: AccessComponent,\n                data: { title: 'Bitwarden Send' },\n            },\n            {\n                path: 'update-temp-password',\n                component: UpdateTempPasswordComponent,\n                canActivate: [AuthGuardService],\n                data: { titleId: 'updateTempPassword' },\n            },\n            {\n                path: 'remove-password',\n                component: RemovePasswordComponent,\n                canActivate: [AuthGuardService],\n                data: { titleId: 'removeMasterPassword' },\n            },\n        ],\n    },\n    {\n        path: '',\n        component: UserLayoutComponent,\n        canActivate: [AuthGuardService],\n        children: [\n            { path: 'vault', component: VaultComponent, data: { titleId: 'myVault' } },\n            { path: 'sends', component: SendComponent, data: { title: 'Send' } },\n            {\n                path: 'settings',\n                component: SettingsComponent,\n                children: [\n                    { path: '', pathMatch: 'full', redirectTo: 'account' },\n                    { path: 'account', component: AccountComponent, data: { titleId: 'myAccount' } },\n                    { path: 'options', component: OptionsComponent, data: { titleId: 'options' } },\n                    { path: 'domain-rules', component: DomainRulesComponent, data: { titleId: 'domainRules' } },\n                    { path: 'two-factor', component: TwoFactorSetupComponent, data: { titleId: 'twoStepLogin' } },\n                    { path: 'premium', component: PremiumComponent, data: { titleId: 'goPremium' } },\n                    { path: 'billing', component: UserBillingComponent, data: { titleId: 'billing' } },\n                    {\n                        path: 'subscription',\n                        component: UserSubscriptionComponent,\n                        data: { titleId: 'premiumMembership' },\n                    },\n                    { path: 'organizations', component: OrganizationsComponent, data: { titleId: 'organizations' } },\n                    {\n                        path: 'create-organization',\n                        component: CreateOrganizationComponent,\n                        data: { titleId: 'newOrganization' },\n                    },\n                    {\n                        path: 'emergency-access',\n                        children: [\n                            {\n                                path: '',\n                                component: EmergencyAccessComponent,\n                                data: { titleId: 'emergencyAccess' },\n                            },\n                            {\n                                path: ':id',\n                                component: EmergencyAccessViewComponent,\n                                data: { titleId: 'emergencyAccess' },\n                            },\n                        ],\n                    },\n                    {\n                        path: 'sponsored-families',\n                        component: SponsoredFamiliesComponent,\n                        data: { titleId: 'sponsoredFamilies' },\n                    },\n                ],\n            },\n            {\n                path: 'tools',\n                component: ToolsComponent,\n                canActivate: [AuthGuardService],\n                children: [\n                    { path: '', pathMatch: 'full', redirectTo: 'generator' },\n                    { path: 'import', component: ImportComponent, data: { titleId: 'importData' } },\n                    { path: 'export', component: ExportComponent, data: { titleId: 'exportVault' } },\n                    {\n                        path: 'generator',\n                        component: PasswordGeneratorComponent,\n                        data: { titleId: 'passwordGenerator' },\n                    },\n                    { path: 'breach-report', component: BreachReportComponent, data: { titleId: 'dataBreachReport' } },\n                    {\n                        path: 'reused-passwords-report',\n                        component: ReusedPasswordsReportComponent,\n                        data: { titleId: 'reusedPasswordsReport' },\n                    },\n                    {\n                        path: 'unsecured-websites-report',\n                        component: UnsecuredWebsitesReportComponent,\n                        data: { titleId: 'unsecuredWebsitesReport' },\n                    },\n                    {\n                        path: 'weak-passwords-report',\n                        component: WeakPasswordsReportComponent,\n                        data: { titleId: 'weakPasswordsReport' },\n                    },\n                    {\n                        path: 'exposed-passwords-report',\n                        component: ExposedPasswordsReportComponent,\n                        data: { titleId: 'exposedPasswordsReport' },\n                    },\n                    {\n                        path: 'inactive-two-factor-report',\n                        component: InactiveTwoFactorReportComponent,\n                        data: { titleId: 'inactive2faReport' },\n                    },\n                ],\n            },\n            { path: 'setup/families-for-enterprise', component: FamiliesForEnterpriseSetupComponent },\n        ],\n    },\n    {\n        path: 'organizations/:organizationId',\n        component: OrganizationLayoutComponent,\n        canActivate: [AuthGuardService, OrganizationGuardService],\n        children: [\n            { path: '', pathMatch: 'full', redirectTo: 'vault' },\n            { path: 'vault', component: OrgVaultComponent, data: { titleId: 'vault' } },\n            {\n                path: 'tools',\n                component: OrgToolsComponent,\n                canActivate: [OrganizationTypeGuardService],\n                data: { permissions: [Permissions.AccessImportExport, Permissions.AccessReports] },\n                children: [\n                    {\n                        path: '',\n                        pathMatch: 'full',\n                        redirectTo: 'import',\n                    },\n                    {\n                        path: 'import',\n                        component: OrgImportComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'importData',\n                            permissions: [Permissions.AccessImportExport],\n                        },\n                    },\n                    {\n                        path: 'export',\n                        component: OrgExportComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'exportVault',\n                            permissions: [Permissions.AccessImportExport],\n                        },\n                    },\n                    {\n                        path: 'exposed-passwords-report',\n                        component: OrgExposedPasswordsReportComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'exposedPasswordsReport',\n                            permissions: [Permissions.AccessReports],\n                        },\n                    },\n                    {\n                        path: 'inactive-two-factor-report',\n                        component: OrgInactiveTwoFactorReportComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'inactive2faReport',\n                            permissions: [Permissions.AccessReports],\n                        },\n                    },\n                    {\n                        path: 'reused-passwords-report',\n                        component: OrgReusedPasswordsReportComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'reusedPasswordsReport',\n                            permissions: [Permissions.AccessReports],\n                        },\n                    },\n                    {\n                        path: 'unsecured-websites-report',\n                        component: OrgUnsecuredWebsitesReportComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'unsecuredWebsitesReport',\n                            permissions: [Permissions.AccessReports],\n                        },\n                    },\n                    {\n                        path: 'weak-passwords-report',\n                        component: OrgWeakPasswordsReportComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'weakPasswordsReport',\n                            permissions: [Permissions.AccessReports],\n                        },\n                    },\n                ],\n            },\n            {\n                path: 'manage',\n                component: OrgManageComponent,\n                canActivate: [OrganizationTypeGuardService],\n                data: {\n                    permissions: [\n                        Permissions.CreateNewCollections,\n                        Permissions.EditAnyCollection,\n                        Permissions.DeleteAnyCollection,\n                        Permissions.EditAssignedCollections,\n                        Permissions.DeleteAssignedCollections,\n                        Permissions.AccessEventLogs,\n                        Permissions.ManageGroups,\n                        Permissions.ManageUsers,\n                        Permissions.ManagePolicies,\n                    ],\n                },\n                children: [\n                    {\n                        path: '',\n                        pathMatch: 'full',\n                        redirectTo: 'people',\n                    },\n                    {\n                        path: 'collections',\n                        component: OrgManageCollectionsComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'collections',\n                            permissions: [\n                                Permissions.CreateNewCollections,\n                                Permissions.EditAnyCollection,\n                                Permissions.DeleteAnyCollection,\n                                Permissions.EditAssignedCollections,\n                                Permissions.DeleteAssignedCollections,\n                            ],\n                        },\n                    },\n                    {\n                        path: 'events',\n                        component: OrgEventsComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'eventLogs',\n                            permissions: [Permissions.AccessEventLogs],\n                        },\n                    },\n                    {\n                        path: 'groups',\n                        component: OrgGroupsComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'groups',\n                            permissions: [Permissions.ManageGroups],\n                        },\n                    },\n                    {\n                        path: 'people',\n                        component: OrgPeopleComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'people',\n                            permissions: [Permissions.ManageUsers, Permissions.ManageUsersPassword],\n                        },\n                    },\n                    {\n                        path: 'policies',\n                        component: OrgPoliciesComponent,\n                        canActivate: [OrganizationTypeGuardService],\n                        data: {\n                            titleId: 'policies',\n                            permissions: [Permissions.ManagePolicies],\n                        },\n                    },\n                ],\n            },\n            {\n                path: 'settings',\n                component: OrgSettingsComponent,\n                canActivate: [OrganizationTypeGuardService],\n                data: { permissions: [Permissions.ManageOrganization] },\n                children: [\n                    { path: '', pathMatch: 'full', redirectTo: 'account' },\n                    { path: 'account', component: OrgAccountComponent, data: { titleId: 'myOrganization' } },\n                    { path: 'two-factor', component: OrgTwoFactorSetupComponent, data: { titleId: 'twoStepLogin' } },\n                    {\n                        path: 'billing',\n                        component: OrganizationBillingComponent,\n                        data: { titleId: 'billing' },\n                    },\n                    {\n                        path: 'subscription',\n                        component: OrganizationSubscriptionComponent,\n                        data: { titleId: 'subscription' },\n                    },\n                ],\n            },\n        ],\n    },\n];\n\n@NgModule({\n    imports: [RouterModule.forRoot(routes, {\n        useHash: true,\n        paramsInheritanceStrategy: 'always',\n        /*enableTracing: true,*/\n    })],\n    exports: [RouterModule],\n})\nexport class OssRoutingModule { }\n","export class EmergencyAccessAcceptRequest {\n    token: string;\n}\n","export class OrganizationUserAcceptRequest {\n    token: string;\n}\n","import { Router } from '@angular/router';\n\nimport { PasswordHintRequest } from 'jslib-common/models/request/passwordHintRequest';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nexport class HintComponent {\n    email: string = '';\n    formPromise: Promise<any>;\n\n    protected successRoute = 'login';\n    protected onSuccessfulSubmit: () => void;\n\n    constructor(protected router: Router, protected i18nService: I18nService,\n        protected apiService: ApiService, protected platformUtilsService: PlatformUtilsService,\n        private logService: LogService) { }\n\n    async submit() {\n        if (this.email == null || this.email === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('emailRequired'));\n            return;\n        }\n        if (this.email.indexOf('@') === -1) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('invalidEmail'));\n            return;\n        }\n\n        try {\n            this.formPromise = this.apiService.postPasswordHint(new PasswordHintRequest(this.email));\n            await this.formPromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('masterPassSent'));\n            if (this.onSuccessfulSubmit != null) {\n                this.onSuccessfulSubmit();\n            } else if (this.router != null) {\n                this.router.navigate([this.successRoute]);\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","export class PasswordHintRequest {\n    email: string;\n\n    constructor(email: string) {\n        this.email = email;\n    }\n}\n","import { Directive, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\nimport { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { SecretVerificationRequest } from 'jslib-common/models/request/secretVerificationRequest';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { HashPurpose } from 'jslib-common/enums/hashPurpose';\n\n@Directive()\nexport class LockComponent implements OnInit {\n    masterPassword: string = '';\n    pin: string = '';\n    showPassword: boolean = false;\n    email: string;\n    pinLock: boolean = false;\n    webVaultHostname: string = '';\n    formPromise: Promise<any>;\n    supportsBiometric: boolean;\n    biometricLock: boolean;\n    biometricText: string;\n    hideInput: boolean;\n\n    protected successRoute: string = 'vault';\n    protected onSuccessfulSubmit: () => void;\n\n    private invalidPinAttempts = 0;\n    private pinSet: [boolean, boolean];\n\n    constructor(protected router: Router, protected i18nService: I18nService,\n        protected platformUtilsService: PlatformUtilsService, protected messagingService: MessagingService,\n        protected userService: UserService, protected cryptoService: CryptoService,\n        protected storageService: StorageService, protected vaultTimeoutService: VaultTimeoutService,\n        protected environmentService: EnvironmentService, protected stateService: StateService,\n        protected apiService: ApiService, private logService: LogService,\n        private keyConnectorService: KeyConnectorService) { }\n\n    async ngOnInit() {\n        this.pinSet = await this.vaultTimeoutService.isPinLockSet();\n        this.pinLock = (this.pinSet[0] && this.vaultTimeoutService.pinProtectedKey != null) || this.pinSet[1];\n        this.supportsBiometric = await this.platformUtilsService.supportsBiometric();\n        this.biometricLock = await this.vaultTimeoutService.isBiometricLockSet() &&\n            (await this.cryptoService.hasKeyStored('biometric') || !this.platformUtilsService.supportsSecureStorage());\n        this.biometricText = await this.storageService.get(ConstantsService.biometricText);\n        this.email = await this.userService.getEmail();\n        const usesKeyConnector = await this.keyConnectorService.getUsesKeyConnector();\n        this.hideInput = usesKeyConnector && !this.pinLock;\n\n        // Users with key connector and without biometric or pin has no MP to unlock using\n        if (usesKeyConnector && !(this.biometricLock || this.pinLock)) {\n            await this.vaultTimeoutService.logOut();\n        }\n\n        const webVaultUrl = this.environmentService.getWebVaultUrl();\n        const vaultUrl = webVaultUrl === 'https://vault.bitwarden.com' ? 'https://bitwarden.com' : webVaultUrl;\n        this.webVaultHostname = Utils.getHostname(vaultUrl);\n    }\n\n    async submit() {\n        if (this.pinLock && (this.pin == null || this.pin === '')) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('pinRequired'));\n            return;\n        }\n        if (!this.pinLock && (this.masterPassword == null || this.masterPassword === '')) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassRequired'));\n            return;\n        }\n\n        const kdf = await this.userService.getKdf();\n        const kdfIterations = await this.userService.getKdfIterations();\n\n        if (this.pinLock) {\n            let failed = true;\n            try {\n                if (this.pinSet[0]) {\n                    const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfIterations,\n                        this.vaultTimeoutService.pinProtectedKey);\n                    const encKey = await this.cryptoService.getEncKey(key);\n                    const protectedPin = await this.storageService.get<string>(ConstantsService.protectedPin);\n                    const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n                    failed = decPin !== this.pin;\n                    if (!failed) {\n                        await this.setKeyAndContinue(key);\n                    }\n                } else {\n                    const key = await this.cryptoService.makeKeyFromPin(this.pin, this.email, kdf, kdfIterations);\n                    failed = false;\n                    await this.setKeyAndContinue(key);\n                }\n            } catch {\n                failed = true;\n            }\n\n            if (failed) {\n                this.invalidPinAttempts++;\n                if (this.invalidPinAttempts >= 5) {\n                    this.messagingService.send('logout');\n                    return;\n                }\n                this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                    this.i18nService.t('invalidPin'));\n            }\n        } else {\n            const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfIterations);\n            const storedKeyHash = await this.cryptoService.getKeyHash();\n\n            let passwordValid = false;\n\n            if (storedKeyHash != null) {\n                passwordValid = await this.cryptoService.compareAndUpdateKeyHash(this.masterPassword, key);\n            } else {\n                const request = new SecretVerificationRequest();\n                const serverKeyHash = await this.cryptoService.hashPassword(this.masterPassword, key,\n                    HashPurpose.ServerAuthorization);\n                request.masterPasswordHash = serverKeyHash;\n                try {\n                    this.formPromise = this.apiService.postAccountVerifyPassword(request);\n                    await this.formPromise;\n                    passwordValid = true;\n                    const localKeyHash = await this.cryptoService.hashPassword(this.masterPassword, key,\n                        HashPurpose.LocalAuthorization);\n                    await this.cryptoService.setKeyHash(localKeyHash);\n                } catch (e) {\n                    this.logService.error(e);\n                }\n            }\n\n            if (passwordValid) {\n                if (this.pinSet[0]) {\n                    const protectedPin = await this.storageService.get<string>(ConstantsService.protectedPin);\n                    const encKey = await this.cryptoService.getEncKey(key);\n                    const decPin = await this.cryptoService.decryptToUtf8(new EncString(protectedPin), encKey);\n                    const pinKey = await this.cryptoService.makePinKey(decPin, this.email, kdf, kdfIterations);\n                    this.vaultTimeoutService.pinProtectedKey = await this.cryptoService.encrypt(key.key, pinKey);\n                }\n                this.setKeyAndContinue(key);\n            } else {\n                this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                    this.i18nService.t('invalidMasterPassword'));\n            }\n        }\n    }\n\n    async logOut() {\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('logOutConfirmation'),\n            this.i18nService.t('logOut'), this.i18nService.t('logOut'), this.i18nService.t('cancel'));\n        if (confirmed) {\n            this.messagingService.send('logout');\n        }\n    }\n\n    async unlockBiometric(): Promise<boolean> {\n        if (!this.biometricLock) {\n            return;\n        }\n\n        const success = (await this.cryptoService.getKey('biometric')) != null;\n\n        if (success) {\n            await this.doContinue();\n        }\n\n        return success;\n    }\n\n    togglePassword() {\n        this.showPassword = !this.showPassword;\n        document.getElementById(this.pinLock ? 'pin' : 'masterPassword').focus();\n    }\n\n    private async setKeyAndContinue(key: SymmetricCryptoKey) {\n        await this.cryptoService.setKey(key);\n        this.doContinue();\n    }\n\n    private async doContinue() {\n        this.vaultTimeoutService.biometricLocked = false;\n        this.vaultTimeoutService.everBeenUnlocked = true;\n        const disableFavicon = await this.storageService.get<boolean>(ConstantsService.disableFaviconKey);\n        await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n        this.messagingService.send('unlocked');\n        if (this.onSuccessfulSubmit != null) {\n            this.onSuccessfulSubmit();\n        } else if (this.router != null) {\n            this.router.navigate([this.successRoute]);\n        }\n    }\n}\n","import {\n    Directive,\n    Input,\n    OnInit,\n} from '@angular/core';\n\nimport { Router } from '@angular/router';\n\nimport { AuthResult } from 'jslib-common/models/domain/authResult';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoFunctionService } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { CaptchaProtectedComponent } from './captchaProtected.component';\n\nconst Keys = {\n    rememberedEmail: 'rememberedEmail',\n    rememberEmail: 'rememberEmail',\n};\n\n@Directive()\nexport class LoginComponent extends CaptchaProtectedComponent implements OnInit {\n    @Input() email: string = '';\n    @Input() rememberEmail = true;\n\n    masterPassword: string = '';\n    showPassword: boolean = false;\n    formPromise: Promise<AuthResult>;\n    onSuccessfulLogin: () => Promise<any>;\n    onSuccessfulLoginNavigate: () => Promise<any>;\n    onSuccessfulLoginTwoFactorNavigate: () => Promise<any>;\n    onSuccessfulLoginForceResetNavigate: () => Promise<any>;\n\n    protected twoFactorRoute = '2fa';\n    protected successRoute = 'vault';\n    protected forcePasswordResetRoute = 'update-temp-password';\n\n    constructor(protected authService: AuthService, protected router: Router,\n        platformUtilsService: PlatformUtilsService, i18nService: I18nService,\n        protected stateService: StateService, environmentService: EnvironmentService,\n        protected passwordGenerationService: PasswordGenerationService,\n        protected cryptoFunctionService: CryptoFunctionService, private storageService: StorageService,\n        protected logService: LogService) {\n        super(environmentService, i18nService, platformUtilsService);\n    }\n\n    async ngOnInit() {\n        if (this.email == null || this.email === '') {\n            this.email = await this.storageService.get<string>(Keys.rememberedEmail);\n            if (this.email == null) {\n                this.email = '';\n            }\n        }\n        this.rememberEmail = await this.storageService.get<boolean>(Keys.rememberEmail);\n        if (this.rememberEmail == null) {\n            this.rememberEmail = true;\n        }\n        if (Utils.isBrowser && !Utils.isNode) {\n            this.focusInput();\n        }\n    }\n\n    async submit() {\n        await this.setupCaptcha();\n\n        if (this.email == null || this.email === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('emailRequired'));\n            return;\n        }\n        if (this.email.indexOf('@') === -1) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('invalidEmail'));\n            return;\n        }\n        if (this.masterPassword == null || this.masterPassword === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassRequired'));\n            return;\n        }\n\n        try {\n            this.formPromise = this.authService.logIn(this.email, this.masterPassword, this.captchaToken);\n            const response = await this.formPromise;\n            await this.storageService.save(Keys.rememberEmail, this.rememberEmail);\n            if (this.rememberEmail) {\n                await this.storageService.save(Keys.rememberedEmail, this.email);\n            } else {\n                await this.storageService.remove(Keys.rememberedEmail);\n            }\n            if (this.handleCaptchaRequired(response)) {\n                return;\n            } else if (response.twoFactor) {\n                if (this.onSuccessfulLoginTwoFactorNavigate != null) {\n                    this.onSuccessfulLoginTwoFactorNavigate();\n                } else {\n                    this.router.navigate([this.twoFactorRoute]);\n                }\n            } else if (response.forcePasswordReset) {\n                if (this.onSuccessfulLoginForceResetNavigate != null) {\n                    this.onSuccessfulLoginForceResetNavigate();\n                } else {\n                    this.router.navigate([this.forcePasswordResetRoute]);\n                }\n            } else {\n                const disableFavicon = await this.storageService.get<boolean>(ConstantsService.disableFaviconKey);\n                await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n                if (this.onSuccessfulLogin != null) {\n                    this.onSuccessfulLogin();\n                }\n                if (this.onSuccessfulLoginNavigate != null) {\n                    this.onSuccessfulLoginNavigate();\n                } else {\n                    this.router.navigate([this.successRoute]);\n                }\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    togglePassword() {\n        this.showPassword = !this.showPassword;\n        document.getElementById('masterPassword').focus();\n    }\n\n    async launchSsoBrowser(clientId: string, ssoRedirectUri: string) {\n        // Generate necessary sso params\n        const passwordOptions: any = {\n            type: 'password',\n            length: 64,\n            uppercase: true,\n            lowercase: true,\n            numbers: true,\n            special: false,\n        };\n        const state = await this.passwordGenerationService.generatePassword(passwordOptions);\n        const ssoCodeVerifier = await this.passwordGenerationService.generatePassword(passwordOptions);\n        const codeVerifierHash = await this.cryptoFunctionService.hash(ssoCodeVerifier, 'sha256');\n        const codeChallenge = Utils.fromBufferToUrlB64(codeVerifierHash);\n\n        // Save sso params\n        await this.storageService.save(ConstantsService.ssoStateKey, state);\n        await this.storageService.save(ConstantsService.ssoCodeVerifierKey, ssoCodeVerifier);\n\n        // Build URI\n        const webUrl = this.environmentService.getWebVaultUrl();\n\n        // Launch browser\n        this.platformUtilsService.launchUri(webUrl + '/#/sso?clientId=' + clientId +\n            '&redirectUri=' + encodeURIComponent(ssoRedirectUri) +\n            '&state=' + state + '&codeChallenge=' + codeChallenge);\n    }\n\n    protected focusInput() {\n        document.getElementById(this.email == null || this.email === '' ? 'email' : 'masterPassword').focus();\n    }\n}\n","import { I18nService } from '../abstractions/i18n.service';\nimport { IFrameComponent } from './iframe_component';\n\nexport class CaptchaIFrame extends IFrameComponent {\n    constructor(win: Window, webVaultUrl: string,\n        private i18nService: I18nService, successCallback: (message: string) => any, errorCallback: (message: string) => any,\n        infoCallback: (message: string) => any) {\n        super(win, webVaultUrl, 'captcha-connector.html', 'hcaptcha_iframe', successCallback, errorCallback, (message: string) => {\n            const parsedMessage = JSON.parse(message);\n            if (typeof (parsedMessage) !== 'string') {\n                this.iframe.height = (parsedMessage.height).toString();\n                this.iframe.width = (parsedMessage.width).toString();\n            } else {\n                infoCallback(parsedMessage);\n            }\n        });\n    }\n\n    init(siteKey: string): void {\n        super.initComponent(this.createParams({ siteKey: siteKey, locale: this.i18nService.translationLocale }, 1));\n    }\n}\n","import { I18nService } from '../abstractions/i18n.service';\n\nexport abstract class IFrameComponent {\n    iframe: HTMLIFrameElement;\n    private connectorLink: HTMLAnchorElement;\n    private parseFunction = this.parseMessage.bind(this);\n\n    constructor(private win: Window, protected webVaultUrl: string, private path: string, private iframeId: string,\n        public successCallback?: (message: string) => any,\n        public errorCallback?: (message: string) => any, public infoCallback?: (message: string) => any) {\n        this.connectorLink = win.document.createElement('a');\n    }\n\n    stop() {\n        this.sendMessage('stop');\n    }\n\n    start() {\n        this.sendMessage('start');\n    }\n\n    sendMessage(message: any) {\n        if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n            return;\n        }\n\n        this.iframe.contentWindow.postMessage(message, this.iframe.src);\n    }\n\n    base64Encode(str: string): string {\n        return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n            return String.fromCharCode(('0x' + p1) as any);\n        }));\n    }\n\n    cleanup() {\n        this.win.removeEventListener('message', this.parseFunction, false);\n    }\n\n    protected createParams(data: any, version: number) {\n        return new URLSearchParams({\n            data: this.base64Encode(JSON.stringify(data)),\n            parent: encodeURIComponent(this.win.document.location.href),\n            v: version.toString(),\n        });\n    }\n\n    protected initComponent(params: URLSearchParams): void {\n        this.connectorLink.href = `${this.webVaultUrl}/${this.path}?${params}`;\n        this.iframe = this.win.document.getElementById(this.iframeId) as HTMLIFrameElement;\n        this.iframe.src = this.connectorLink.href;\n\n        this.win.addEventListener('message', this.parseFunction, false);\n    }\n\n    private parseMessage(event: MessageEvent) {\n        if (!this.validMessage(event)) {\n            return;\n        }\n\n        const parts: string[] = event.data.split('|');\n        if (parts[0] === 'success' && this.successCallback) {\n            this.successCallback(parts[1]);\n        } else if (parts[0] === 'error' && this.errorCallback) {\n            this.errorCallback(parts[1]);\n        } else if (parts[0] === 'info' && this.infoCallback) {\n            this.infoCallback(parts[1]);\n        }\n    }\n\n    private validMessage(event: MessageEvent) {\n        if (event.origin == null || event.origin === '' || event.origin !== (this.connectorLink as any).origin ||\n            event.data == null || typeof (event.data) !== 'string') {\n            return false;\n        }\n\n        return event.data.indexOf('success|') === 0 || event.data.indexOf('error|') === 0 ||\n            event.data.indexOf('info|') === 0;\n    }\n}\n","export class DeleteRecoverRequest {\n    email: string;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class TwoFactorRecoveryRequest extends SecretVerificationRequest {\n    recoveryCode: string;\n    email: string;\n}\n","import { Directive, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { KeysRequest } from 'jslib-common/models/request/keysRequest';\nimport { ReferenceEventRequest } from 'jslib-common/models/request/referenceEventRequest';\nimport { RegisterRequest } from 'jslib-common/models/request/registerRequest';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\n\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\nimport { CaptchaProtectedComponent } from './captchaProtected.component';\n\n@Directive()\nexport class RegisterComponent extends CaptchaProtectedComponent implements OnInit {\n    name: string = '';\n    email: string = '';\n    masterPassword: string = '';\n    confirmMasterPassword: string = '';\n    hint: string = '';\n    showPassword: boolean = false;\n    formPromise: Promise<any>;\n    masterPasswordScore: number;\n    referenceData: ReferenceEventRequest;\n    showTerms = false;\n    acceptPolicies: boolean = false;\n\n    protected successRoute = 'login';\n    private masterPasswordStrengthTimeout: any;\n\n    constructor(protected authService: AuthService, protected router: Router,\n        i18nService: I18nService, protected cryptoService: CryptoService,\n        protected apiService: ApiService, protected stateService: StateService,\n        platformUtilsService: PlatformUtilsService,\n        protected passwordGenerationService: PasswordGenerationService, environmentService: EnvironmentService,\n        protected logService: LogService) {\n        super(environmentService, i18nService, platformUtilsService);\n        this.showTerms = false;\n    }\n\n    async ngOnInit() {\n        this.setupCaptcha();\n    }\n\n    get masterPasswordScoreWidth() {\n        return this.masterPasswordScore == null ? 0 : (this.masterPasswordScore + 1) * 20;\n    }\n\n    get masterPasswordScoreColor() {\n        switch (this.masterPasswordScore) {\n            case 4:\n                return 'success';\n            case 3:\n                return 'primary';\n            case 2:\n                return 'warning';\n            default:\n                return 'danger';\n        }\n    }\n\n    get masterPasswordScoreText() {\n        switch (this.masterPasswordScore) {\n            case 4:\n                return this.i18nService.t('strong');\n            case 3:\n                return this.i18nService.t('good');\n            case 2:\n                return this.i18nService.t('weak');\n            default:\n                return this.masterPasswordScore != null ? this.i18nService.t('weak') : null;\n        }\n    }\n\n    async submit() {\n        if (typeof crypto.subtle === 'undefined') {\n            this.platformUtilsService.showToast('error', \"This browser requires HTTPS to use the web vault\",\n                \"Check the Vaultwarden wiki for details on how to enable it\");\n            return;\n        }\n\n        if (!this.acceptPolicies && this.showTerms) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('acceptPoliciesError'));\n            return;\n        }\n\n        if (this.email == null || this.email === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('emailRequired'));\n            return;\n        }\n        if (this.email.indexOf('@') === -1) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('invalidEmail'));\n            return;\n        }\n        if (this.masterPassword == null || this.masterPassword === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassRequired'));\n            return;\n        }\n        if (this.masterPassword.length < 8) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassLength'));\n            return;\n        }\n        if (this.masterPassword !== this.confirmMasterPassword) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('masterPassDoesntMatch'));\n            return;\n        }\n\n        const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n            this.getPasswordStrengthUserInput());\n        if (strengthResult != null && strengthResult.score < 3) {\n            const result = await this.platformUtilsService.showDialog(this.i18nService.t('weakMasterPasswordDesc'),\n                this.i18nService.t('weakMasterPassword'), this.i18nService.t('yes'), this.i18nService.t('no'),\n                'warning');\n            if (!result) {\n                return;\n            }\n        }\n\n        if (this.hint === this.masterPassword) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), this.i18nService.t('hintEqualsPassword'));\n            return;\n        }\n\n        this.name = this.name === '' ? null : this.name;\n        this.email = this.email.trim().toLowerCase();\n        const kdf = KdfType.PBKDF2_SHA256;\n        const useLowerKdf = this.platformUtilsService.isIE();\n        const kdfIterations = useLowerKdf ? 10000 : 100000;\n        const key = await this.cryptoService.makeKey(this.masterPassword, this.email, kdf, kdfIterations);\n        const encKey = await this.cryptoService.makeEncKey(key);\n        const hashedPassword = await this.cryptoService.hashPassword(this.masterPassword, key);\n        const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n        const request = new RegisterRequest(this.email, this.name, hashedPassword,\n            this.hint, encKey[1].encryptedString, kdf, kdfIterations, this.referenceData, this.captchaToken);\n        request.keys = new KeysRequest(keys[0], keys[1].encryptedString);\n        const orgInvite = await this.stateService.get<any>('orgInvitation');\n        if (orgInvite != null && orgInvite.token != null && orgInvite.organizationUserId != null) {\n            request.token = orgInvite.token;\n            request.organizationUserId = orgInvite.organizationUserId;\n        }\n\n        try {\n            this.formPromise = this.apiService.postRegister(request);\n            try {\n                await this.formPromise;\n            } catch (e) {\n                if (this.handleCaptchaRequired(e)) {\n                    return;\n                } else {\n                    throw e;\n                }\n            }\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('newAccountCreated'));\n            this.router.navigate([this.successRoute], { queryParams: { email: this.email } });\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    togglePassword(confirmField: boolean) {\n        this.showPassword = !this.showPassword;\n        document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus();\n    }\n\n    updatePasswordStrength() {\n        if (this.masterPasswordStrengthTimeout != null) {\n            clearTimeout(this.masterPasswordStrengthTimeout);\n        }\n        this.masterPasswordStrengthTimeout = setTimeout(() => {\n            const strengthResult = this.passwordGenerationService.passwordStrength(this.masterPassword,\n                this.getPasswordStrengthUserInput());\n            this.masterPasswordScore = strengthResult == null ? null : strengthResult.score;\n        }, 300);\n    }\n\n    private getPasswordStrengthUserInput() {\n        let userInput: string[] = [];\n        const atPosition = this.email.indexOf('@');\n        if (atPosition > -1) {\n            userInput = userInput.concat(this.email.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/));\n        }\n        if (this.name != null && this.name !== '') {\n            userInput = userInput.concat(this.name.trim().toLowerCase().split(' '));\n        }\n        return userInput;\n    }\n}\n","import { KeysRequest } from './keysRequest';\nimport { ReferenceEventRequest } from './referenceEventRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nimport { CaptchaProtectedRequest } from './captchaProtectedRequest';\n\nexport class RegisterRequest implements CaptchaProtectedRequest {\n    masterPasswordHint: string;\n    keys: KeysRequest;\n    token: string;\n    organizationUserId: string;\n\n\n    constructor(public email: string, public name: string, public masterPasswordHash: string,\n        masterPasswordHint: string, public key: string, public kdf: KdfType, public kdfIterations: number,\n        public referenceData: ReferenceEventRequest, public captchaResponse: string) {\n        this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n    }\n}\n","export class ReferenceEventRequest {\n    id: string;\n    layout: string;\n    flow: string;\n}\n","import {\n    Directive,\n    OnInit,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\n\n@Directive()\nexport class RemovePasswordComponent implements OnInit {\n\n    actionPromise: Promise<any>;\n    continuing: boolean = false;\n    leaving: boolean = false;\n\n    loading: boolean = true;\n    organization: Organization;\n    email: string;\n\n    constructor(private router: Router, private userService: UserService,\n        private apiService: ApiService, private syncService: SyncService,\n        private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n        private keyConnectorService: KeyConnectorService, private storageService: StorageService) { }\n\n    async ngOnInit() {\n        this.organization = await this.keyConnectorService.getManagingOrganization();\n        this.email = await this.userService.getEmail();\n        await this.syncService.fullSync(false);\n        this.loading = false;\n    }\n\n    async convert() {\n        this.continuing = true;\n        this.actionPromise = this.keyConnectorService.migrateUser();\n\n        try {\n            await this.actionPromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('removedMasterPassword'));\n            await this.keyConnectorService.removeConvertAccountRequired();\n            this.router.navigate(['']);\n        } catch (e) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), e.message);\n        }\n    }\n\n    async leave() {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('leaveOrganizationConfirmation'), this.organization.name,\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.leaving = true;\n            this.actionPromise = this.apiService.postLeaveOrganization(this.organization.id).then(() => {\n                return this.syncService.fullSync(true);\n            });\n            await this.actionPromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('leftOrganization'));\n            await this.keyConnectorService.removeConvertAccountRequired();\n            this.router.navigate(['']);\n        } catch (e) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), e);\n        }\n    }\n}\n","import { Directive } from '@angular/core';\nimport {\n    ActivatedRoute,\n    Router\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { KeysRequest } from 'jslib-common/models/request/keysRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from 'jslib-common/models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { SetPasswordRequest } from 'jslib-common/models/request/setPasswordRequest';\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from './change-password.component';\n\nimport { HashPurpose } from 'jslib-common/enums/hashPurpose';\nimport { KdfType } from 'jslib-common/enums/kdfType';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive()\nexport class SetPasswordComponent extends BaseChangePasswordComponent {\n    syncLoading: boolean = true;\n    showPassword: boolean = false;\n    hint: string = '';\n    identifier: string = null;\n    orgId: string;\n    resetPasswordAutoEnroll = false;\n\n    onSuccessfulChangePassword: () => Promise<any>;\n    successRoute = 'vault';\n\n    constructor(i18nService: I18nService, cryptoService: CryptoService, messagingService: MessagingService,\n        userService: UserService, passwordGenerationService: PasswordGenerationService,\n        platformUtilsService: PlatformUtilsService, policyService: PolicyService, protected router: Router,\n        private apiService: ApiService, private syncService: SyncService, private route: ActivatedRoute) {\n        super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n            platformUtilsService, policyService);\n    }\n\n    async ngOnInit() {\n        await this.syncService.fullSync(true);\n        this.syncLoading = false;\n\n        this.route.queryParams.pipe(first()).subscribe(async qParams => {\n            if (qParams.identifier != null) {\n                this.identifier = qParams.identifier;\n            }\n        });\n\n        // Automatic Enrollment Detection\n        if (this.identifier != null) {\n            try {\n                const response = await this.apiService.getOrganizationAutoEnrollStatus(this.identifier);\n                this.orgId = response.id;\n                this.resetPasswordAutoEnroll = response.resetPasswordEnabled;\n            } catch {\n                this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n            }\n        }\n\n        super.ngOnInit();\n    }\n\n    async setupSubmitActions() {\n        this.kdf = KdfType.PBKDF2_SHA256;\n        const useLowerKdf = this.platformUtilsService.isIE();\n        this.kdfIterations = useLowerKdf ? 10000 : 100000;\n        return true;\n    }\n\n    async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey,\n        encKey: [SymmetricCryptoKey, EncString]) {\n        const keys = await this.cryptoService.makeKeyPair(encKey[0]);\n        const request = new SetPasswordRequest(\n            masterPasswordHash,\n            encKey[1].encryptedString,\n            this.hint,\n            this.kdf,\n            this.kdfIterations,\n            this.identifier,\n            new KeysRequest(keys[0], keys[1].encryptedString)\n        );\n        try {\n            if (this.resetPasswordAutoEnroll) {\n                this.formPromise = this.apiService.setPassword(request).then(async () => {\n                    await this.onSetPasswordSuccess(key, encKey, keys);\n                    return this.apiService.getOrganizationKeys(this.orgId);\n                }).then(async response => {\n                    if (response == null) {\n                        throw new Error(this.i18nService.t('resetPasswordOrgKeysError'));\n                    }\n                    const userId = await this.userService.getUserId();\n                    const publicKey = Utils.fromB64ToArray(response.publicKey);\n\n                    // RSA Encrypt user's encKey.key with organization public key\n                    const userEncKey = await this.cryptoService.getEncKey();\n                    const encryptedKey = await this.cryptoService.rsaEncrypt(userEncKey.key, publicKey.buffer);\n\n                    const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();\n                    resetRequest.resetPasswordKey = encryptedKey.encryptedString;\n\n                    return this.apiService.putOrganizationUserResetPasswordEnrollment(this.orgId, userId, resetRequest);\n                });\n            } else {\n                this.formPromise = this.apiService.setPassword(request).then(async () => {\n                    await this.onSetPasswordSuccess(key, encKey, keys);\n                });\n            }\n\n            await this.formPromise;\n\n            if (this.onSuccessfulChangePassword != null) {\n                this.onSuccessfulChangePassword();\n            } else {\n                this.router.navigate([this.successRoute]);\n            }\n        } catch {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('errorOccurred'));\n        }\n    }\n\n    togglePassword(confirmField: boolean) {\n        this.showPassword = !this.showPassword;\n        document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus();\n    }\n\n    private async onSetPasswordSuccess(key: SymmetricCryptoKey, encKey: [SymmetricCryptoKey, EncString], keys: [string, EncString]) {\n        await this.userService.setInformation(await this.userService.getUserId(), await this.userService.getEmail(),\n            this.kdf, this.kdfIterations);\n        await this.cryptoService.setKey(key);\n        await this.cryptoService.setEncKey(encKey[1].encryptedString);\n        await this.cryptoService.setEncPrivateKey(keys[1].encryptedString);\n\n        const localKeyHash = await this.cryptoService.hashPassword(this.masterPassword, key,\n            HashPurpose.LocalAuthorization);\n        await this.cryptoService.setKeyHash(localKeyHash);\n    }\n}\n","import { KeysRequest } from './keysRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class SetPasswordRequest {\n    masterPasswordHash: string;\n    key: string;\n    masterPasswordHint: string;\n    keys: KeysRequest;\n    kdf: KdfType;\n    kdfIterations: number;\n    orgIdentifier: string;\n\n    constructor(masterPasswordHash: string, key: string, masterPasswordHint: string, kdf: KdfType,\n        kdfIterations: number, orgIdentifier: string, keys: KeysRequest) {\n        this.masterPasswordHash = masterPasswordHash;\n        this.key = key;\n        this.masterPasswordHint = masterPasswordHint;\n        this.kdf = kdf;\n        this.kdfIterations = kdfIterations;\n        this.orgIdentifier = orgIdentifier;\n        this.keys = keys;\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ComponentRef,\n    ElementRef,\n    OnDestroy,\n    Type,\n    ViewChild,\n    ViewContainerRef\n} from '@angular/core';\n\nimport {\n    ConfigurableFocusTrap,\n    ConfigurableFocusTrapFactory,\n} from '@angular/cdk/a11y';\n\nimport { ModalService } from '../../services/modal.service';\n\nimport { ModalRef } from './modal.ref';\n\n@Component({\n    selector: 'app-modal',\n    template: '<ng-template #modalContent></ng-template>',\n})\nexport class DynamicModalComponent implements AfterViewInit, OnDestroy {\n    componentRef: ComponentRef<any>;\n\n    @ViewChild('modalContent', { read: ViewContainerRef, static: true }) modalContentRef: ViewContainerRef;\n\n    childComponentType: Type<any>;\n    setComponentParameters: (component: any) => void;\n\n    private focusTrap: ConfigurableFocusTrap;\n\n    constructor(private modalService: ModalService, private cd: ChangeDetectorRef,\n        private el: ElementRef<HTMLElement>, private focusTrapFactory: ConfigurableFocusTrapFactory,\n        public modalRef: ModalRef) { }\n\n    ngAfterViewInit() {\n        this.loadChildComponent(this.childComponentType);\n        if (this.setComponentParameters != null) {\n            this.setComponentParameters(this.componentRef.instance);\n        }\n        this.cd.detectChanges();\n\n        this.modalRef.created(this.el.nativeElement);\n        this.focusTrap = this.focusTrapFactory.create(this.el.nativeElement.querySelector('.modal-dialog'));\n        if (this.el.nativeElement.querySelector('[appAutoFocus]') == null) {\n            this.focusTrap.focusFirstTabbableElementWhenReady();\n        }\n    }\n\n    loadChildComponent(componentType: Type<any>) {\n        const componentFactory = this.modalService.resolveComponentFactory(componentType);\n\n        this.modalContentRef.clear();\n        this.componentRef = this.modalContentRef.createComponent(componentFactory);\n    }\n\n    ngOnDestroy() {\n        if (this.componentRef) {\n            this.componentRef.destroy();\n        }\n        this.focusTrap.destroy();\n    }\n\n    close() {\n        this.modalRef.close();\n    }\n\n    getFocus() {\n        const autoFocusEl = this.el.nativeElement.querySelector('[appAutoFocus]') as HTMLElement;\n        autoFocusEl?.focus();\n    }\n}\n","import {\n    InjectFlags,\n    InjectionToken,\n    Injector,\n    Type\n} from '@angular/core';\n\nexport class ModalInjector implements Injector {\n    constructor(private _parentInjector: Injector, private _additionalTokens: WeakMap<any, any>) {}\n\n    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): T;\n    get(token: any, notFoundValue?: any, flags?: any) {\n        return this._additionalTokens.get(token) ?? this._parentInjector.get<any>(token, notFoundValue);\n    }\n}\n","import { Directive, OnDestroy, OnInit } from '@angular/core';\n\nimport {\n    ActivatedRoute,\n    Router,\n} from '@angular/router';\n\nimport { first } from 'rxjs/operators';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { TwoFactorEmailRequest } from 'jslib-common/models/request/twoFactorEmailRequest';\n\nimport { AuthResult } from 'jslib-common/models/domain/authResult';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { TwoFactorProviders } from 'jslib-common/services/auth.service';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport * as DuoWebSDK from 'duo_web_sdk';\nimport { WebAuthnIFrame } from 'jslib-common/misc/webauthn_iframe';\n\n@Directive()\nexport class TwoFactorComponent implements OnInit, OnDestroy {\n    token: string = '';\n    remember: boolean = false;\n    webAuthnReady: boolean = false;\n    webAuthnNewTab: boolean = false;\n    providers = TwoFactorProviders;\n    providerType = TwoFactorProviderType;\n    selectedProviderType: TwoFactorProviderType = TwoFactorProviderType.Authenticator;\n    webAuthnSupported: boolean = false;\n    webAuthn: WebAuthnIFrame = null;\n    title: string = '';\n    twoFactorEmail: string = null;\n    formPromise: Promise<any>;\n    emailPromise: Promise<any>;\n    identifier: string = null;\n    onSuccessfulLogin: () => Promise<any>;\n    onSuccessfulLoginNavigate: () => Promise<any>;\n\n    get webAuthnAllow(): string {\n        return `publickey-credentials-get ${this.environmentService.getWebVaultUrl()}`;\n    }\n\n    protected loginRoute = 'login';\n    protected successRoute = 'vault';\n\n    constructor(protected authService: AuthService, protected router: Router,\n        protected i18nService: I18nService, protected apiService: ApiService,\n        protected platformUtilsService: PlatformUtilsService, protected win: Window,\n        protected environmentService: EnvironmentService, protected stateService: StateService,\n        protected storageService: StorageService, protected route: ActivatedRoute,\n        protected logService: LogService) {\n        this.webAuthnSupported = this.platformUtilsService.supportsWebAuthn(win);\n    }\n\n    async ngOnInit() {\n        if (!this.authing || this.authService.twoFactorProvidersData == null) {\n            this.router.navigate([this.loginRoute]);\n            return;\n        }\n\n        this.route.queryParams.pipe(first()).subscribe(qParams => {\n            if (qParams.identifier != null) {\n                this.identifier = qParams.identifier;\n            }\n        });\n\n        if (this.needsLock) {\n            this.successRoute = 'lock';\n        }\n\n        if (this.win != null && this.webAuthnSupported) {\n            const webVaultUrl = this.environmentService.getWebVaultUrl();\n            this.webAuthn = new WebAuthnIFrame(this.win, webVaultUrl, this.webAuthnNewTab, this.platformUtilsService,\n                this.i18nService, (token: string) => {\n                    this.token = token;\n                    this.submit();\n                }, (error: string) => {\n                    this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), error);\n                }, (info: string) => {\n                    if (info === 'ready') {\n                        this.webAuthnReady = true;\n                    }\n                }\n            );\n        }\n\n        this.selectedProviderType = this.authService.getDefaultTwoFactorProvider(this.webAuthnSupported);\n        await this.init();\n    }\n\n    ngOnDestroy(): void {\n        this.cleanupWebAuthn();\n        this.webAuthn = null;\n    }\n\n    async init() {\n        if (this.selectedProviderType == null) {\n            this.title = this.i18nService.t('loginUnavailable');\n            return;\n        }\n\n        this.cleanupWebAuthn();\n        this.title = (TwoFactorProviders as any)[this.selectedProviderType].name;\n        const providerData = this.authService.twoFactorProvidersData.get(this.selectedProviderType);\n        switch (this.selectedProviderType) {\n            case TwoFactorProviderType.WebAuthn:\n                if (!this.webAuthnNewTab) {\n                    setTimeout(() => {\n                        this.authWebAuthn();\n                    }, 500);\n                }\n                break;\n            case TwoFactorProviderType.Duo:\n            case TwoFactorProviderType.OrganizationDuo:\n                setTimeout(() => {\n                    DuoWebSDK.init({\n                        iframe: undefined,\n                        host: providerData.Host,\n                        sig_request: providerData.Signature,\n                        submit_callback: async (f: HTMLFormElement) => {\n                            const sig = f.querySelector('input[name=\"sig_response\"]') as HTMLInputElement;\n                            if (sig != null) {\n                                this.token = sig.value;\n                                await this.submit();\n                            }\n                        },\n                    });\n                }, 0);\n                break;\n            case TwoFactorProviderType.Email:\n                this.twoFactorEmail = providerData.Email;\n                if (this.authService.twoFactorProvidersData.size > 1) {\n                    await this.sendEmail(false);\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n    async submit() {\n        if (this.token == null || this.token === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('verificationCodeRequired'));\n            return;\n        }\n\n        if (this.selectedProviderType === TwoFactorProviderType.WebAuthn) {\n            if (this.webAuthn != null) {\n                this.webAuthn.stop();\n            } else {\n                return;\n            }\n        } else if (this.selectedProviderType === TwoFactorProviderType.Email ||\n            this.selectedProviderType === TwoFactorProviderType.Authenticator) {\n            this.token = this.token.replace(' ', '').trim();\n        }\n\n        try {\n            await this.doSubmit();\n        } catch {\n            if (this.selectedProviderType === TwoFactorProviderType.WebAuthn && this.webAuthn != null) {\n                this.webAuthn.start();\n            }\n        }\n    }\n\n    async doSubmit() {\n        this.formPromise = this.authService.logInTwoFactor(this.selectedProviderType, this.token, this.remember);\n        const response: AuthResult = await this.formPromise;\n        const disableFavicon = await this.storageService.get<boolean>(ConstantsService.disableFaviconKey);\n        await this.stateService.save(ConstantsService.disableFaviconKey, !!disableFavicon);\n        if (this.onSuccessfulLogin != null) {\n            this.onSuccessfulLogin();\n        }\n        if (response.resetMasterPassword) {\n            this.successRoute = 'set-password';\n        }\n        if (response.forcePasswordReset) {\n            this.successRoute = 'update-temp-password';\n        }\n        if (this.onSuccessfulLoginNavigate != null) {\n            this.onSuccessfulLoginNavigate();\n        } else {\n            this.router.navigate([this.successRoute], {\n                queryParams: {\n                    identifier: this.identifier,\n                },\n            });\n        }\n    }\n\n    async sendEmail(doToast: boolean) {\n        if (this.selectedProviderType !== TwoFactorProviderType.Email) {\n            return;\n        }\n\n        if (this.emailPromise != null) {\n            return;\n        }\n\n        try {\n            const request = new TwoFactorEmailRequest();\n            request.email = this.authService.email;\n            request.masterPasswordHash = this.authService.masterPasswordHash;\n            this.emailPromise = this.apiService.postTwoFactorEmail(request);\n            await this.emailPromise;\n            if (doToast) {\n                this.platformUtilsService.showToast('success', null,\n                    this.i18nService.t('verificationCodeEmailSent', this.twoFactorEmail));\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        this.emailPromise = null;\n    }\n\n    authWebAuthn() {\n        const providerData = this.authService.twoFactorProvidersData.get(this.selectedProviderType);\n\n        if (!this.webAuthnSupported || this.webAuthn == null) {\n            return;\n        }\n\n        this.webAuthn.init(providerData);\n    }\n\n    private cleanupWebAuthn() {\n        if (this.webAuthn != null) {\n            this.webAuthn.stop();\n            this.webAuthn.cleanup();\n        }\n    }\n\n    get authing(): boolean {\n        return this.authService.authingWithPassword() || this.authService.authingWithSso() || this.authService.authingWithApiKey();\n    }\n\n    get needsLock(): boolean {\n        return this.authService.authingWithSso() || this.authService.authingWithApiKey();\n    }\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class AuthResult {\n    twoFactor: boolean = false;\n    captchaSiteKey: string = '';\n    resetMasterPassword: boolean = false;\n    forcePasswordReset: boolean = false;\n    twoFactorProviders: Map<TwoFactorProviderType, { [key: string]: string; }> = null;\n}\n","import { KeysRequest } from '../keysRequest';\n\nimport { KdfType } from '../../../enums/kdfType';\n\nexport class SetKeyConnectorKeyRequest {\n    key: string;\n    keys: KeysRequest;\n    kdf: KdfType;\n    kdfIterations: number;\n    orgIdentifier: string;\n\n    constructor(key: string, kdf: KdfType, kdfIterations: number, orgIdentifier: string, keys: KeysRequest) {\n        this.key = key;\n        this.kdf = kdf;\n        this.kdfIterations = kdfIterations;\n        this.orgIdentifier = orgIdentifier;\n        this.keys = keys;\n    }\n}\n","import { DeviceType } from '../../enums/deviceType';\n\nimport { PlatformUtilsService } from '../../abstractions/platformUtils.service';\n\nexport class DeviceRequest {\n    type: DeviceType;\n    name: string;\n    identifier: string;\n    pushToken?: string;\n\n    constructor(appId: string, platformUtilsService: PlatformUtilsService) {\n        this.type = platformUtilsService.getDevice();\n        this.name = platformUtilsService.getDeviceString();\n        this.identifier = appId;\n        this.pushToken = null;\n    }\n}\n","export class PreloginRequest {\n    email: string;\n\n    constructor(email: string) {\n        this.email = email;\n    }\n}\n","import { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nimport { CaptchaProtectedRequest } from './captchaProtectedRequest';\nimport { DeviceRequest } from './deviceRequest';\n\nimport { Utils } from '../../misc/utils';\n\nexport class TokenRequest implements CaptchaProtectedRequest {\n    email: string;\n    masterPasswordHash: string;\n    code: string;\n    codeVerifier: string;\n    redirectUri: string;\n    clientId: string;\n    clientSecret: string;\n    device?: DeviceRequest;\n\n    constructor(credentials: string[], codes: string[], clientIdClientSecret: string[], public provider: TwoFactorProviderType,\n        public token: string, public remember: boolean, public captchaResponse: string, device?: DeviceRequest) {\n        if (credentials != null && credentials.length > 1) {\n            this.email = credentials[0];\n            this.masterPasswordHash = credentials[1];\n        } else if (codes != null && codes.length > 2) {\n            this.code = codes[0];\n            this.codeVerifier = codes[1];\n            this.redirectUri = codes[2];\n        } else if (clientIdClientSecret != null && clientIdClientSecret.length > 1) {\n            this.clientId = clientIdClientSecret[0];\n            this.clientSecret = clientIdClientSecret[1];\n        }\n        this.device = device != null ? device : null;\n    }\n\n    toIdentityToken(clientId: string) {\n        const obj: any = {\n            scope: 'api offline_access',\n            client_id: clientId,\n        };\n\n        if (this.clientSecret != null) {\n            obj.scope = clientId.startsWith('organization') ? 'api.organization' : 'api';\n            obj.grant_type = 'client_credentials';\n            obj.client_secret = this.clientSecret;\n        } else if (this.masterPasswordHash != null && this.email != null) {\n            obj.grant_type = 'password';\n            obj.username = this.email;\n            obj.password = this.masterPasswordHash;\n        } else if (this.code != null && this.codeVerifier != null && this.redirectUri != null) {\n            obj.grant_type = 'authorization_code';\n            obj.code = this.code;\n            obj.code_verifier = this.codeVerifier;\n            obj.redirect_uri = this.redirectUri;\n        } else {\n            throw new Error('must provide credentials or codes');\n        }\n\n        if (this.device) {\n            obj.deviceType = this.device.type;\n            obj.deviceIdentifier = this.device.identifier;\n            obj.deviceName = this.device.name;\n            // no push tokens for browser apps yet\n            // obj.devicePushToken = this.device.pushToken;\n        }\n\n        if (this.token && this.provider != null) {\n            obj.twoFactorToken = this.token;\n            obj.twoFactorProvider = this.provider;\n            obj.twoFactorRemember = this.remember ? '1' : '0';\n        }\n\n        if (this.captchaResponse != null) {\n            obj.captchaResponse = this.captchaResponse;\n        }\n\n\n        return obj;\n    }\n\n    alterIdentityTokenHeaders(headers: Headers) {\n        if (this.clientSecret == null && this.masterPasswordHash != null && this.email != null) {\n            headers.set('Auth-Email', Utils.fromUtf8ToUrlB64(this.email));\n        }\n    }\n}\n","import { I18nService } from '../abstractions/i18n.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nexport class WebAuthnIFrame {\n    private iframe: HTMLIFrameElement = null;\n    private connectorLink: HTMLAnchorElement;\n    private parseFunction = this.parseMessage.bind(this);\n\n    constructor(private win: Window, private webVaultUrl: string, private webAuthnNewTab: boolean,\n        private platformUtilsService: PlatformUtilsService, private i18nService: I18nService,\n        private successCallback: Function, private errorCallback: Function, private infoCallback: Function) {\n        this.connectorLink = win.document.createElement('a');\n    }\n\n    init(data: any): void {\n        const params = new URLSearchParams({\n            data: this.base64Encode(JSON.stringify(data)),\n            parent: encodeURIComponent(this.win.document.location.href),\n            btnText: encodeURIComponent(this.i18nService.t('webAuthnAuthenticate')),\n            v: '1',\n        });\n\n        if (this.webAuthnNewTab) {\n            // Firefox fallback which opens the webauthn page in a new tab\n            params.append('locale', this.i18nService.translationLocale);\n            this.platformUtilsService.launchUri(`${this.webVaultUrl}/webauthn-fallback-connector.html?${params}`);\n        } else {\n            this.connectorLink.href = `${this.webVaultUrl}/webauthn-connector.html?${params}`;\n            this.iframe = this.win.document.getElementById('webauthn_iframe') as HTMLIFrameElement;\n            this.iframe.allow = 'publickey-credentials-get ' + new URL(this.webVaultUrl).origin;\n            this.iframe.src = this.connectorLink.href;\n\n            this.win.addEventListener('message', this.parseFunction, false);\n        }\n    }\n\n    stop() {\n        this.sendMessage('stop');\n    }\n\n    start() {\n        this.sendMessage('start');\n    }\n\n    sendMessage(message: any) {\n        if (!this.iframe || !this.iframe.src || !this.iframe.contentWindow) {\n            return;\n        }\n\n        this.iframe.contentWindow.postMessage(message, this.iframe.src);\n    }\n\n    base64Encode(str: string): string {\n        return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {\n            return String.fromCharCode(('0x' + p1) as any);\n        }));\n    }\n\n    cleanup() {\n        this.win.removeEventListener('message', this.parseFunction, false);\n    }\n\n    private parseMessage(event: MessageEvent) {\n        if (!this.validMessage(event)) {\n            return;\n        }\n\n        const parts: string[] = event.data.split('|');\n        if (parts[0] === 'success' && this.successCallback) {\n            this.successCallback(parts[1]);\n        } else if (parts[0] === 'error' && this.errorCallback) {\n            this.errorCallback(parts[1]);\n        } else if (parts[0] === 'info' && this.infoCallback) {\n            this.infoCallback(parts[1]);\n        }\n    }\n\n    private validMessage(event: MessageEvent) {\n        if (event.origin == null || event.origin === '' || event.origin !== (this.connectorLink as any).origin ||\n            event.data == null || typeof (event.data) !== 'string') {\n            return false;\n        }\n\n        return event.data.indexOf('success|') === 0 || event.data.indexOf('error|') === 0 ||\n            event.data.indexOf('info|') === 0;\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    OnInit,\n    Output,\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { TwoFactorProviderType } from 'jslib-common/enums/twoFactorProviderType';\n\nimport { AuthService } from 'jslib-common/abstractions/auth.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n@Directive()\nexport class TwoFactorOptionsComponent implements OnInit {\n    @Output() onProviderSelected = new EventEmitter<TwoFactorProviderType>();\n    @Output() onRecoverSelected = new EventEmitter();\n\n    providers: any[] = [];\n\n    constructor(protected authService: AuthService, protected router: Router,\n        protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n        protected win: Window) { }\n\n    ngOnInit() {\n        this.providers = this.authService.getSupportedTwoFactorProviders(this.win);\n    }\n\n    choose(p: any) {\n        this.onProviderSelected.emit(p.type);\n    }\n\n    recover() {\n        this.platformUtilsService.launchUri('https://help.bitwarden.com/article/lost-two-step-device/');\n        this.onRecoverSelected.emit();\n    }\n}\n","import { Directive } from '@angular/core';\n\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SyncService } from 'jslib-common/abstractions/sync.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ChangePasswordComponent as BaseChangePasswordComponent } from './change-password.component';\n\nimport { EncString } from 'jslib-common/models/domain/encString';\nimport { MasterPasswordPolicyOptions } from 'jslib-common/models/domain/masterPasswordPolicyOptions';\nimport { SymmetricCryptoKey } from 'jslib-common/models/domain/symmetricCryptoKey';\n\nimport { UpdateTempPasswordRequest } from 'jslib-common/models/request/updateTempPasswordRequest';\n\n@Directive()\nexport class UpdateTempPasswordComponent extends BaseChangePasswordComponent {\n    hint: string;\n    key: string;\n    enforcedPolicyOptions: MasterPasswordPolicyOptions;\n    showPassword: boolean = false;\n\n    onSuccessfulChangePassword: () => Promise<any>;\n\n    constructor(i18nService: I18nService, platformUtilsService: PlatformUtilsService,\n        passwordGenerationService: PasswordGenerationService, policyService: PolicyService,\n        cryptoService: CryptoService, userService: UserService,\n        messagingService: MessagingService, private apiService: ApiService,\n        private syncService: SyncService, private logService: LogService) {\n        super(i18nService, cryptoService, messagingService, userService, passwordGenerationService,\n            platformUtilsService, policyService);\n    }\n\n    async ngOnInit() {\n        await this.syncService.fullSync(true);\n        super.ngOnInit();\n    }\n\n    togglePassword(confirmField: boolean) {\n        this.showPassword = !this.showPassword;\n        document.getElementById(confirmField ? 'masterPasswordRetype' : 'masterPassword').focus();\n    }\n\n    async setupSubmitActions(): Promise<boolean> {\n        this.enforcedPolicyOptions = await this.policyService.getMasterPasswordPolicyOptions();\n        this.email = await this.userService.getEmail();\n        this.kdf = await this.userService.getKdf();\n        this.kdfIterations = await this.userService.getKdfIterations();\n        return true;\n    }\n\n    async submit() {\n        // Validation\n        if (!await this.strongPassword()) {\n            return;\n        }\n\n        if (!await this.setupSubmitActions()) {\n            return;\n        }\n\n        try {\n            // Create new key and hash new password\n            const newKey = await this.cryptoService.makeKey(this.masterPassword, this.email.trim().toLowerCase(),\n                this.kdf, this.kdfIterations);\n            const newPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, newKey);\n\n            // Grab user's current enc key\n            const userEncKey = await this.cryptoService.getEncKey();\n\n            // Create new encKey for the User\n            const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey);\n\n            await this.performSubmitActions(newPasswordHash, newKey, newEncKey);\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async performSubmitActions(masterPasswordHash: string, key: SymmetricCryptoKey,\n        encKey: [SymmetricCryptoKey, EncString]) {\n        try {\n            // Create request\n            const request = new UpdateTempPasswordRequest();\n            request.key = encKey[1].encryptedString;\n            request.newMasterPasswordHash = masterPasswordHash;\n            request.masterPasswordHint = this.hint;\n\n            // Update user's password\n            this.formPromise = this.apiService.putUpdateTempPassword(request);\n            await this.formPromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('updatedMasterPassword'));\n\n            if (this.onSuccessfulChangePassword != null) {\n                this.onSuccessfulChangePassword();\n            } else {\n                this.messagingService.send('logout');\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n}\n","import { OrganizationUserResetPasswordRequest } from './organizationUserResetPasswordRequest';\n\nexport class UpdateTempPasswordRequest extends OrganizationUserResetPasswordRequest {\n    masterPasswordHint: string;\n}\n","export class VerifyEmailRequest {\n    userId: string;\n    token: string;\n\n    constructor(userId: string, token: string) {\n        this.userId = userId;\n        this.token = token;\n    }\n}\n","export class VerifyDeleteRecoverRequest {\n    userId: string;\n    token: string;\n\n    constructor(userId: string, token: string) {\n        this.userId = userId;\n        this.token = token;\n    }\n}\n","import { Directive } from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { EventView } from 'jslib-common/models/view/eventView';\n\nimport { EventResponse } from 'jslib-common/models/response/eventResponse';\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\n\nimport { EventService } from 'src/app/services/event.service';\n\n@Directive()\nexport abstract class BaseEventsComponent {\n    loading = true;\n    loaded = false;\n    events: EventView[];\n    start: string;\n    end: string;\n    dirtyDates: boolean = true;\n    continuationToken: string;\n    refreshPromise: Promise<any>;\n    exportPromise: Promise<any>;\n    morePromise: Promise<any>;\n\n    abstract readonly exportFileName: string;\n\n    constructor(protected eventService: EventService, protected i18nService: I18nService,\n        protected toasterService: ToasterService, protected exportService: ExportService,\n        protected platformUtilsService: PlatformUtilsService, protected logService: LogService) {\n        const defaultDates = this.eventService.getDefaultDateFilters();\n        this.start = defaultDates[0];\n        this.end = defaultDates[1];\n    }\n\n    async exportEvents() {\n        if (this.appApiPromiseUnfulfilled() || this.dirtyDates) {\n            return;\n        }\n\n        this.loading = true;\n\n        const dates = this.parseDates();\n        if (dates == null) {\n            return;\n        }\n\n        try {\n            this.exportPromise = this.export(dates[0], dates[1]);\n\n            await this.exportPromise;\n        } catch (e) {\n            this.logService.error(`Handled exception: ${e}`);\n        }\n\n        this.exportPromise = null;\n        this.loading = false;\n    }\n\n    async loadEvents(clearExisting: boolean) {\n        if (this.appApiPromiseUnfulfilled()) {\n            return;\n        }\n\n        const dates = this.parseDates();\n        if (dates == null) {\n            return;\n        }\n\n        this.loading = true;\n        let events: EventView[] = [];\n        try {\n            const promise = this.loadAndParseEvents(dates[0], dates[1], clearExisting ? null : this.continuationToken);\n            if (clearExisting) {\n                this.refreshPromise = promise;\n            } else {\n                this.morePromise = promise;\n            }\n            const result = await promise;\n            this.continuationToken = result.continuationToken;\n            events = result.events;\n        } catch (e) {\n            this.logService.error(`Handled exception: ${e}`);\n        }\n\n        if (!clearExisting && this.events != null && this.events.length > 0) {\n            this.events = this.events.concat(events);\n        } else {\n            this.events = events;\n        }\n\n        this.dirtyDates = false;\n        this.loading = false;\n        this.morePromise = null;\n        this.refreshPromise = null;\n    }\n\n    protected abstract requestEvents(startDate: string, endDate: string, continuationToken: string): Promise<ListResponse<EventResponse>>;\n    protected abstract getUserName(r: EventResponse, userId: string): { name: string, email: string };\n\n    protected async loadAndParseEvents(startDate: string, endDate: string, continuationToken: string) {\n        const response = await this.requestEvents(startDate, endDate, continuationToken);\n\n        const events = await Promise.all(response.data.map(async r => {\n            const userId = r.actingUserId == null ? r.userId : r.actingUserId;\n            const eventInfo = await this.eventService.getEventInfo(r);\n            const user = this.getUserName(r, userId);\n            return new EventView({\n                message: eventInfo.message,\n                humanReadableMessage: eventInfo.humanReadableMessage,\n                appIcon: eventInfo.appIcon,\n                appName: eventInfo.appName,\n                userId: userId,\n                userName: user != null ? user.name : this.i18nService.t('unknown'),\n                userEmail: user != null ? user.email : '',\n                date: r.date,\n                ip: r.ipAddress,\n                type: r.type,\n            });\n        }));\n        return { continuationToken: response.continuationToken, events: events };\n    }\n\n    protected parseDates() {\n        let dates: string[] = null;\n        try {\n            dates = this.eventService.formatDateFilters(this.start, this.end);\n        } catch (e) {\n            this.toasterService.popAsync('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('invalidDateRange'));\n            return null;\n        }\n        return dates;\n    }\n\n    protected appApiPromiseUnfulfilled() {\n        return this.refreshPromise != null || this.morePromise != null || this.exportPromise != null;\n    }\n\n    private async export(start: string, end: string) {\n        let continuationToken = this.continuationToken;\n        let events = [].concat(this.events);\n\n        while (continuationToken != null) {\n            const result = await this.loadAndParseEvents(start, end, continuationToken);\n            continuationToken = result.continuationToken;\n            events = events.concat(result.events);\n        }\n\n        const data = await this.exportService.getEventExport(events);\n        const fileName = this.exportService.getFileName(this.exportFileName, 'csv');\n        this.platformUtilsService.saveFile(window, data, { type: 'text/plain' }, fileName);\n    }\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventView {\n    message: string;\n    humanReadableMessage: string;\n    appIcon: string;\n    appName: string;\n    userId: string;\n    userName: string;\n    userEmail: string;\n    date: string;\n    ip: string;\n    type: EventType;\n\n    constructor(data: Required<EventView>) {\n        this.message = data.message;\n        this.humanReadableMessage = data.humanReadableMessage;\n        this.appIcon = data.appIcon;\n        this.appName = data.appName;\n        this.userId = data.userId;\n        this.userName = data.userName;\n        this.userEmail = data.userEmail;\n        this.date = data.date;\n        this.ip = data.ip;\n        this.type = data.type;\n    }\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nexport class GroupRequest {\n    name: string;\n    accessAll: boolean;\n    externalId: string;\n    collections: SelectionReadOnlyRequest[] = [];\n}\n","export class OrganizationUserConfirmRequest {\n    key: string;\n}\n","import {\n    Directive,\n    ViewChild,\n    ViewContainerRef\n} from '@angular/core';\nimport { ToasterService } from 'angular2-toaster';\n\nimport { ValidationService } from 'jslib-angular/services/validation.service';\nimport { ApiService } from 'jslib-common/abstractions/api.service';\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nimport { ModalService } from 'jslib-angular/services/modal.service';\n\nimport { SearchPipe } from 'jslib-angular/pipes/search.pipe';\nimport { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { OrganizationUserType } from 'jslib-common/enums/organizationUserType';\nimport { ProviderUserStatusType } from 'jslib-common/enums/providerUserStatusType';\nimport { ProviderUserType } from 'jslib-common/enums/providerUserType';\n\nimport { ListResponse } from 'jslib-common/models/response/listResponse';\nimport { OrganizationUserUserDetailsResponse } from 'jslib-common/models/response/organizationUserResponse';\nimport { ProviderUserUserDetailsResponse } from 'jslib-common/models/response/provider/providerUserResponse';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\nimport { UserConfirmComponent } from '../organizations/manage/user-confirm.component';\n\ntype StatusType = OrganizationUserStatusType | ProviderUserStatusType;\n\nconst MaxCheckedCount = 500;\n\n@Directive()\nexport abstract class BasePeopleComponent<UserType extends ProviderUserUserDetailsResponse | OrganizationUserUserDetailsResponse>  {\n\n    @ViewChild('confirmTemplate', { read: ViewContainerRef, static: true }) confirmModalRef: ViewContainerRef;\n\n    get allCount() {\n        return this.allUsers != null ? this.allUsers.length : 0;\n    }\n\n    get invitedCount() {\n        return this.statusMap.has(this.userStatusType.Invited) ?\n            this.statusMap.get(this.userStatusType.Invited).length : 0;\n    }\n\n    get acceptedCount() {\n        return this.statusMap.has(this.userStatusType.Accepted) ?\n            this.statusMap.get(this.userStatusType.Accepted).length : 0;\n    }\n\n    get confirmedCount() {\n        return this.statusMap.has(this.userStatusType.Confirmed) ?\n            this.statusMap.get(this.userStatusType.Confirmed).length : 0;\n    }\n\n    get showConfirmUsers(): boolean {\n        return this.allUsers != null && this.statusMap != null && this.allUsers.length > 1 &&\n            this.confirmedCount > 0 && this.confirmedCount < 3 && this.acceptedCount > 0;\n    }\n\n    get showBulkConfirmUsers(): boolean {\n        return this.acceptedCount > 0;\n    }\n\n    abstract userType: typeof OrganizationUserType | typeof ProviderUserType;\n    abstract userStatusType: typeof OrganizationUserStatusType | typeof ProviderUserStatusType;\n\n    loading = true;\n    statusMap = new Map<StatusType, UserType[]>();\n    status: StatusType;\n    users: UserType[] = [];\n    pagedUsers: UserType[] = [];\n    searchText: string;\n    actionPromise: Promise<any>;\n\n    protected allUsers: UserType[] = [];\n\n    protected didScroll = false;\n    protected pageSize = 100;\n\n    private pagedUsersCount = 0;\n\n    constructor(protected apiService: ApiService, private searchService: SearchService,\n        protected i18nService: I18nService, private platformUtilsService: PlatformUtilsService,\n        protected toasterService: ToasterService, protected cryptoService: CryptoService,\n        private storageService: StorageService, protected validationService: ValidationService,\n        protected modalService: ModalService, private logService: LogService,\n        private searchPipe: SearchPipe, protected userNamePipe: UserNamePipe ) { }\n\n    abstract edit(user: UserType): void;\n    abstract getUsers(): Promise<ListResponse<UserType>>;\n    abstract deleteUser(id: string): Promise<any>;\n    abstract reinviteUser(id: string): Promise<any>;\n    abstract confirmUser(user: UserType, publicKey: Uint8Array): Promise<any>;\n\n    async load() {\n        const response = await this.getUsers();\n        this.statusMap.clear();\n        for (const status of Utils.iterateEnum(this.userStatusType)) {\n            this.statusMap.set(status, []);\n        }\n\n        this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];\n        this.allUsers.sort(Utils.getSortFunction(this.i18nService, 'email'));\n        this.allUsers.forEach(u => {\n            if (!this.statusMap.has(u.status)) {\n                this.statusMap.set(u.status, [u]);\n            } else {\n                this.statusMap.get(u.status).push(u);\n            }\n        });\n        this.filter(this.status);\n        this.loading = false;\n    }\n\n    filter(status: StatusType) {\n        this.status = status;\n        if (this.status != null) {\n            this.users = this.statusMap.get(this.status);\n        } else {\n            this.users = this.allUsers;\n        }\n        // Reset checkbox selecton\n        this.selectAll(false);\n        this.resetPaging();\n    }\n\n    loadMore() {\n        if (!this.users || this.users.length <= this.pageSize) {\n            return;\n        }\n        const pagedLength = this.pagedUsers.length;\n        let pagedSize = this.pageSize;\n        if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) {\n            pagedSize = this.pagedUsersCount;\n        }\n        if (this.users.length > pagedLength) {\n            this.pagedUsers = this.pagedUsers.concat(this.users.slice(pagedLength, pagedLength + pagedSize));\n        }\n        this.pagedUsersCount = this.pagedUsers.length;\n        this.didScroll = this.pagedUsers.length > this.pageSize;\n    }\n\n    checkUser(user: OrganizationUserUserDetailsResponse, select?: boolean) {\n        (user as any).checked = select == null ? !(user as any).checked : select;\n    }\n\n    selectAll(select: boolean) {\n        if (select) {\n            this.selectAll(false);\n        }\n\n        const filteredUsers = this.searchPipe.transform(this.users, this.searchText, 'name', 'email', 'id');\n\n        const selectCount = select && filteredUsers.length > MaxCheckedCount\n            ? MaxCheckedCount\n            : filteredUsers.length;\n        for (let i = 0; i < selectCount; i++) {\n            this.checkUser(filteredUsers[i], select);\n        }\n    }\n\n    async resetPaging() {\n        this.pagedUsers = [];\n        this.loadMore();\n    }\n\n    invite() {\n        this.edit(null);\n    }\n\n    async remove(user: UserType) {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.deleteWarningMessage(user), this.userNamePipe.transform(user),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n\n        if (!confirmed) {\n            return false;\n        }\n\n        this.actionPromise = this.deleteUser(user.id);\n        try {\n            await this.actionPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('removedUserId', this.userNamePipe.transform(user)));\n            this.removeUser(user);\n        } catch (e) {\n            this.validationService.showError(e);\n        }\n        this.actionPromise = null;\n    }\n\n    async reinvite(user: UserType) {\n        if (this.actionPromise != null) {\n            return;\n        }\n\n        this.actionPromise = this.reinviteUser(user.id);\n        try {\n            await this.actionPromise;\n            this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenReinvited', this.userNamePipe.transform(user)));\n        } catch (e) {\n            this.validationService.showError(e);\n        }\n        this.actionPromise = null;\n    }\n\n    async confirm(user: UserType) {\n        function updateUser(self: BasePeopleComponent<UserType>) {\n            user.status = self.userStatusType.Confirmed;\n            const mapIndex = self.statusMap.get(self.userStatusType.Accepted).indexOf(user);\n            if (mapIndex > -1) {\n                self.statusMap.get(self.userStatusType.Accepted).splice(mapIndex, 1);\n                self.statusMap.get(self.userStatusType.Confirmed).push(user);\n            }\n        }\n\n        const confirmUser = async (publicKey: Uint8Array) => {\n            try {\n                this.actionPromise = this.confirmUser(user, publicKey);\n                await this.actionPromise;\n                updateUser(this);\n                this.toasterService.popAsync('success', null, this.i18nService.t('hasBeenConfirmed', this.userNamePipe.transform(user)));\n            } catch (e) {\n                this.validationService.showError(e);\n                throw e;\n            } finally {\n                this.actionPromise = null;\n            }\n        };\n\n        if (this.actionPromise != null) {\n            return;\n        }\n\n        try {\n            const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId);\n            const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey);\n\n            const autoConfirm = await this.storageService.get<boolean>(ConstantsService.autoConfirmFingerprints);\n            if (autoConfirm == null || !autoConfirm) {\n                const [modal] = await this.modalService.openViewRef(UserConfirmComponent, this.confirmModalRef, comp => {\n                    comp.name = this.userNamePipe.transform(user);\n                    comp.userId = user != null ? user.userId : null;\n                    comp.publicKey = publicKey;\n                    comp.onConfirmedUser.subscribe(async () => {\n                        try {\n                            comp.formPromise = confirmUser(publicKey);\n                            await comp.formPromise;\n                            modal.close();\n                        } catch (e) {\n                            this.logService.error(e);\n                        }\n                    });\n                });\n                return;\n            }\n\n            try {\n                const fingerprint = await this.cryptoService.getFingerprint(user.userId, publicKey.buffer);\n                this.logService.info(`User's fingerprint: ${fingerprint.join('-')}`);\n            } catch (e) {\n                this.logService.error(e);\n            }\n            await confirmUser(publicKey);\n        } catch (e) {\n            this.logService.error(`Handled exception: ${e}`);\n        }\n    }\n\n    isSearching() {\n        return this.searchService.isSearchable(this.searchText);\n    }\n\n    isPaging() {\n        const searching = this.isSearching();\n        if (searching && this.didScroll) {\n            this.resetPaging();\n        }\n        return !searching && this.users && this.users.length > this.pageSize;\n    }\n\n    protected deleteWarningMessage(user: UserType): string {\n        return this.i18nService.t('removeUserConfirmation');\n    }\n\n    protected getCheckedUsers() {\n        return this.users.filter(u => (u as any).checked);\n    }\n\n    protected removeUser(user: UserType) {\n        let index = this.users.indexOf(user);\n        if (index > -1) {\n            this.users.splice(index, 1);\n            this.resetPaging();\n        }\n        if (this.statusMap.has(user.status)) {\n            index = this.statusMap.get(user.status).indexOf(user);\n            if (index > -1) {\n                this.statusMap.get(user.status).splice(index, 1);\n            }\n        }\n    }\n\n}\n","type OrganizationUserBulkRequestEntry = {\n    id: string;\n    key: string;\n};\n\nexport class OrganizationUserBulkConfirmRequest {\n    keys: OrganizationUserBulkRequestEntry[];\n\n    constructor(keys: OrganizationUserBulkRequestEntry[]) {\n        this.keys = keys;\n    }\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationUserInviteRequest {\n    emails: string[] = [];\n    type: OrganizationUserType;\n    accessAll: boolean;\n    collections: SelectionReadOnlyRequest[] = [];\n    permissions: PermissionsApi;\n}\n","import { SelectionReadOnlyRequest } from './selectionReadOnlyRequest';\n\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationUserUpdateRequest {\n    type: OrganizationUserType;\n    accessAll: boolean;\n    collections: SelectionReadOnlyRequest[] = [];\n    permissions: PermissionsApi;\n}\n","export class OrganizationUserUpdateGroupsRequest {\n    groupIds: string[] = [];\n}\n","import { OrganizationKeysRequest } from './organizationKeysRequest';\n\nexport class OrganizationUpdateRequest {\n    name: string;\n    identifier: string;\n    businessName: string;\n    billingEmail: string;\n    keys: OrganizationKeysRequest;\n}\n","export enum TransactionType {\n    Charge = 0,\n    Credit = 1,\n    PromotionalCredit = 2,\n    ReferralCredit = 3,\n    Refund = 4,\n}\n","export class VerifyBankRequest {\n    amount1: number;\n    amount2: number;\n}\n","export class BitPayInvoiceRequest {\n    userId: string;\n    organizationId: string;\n    credit: boolean;\n    amount: number;\n    returnUrl: string;\n    name: string;\n    email: string;\n}\n","import { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { OrganizationTaxInfoUpdateRequest } from '../request/organizationTaxInfoUpdateRequest';\n\nexport class PaymentRequest extends OrganizationTaxInfoUpdateRequest {\n    paymentMethodType: PaymentMethodType;\n    paymentToken: string;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"darkInputColor\":\"#fff\",\"darkInputPlaceholderColor\":\"#bac0ce\",\"lightInputColor\":\"#465057\",\"lightInputPlaceholderColor\":\"#b6b8b8\"};","import { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { PlanType } from '../../enums/planType';\n\nimport { OrganizationKeysRequest } from './organizationKeysRequest';\n\nexport class OrganizationCreateRequest {\n    name: string;\n    businessName: string;\n    billingEmail: string;\n    planType: PlanType;\n    key: string;\n    keys: OrganizationKeysRequest;\n    paymentMethodType: PaymentMethodType;\n    paymentToken: string;\n    additionalSeats: number;\n    maxAutoscaleSeats: number;\n    additionalStorageGb: number;\n    premiumAccessAddon: boolean;\n    collectionName: string;\n    taxIdNumber: string;\n    billingAddressLine1: string;\n    billingAddressLine2: string;\n    billingAddressCity: string;\n    billingAddressState: string;\n    billingAddressPostalCode: string;\n    billingAddressCountry: string;\n}\n","import { PlanType } from '../../enums/planType';\n\nimport { OrganizationKeysRequest } from './organizationKeysRequest';\n\nexport class OrganizationUpgradeRequest {\n    businessName: string;\n    planType: PlanType;\n    additionalSeats: number;\n    additionalStorageGb: number;\n    premiumAccessAddon: boolean;\n    billingAddressCountry: string;\n    billingAddressPostalCode: string;\n    keys: OrganizationKeysRequest;\n}\n","import { OrganizationCreateRequest } from '../organizationCreateRequest';\n\nexport class ProviderOrganizationCreateRequest {\n    constructor(public clientOwnerEmail: string, public organizationCreateRequest: OrganizationCreateRequest) { }\n}\n","export class OrganizationSubscriptionUpdateRequest {\n    constructor(public seatAdjustment: number, public maxAutoscaleSeats?: number) { }\n}\n","export class StorageRequest {\n    storageGbAdjustment: number;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class UpdateTwoFactorDuoRequest extends SecretVerificationRequest {\n    integrationKey: string;\n    secretKey: string;\n    host: string;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class TwoFactorProviderRequest extends SecretVerificationRequest {\n    type: TwoFactorProviderType;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class UpdateTwoFactorAuthenticatorRequest extends SecretVerificationRequest {\n    token: string;\n    key: string;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class UpdateTwoFactorEmailRequest extends SecretVerificationRequest {\n    token: string;\n    email: string;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class UpdateTwoFactorWebAuthnDeleteRequest extends SecretVerificationRequest {\n    id: number;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class UpdateTwoFactorWebAuthnRequest extends SecretVerificationRequest {\n    deviceResponse: PublicKeyCredential;\n    name: string;\n    id: number;\n}\n","import { SecretVerificationRequest } from './secretVerificationRequest';\n\nexport class UpdateTwoFactorYubioOtpRequest extends SecretVerificationRequest {\n    key1: string;\n    key2: string;\n    key3: string;\n    key4: string;\n    key5: string;\n    nfc: boolean;\n}\n","import { PlanSponsorshipType } from '../../../enums/planSponsorshipType';\n\nexport class OrganizationSponsorshipRedeemRequest {\n    planSponsorshipType: PlanSponsorshipType;\n    sponsoredOrganizationId: string;\n}\n","import {\n    Directive,\n    EventEmitter,\n    OnInit,\n    Output,\n} from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\n\nimport { CryptoService } from 'jslib-common/abstractions/crypto.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { ExportService } from 'jslib-common/abstractions/export.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { UserVerificationService } from 'jslib-common/abstractions/userVerification.service';\n\nimport { EventType } from 'jslib-common/enums/eventType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\n\n@Directive()\nexport class ExportComponent implements OnInit {\n    @Output() onSaved = new EventEmitter();\n\n    formPromise: Promise<string>;\n    disabledByPolicy: boolean = false;\n\n    exportForm = this.fb.group({\n        format: ['json'],\n        secret: [''],\n    });\n\n    formatOptions = [\n        { name: '.json', value: 'json' },\n        { name: '.csv', value: 'csv' },\n        { name: '.json (Encrypted)', value: 'encrypted_json' },\n    ];\n\n    constructor(protected cryptoService: CryptoService, protected i18nService: I18nService,\n        protected platformUtilsService: PlatformUtilsService, protected exportService: ExportService,\n        protected eventService: EventService, private policyService: PolicyService, protected win: Window,\n        private logService: LogService, private userVerificationService: UserVerificationService,\n        private fb: FormBuilder) { }\n\n    async ngOnInit() {\n        await this.checkExportDisabled();\n    }\n\n    async checkExportDisabled() {\n        this.disabledByPolicy = await this.policyService.policyAppliesToUser(PolicyType.DisablePersonalVaultExport);\n        if (this.disabledByPolicy) {\n            this.exportForm.disable();\n        }\n    }\n\n    get encryptedFormat() {\n        return this.format === 'encrypted_json';\n    }\n\n    async submit() {\n        if (this.disabledByPolicy) {\n            this.platformUtilsService.showToast('error', null, this.i18nService.t('personalVaultExportPolicyInEffect'));\n            return;\n        }\n\n        const acceptedWarning = await this.warningDialog();\n        if (!acceptedWarning) {\n            return;\n        }\n\n        const secret = this.exportForm.get('secret').value;\n        try {\n            await this.userVerificationService.verifyUser(secret);\n        } catch (e) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'), e.message);\n            return;\n        }\n\n        try {\n            this.formPromise = this.getExportData();\n            const data = await this.formPromise;\n            this.downloadFile(data);\n            this.saved();\n            await this.collectEvent();\n            this.exportForm.get('secret').setValue('');\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async warningDialog() {\n        if (this.encryptedFormat) {\n            return await this.platformUtilsService.showDialog(\n                '<p>' + this.i18nService.t('encExportKeyWarningDesc') +\n                '<p>' + this.i18nService.t('encExportAccountWarningDesc'),\n                this.i18nService.t('confirmVaultExport'), this.i18nService.t('exportVault'),\n                this.i18nService.t('cancel'), 'warning',\n                true);\n        } else {\n            return await this.platformUtilsService.showDialog(\n                this.i18nService.t('exportWarningDesc'),\n                this.i18nService.t('confirmVaultExport'), this.i18nService.t('exportVault'),\n                this.i18nService.t('cancel'), 'warning');\n        }\n    }\n\n    protected saved() {\n        this.onSaved.emit();\n    }\n\n    protected getExportData() {\n        return this.exportService.getExport(this.format);\n    }\n\n    protected getFileName(prefix?: string) {\n        let extension = this.format;\n        if (this.format === 'encrypted_json') {\n            if (prefix == null) {\n                prefix = 'encrypted';\n            } else {\n                prefix = 'encrypted_' + prefix;\n            }\n            extension = 'json';\n        }\n        return this.exportService.getFileName(prefix, extension);\n    }\n\n    protected async collectEvent(): Promise<any> {\n        await this.eventService.collect(EventType.User_ClientExportedVault);\n    }\n\n    get format() {\n        return this.exportForm.get('format').value;\n    }\n\n    private downloadFile(csv: string): void {\n        const fileName = this.getFileName();\n        this.platformUtilsService.saveFile(this.win, csv, { type: 'text/plain' }, fileName);\n    }\n}\n","import { View } from './view';\n\nimport { Attachment } from '../domain/attachment';\nimport { SymmetricCryptoKey } from '../domain/symmetricCryptoKey';\n\nexport class AttachmentView implements View {\n    id: string = null;\n    url: string = null;\n    size: string = null;\n    sizeName: string = null;\n    fileName: string = null;\n    key: SymmetricCryptoKey = null;\n\n    constructor(a?: Attachment) {\n        if (!a) {\n            return;\n        }\n\n        this.id = a.id;\n        this.url = a.url;\n        this.size = a.size;\n        this.sizeName = a.sizeName;\n    }\n\n    get fileSize(): number {\n        try {\n            if (this.size != null) {\n                return parseInt(this.size, null);\n            }\n        } catch {\n            // Invalid file size.\n        }\n        return 0;\n    }\n}\n","export class AttachmentRequest {\n    fileName: string;\n    key: string;\n    fileSize: number;\n    adminRequest: boolean;\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { CipherRepromptType } from 'jslib-common/enums/cipherRepromptType';\nimport { CipherType } from 'jslib-common/enums/cipherType';\nimport { EventType } from 'jslib-common/enums/eventType';\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { SecureNoteType } from 'jslib-common/enums/secureNoteType';\nimport { UriMatchType } from 'jslib-common/enums/uriMatchType';\n\nimport { AuditService } from 'jslib-common/abstractions/audit.service';\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PasswordRepromptService } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { StateService } from 'jslib-common/abstractions/state.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\nimport { CardView } from 'jslib-common/models/view/cardView';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\nimport { FolderView } from 'jslib-common/models/view/folderView';\nimport { IdentityView } from 'jslib-common/models/view/identityView';\nimport { LoginUriView } from 'jslib-common/models/view/loginUriView';\nimport { LoginView } from 'jslib-common/models/view/loginView';\nimport { SecureNoteView } from 'jslib-common/models/view/secureNoteView';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n    @Input() cloneMode: boolean = false;\n    @Input() folderId: string = null;\n    @Input() cipherId: string;\n    @Input() type: CipherType;\n    @Input() collectionIds: string[];\n    @Input() organizationId: string = null;\n    @Output() onSavedCipher = new EventEmitter<CipherView>();\n    @Output() onDeletedCipher = new EventEmitter<CipherView>();\n    @Output() onRestoredCipher = new EventEmitter<CipherView>();\n    @Output() onCancelled = new EventEmitter<CipherView>();\n    @Output() onEditAttachments = new EventEmitter<CipherView>();\n    @Output() onShareCipher = new EventEmitter<CipherView>();\n    @Output() onEditCollections = new EventEmitter<CipherView>();\n    @Output() onGeneratePassword = new EventEmitter();\n\n    editMode: boolean = false;\n    cipher: CipherView;\n    folders: FolderView[];\n    collections: CollectionView[] = [];\n    title: string;\n    formPromise: Promise<any>;\n    deletePromise: Promise<any>;\n    restorePromise: Promise<any>;\n    checkPasswordPromise: Promise<number>;\n    showPassword: boolean = false;\n    showCardNumber: boolean = false;\n    showCardCode: boolean = false;\n    cipherType = CipherType;\n    typeOptions: any[];\n    cardBrandOptions: any[];\n    cardExpMonthOptions: any[];\n    identityTitleOptions: any[];\n    uriMatchOptions: any[];\n    ownershipOptions: any[] = [];\n    autofillOnPageLoadOptions: any[];\n    currentDate = new Date();\n    allowPersonal = true;\n    reprompt: boolean = false;\n    canUseReprompt: boolean = true;\n\n    protected writeableCollections: CollectionView[];\n    private previousCipherId: string;\n\n    constructor(protected cipherService: CipherService, protected folderService: FolderService,\n        protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n        protected auditService: AuditService, protected stateService: StateService,\n        protected userService: UserService, protected collectionService: CollectionService,\n        protected messagingService: MessagingService, protected eventService: EventService,\n        protected policyService: PolicyService, protected passwordRepromptService: PasswordRepromptService,\n        private logService: LogService) {\n        this.typeOptions = [\n            { name: i18nService.t('typeLogin'), value: CipherType.Login },\n            { name: i18nService.t('typeCard'), value: CipherType.Card },\n            { name: i18nService.t('typeIdentity'), value: CipherType.Identity },\n            { name: i18nService.t('typeSecureNote'), value: CipherType.SecureNote },\n        ];\n        this.cardBrandOptions = [\n            { name: '-- ' + i18nService.t('select') + ' --', value: null },\n            { name: 'Visa', value: 'Visa' },\n            { name: 'Mastercard', value: 'Mastercard' },\n            { name: 'American Express', value: 'Amex' },\n            { name: 'Discover', value: 'Discover' },\n            { name: 'Diners Club', value: 'Diners Club' },\n            { name: 'JCB', value: 'JCB' },\n            { name: 'Maestro', value: 'Maestro' },\n            { name: 'UnionPay', value: 'UnionPay' },\n            { name: i18nService.t('other'), value: 'Other' },\n        ];\n        this.cardExpMonthOptions = [\n            { name: '-- ' + i18nService.t('select') + ' --', value: null },\n            { name: '01 - ' + i18nService.t('january'), value: '1' },\n            { name: '02 - ' + i18nService.t('february'), value: '2' },\n            { name: '03 - ' + i18nService.t('march'), value: '3' },\n            { name: '04 - ' + i18nService.t('april'), value: '4' },\n            { name: '05 - ' + i18nService.t('may'), value: '5' },\n            { name: '06 - ' + i18nService.t('june'), value: '6' },\n            { name: '07 - ' + i18nService.t('july'), value: '7' },\n            { name: '08 - ' + i18nService.t('august'), value: '8' },\n            { name: '09 - ' + i18nService.t('september'), value: '9' },\n            { name: '10 - ' + i18nService.t('october'), value: '10' },\n            { name: '11 - ' + i18nService.t('november'), value: '11' },\n            { name: '12 - ' + i18nService.t('december'), value: '12' },\n        ];\n        this.identityTitleOptions = [\n            { name: '-- ' + i18nService.t('select') + ' --', value: null },\n            { name: i18nService.t('mr'), value: i18nService.t('mr') },\n            { name: i18nService.t('mrs'), value: i18nService.t('mrs') },\n            { name: i18nService.t('ms'), value: i18nService.t('ms') },\n            { name: i18nService.t('dr'), value: i18nService.t('dr') },\n        ];\n        this.uriMatchOptions = [\n            { name: i18nService.t('defaultMatchDetection'), value: null },\n            { name: i18nService.t('baseDomain'), value: UriMatchType.Domain },\n            { name: i18nService.t('host'), value: UriMatchType.Host },\n            { name: i18nService.t('startsWith'), value: UriMatchType.StartsWith },\n            { name: i18nService.t('regEx'), value: UriMatchType.RegularExpression },\n            { name: i18nService.t('exact'), value: UriMatchType.Exact },\n            { name: i18nService.t('never'), value: UriMatchType.Never },\n        ];\n        this.autofillOnPageLoadOptions = [\n            { name: i18nService.t('autoFillOnPageLoadUseDefault'), value: null },\n            { name: i18nService.t('autoFillOnPageLoadYes'), value: true },\n            { name: i18nService.t('autoFillOnPageLoadNo'), value: false },\n        ];\n    }\n\n    async ngOnInit() {\n        await this.init();\n    }\n\n    async init() {\n        if (await this.policyService.policyAppliesToUser(PolicyType.PersonalOwnership)) {\n            this.allowPersonal = false;\n        } else {\n            const myEmail = await this.userService.getEmail();\n            this.ownershipOptions.push({ name: myEmail, value: null });\n        }\n\n        const orgs = await this.userService.getAllOrganizations();\n        orgs.sort(Utils.getSortFunction(this.i18nService, 'name')).forEach(o => {\n            if (o.enabled && o.status === OrganizationUserStatusType.Confirmed) {\n                this.ownershipOptions.push({ name: o.name, value: o.id });\n            }\n        });\n        if (!this.allowPersonal) {\n            this.organizationId = this.ownershipOptions[0].value;\n        }\n\n        this.writeableCollections = await this.loadCollections();\n\n        this.canUseReprompt = await this.passwordRepromptService.enabled();\n    }\n\n    async load() {\n        this.editMode = this.cipherId != null;\n        if (this.editMode) {\n            this.editMode = true;\n            if (this.cloneMode) {\n                this.cloneMode = true;\n                this.title = this.i18nService.t('addItem');\n            } else {\n                this.title = this.i18nService.t('editItem');\n            }\n        } else {\n            this.title = this.i18nService.t('addItem');\n        }\n\n        const addEditCipherInfo: any = await this.stateService.get<any>('addEditCipherInfo');\n        if (addEditCipherInfo != null) {\n            this.cipher = addEditCipherInfo.cipher;\n            this.collectionIds = addEditCipherInfo.collectionIds;\n        }\n        await this.stateService.remove('addEditCipherInfo');\n\n        if (this.cipher == null) {\n            if (this.editMode) {\n                const cipher = await this.loadCipher();\n                this.cipher = await cipher.decrypt();\n\n                // Adjust Cipher Name if Cloning\n                if (this.cloneMode) {\n                    this.cipher.name += ' - ' + this.i18nService.t('clone');\n                    // If not allowing personal ownership, update cipher's org Id to prompt downstream changes\n                    if (this.cipher.organizationId == null && !this.allowPersonal) {\n                        this.cipher.organizationId = this.organizationId;\n                    }\n                }\n            } else {\n                this.cipher = new CipherView();\n                this.cipher.organizationId = this.organizationId == null ? null : this.organizationId;\n                this.cipher.folderId = this.folderId;\n                this.cipher.type = this.type == null ? CipherType.Login : this.type;\n                this.cipher.login = new LoginView();\n                this.cipher.login.uris = [new LoginUriView()];\n                this.cipher.card = new CardView();\n                this.cipher.identity = new IdentityView();\n                this.cipher.secureNote = new SecureNoteView();\n                this.cipher.secureNote.type = SecureNoteType.Generic;\n                this.cipher.reprompt = CipherRepromptType.None;\n            }\n        }\n\n        if (this.cipher != null && (!this.editMode || addEditCipherInfo != null || this.cloneMode)) {\n            await this.organizationChanged();\n            if (this.collectionIds != null && this.collectionIds.length > 0 && this.collections.length > 0) {\n                this.collections.forEach(c => {\n                    if (this.collectionIds.indexOf(c.id) > -1) {\n                        (c as any).checked = true;\n                    }\n                });\n            }\n        }\n\n        this.folders = await this.folderService.getAllDecrypted();\n\n        if (this.editMode && this.previousCipherId !== this.cipherId) {\n            this.eventService.collect(EventType.Cipher_ClientViewed, this.cipherId);\n        }\n        this.previousCipherId = this.cipherId;\n        this.reprompt = this.cipher.reprompt !== CipherRepromptType.None;\n    }\n\n    async submit(): Promise<boolean> {\n        if (this.cipher.isDeleted) {\n            return this.restore();\n        }\n\n        if (this.cipher.name == null || this.cipher.name === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('nameRequired'));\n            return false;\n        }\n\n        if ((!this.editMode || this.cloneMode) && !this.allowPersonal && this.cipher.organizationId == null) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('personalOwnershipSubmitError'));\n            return false;\n        }\n\n        if ((!this.editMode || this.cloneMode) && this.cipher.type === CipherType.Login &&\n            this.cipher.login.uris != null && this.cipher.login.uris.length === 1 &&\n            (this.cipher.login.uris[0].uri == null || this.cipher.login.uris[0].uri === '')) {\n            this.cipher.login.uris = null;\n        }\n\n        // Allows saving of selected collections during \"Add\" and \"Clone\" flows\n        if ((!this.editMode || this.cloneMode) && this.cipher.organizationId != null) {\n            this.cipher.collectionIds = this.collections == null ? [] :\n                this.collections.filter(c => (c as any).checked).map(c => c.id);\n        }\n\n        // Clear current Cipher Id to trigger \"Add\" cipher flow\n        if (this.cloneMode) {\n            this.cipher.id = null;\n        }\n\n        const cipher = await this.encryptCipher();\n        try {\n            this.formPromise = this.saveCipher(cipher);\n            await this.formPromise;\n            this.cipher.id = cipher.id;\n            this.platformUtilsService.showToast('success', null,\n                this.i18nService.t(this.editMode && !this.cloneMode ? 'editedItem' : 'addedItem'));\n            this.onSavedCipher.emit(this.cipher);\n            this.messagingService.send(this.editMode && !this.cloneMode ? 'editedCipher' : 'addedCipher');\n            return true;\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        return false;\n    }\n\n    addUri() {\n        if (this.cipher.type !== CipherType.Login) {\n            return;\n        }\n\n        if (this.cipher.login.uris == null) {\n            this.cipher.login.uris = [];\n        }\n\n        this.cipher.login.uris.push(new LoginUriView());\n    }\n\n    removeUri(uri: LoginUriView) {\n        if (this.cipher.type !== CipherType.Login || this.cipher.login.uris == null) {\n            return;\n        }\n\n        const i = this.cipher.login.uris.indexOf(uri);\n        if (i > -1) {\n            this.cipher.login.uris.splice(i, 1);\n        }\n    }\n\n    trackByFunction(index: number, item: any) {\n        return index;\n    }\n\n    cancel() {\n        this.onCancelled.emit(this.cipher);\n    }\n\n    attachments() {\n        this.onEditAttachments.emit(this.cipher);\n    }\n\n    share() {\n        this.onShareCipher.emit(this.cipher);\n    }\n\n    editCollections() {\n        this.onEditCollections.emit(this.cipher);\n    }\n\n    async delete(): Promise<boolean> {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t(this.cipher.isDeleted ? 'permanentlyDeleteItemConfirmation' : 'deleteItemConfirmation'),\n            this.i18nService.t('deleteItem'), this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.deletePromise = this.deleteCipher();\n            await this.deletePromise;\n            this.platformUtilsService.showToast('success', null,\n                this.i18nService.t(this.cipher.isDeleted ? 'permanentlyDeletedItem' : 'deletedItem'));\n            this.onDeletedCipher.emit(this.cipher);\n            this.messagingService.send(this.cipher.isDeleted ? 'permanentlyDeletedCipher' : 'deletedCipher');\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        return true;\n    }\n\n    async restore(): Promise<boolean> {\n        if (!this.cipher.isDeleted) {\n            return false;\n        }\n\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('restoreItemConfirmation'), this.i18nService.t('restoreItem'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.restorePromise = this.restoreCipher();\n            await this.restorePromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('restoredItem'));\n            this.onRestoredCipher.emit(this.cipher);\n            this.messagingService.send('restoredCipher');\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        return true;\n    }\n\n    async generatePassword(): Promise<boolean> {\n        if (this.cipher.login != null && this.cipher.login.password != null && this.cipher.login.password.length) {\n            const confirmed = await this.platformUtilsService.showDialog(\n                this.i18nService.t('overwritePasswordConfirmation'), this.i18nService.t('overwritePassword'),\n                this.i18nService.t('yes'), this.i18nService.t('no'));\n            if (!confirmed) {\n                return false;\n            }\n        }\n\n        this.onGeneratePassword.emit();\n        return true;\n    }\n\n    togglePassword() {\n        this.showPassword = !this.showPassword;\n        document.getElementById('loginPassword').focus();\n        if (this.editMode && this.showPassword) {\n            this.eventService.collect(EventType.Cipher_ClientToggledPasswordVisible, this.cipherId);\n        }\n    }\n\n    async toggleCardNumber() {\n        this.showCardNumber = !this.showCardNumber;\n        if (this.showCardNumber) {\n            this.eventService.collect(EventType.Cipher_ClientToggledCardNumberVisible, this.cipherId);\n        }\n    }\n\n    toggleCardCode() {\n        this.showCardCode = !this.showCardCode;\n        document.getElementById('cardCode').focus();\n        if (this.editMode && this.showCardCode) {\n            this.eventService.collect(EventType.Cipher_ClientToggledCardCodeVisible, this.cipherId);\n        }\n    }\n\n    toggleUriOptions(uri: LoginUriView) {\n        const u = (uri as any);\n        u.showOptions = u.showOptions == null && uri.match != null ? false : !u.showOptions;\n    }\n\n    loginUriMatchChanged(uri: LoginUriView) {\n        const u = (uri as any);\n        u.showOptions = u.showOptions == null ? true : u.showOptions;\n    }\n\n    async organizationChanged() {\n        if (this.writeableCollections != null) {\n            this.writeableCollections.forEach(c => (c as any).checked = false);\n        }\n        if (this.cipher.organizationId != null) {\n            this.collections = this.writeableCollections.filter(c => c.organizationId === this.cipher.organizationId);\n            const org = await this.userService.getOrganization(this.cipher.organizationId);\n            if (org != null) {\n                this.cipher.organizationUseTotp = org.useTotp;\n            }\n        } else {\n            this.collections = [];\n        }\n    }\n\n    async checkPassword() {\n        if (this.checkPasswordPromise != null) {\n            return;\n        }\n\n        if (this.cipher.login == null || this.cipher.login.password == null || this.cipher.login.password === '') {\n            return;\n        }\n\n        this.checkPasswordPromise = this.auditService.passwordLeaked(this.cipher.login.password);\n        const matches = await this.checkPasswordPromise;\n        this.checkPasswordPromise = null;\n\n        if (matches > 0) {\n            this.platformUtilsService.showToast('warning', null,\n                this.i18nService.t('passwordExposed', matches.toString()));\n        } else {\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('passwordSafe'));\n        }\n    }\n\n    repromptChanged() {\n        this.reprompt = !this.reprompt;\n        if (this.reprompt) {\n            this.cipher.reprompt = CipherRepromptType.Password;\n        } else {\n            this.cipher.reprompt = CipherRepromptType.None;\n        }\n    }\n\n    protected async loadCollections() {\n        const allCollections = await this.collectionService.getAllDecrypted();\n        return allCollections.filter(c => !c.readOnly);\n    }\n\n    protected loadCipher() {\n        return this.cipherService.get(this.cipherId);\n    }\n\n    protected encryptCipher() {\n        return this.cipherService.encrypt(this.cipher);\n    }\n\n    protected saveCipher(cipher: Cipher) {\n        return this.cipherService.saveWithServer(cipher);\n    }\n\n    protected deleteCipher() {\n        return this.cipher.isDeleted ? this.cipherService.deleteWithServer(this.cipher.id)\n            : this.cipherService.softDeleteWithServer(this.cipher.id);\n    }\n\n    protected restoreCipher() {\n        return this.cipherService.restoreWithServer(this.cipher.id);\n    }\n}\n","import {\n    Directive,\n    Input,\n    OnChanges,\n    SimpleChanges,\n} from '@angular/core';\n\nimport {\n    CdkDragDrop,\n    moveItemInArray,\n} from '@angular/cdk/drag-drop';\n\nimport { EventService } from 'jslib-common/abstractions/event.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { FieldView } from 'jslib-common/models/view/fieldView';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\nimport { EventType } from 'jslib-common/enums/eventType';\nimport { FieldType } from 'jslib-common/enums/fieldType';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive()\nexport class AddEditCustomFieldsComponent implements OnChanges {\n    @Input() cipher: CipherView;\n    @Input() thisCipherType: CipherType;\n    @Input() editMode: boolean;\n\n    addFieldType: FieldType = FieldType.Text;\n    addFieldTypeOptions: any[];\n    addFieldLinkedTypeOption: any;\n    linkedFieldOptions: any[] = [];\n\n    cipherType = CipherType;\n    fieldType = FieldType;\n    eventType = EventType;\n\n    constructor(private i18nService: I18nService, private eventService: EventService) {\n        this.addFieldTypeOptions = [\n            { name: i18nService.t('cfTypeText'), value: FieldType.Text },\n            { name: i18nService.t('cfTypeHidden'), value: FieldType.Hidden },\n            { name: i18nService.t('cfTypeBoolean'), value: FieldType.Boolean },\n        ];\n        this.addFieldLinkedTypeOption = { name: this.i18nService.t('cfTypeLinked'), value: FieldType.Linked };\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.thisCipherType != null) {\n            this.setLinkedFieldOptions();\n\n            if (!changes.thisCipherType.firstChange) {\n                this.resetCipherLinkedFields();\n            }\n        }\n    }\n\n    addField() {\n        if (this.cipher.fields == null) {\n            this.cipher.fields = [];\n        }\n\n        const f = new FieldView();\n        f.type = this.addFieldType;\n        f.newField = true;\n\n        if (f.type === FieldType.Linked) {\n            f.linkedId = this.linkedFieldOptions[0].value;\n        }\n\n        this.cipher.fields.push(f);\n    }\n\n    removeField(field: FieldView) {\n        const i = this.cipher.fields.indexOf(field);\n        if (i > -1) {\n            this.cipher.fields.splice(i, 1);\n        }\n    }\n\n    toggleFieldValue(field: FieldView) {\n        const f = (field as any);\n        f.showValue = !f.showValue;\n        if (this.editMode && f.showValue) {\n            this.eventService.collect(EventType.Cipher_ClientToggledHiddenFieldVisible, this.cipher.id);\n        }\n    }\n\n    trackByFunction(index: number, item: any) {\n        return index;\n    }\n\n    drop(event: CdkDragDrop<string[]>) {\n        moveItemInArray(this.cipher.fields, event.previousIndex, event.currentIndex);\n    }\n\n    private setLinkedFieldOptions() {\n        if (this.cipher.linkedFieldOptions == null) {\n            return;\n        }\n\n        const options: any = [];\n        this.cipher.linkedFieldOptions.forEach((linkedFieldOption, id) =>\n            options.push({ name: this.i18nService.t(linkedFieldOption.i18nKey), value: id }));\n        this.linkedFieldOptions = options.sort(Utils.getSortFunction(this.i18nService, 'name'));\n    }\n\n    private resetCipherLinkedFields() {\n        if (this.cipher.fields == null || this.cipher.fields.length === 0) {\n            return;\n        }\n\n        // Delete any Linked custom fields if the item type does not support them\n        if (this.cipher.linkedFieldOptions == null) {\n            this.cipher.fields = this.cipher.fields.filter(f => f.type !== FieldType.Linked);\n            return;\n        }\n\n        this.cipher.fields\n            .filter(f => f.type === FieldType.Linked)\n            .forEach(f => f.linkedId = this.linkedFieldOptions[0].value);\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { SearchService } from 'jslib-common/abstractions/search.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Directive()\nexport class CiphersComponent {\n    @Input() activeCipherId: string = null;\n    @Output() onCipherClicked = new EventEmitter<CipherView>();\n    @Output() onCipherRightClicked = new EventEmitter<CipherView>();\n    @Output() onAddCipher = new EventEmitter();\n    @Output() onAddCipherOptions = new EventEmitter();\n\n    loaded: boolean = false;\n    ciphers: CipherView[] = [];\n    searchText: string;\n    searchPlaceholder: string = null;\n    filter: (cipher: CipherView) => boolean = null;\n    deleted: boolean = false;\n\n    protected searchPending = false;\n\n    private searchTimeout: any = null;\n\n    constructor(protected searchService: SearchService) { }\n\n    async load(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) {\n        this.deleted = deleted || false;\n        await this.applyFilter(filter);\n        this.loaded = true;\n    }\n\n    async reload(filter: (cipher: CipherView) => boolean = null, deleted: boolean = false) {\n        this.loaded = false;\n        this.ciphers = [];\n        await this.load(filter, deleted);\n    }\n\n    async refresh() {\n        await this.reload(this.filter, this.deleted);\n    }\n\n    async applyFilter(filter: (cipher: CipherView) => boolean = null) {\n        this.filter = filter;\n        await this.search(null);\n    }\n\n    async search(timeout: number = null, indexedCiphers?: CipherView[]) {\n        this.searchPending = false;\n        if (this.searchTimeout != null) {\n            clearTimeout(this.searchTimeout);\n        }\n        if (timeout == null) {\n            await this.doSearch(indexedCiphers);\n            return;\n        }\n        this.searchPending = true;\n        this.searchTimeout = setTimeout(async () => {\n            await this.doSearch(indexedCiphers);\n            this.searchPending = false;\n        }, timeout);\n    }\n\n    selectCipher(cipher: CipherView) {\n        this.onCipherClicked.emit(cipher);\n    }\n\n    rightClickCipher(cipher: CipherView) {\n        this.onCipherRightClicked.emit(cipher);\n    }\n\n    addCipher() {\n        this.onAddCipher.emit();\n    }\n\n    addCipherOptions() {\n        this.onAddCipherOptions.emit();\n    }\n\n    isSearching() {\n        return !this.searchPending && this.searchService.isSearchable(this.searchText);\n    }\n\n    protected deletedFilter: (cipher: CipherView) => boolean = c => c.isDeleted === this.deleted;\n\n    protected async doSearch(indexedCiphers?: CipherView[]) {\n        this.ciphers = await this.searchService.searchCiphers(this.searchText, [this.filter, this.deletedFilter], indexedCiphers);\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { Cipher } from 'jslib-common/models/domain/cipher';\n\n@Directive()\nexport class CollectionsComponent implements OnInit {\n    @Input() cipherId: string;\n    @Input() allowSelectNone = false;\n    @Output() onSavedCollections = new EventEmitter();\n\n    formPromise: Promise<any>;\n    cipher: CipherView;\n    collectionIds: string[];\n    collections: CollectionView[] = [];\n\n    protected cipherDomain: Cipher;\n\n    constructor(protected collectionService: CollectionService, protected platformUtilsService: PlatformUtilsService,\n        protected i18nService: I18nService, protected cipherService: CipherService, private logService: LogService) { }\n\n    async ngOnInit() {\n        await this.load();\n    }\n\n    async load() {\n        this.cipherDomain = await this.loadCipher();\n        this.collectionIds = this.loadCipherCollections();\n        this.cipher = await this.cipherDomain.decrypt();\n        this.collections = await this.loadCollections();\n\n        this.collections.forEach(c => (c as any).checked = false);\n        if (this.collectionIds != null) {\n            this.collections.forEach(c => {\n                (c as any).checked = this.collectionIds != null && this.collectionIds.indexOf(c.id) > -1;\n            });\n        }\n    }\n\n    async submit() {\n        const selectedCollectionIds = this.collections\n            .filter(c => !!(c as any).checked)\n            .map(c => c.id);\n        if (!this.allowSelectNone && selectedCollectionIds.length === 0) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('selectOneCollection'));\n            return;\n        }\n        this.cipherDomain.collectionIds = selectedCollectionIds;\n        try {\n            this.formPromise = this.saveCollections();\n            await this.formPromise;\n            this.onSavedCollections.emit();\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('editedItem'));\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    protected loadCipher() {\n        return this.cipherService.get(this.cipherId);\n    }\n\n    protected loadCipherCollections() {\n        return this.cipherDomain.collectionIds;\n    }\n\n    protected async loadCollections() {\n        const allCollections = await this.collectionService.getAllDecrypted();\n        return allCollections.filter(c => !c.readOnly && c.organizationId === this.cipher.organizationId);\n    }\n\n    protected saveCollections() {\n        return this.cipherService.saveCollectionsWithServer(this.cipherDomain);\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    Output,\n} from '@angular/core';\n\nimport { CipherType } from 'jslib-common/enums/cipherType';\n\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\nimport { FolderView } from 'jslib-common/models/view/folderView';\n\nimport { TreeNode } from 'jslib-common/models/domain/treeNode';\n\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\n@Directive()\nexport class GroupingsComponent {\n    @Input() showFolders = true;\n    @Input() showCollections = true;\n    @Input() showFavorites = true;\n    @Input() showTrash = true;\n\n    @Output() onAllClicked = new EventEmitter();\n    @Output() onFavoritesClicked = new EventEmitter();\n    @Output() onTrashClicked = new EventEmitter();\n    @Output() onCipherTypeClicked = new EventEmitter<CipherType>();\n    @Output() onFolderClicked = new EventEmitter<FolderView>();\n    @Output() onAddFolder = new EventEmitter();\n    @Output() onEditFolder = new EventEmitter<FolderView>();\n    @Output() onCollectionClicked = new EventEmitter<CollectionView>();\n\n    folders: FolderView[];\n    nestedFolders: TreeNode<FolderView>[];\n    collections: CollectionView[];\n    nestedCollections: TreeNode<CollectionView>[];\n    loaded: boolean = false;\n    cipherType = CipherType;\n    selectedAll: boolean = false;\n    selectedFavorites: boolean = false;\n    selectedTrash: boolean = false;\n    selectedType: CipherType = null;\n    selectedFolder: boolean = false;\n    selectedFolderId: string = null;\n    selectedCollectionId: string = null;\n\n    private collapsedGroupings: Set<string>;\n    private collapsedGroupingsKey: string;\n\n    constructor(protected collectionService: CollectionService, protected folderService: FolderService,\n        protected storageService: StorageService, protected userService: UserService) { }\n\n    async load(setLoaded = true) {\n        const userId = await this.userService.getUserId();\n        this.collapsedGroupingsKey = ConstantsService.collapsedGroupingsKey + '_' + userId;\n        const collapsedGroupings = await this.storageService.get<string[]>(this.collapsedGroupingsKey);\n        if (collapsedGroupings == null) {\n            this.collapsedGroupings = new Set<string>();\n        } else {\n            this.collapsedGroupings = new Set(collapsedGroupings);\n        }\n\n        await this.loadFolders();\n        await this.loadCollections();\n\n        if (setLoaded) {\n            this.loaded = true;\n        }\n    }\n\n    async loadCollections(organizationId?: string) {\n        if (!this.showCollections) {\n            return;\n        }\n        const collections = await this.collectionService.getAllDecrypted();\n        if (organizationId != null) {\n            this.collections = collections.filter(c => c.organizationId === organizationId);\n        } else {\n            this.collections = collections;\n        }\n        this.nestedCollections = await this.collectionService.getAllNested(this.collections);\n    }\n\n    async loadFolders() {\n        if (!this.showFolders) {\n            return;\n        }\n        this.folders = await this.folderService.getAllDecrypted();\n        this.nestedFolders = await this.folderService.getAllNested();\n    }\n\n    selectAll() {\n        this.clearSelections();\n        this.selectedAll = true;\n        this.onAllClicked.emit();\n    }\n\n    selectFavorites() {\n        this.clearSelections();\n        this.selectedFavorites = true;\n        this.onFavoritesClicked.emit();\n    }\n\n    selectTrash() {\n        this.clearSelections();\n        this.selectedTrash = true;\n        this.onTrashClicked.emit();\n    }\n\n    selectType(type: CipherType) {\n        this.clearSelections();\n        this.selectedType = type;\n        this.onCipherTypeClicked.emit(type);\n    }\n\n    selectFolder(folder: FolderView) {\n        this.clearSelections();\n        this.selectedFolder = true;\n        this.selectedFolderId = folder.id;\n        this.onFolderClicked.emit(folder);\n    }\n\n    addFolder() {\n        this.onAddFolder.emit();\n    }\n\n    editFolder(folder: FolderView) {\n        this.onEditFolder.emit(folder);\n    }\n\n    selectCollection(collection: CollectionView) {\n        this.clearSelections();\n        this.selectedCollectionId = collection.id;\n        this.onCollectionClicked.emit(collection);\n    }\n\n    clearSelections() {\n        this.selectedAll = false;\n        this.selectedFavorites = false;\n        this.selectedTrash = false;\n        this.selectedType = null;\n        this.selectedFolder = false;\n        this.selectedFolderId = null;\n        this.selectedCollectionId = null;\n    }\n\n    collapse(grouping: FolderView | CollectionView, idPrefix = '') {\n        if (grouping.id == null) {\n            return;\n        }\n        const id = idPrefix + grouping.id;\n        if (this.isCollapsed(grouping, idPrefix)) {\n            this.collapsedGroupings.delete(id);\n        } else {\n            this.collapsedGroupings.add(id);\n        }\n        this.storageService.save(this.collapsedGroupingsKey, this.collapsedGroupings);\n    }\n\n    isCollapsed(grouping: FolderView | CollectionView, idPrefix = '') {\n        return this.collapsedGroupings.has(idPrefix + grouping.id);\n    }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendAccessResponse } from '../response/sendAccessResponse';\n\nimport { SendAccessView } from '../view/sendAccessView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SendFile } from './sendFile';\nimport { SendText } from './sendText';\nimport { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class SendAccess extends Domain {\n    id: string;\n    type: SendType;\n    name: EncString;\n    file: SendFile;\n    text: SendText;\n    expirationDate: Date;\n    creatorIdentifier: string;\n\n    constructor(obj?: SendAccessResponse, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            id: null,\n            name: null,\n            expirationDate: null,\n            creatorIdentifier: null,\n        }, alreadyEncrypted, ['id', 'expirationDate', 'creatorIdentifier']);\n\n        this.type = obj.type;\n\n        switch (this.type) {\n            case SendType.Text:\n                this.text = new SendText(obj.text, alreadyEncrypted);\n                break;\n            case SendType.File:\n                this.file = new SendFile(obj.file, alreadyEncrypted);\n                break;\n            default:\n                break;\n        }\n    }\n\n    async decrypt(key: SymmetricCryptoKey): Promise<SendAccessView> {\n        const model = new SendAccessView(this);\n\n        await this.decryptObj(model, {\n            name: null,\n        }, null, key);\n\n        switch (this.type) {\n            case SendType.File:\n                model.file = await this.file.decrypt(key);\n                break;\n            case SendType.Text:\n                model.text = await this.text.decrypt(key);\n                break;\n            default:\n                break;\n        }\n\n        return model;\n    }\n}\n","import { SendType } from '../../enums/sendType';\n\nimport { SendAccess } from '../domain/sendAccess';\n\nimport { SendFileView } from './sendFileView';\nimport { SendTextView } from './sendTextView';\nimport { View } from './view';\n\nexport class SendAccessView implements View {\n    id: string = null;\n    name: string = null;\n    type: SendType = null;\n    text = new SendTextView();\n    file = new SendFileView();\n    expirationDate: Date = null;\n    creatorIdentifier: string = null;\n\n    constructor(s?: SendAccess) {\n        if (!s) {\n            return;\n        }\n\n        this.id = s.id;\n        this.type = s.type;\n        this.expirationDate = s.expirationDate;\n        this.creatorIdentifier = s.creatorIdentifier;\n    }\n}\n","export class SendAccessRequest {\n    password: string;\n}\n","import {\n    Directive,\n    NgZone,\n    OnInit,\n} from '@angular/core';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { SendType } from 'jslib-common/enums/sendType';\n\nimport { SendView } from 'jslib-common/models/view/sendView';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SearchService } from 'jslib-common/abstractions/search.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\n@Directive()\nexport class SendComponent implements OnInit {\n\n    disableSend = false;\n    sendType = SendType;\n    loaded = false;\n    loading = true;\n    refreshing = false;\n    expired: boolean = false;\n    type: SendType = null;\n    sends: SendView[] = [];\n    filteredSends: SendView[] = [];\n    searchText: string;\n    selectedType: SendType;\n    selectedAll: boolean;\n    searchPlaceholder: string;\n    filter: (cipher: SendView) => boolean;\n    searchPending = false;\n    hasSearched = false; // search() function called - returns true if text qualifies for search\n\n    actionPromise: any;\n    onSuccessfulRemovePassword: () => Promise<any>;\n    onSuccessfulDelete: () => Promise<any>;\n    onSuccessfulLoad: () => Promise<any>;\n\n    private searchTimeout: any;\n\n    constructor(protected sendService: SendService, protected i18nService: I18nService,\n        protected platformUtilsService: PlatformUtilsService, protected environmentService: EnvironmentService,\n        protected ngZone: NgZone, protected searchService: SearchService,\n        protected policyService: PolicyService, protected userService: UserService,\n        private logService: LogService) { }\n\n    async ngOnInit() {\n        this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n    }\n\n    async load(filter: (send: SendView) => boolean = null) {\n        this.loading = true;\n        const sends = await this.sendService.getAllDecrypted();\n        this.sends = sends;\n        if (this.onSuccessfulLoad != null) {\n            await this.onSuccessfulLoad();\n        } else {\n            // Default action\n            this.selectAll();\n        }\n        this.loading = false;\n        this.loaded = true;\n    }\n\n    async reload(filter: (send: SendView) => boolean = null) {\n        this.loaded = false;\n        this.sends = [];\n        await this.load(filter);\n    }\n\n    async refresh() {\n        try {\n            this.refreshing = true;\n            await this.reload(this.filter);\n        } finally {\n            this.refreshing = false;\n        }\n    }\n\n    async applyFilter(filter: (send: SendView) => boolean = null) {\n        this.filter = filter;\n        await this.search(null);\n    }\n\n    async search(timeout: number = null) {\n        this.searchPending = false;\n        if (this.searchTimeout != null) {\n            clearTimeout(this.searchTimeout);\n        }\n        if (timeout == null) {\n            this.hasSearched = this.searchService.isSearchable(this.searchText);\n            this.filteredSends = this.sends.filter(s => this.filter == null || this.filter(s));\n            this.applyTextSearch();\n            return;\n        }\n        this.searchPending = true;\n        this.searchTimeout = setTimeout(async () => {\n            this.hasSearched = this.searchService.isSearchable(this.searchText);\n            this.filteredSends = this.sends.filter(s => this.filter == null || this.filter(s));\n            this.applyTextSearch();\n            this.searchPending = false;\n        }, timeout);\n    }\n\n    async removePassword(s: SendView): Promise<boolean> {\n        if (this.actionPromise != null || s.password == null) {\n            return;\n        }\n        const confirmed = await this.platformUtilsService.showDialog(this.i18nService.t('removePasswordConfirmation'),\n            this.i18nService.t('removePassword'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.actionPromise = this.sendService.removePasswordWithServer(s.id);\n            await this.actionPromise;\n            if (this.onSuccessfulRemovePassword != null) {\n                this.onSuccessfulRemovePassword();\n            } else {\n                // Default actions\n                this.platformUtilsService.showToast('success', null, this.i18nService.t('removedPassword'));\n                await this.load();\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.actionPromise = null;\n    }\n\n    async delete(s: SendView): Promise<boolean> {\n        if (this.actionPromise != null) {\n            return false;\n        }\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteSendConfirmation'),\n            this.i18nService.t('deleteSend'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.actionPromise = this.sendService.deleteWithServer(s.id);\n            await this.actionPromise;\n\n            if (this.onSuccessfulDelete != null) {\n                this.onSuccessfulDelete();\n            } else {\n                // Default actions\n                this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedSend'));\n                await this.refresh();\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n        this.actionPromise = null;\n        return true;\n    }\n\n    copy(s: SendView) {\n        const sendLinkBaseUrl = this.environmentService.getSendUrl();\n        const link = sendLinkBaseUrl + s.accessId + '/' + s.urlB64Key;\n        this.platformUtilsService.copyToClipboard(link);\n        this.platformUtilsService.showToast('success', null,\n            this.i18nService.t('valueCopied', this.i18nService.t('sendLink')));\n    }\n\n    searchTextChanged() {\n        this.search(200);\n    }\n\n    selectAll() {\n        this.clearSelections();\n        this.selectedAll = true;\n        this.applyFilter(null);\n    }\n\n    selectType(type: SendType) {\n        this.clearSelections();\n        this.selectedType = type;\n        this.applyFilter(s => s.type === type);\n    }\n\n    clearSelections() {\n        this.selectedAll = false;\n        this.selectedType = null;\n    }\n\n    private applyTextSearch() {\n        if (this.searchText != null) {\n            this.filteredSends = this.searchService.searchSends(this.filteredSends, this.searchText);\n        }\n    }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output\n} from '@angular/core';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { SendType } from 'jslib-common/enums/sendType';\n\nimport { EnvironmentService } from 'jslib-common/abstractions/environment.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\nimport { SendService } from 'jslib-common/abstractions/send.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { SendFileView } from 'jslib-common/models/view/sendFileView';\nimport { SendTextView } from 'jslib-common/models/view/sendTextView';\nimport { SendView } from 'jslib-common/models/view/sendView';\n\nimport { EncArrayBuffer } from 'jslib-common/models/domain/encArrayBuffer';\nimport { Send } from 'jslib-common/models/domain/send';\n\n@Directive()\nexport class AddEditComponent implements OnInit {\n    @Input() sendId: string;\n    @Input() type: SendType;\n\n    @Output() onSavedSend = new EventEmitter<SendView>();\n    @Output() onDeletedSend = new EventEmitter<SendView>();\n    @Output() onCancelled = new EventEmitter<SendView>();\n\n    copyLink = false;\n    disableSend = false;\n    disableHideEmail = false;\n    send: SendView;\n    deletionDate: string;\n    expirationDate: string;\n    hasPassword: boolean;\n    password: string;\n    showPassword = false;\n    formPromise: Promise<any>;\n    deletePromise: Promise<any>;\n    sendType = SendType;\n    typeOptions: any[];\n    canAccessPremium = true;\n    emailVerified = true;\n    alertShown = false;\n    showOptions = false;\n\n    private sendLinkBaseUrl: string;\n\n    constructor(protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n        protected environmentService: EnvironmentService, protected datePipe: DatePipe,\n        protected sendService: SendService, protected userService: UserService,\n        protected messagingService: MessagingService, protected policyService: PolicyService,\n        private logService: LogService) {\n        this.typeOptions = [\n            { name: i18nService.t('sendTypeFile'), value: SendType.File },\n            { name: i18nService.t('sendTypeText'), value: SendType.Text },\n        ];\n        this.sendLinkBaseUrl = this.environmentService.getSendUrl();\n    }\n\n    get link(): string {\n        if (this.send.id != null && this.send.accessId != null) {\n            return this.sendLinkBaseUrl + this.send.accessId + '/' + this.send.urlB64Key;\n        }\n        return null;\n    }\n\n    get isSafari() {\n        return this.platformUtilsService.isSafari();\n    }\n\n    get isDateTimeLocalSupported(): boolean {\n        return !(this.platformUtilsService.isFirefox() || this.platformUtilsService.isSafari());\n    }\n\n    async ngOnInit() {\n        await this.load();\n    }\n\n    get editMode(): boolean {\n        return this.sendId != null;\n    }\n\n    get title(): string {\n        return this.i18nService.t(\n            this.editMode ?\n                'editSend' :\n                'createSend'\n        );\n    }\n\n    setDates(event: {deletionDate: string, expirationDate: string}) {\n        this.deletionDate = event.deletionDate;\n        this.expirationDate = event.expirationDate;\n    }\n\n    async load() {\n        this.disableSend = await this.policyService.policyAppliesToUser(PolicyType.DisableSend);\n        this.disableHideEmail = await this.policyService.policyAppliesToUser(PolicyType.SendOptions,\n            p => p.data.disableHideEmail);\n\n        this.canAccessPremium = await this.userService.canAccessPremium();\n        this.emailVerified = await this.userService.getEmailVerified();\n        if (!this.canAccessPremium || !this.emailVerified) {\n            this.type = SendType.Text;\n        }\n\n        if (this.send == null) {\n            if (this.editMode) {\n                const send = await this.loadSend();\n                this.send = await send.decrypt();\n            } else {\n                this.send = new SendView();\n                this.send.type = this.type == null ? SendType.File : this.type;\n                this.send.file = new SendFileView();\n                this.send.text = new SendTextView();\n                this.send.deletionDate = new Date();\n                this.send.deletionDate.setDate(this.send.deletionDate.getDate() + 7);\n            }\n        }\n\n        this.hasPassword = this.send.password != null && this.send.password.trim() !== '';\n    }\n\n    async submit(): Promise<boolean> {\n        if (this.disableSend) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('sendDisabledWarning'));\n            return false;\n        }\n\n        if (this.send.name == null || this.send.name === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('nameRequired'));\n            return false;\n        }\n\n        let file: File = null;\n        if (this.send.type === SendType.File && !this.editMode) {\n            const fileEl = document.getElementById('file') as HTMLInputElement;\n            const files = fileEl.files;\n            if (files == null || files.length === 0) {\n                this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                    this.i18nService.t('selectFile'));\n                return;\n            }\n\n            file = files[0];\n            if (files[0].size > 524288000) { // 500 MB\n                this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                    this.i18nService.t('maxFileSize'));\n                return;\n            }\n        }\n\n        if (this.password != null && this.password.trim() === '') {\n            this.password = null;\n        }\n\n        this.formPromise = this.encryptSend(file)\n            .then(async encSend => {\n                const uploadPromise = this.sendService.saveWithServer(encSend);\n                await uploadPromise;\n                if (this.send.id == null) {\n                    this.send.id = encSend[0].id;\n                }\n                if (this.send.accessId == null) {\n                    this.send.accessId = encSend[0].accessId;\n                }\n                this.onSavedSend.emit(this.send);\n                if (this.copyLink && this.link != null) {\n                    const copySuccess = await this.copyLinkToClipboard(this.link);\n                    if (copySuccess ?? true) {\n                        this.platformUtilsService.showToast('success', null,\n                            this.i18nService.t(this.editMode ? 'editedSend' : 'createdSend'));\n                    } else {\n                        await this.platformUtilsService.showDialog(\n                            this.i18nService.t(this.editMode ? 'editedSend' : 'createdSend'), null,\n                            this.i18nService.t('ok'), null, 'success', null);\n                        await this.copyLinkToClipboard(this.link);\n                    }\n                }\n            });\n        try {\n            await this.formPromise;\n            return true;\n        } catch (e) {\n            this.logService.error(e);\n        }\n        return false;\n    }\n\n    async copyLinkToClipboard(link: string): Promise<void | boolean> {\n        return Promise.resolve(this.platformUtilsService.copyToClipboard(link));\n    }\n\n    async delete(): Promise<boolean> {\n        if (this.deletePromise != null) {\n            return false;\n        }\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteSendConfirmation'),\n            this.i18nService.t('deleteSend'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.deletePromise = this.sendService.deleteWithServer(this.send.id);\n            await this.deletePromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedSend'));\n            await this.load();\n            this.onDeletedSend.emit(this.send);\n            return true;\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        return false;\n    }\n\n    typeChanged() {\n        if (this.send.type === SendType.File && !this.alertShown) {\n            if (!this.canAccessPremium) {\n                this.alertShown = true;\n                this.messagingService.send('premiumRequired');\n            } else if (!this.emailVerified) {\n                this.alertShown = true;\n                this.messagingService.send('emailVerificationRequired');\n            }\n        }\n    }\n\n    toggleOptions() {\n        this.showOptions = !this.showOptions;\n    }\n\n    protected async loadSend(): Promise<Send> {\n        return this.sendService.get(this.sendId);\n    }\n\n    protected async encryptSend(file: File): Promise<[Send, EncArrayBuffer]> {\n        const sendData = await this.sendService.encrypt(this.send, file, this.password, null);\n\n        // Parse dates\n        try {\n            sendData[0].deletionDate = this.deletionDate == null ? null : new Date(this.deletionDate);\n        } catch {\n            sendData[0].deletionDate = null;\n        }\n        try {\n            sendData[0].expirationDate = this.expirationDate == null ? null : new Date(this.expirationDate);\n        } catch {\n            sendData[0].expirationDate = null;\n        }\n\n        return sendData;\n    }\n\n    protected togglePasswordVisible() {\n        this.showPassword = !this.showPassword;\n        document.getElementById('password').focus();\n    }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output\n} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\n// Different BrowserPath = different controls.\nenum BrowserPath {\n    // Native datetime-locale.\n    // We are happy.\n    Default = 'default',\n\n    // Native date and time inputs, but no datetime-locale.\n    // We use individual date and time inputs and create a datetime programatically on submit.\n    Firefox = 'firefox',\n\n    // No native date, time, or datetime-locale inputs.\n    // We use a polyfill for dates and a dropdown for times.\n    Safari = 'safari',\n}\n\nenum DateField {\n    DeletionDate = 'deletion',\n    ExpriationDate = 'expiration',\n}\n\n// Value = hours\nenum DatePreset {\n    OneHour = 1,\n    OneDay = 24,\n    TwoDays = 48,\n    ThreeDays = 72,\n    SevenDays = 168,\n    ThirtyDays = 720,\n    Custom = 0,\n    Never = null,\n}\n\n// TimeOption is used for the dropdown implementation of custom times\n// twelveHour = displayed time; twentyFourHour = time used in logic\ninterface TimeOption {\n    twelveHour: string;\n    twentyFourHour: string;\n}\n\n@Directive()\nexport class EffluxDatesComponent implements OnInit {\n    @Input() readonly initialDeletionDate: Date;\n    @Input() readonly initialExpirationDate: Date;\n    @Input() readonly editMode: boolean;\n    @Input() readonly disabled: boolean;\n\n    @Output() datesChanged = new EventEmitter<{deletionDate: string, expirationDate: string}>();\n\n    get browserPath(): BrowserPath {\n        if (this.platformUtilsService.isFirefox()) {\n            return BrowserPath.Firefox;\n        } else if (this.platformUtilsService.isSafari()) {\n            return BrowserPath.Safari;\n        }\n        return BrowserPath.Default;\n    }\n\n    datesForm = new FormGroup({\n        selectedDeletionDatePreset: new FormControl(),\n        selectedExpirationDatePreset: new FormControl(),\n        defaultDeletionDateTime: new FormControl(),\n        defaultExpirationDateTime: new FormControl(),\n        fallbackDeletionDate: new FormControl(),\n        fallbackDeletionTime: new FormControl(),\n        fallbackExpirationDate: new FormControl(),\n        fallbackExpirationTime: new FormControl(),\n    });\n\n    deletionDatePresets: any[] = [\n            { name: this.i18nService.t('oneHour'), value: DatePreset.OneHour },\n            { name: this.i18nService.t('oneDay'), value: DatePreset.OneDay },\n            { name: this.i18nService.t('days', '2'), value: DatePreset.TwoDays },\n            { name: this.i18nService.t('days', '3'), value: DatePreset.ThreeDays },\n            { name: this.i18nService.t('days', '7'), value: DatePreset.SevenDays },\n            { name: this.i18nService.t('days', '30'), value: DatePreset.ThirtyDays },\n            { name: this.i18nService.t('custom'), value: DatePreset.Custom },\n    ];\n\n    expirationDatePresets: any[] = [\n            { name: this.i18nService.t('never'), value: DatePreset.Never },\n    ].concat([...this.deletionDatePresets]);\n\n    get selectedDeletionDatePreset(): FormControl {\n        return this.datesForm.get('selectedDeletionDatePreset') as FormControl;\n    }\n\n    get selectedExpirationDatePreset(): FormControl {\n        return this.datesForm.get('selectedExpirationDatePreset') as FormControl;\n    }\n\n    get defaultDeletionDateTime(): FormControl {\n        return this.datesForm.get('defaultDeletionDateTime') as FormControl;\n    }\n\n    get defaultExpirationDateTime(): FormControl {\n        return this.datesForm.get('defaultExpirationDateTime') as FormControl;\n    }\n\n    get fallbackDeletionDate(): FormControl {\n        return this.datesForm.get('fallbackDeletionDate') as FormControl;\n    }\n\n    get fallbackDeletionTime(): FormControl {\n        return this.datesForm.get('fallbackDeletionTime') as FormControl;\n    }\n\n    get fallbackExpirationDate(): FormControl {\n        return this.datesForm.get('fallbackExpirationDate') as FormControl;\n    }\n\n    get fallbackExpirationTime(): FormControl {\n        return this.datesForm.get('fallbackExpirationTime') as FormControl;\n    }\n\n    // Should be able to call these at any time and compute a submitable value\n    get formattedDeletionDate(): string {\n        switch (this.selectedDeletionDatePreset.value as DatePreset) {\n            case DatePreset.Never:\n                this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n                return this.formattedDeletionDate;\n            case DatePreset.Custom:\n                switch (this.browserPath) {\n                    case BrowserPath.Safari:\n                    case BrowserPath.Firefox:\n                        return this.fallbackDeletionDate.value + 'T' + this.fallbackDeletionTime.value;\n                    default:\n                        return this.defaultDeletionDateTime.value;\n                }\n            default:\n                const now = new Date();\n                const miliseconds = now.setTime(now.getTime() +\n                    (this.selectedDeletionDatePreset.value as number * 60 * 60 * 1000)) ;\n                return new Date(miliseconds).toString();\n        }\n    }\n\n    get formattedExpirationDate(): string {\n        switch (this.selectedExpirationDatePreset.value as DatePreset) {\n            case DatePreset.Never:\n                return null;\n            case DatePreset.Custom:\n                switch (this.browserPath) {\n                    case BrowserPath.Safari:\n                    case BrowserPath.Firefox:\n                        if ((!this.fallbackExpirationDate.value || !this.fallbackExpirationTime.value) &&\n                            this.editMode) {\n                            return null;\n                        }\n                        return this.fallbackExpirationDate.value + 'T' + this.fallbackExpirationTime.value;\n                    default:\n                        if (!this.defaultExpirationDateTime.value) {\n                            return null;\n                        }\n                        return this.defaultExpirationDateTime.value;\n                }\n            default:\n                const now = new Date();\n                const miliseconds = now.setTime(now.getTime() +\n                    (this.selectedExpirationDatePreset.value as number * 60 * 60 * 1000));\n                return new Date(miliseconds).toString();\n        }\n    }\n    //\n\n    get safariDeletionTimePresetOptions() {\n        return this.safariTimePresetOptions(DateField.DeletionDate);\n    }\n\n    get safariExpirationTimePresetOptions() {\n        return this.safariTimePresetOptions(DateField.ExpriationDate);\n    }\n\n    private get nextWeek(): Date {\n        const nextWeek = new Date();\n        nextWeek.setDate(nextWeek.getDate() + 7);\n        return nextWeek;\n    }\n\n    constructor(protected i18nService: I18nService, protected platformUtilsService: PlatformUtilsService,\n        protected datePipe: DatePipe) {\n    }\n\n    ngOnInit(): void {\n        this.setInitialFormValues();\n        this.emitDates();\n        this.datesForm.valueChanges.subscribe(() => {\n            this.emitDates();\n        });\n    }\n\n    onDeletionDatePresetSelect(value: DatePreset) {\n        this.selectedDeletionDatePreset.setValue(value);\n    }\n\n    clearExpiration() {\n        switch (this.browserPath) {\n            case BrowserPath.Safari:\n            case BrowserPath.Firefox:\n                this.fallbackExpirationDate.setValue(null);\n                this.fallbackExpirationTime.setValue(null);\n                break;\n            case BrowserPath.Default:\n                this.defaultExpirationDateTime.setValue(null);\n                break;\n        }\n    }\n\n    protected emitDates() {\n        this.datesChanged.emit({\n            deletionDate: this.formattedDeletionDate,\n            expirationDate: this.formattedExpirationDate,\n        });\n    }\n\n    protected setInitialFormValues() {\n        if (this.editMode) {\n            this.selectedDeletionDatePreset.setValue(DatePreset.Custom);\n            this.selectedExpirationDatePreset.setValue(DatePreset.Custom);\n            switch (this.browserPath) {\n                case BrowserPath.Safari:\n                case BrowserPath.Firefox:\n                    this.fallbackDeletionDate.setValue(this.initialDeletionDate.toISOString().slice(0, 10));\n                    this.fallbackDeletionTime.setValue(this.initialDeletionDate.toTimeString().slice(0, 5));\n                    if (this.initialExpirationDate != null) {\n                        this.fallbackExpirationDate.setValue(this.initialExpirationDate.toISOString().slice(0, 10));\n                        this.fallbackExpirationTime.setValue(this.initialExpirationDate.toTimeString().slice(0, 5));\n                    }\n                    break;\n                case BrowserPath.Default:\n                    if (this.initialExpirationDate) {\n                        this.defaultExpirationDateTime.setValue(\n                            this.datePipe.transform(new Date(this.initialExpirationDate), 'yyyy-MM-ddTHH:mm'));\n                    }\n                    this.defaultDeletionDateTime.setValue(this.datePipe.transform(new Date(this.initialDeletionDate), 'yyyy-MM-ddTHH:mm'));\n                    break;\n            }\n        } else {\n            this.selectedDeletionDatePreset.setValue(DatePreset.SevenDays);\n            this.selectedExpirationDatePreset.setValue(DatePreset.Never);\n\n            switch (this.browserPath) {\n                case BrowserPath.Safari:\n                    this.fallbackDeletionDate.setValue(this.nextWeek.toISOString().slice(0, 10));\n                    this.fallbackDeletionTime.setValue(this.safariTimePresetOptions(DateField.DeletionDate)[1].twentyFourHour);\n                    break;\n                default:\n                    break;\n            }\n        }\n    }\n\n    protected safariTimePresetOptions(field: DateField): TimeOption[] {\n        // init individual arrays for major sort groups\n        const noon: TimeOption[] = [];\n        const midnight: TimeOption[] = [];\n        const ams: TimeOption[] = [];\n        const pms: TimeOption[] = [];\n\n        // determine minute skip (5 min, 10 min, 15 min, etc.)\n        const minuteIncrementer = 15;\n\n        // loop through each hour on a 12 hour system\n        for (let h = 1; h <= 12; h++) {\n            // loop through each minute in the hour using the skip to incriment\n            for (let m = 0; m < 60; m += minuteIncrementer) {\n                // init the final strings that will be added to the lists\n                let hour = h.toString();\n                let minutes = m.toString();\n\n                // add prepending 0s to single digit hours/minutes\n                if (h < 10) {\n                    hour = '0' + hour;\n                }\n                if (m < 10) {\n                    minutes = '0' + minutes;\n                }\n\n                // build time strings and push to relevant sort groups\n                if (h === 12) {\n                    const midnightOption: TimeOption = {\n                        twelveHour: `${hour}:${minutes} AM`,\n                        twentyFourHour: `00:${minutes}`,\n                    };\n                    midnight.push(midnightOption);\n\n                    const noonOption: TimeOption = {\n                        twelveHour: `${hour}:${minutes} PM`,\n                        twentyFourHour: `${hour}:${minutes}`,\n                    };\n                    noon.push(noonOption);\n                } else {\n                    const amOption: TimeOption = {\n                        twelveHour: `${hour}:${minutes} AM`,\n                        twentyFourHour: `${hour}:${minutes}`,\n                    };\n                    ams.push(amOption);\n\n                    const pmOption: TimeOption = {\n                        twelveHour: `${hour}:${minutes} PM`,\n                        twentyFourHour: `${h + 12}:${minutes}`,\n                    };\n                    pms.push(pmOption);\n                }\n            }\n        }\n\n        // bring all the arrays together in the right order\n        const validTimes = [...midnight, ...ams, ...noon, ...pms];\n\n        // determine if an unsupported value already exists on the send & add that to the top of the option list\n        // example: if the Send was created with a different client\n        if (field === DateField.ExpriationDate && this.initialExpirationDate != null && this.editMode) {\n            const previousValue: TimeOption = {\n                twelveHour: this.datePipe.transform(this.initialExpirationDate, 'hh:mm a'),\n                twentyFourHour: this.datePipe.transform(this.initialExpirationDate, 'HH:mm'),\n            };\n            return [previousValue, { twelveHour: null, twentyFourHour: null }, ...validTimes];\n        } else if (field === DateField.DeletionDate && this.initialDeletionDate != null && this.editMode) {\n            const previousValue: TimeOption = {\n                twelveHour: this.datePipe.transform(this.initialDeletionDate, 'hh:mm a'),\n                twentyFourHour: this.datePipe.transform(this.initialDeletionDate, 'HH:mm'),\n            };\n            return [previousValue, ...validTimes];\n        } else {\n            return [{ twelveHour: null, twentyFourHour: null }, ...validTimes];\n        }\n    }\n}\n","export class UpdateProfileRequest {\n    name: string;\n    masterPasswordHint: string;\n    culture = 'en-US'; // deprecated\n\n    constructor(name: string, masterPasswordHint: string) {\n        this.name = name;\n        this.masterPasswordHint = masterPasswordHint ? masterPasswordHint : null;\n    }\n}\n","import { EmailTokenRequest } from './emailTokenRequest';\n\nexport class EmailRequest extends EmailTokenRequest {\n    newMasterPasswordHash: string;\n    token: string;\n    key: string;\n}\n","import { SendRequest } from './sendRequest';\n\nimport { Send } from '../domain/send';\n\nexport class SendWithIdRequest extends SendRequest {\n    id: string;\n\n    constructor(send: Send) {\n        super(send);\n        this.id = send.id;\n    }\n}\n","import { PasswordRequest } from './passwordRequest';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class KdfRequest extends PasswordRequest {\n    kdf: KdfType;\n    kdfIterations: number;\n}\n","export class UpdateDomainsRequest {\n    equivalentDomains: string[][];\n    excludedGlobalEquivalentDomains: number[];\n}\n","import {\n    Directive,\n    Input,\n    OnInit,\n} from '@angular/core';\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    FormBuilder,\n    ValidationErrors,\n    Validator\n} from '@angular/forms';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PolicyService } from 'jslib-common/abstractions/policy.service';\n\nimport { PolicyType } from 'jslib-common/enums/policyType';\nimport { Policy } from 'jslib-common/models/domain/policy';\n\n@Directive()\nexport class VaultTimeoutInputComponent implements ControlValueAccessor, Validator, OnInit {\n\n    get showCustom() {\n        return this.form.get('vaultTimeout').value === VaultTimeoutInputComponent.CUSTOM_VALUE;\n    }\n\n    static CUSTOM_VALUE = -100;\n\n    form = this.fb.group({\n        vaultTimeout: [null],\n        custom: this.fb.group({\n            hours: [null],\n            minutes: [null],\n        }),\n    });\n\n    @Input() vaultTimeouts: { name: string; value: number; }[];\n    vaultTimeoutPolicy: Policy;\n    vaultTimeoutPolicyHours: number;\n    vaultTimeoutPolicyMinutes: number;\n\n    private onChange: (vaultTimeout: number) => void;\n    private validatorChange: () => void;\n\n    constructor(private fb: FormBuilder, private policyService: PolicyService, private i18nService: I18nService) {\n    }\n\n    async ngOnInit() {\n        if (await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout)) {\n            const vaultTimeoutPolicy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout);\n\n            this.vaultTimeoutPolicy = vaultTimeoutPolicy[0];\n            this.vaultTimeoutPolicyHours = Math.floor(this.vaultTimeoutPolicy.data.minutes / 60);\n            this.vaultTimeoutPolicyMinutes = this.vaultTimeoutPolicy.data.minutes % 60;\n\n            this.vaultTimeouts = this.vaultTimeouts.filter(t =>\n                t.value <= this.vaultTimeoutPolicy.data.minutes &&\n                (t.value > 0 || t.value === VaultTimeoutInputComponent.CUSTOM_VALUE) &&\n                t.value != null\n            );\n            this.validatorChange();\n        }\n\n        this.form.valueChanges.subscribe(async value => {\n            this.onChange(this.getVaultTimeout(value));\n        });\n\n        // Assign the previous value to the custom fields\n        this.form.get('vaultTimeout').valueChanges.subscribe(value => {\n            if (value !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n                return;\n            }\n\n            const current = Math.max(this.form.value.vaultTimeout, 0);\n            this.form.patchValue({\n                custom: {\n                    hours: Math.floor(current / 60),\n                    minutes: current % 60,\n                },\n            });\n        });\n    }\n\n    ngOnChanges() {\n        this.vaultTimeouts.push({ name: this.i18nService.t('custom'), value: VaultTimeoutInputComponent.CUSTOM_VALUE });\n    }\n\n    getVaultTimeout(value: any) {\n        if (value.vaultTimeout !== VaultTimeoutInputComponent.CUSTOM_VALUE) {\n            return value.vaultTimeout;\n        }\n\n        return value.custom.hours * 60 + value.custom.minutes;\n    }\n\n    writeValue(value: number): void {\n        if (value == null) {\n            return;\n        }\n\n        if (this.vaultTimeouts.every(p => p.value !== value)) {\n            this.form.setValue({\n                vaultTimeout: VaultTimeoutInputComponent.CUSTOM_VALUE,\n                custom: {\n                    hours: Math.floor(value / 60),\n                    minutes: value % 60,\n                },\n            });\n            return;\n        }\n\n        this.form.patchValue({\n            vaultTimeout: value,\n        });\n    }\n\n    registerOnChange(onChange: any): void {\n        this.onChange = onChange;\n    }\n\n    // tslint:disable-next-line\n    registerOnTouched(onTouched: any): void {}\n\n    // tslint:disable-next-line\n    setDisabledState?(isDisabled: boolean): void { }\n\n    validate(control: AbstractControl): ValidationErrors {\n        if (this.vaultTimeoutPolicy && this.vaultTimeoutPolicy?.data?.minutes < control.value) {\n            return { policyError: true };\n        }\n\n        return null;\n    }\n\n    registerOnValidatorChange(fn: () => void): void {\n        this.validatorChange = fn;\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { PasswordGeneratorPolicyOptions } from 'jslib-common/models/domain/passwordGeneratorPolicyOptions';\n\n@Directive()\nexport class PasswordGeneratorComponent implements OnInit {\n    @Input() showSelect: boolean = false;\n    @Output() onSelected = new EventEmitter<string>();\n\n    passTypeOptions: any[];\n    options: any = {};\n    password: string = '-';\n    showOptions = false;\n    avoidAmbiguous = false;\n    enforcedPolicyOptions: PasswordGeneratorPolicyOptions;\n\n    constructor(protected passwordGenerationService: PasswordGenerationService,\n        protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n        private win: Window) {\n            this.passTypeOptions = [\n                { name: i18nService.t('password'), value: 'password' },\n                { name: i18nService.t('passphrase'), value: 'passphrase' },\n            ];\n         }\n\n    async ngOnInit() {\n        const optionsResponse = await this.passwordGenerationService.getOptions();\n        this.options = optionsResponse[0];\n        this.enforcedPolicyOptions = optionsResponse[1];\n        this.avoidAmbiguous = !this.options.ambiguous;\n        this.options.type = this.options.type === 'passphrase' ? 'passphrase' : 'password';\n        this.password = await this.passwordGenerationService.generatePassword(this.options);\n        await this.passwordGenerationService.addHistory(this.password);\n    }\n\n    async sliderChanged() {\n        this.saveOptions(false);\n        await this.passwordGenerationService.addHistory(this.password);\n    }\n\n    async sliderInput() {\n        this.normalizeOptions();\n        this.password = await this.passwordGenerationService.generatePassword(this.options);\n    }\n\n    async saveOptions(regenerate: boolean = true) {\n        this.normalizeOptions();\n        await this.passwordGenerationService.saveOptions(this.options);\n\n        if (regenerate) {\n            await this.regenerate();\n        }\n    }\n\n    async regenerate() {\n        this.password = await this.passwordGenerationService.generatePassword(this.options);\n        await this.passwordGenerationService.addHistory(this.password);\n    }\n\n    copy() {\n        const copyOptions = this.win != null ? { window: this.win } : null;\n        this.platformUtilsService.copyToClipboard(this.password, copyOptions);\n        this.platformUtilsService.showToast('info', null,\n            this.i18nService.t('valueCopied', this.i18nService.t('password')));\n    }\n\n    select() {\n        this.onSelected.emit(this.password);\n    }\n\n    toggleOptions() {\n        this.showOptions = !this.showOptions;\n    }\n\n    private normalizeOptions() {\n        // Application level normalize options depedent on class variables\n        this.options.ambiguous = !this.avoidAmbiguous;\n\n        if (!this.options.uppercase && !this.options.lowercase && !this.options.number && !this.options.special) {\n            this.options.lowercase = true;\n            if (this.win != null) {\n                const lowercase = this.win.document.querySelector('#lowercase') as HTMLInputElement;\n                if (lowercase) {\n                    lowercase.checked = true;\n                }\n            }\n        }\n\n        this.passwordGenerationService.normalizeOptions(this.options, this.enforcedPolicyOptions);\n    }\n}\n","import { Directive, OnInit } from '@angular/core';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { PasswordGenerationService } from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { GeneratedPasswordHistory } from 'jslib-common/models/domain/generatedPasswordHistory';\n\n@Directive()\nexport class PasswordGeneratorHistoryComponent implements OnInit {\n    history: GeneratedPasswordHistory[] = [];\n\n    constructor(protected passwordGenerationService: PasswordGenerationService,\n        protected platformUtilsService: PlatformUtilsService, protected i18nService: I18nService,\n        private win: Window) { }\n\n    async ngOnInit() {\n        this.history = await this.passwordGenerationService.getHistory();\n    }\n\n    clear() {\n        this.history = [];\n        this.passwordGenerationService.clear();\n    }\n\n    copy(password: string) {\n        const copyOptions = this.win != null ? { window: this.win } : null;\n        this.platformUtilsService.copyToClipboard(password, copyOptions);\n        this.platformUtilsService.showToast('info', null,\n            this.i18nService.t('valueCopied', this.i18nService.t('password')));\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { FolderService } from 'jslib-common/abstractions/folder.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\n\nimport { FolderView } from 'jslib-common/models/view/folderView';\n\n@Directive()\nexport class FolderAddEditComponent implements OnInit {\n    @Input() folderId: string;\n    @Output() onSavedFolder = new EventEmitter<FolderView>();\n    @Output() onDeletedFolder = new EventEmitter<FolderView>();\n\n    editMode: boolean = false;\n    folder: FolderView = new FolderView();\n    title: string;\n    formPromise: Promise<any>;\n    deletePromise: Promise<any>;\n\n    constructor(protected folderService: FolderService, protected i18nService: I18nService,\n        protected platformUtilsService: PlatformUtilsService, private logService: LogService) { }\n\n    async ngOnInit() {\n        await this.init();\n    }\n\n    async submit(): Promise<boolean> {\n        if (this.folder.name == null || this.folder.name === '') {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('nameRequired'));\n            return false;\n        }\n\n        try {\n            const folder = await this.folderService.encrypt(this.folder);\n            this.formPromise = this.folderService.saveWithServer(folder);\n            await this.formPromise;\n            this.platformUtilsService.showToast('success', null,\n                this.i18nService.t(this.editMode ? 'editedFolder' : 'addedFolder'));\n            this.onSavedFolder.emit(this.folder);\n            return true;\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        return false;\n    }\n\n    async delete(): Promise<boolean> {\n        const confirmed = await this.platformUtilsService.showDialog(\n            this.i18nService.t('deleteFolderConfirmation'), this.i18nService.t('deleteFolder'),\n            this.i18nService.t('yes'), this.i18nService.t('no'), 'warning');\n        if (!confirmed) {\n            return false;\n        }\n\n        try {\n            this.deletePromise = this.folderService.deleteWithServer(this.folder.id);\n            await this.deletePromise;\n            this.platformUtilsService.showToast('success', null, this.i18nService.t('deletedFolder'));\n            this.onDeletedFolder.emit(this.folder);\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        return true;\n    }\n\n    protected async init() {\n        this.editMode = this.folderId != null;\n\n        if (this.editMode) {\n            this.editMode = true;\n            this.title = this.i18nService.t('editFolder');\n            const folder = await this.folderService.get(this.folderId);\n            this.folder = await folder.decrypt();\n        } else {\n            this.title = this.i18nService.t('addFolder');\n        }\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnInit,\n    Output,\n} from '@angular/core';\n\nimport { OrganizationUserStatusType } from 'jslib-common/enums/organizationUserStatusType';\n\nimport { CipherService } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService } from 'jslib-common/abstractions/collection.service';\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { UserService } from 'jslib-common/abstractions/user.service';\n\nimport { Organization } from 'jslib-common/models/domain/organization';\nimport { CipherView } from 'jslib-common/models/view/cipherView';\nimport { CollectionView } from 'jslib-common/models/view/collectionView';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Directive()\nexport class ShareComponent implements OnInit {\n    @Input() cipherId: string;\n    @Input() organizationId: string;\n    @Output() onSharedCipher = new EventEmitter();\n\n    formPromise: Promise<any>;\n    cipher: CipherView;\n    collections: CollectionView[] = [];\n    organizations: Organization[] = [];\n\n    protected writeableCollections: CollectionView[] = [];\n\n    constructor(protected collectionService: CollectionService, protected platformUtilsService: PlatformUtilsService,\n        protected i18nService: I18nService, protected userService: UserService,\n        protected cipherService: CipherService, private logService: LogService) { }\n\n    async ngOnInit() {\n        await this.load();\n    }\n\n    async load() {\n        const allCollections = await this.collectionService.getAllDecrypted();\n        this.writeableCollections = allCollections.map(c => c).filter(c => !c.readOnly);\n        const orgs = await this.userService.getAllOrganizations();\n        this.organizations = orgs.sort(Utils.getSortFunction(this.i18nService, 'name'))\n            .filter(o => o.enabled && o.status === OrganizationUserStatusType.Confirmed);\n\n        const cipherDomain = await this.cipherService.get(this.cipherId);\n        this.cipher = await cipherDomain.decrypt();\n        if (this.organizationId == null && this.organizations.length > 0) {\n            this.organizationId = this.organizations[0].id;\n        }\n        this.filterCollections();\n    }\n\n    filterCollections() {\n        this.writeableCollections.forEach(c => (c as any).checked = false);\n        if (this.organizationId == null || this.writeableCollections.length === 0) {\n            this.collections = [];\n        } else {\n            this.collections = this.writeableCollections.filter(c => c.organizationId === this.organizationId);\n        }\n    }\n\n    async submit(): Promise<boolean> {\n        const selectedCollectionIds = this.collections\n            .filter(c => !!(c as any).checked)\n            .map(c => c.id);\n        if (selectedCollectionIds.length === 0) {\n            this.platformUtilsService.showToast('error', this.i18nService.t('errorOccurred'),\n                this.i18nService.t('selectOneCollection'));\n            return;\n        }\n\n        const cipherDomain = await this.cipherService.get(this.cipherId);\n        const cipherView = await cipherDomain.decrypt();\n        const orgName = this.organizations.find(o => o.id === this.organizationId)?.name ?? this.i18nService.t('organization');\n\n        try {\n            this.formPromise = this.cipherService.shareWithServer(cipherView, this.organizationId,\n                selectedCollectionIds).then(async () => {\n                    this.onSharedCipher.emit();\n                    this.platformUtilsService.showToast('success', null,\n                        this.i18nService.t('movedItemToOrg', cipherView.name, orgName));\n                });\n            await this.formPromise;\n            return true;\n        } catch (e) {\n            this.logService.error(e);\n        }\n        return false;\n    }\n\n    get canSave() {\n        if (this.collections != null) {\n            for (let i = 0; i < this.collections.length; i++) {\n                if ((this.collections[i] as any).checked) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n}\n","export class EmergencyAccessConfirmRequest {\n    key: string;\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class PasswordHistoryResponse extends BaseResponse {\n    password: string;\n    lastUsedDate: string;\n\n    constructor(response: any) {\n        super(response);\n        this.password = this.getResponseProperty('Password');\n        this.lastUsedDate = this.getResponseProperty('LastUsedDate');\n    }\n}\n","import { EmergencyAccessType } from '../../enums/emergencyAccessType';\n\nexport class EmergencyAccessInviteRequest {\n    email: string;\n    type: EmergencyAccessType;\n    waitTimeDays: number;\n}\n","export class EmergencyAccessPasswordRequest {\n    newMasterPasswordHash: string;\n    key: string;\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport {\n    DatePipe,\n    registerLocaleData,\n} from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { ToasterModule } from 'angular2-toaster';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\n\nimport { NestedCheckboxComponent } from './components/nested-checkbox.component';\nimport { PasswordRepromptComponent } from './components/password-reprompt.component';\nimport { PasswordStrengthComponent } from './components/password-strength.component';\n\nimport { FooterComponent } from './layouts/footer.component';\nimport { FrontendLayoutComponent } from './layouts/frontend-layout.component';\nimport { NavbarComponent } from './layouts/navbar.component';\nimport { OrganizationLayoutComponent } from './layouts/organization-layout.component';\nimport { UserLayoutComponent } from './layouts/user-layout.component';\n\nimport { AcceptEmergencyComponent } from './accounts/accept-emergency.component';\nimport { AcceptOrganizationComponent } from './accounts/accept-organization.component';\nimport { HintComponent } from './accounts/hint.component';\nimport { LockComponent } from './accounts/lock.component';\nimport { LoginComponent } from './accounts/login.component';\nimport { RecoverDeleteComponent } from './accounts/recover-delete.component';\nimport { RecoverTwoFactorComponent } from './accounts/recover-two-factor.component';\nimport { RegisterComponent } from './accounts/register.component';\nimport { RemovePasswordComponent } from './accounts/remove-password.component';\nimport { SetPasswordComponent } from './accounts/set-password.component';\nimport { SsoComponent } from './accounts/sso.component';\nimport { TwoFactorOptionsComponent } from './accounts/two-factor-options.component';\nimport { TwoFactorComponent } from './accounts/two-factor.component';\nimport { UpdateTempPasswordComponent } from './accounts/update-temp-password.component';\nimport { VerifyEmailTokenComponent } from './accounts/verify-email-token.component';\nimport { VerifyRecoverDeleteComponent } from './accounts/verify-recover-delete.component';\n\nimport { BulkConfirmComponent as OrgBulkConfirmComponent } from './organizations/manage/bulk/bulk-confirm.component';\nimport { BulkRemoveComponent as OrgBulkRemoveComponent } from './organizations/manage/bulk/bulk-remove.component';\nimport { BulkStatusComponent as OrgBulkStatusComponent } from './organizations/manage/bulk/bulk-status.component';\nimport {\n    CollectionAddEditComponent as OrgCollectionAddEditComponent,\n} from './organizations/manage/collection-add-edit.component';\nimport { CollectionsComponent as OrgManageCollectionsComponent } from './organizations/manage/collections.component';\nimport { EntityEventsComponent as OrgEntityEventsComponent } from './organizations/manage/entity-events.component';\nimport { EntityUsersComponent as OrgEntityUsersComponent } from './organizations/manage/entity-users.component';\nimport { EventsComponent as OrgEventsComponent } from './organizations/manage/events.component';\nimport { GroupAddEditComponent as OrgGroupAddEditComponent } from './organizations/manage/group-add-edit.component';\nimport { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component';\nimport { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component';\nimport { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component';\nimport { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component';\nimport { PolicyEditComponent as OrgPolicyEditComponent } from './organizations/manage/policy-edit.component';\nimport { ResetPasswordComponent as OrgResetPasswordComponent } from './organizations/manage/reset-password.component';\nimport { UserAddEditComponent as OrgUserAddEditComponent } from './organizations/manage/user-add-edit.component';\nimport { UserConfirmComponent as OrgUserConfirmComponent } from './organizations/manage/user-confirm.component';\nimport { UserGroupsComponent as OrgUserGroupsComponent } from './organizations/manage/user-groups.component';\n\nimport { AccountComponent as OrgAccountComponent } from './organizations/settings/account.component';\nimport { AdjustSubscription } from './organizations/settings/adjust-subscription.component';\nimport { ChangePlanComponent } from './organizations/settings/change-plan.component';\nimport { DeleteOrganizationComponent } from './organizations/settings/delete-organization.component';\nimport { DownloadLicenseComponent } from './organizations/settings/download-license.component';\nimport { OrganizationBillingComponent } from './organizations/settings/organization-billing.component';\nimport { OrganizationSubscriptionComponent } from './organizations/settings/organization-subscription.component';\nimport { SettingsComponent as OrgSettingComponent } from './organizations/settings/settings.component';\nimport {\n    TwoFactorSetupComponent as OrgTwoFactorSetupComponent,\n} from './organizations/settings/two-factor-setup.component';\n\nimport { ExportComponent as OrgExportComponent } from './organizations/tools/export.component';\nimport {\n    ExposedPasswordsReportComponent as OrgExposedPasswordsReportComponent,\n} from './organizations/tools/exposed-passwords-report.component';\nimport { ImportComponent as OrgImportComponent } from './organizations/tools/import.component';\nimport {\n    InactiveTwoFactorReportComponent as OrgInactiveTwoFactorReportComponent,\n} from './organizations/tools/inactive-two-factor-report.component';\nimport {\n    ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent,\n} from './organizations/tools/reused-passwords-report.component';\nimport { ToolsComponent as OrgToolsComponent } from './organizations/tools/tools.component';\nimport {\n    UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent,\n} from './organizations/tools/unsecured-websites-report.component';\nimport {\n    WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent,\n} from './organizations/tools/weak-passwords-report.component';\n\nimport { FamiliesForEnterpriseSetupComponent } from './organizations/sponsorships/families-for-enterprise-setup.component';\nimport { AddEditComponent as OrgAddEditComponent } from './organizations/vault/add-edit.component';\nimport { AttachmentsComponent as OrgAttachmentsComponent } from './organizations/vault/attachments.component';\nimport { CiphersComponent as OrgCiphersComponent } from './organizations/vault/ciphers.component';\nimport { CollectionsComponent as OrgCollectionsComponent } from './organizations/vault/collections.component';\nimport { GroupingsComponent as OrgGroupingsComponent } from './organizations/vault/groupings.component';\nimport { VaultComponent as OrgVaultComponent } from './organizations/vault/vault.component';\n\nimport { AccessComponent } from './send/access.component';\nimport { AddEditComponent as SendAddEditComponent } from './send/add-edit.component';\nimport { EffluxDatesComponent as SendEffluxDatesComponent } from './send/efflux-dates.component';\nimport { SendComponent } from './send/send.component';\n\nimport { AccountComponent } from './settings/account.component';\nimport { AddCreditComponent } from './settings/add-credit.component';\nimport { AdjustPaymentComponent } from './settings/adjust-payment.component';\nimport { AdjustStorageComponent } from './settings/adjust-storage.component';\nimport { ApiKeyComponent } from './settings/api-key.component';\nimport { ChangeEmailComponent } from './settings/change-email.component';\nimport { ChangeKdfComponent } from './settings/change-kdf.component';\nimport { ChangePasswordComponent } from './settings/change-password.component';\nimport { CreateOrganizationComponent } from './settings/create-organization.component';\nimport { DeauthorizeSessionsComponent } from './settings/deauthorize-sessions.component';\nimport { DeleteAccountComponent } from './settings/delete-account.component';\nimport { DomainRulesComponent } from './settings/domain-rules.component';\nimport { EmergencyAccessAddEditComponent } from './settings/emergency-access-add-edit.component';\nimport { EmergencyAccessAttachmentsComponent } from './settings/emergency-access-attachments.component';\nimport { EmergencyAccessConfirmComponent } from './settings/emergency-access-confirm.component';\nimport { EmergencyAccessTakeoverComponent } from './settings/emergency-access-takeover.component';\nimport { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';\nimport { EmergencyAccessComponent } from './settings/emergency-access.component';\nimport { EmergencyAddEditComponent } from './settings/emergency-add-edit.component';\nimport { LinkSsoComponent } from './settings/link-sso.component';\nimport { OptionsComponent } from './settings/options.component';\nimport { OrganizationPlansComponent } from './settings/organization-plans.component';\nimport { OrganizationsComponent } from './settings/organizations.component';\nimport { PaymentComponent } from './settings/payment.component';\nimport { PremiumComponent } from './settings/premium.component';\nimport { ProfileComponent } from './settings/profile.component';\nimport { PurgeVaultComponent } from './settings/purge-vault.component';\nimport { SettingsComponent } from './settings/settings.component';\nimport { SponsoredFamiliesComponent } from './settings/sponsored-families.component';\nimport { SponsoringOrgRowComponent } from './settings/sponsoring-org-row.component';\nimport { TaxInfoComponent } from './settings/tax-info.component';\nimport { TwoFactorAuthenticatorComponent } from './settings/two-factor-authenticator.component';\nimport { TwoFactorDuoComponent } from './settings/two-factor-duo.component';\nimport { TwoFactorEmailComponent } from './settings/two-factor-email.component';\nimport { TwoFactorRecoveryComponent } from './settings/two-factor-recovery.component';\nimport { TwoFactorSetupComponent } from './settings/two-factor-setup.component';\nimport { TwoFactorVerifyComponent } from './settings/two-factor-verify.component';\nimport { TwoFactorWebAuthnComponent } from './settings/two-factor-webauthn.component';\nimport { TwoFactorYubiKeyComponent } from './settings/two-factor-yubikey.component';\nimport { UpdateKeyComponent } from './settings/update-key.component';\nimport { UpdateLicenseComponent } from './settings/update-license.component';\nimport { UserBillingComponent } from './settings/user-billing.component';\nimport { UserSubscriptionComponent } from './settings/user-subscription.component';\nimport { VaultTimeoutInputComponent } from './settings/vault-timeout-input.component';\nimport { VerifyEmailComponent } from './settings/verify-email.component';\n\nimport { BreachReportComponent } from './tools/breach-report.component';\nimport { ExportComponent } from './tools/export.component';\nimport { ExposedPasswordsReportComponent } from './tools/exposed-passwords-report.component';\nimport { ImportComponent } from './tools/import.component';\nimport { InactiveTwoFactorReportComponent } from './tools/inactive-two-factor-report.component';\nimport { PasswordGeneratorHistoryComponent } from './tools/password-generator-history.component';\nimport { PasswordGeneratorComponent } from './tools/password-generator.component';\nimport { ReusedPasswordsReportComponent } from './tools/reused-passwords-report.component';\nimport { ToolsComponent } from './tools/tools.component';\nimport { UnsecuredWebsitesReportComponent } from './tools/unsecured-websites-report.component';\nimport { WeakPasswordsReportComponent } from './tools/weak-passwords-report.component';\n\nimport { AddEditCustomFieldsComponent } from './vault/add-edit-custom-fields.component';\nimport { AddEditComponent } from './vault/add-edit.component';\nimport { AttachmentsComponent } from './vault/attachments.component';\nimport { BulkActionsComponent } from './vault/bulk-actions.component';\nimport { BulkDeleteComponent } from './vault/bulk-delete.component';\nimport { BulkMoveComponent } from './vault/bulk-move.component';\nimport { BulkRestoreComponent } from './vault/bulk-restore.component';\nimport { BulkShareComponent } from './vault/bulk-share.component';\nimport { CiphersComponent } from './vault/ciphers.component';\nimport { CollectionsComponent } from './vault/collections.component';\nimport { FolderAddEditComponent } from './vault/folder-add-edit.component';\nimport { GroupingsComponent } from './vault/groupings.component';\nimport { ShareComponent } from './vault/share.component';\nimport { VaultComponent } from './vault/vault.component';\n\nimport { ProvidersComponent } from './providers/providers.component';\n\nimport { AvatarComponent } from 'jslib-angular/components/avatar.component';\nimport { CalloutComponent } from 'jslib-angular/components/callout.component';\nimport { IconComponent } from 'jslib-angular/components/icon.component';\nimport { VerifyMasterPasswordComponent } from 'jslib-angular/components/verify-master-password.component';\n\nimport { A11yTitleDirective } from 'jslib-angular/directives/a11y-title.directive';\nimport { ApiActionDirective } from 'jslib-angular/directives/api-action.directive';\nimport { AutofocusDirective } from 'jslib-angular/directives/autofocus.directive';\nimport { BlurClickDirective } from 'jslib-angular/directives/blur-click.directive';\nimport { BoxRowDirective } from 'jslib-angular/directives/box-row.directive';\nimport { FallbackSrcDirective } from 'jslib-angular/directives/fallback-src.directive';\nimport { InputVerbatimDirective } from 'jslib-angular/directives/input-verbatim.directive';\nimport { SelectCopyDirective } from 'jslib-angular/directives/select-copy.directive';\nimport { StopClickDirective } from 'jslib-angular/directives/stop-click.directive';\nimport { StopPropDirective } from 'jslib-angular/directives/stop-prop.directive';\nimport { TrueFalseValueDirective } from 'jslib-angular/directives/true-false-value.directive';\n\nimport { ColorPasswordPipe } from 'jslib-angular/pipes/color-password.pipe';\nimport { I18nPipe } from 'jslib-angular/pipes/i18n.pipe';\nimport { SearchCiphersPipe } from 'jslib-angular/pipes/search-ciphers.pipe';\nimport { SearchPipe } from 'jslib-angular/pipes/search.pipe';\nimport { UserNamePipe } from 'jslib-angular/pipes/user-name.pipe';\n\nimport localeAz from '@angular/common/locales/az';\nimport localeBg from '@angular/common/locales/bg';\nimport localeCa from '@angular/common/locales/ca';\nimport localeCs from '@angular/common/locales/cs';\nimport localeDa from '@angular/common/locales/da';\nimport localeDe from '@angular/common/locales/de';\nimport localeEl from '@angular/common/locales/el';\nimport localeEnGb from '@angular/common/locales/en-GB';\nimport localeEnIn from '@angular/common/locales/en-IN';\nimport localeEo from '@angular/common/locales/eo';\nimport localeEs from '@angular/common/locales/es';\nimport localeEt from '@angular/common/locales/et';\nimport localeFi from '@angular/common/locales/fi';\nimport localeFr from '@angular/common/locales/fr';\nimport localeHe from '@angular/common/locales/he';\nimport localeHr from '@angular/common/locales/hr';\nimport localeHu from '@angular/common/locales/hu';\nimport localeId from '@angular/common/locales/id';\nimport localeIt from '@angular/common/locales/it';\nimport localeJa from '@angular/common/locales/ja';\nimport localeKn from '@angular/common/locales/kn';\nimport localeKo from '@angular/common/locales/ko';\nimport localeLv from '@angular/common/locales/lv';\nimport localeMl from '@angular/common/locales/ml';\nimport localeNb from '@angular/common/locales/nb';\nimport localeNl from '@angular/common/locales/nl';\nimport localePl from '@angular/common/locales/pl';\nimport localePtBr from '@angular/common/locales/pt';\nimport localePtPt from '@angular/common/locales/pt-PT';\nimport localeRo from '@angular/common/locales/ro';\nimport localeRu from '@angular/common/locales/ru';\nimport localeSk from '@angular/common/locales/sk';\nimport localeSr from '@angular/common/locales/sr';\nimport localeSv from '@angular/common/locales/sv';\nimport localeTr from '@angular/common/locales/tr';\nimport localeUk from '@angular/common/locales/uk';\nimport localeZhCn from '@angular/common/locales/zh-Hans';\nimport localeZhTw from '@angular/common/locales/zh-Hant';\n\nimport { DisableSendPolicyComponent } from './organizations/policies/disable-send.component';\nimport { MasterPasswordPolicyComponent } from './organizations/policies/master-password.component';\nimport { PasswordGeneratorPolicyComponent } from './organizations/policies/password-generator.component';\nimport { PersonalOwnershipPolicyComponent } from './organizations/policies/personal-ownership.component';\nimport { RequireSsoPolicyComponent } from './organizations/policies/require-sso.component';\nimport { ResetPasswordPolicyComponent } from './organizations/policies/reset-password.component';\nimport { SendOptionsPolicyComponent } from './organizations/policies/send-options.component';\nimport { SingleOrgPolicyComponent } from './organizations/policies/single-org.component';\nimport { TwoFactorAuthenticationPolicyComponent } from './organizations/policies/two-factor-authentication.component';\n\nregisterLocaleData(localeAz, 'az');\nregisterLocaleData(localeBg, 'bg');\nregisterLocaleData(localeCa, 'ca');\nregisterLocaleData(localeCs, 'cs');\nregisterLocaleData(localeDa, 'da');\nregisterLocaleData(localeDe, 'de');\nregisterLocaleData(localeEl, 'el');\nregisterLocaleData(localeEnGb, 'en-GB');\nregisterLocaleData(localeEnIn, 'en-IN');\nregisterLocaleData(localeEs, 'es');\nregisterLocaleData(localeEt, 'et');\nregisterLocaleData(localeEo, 'eo');\nregisterLocaleData(localeFi, 'fi');\nregisterLocaleData(localeFr, 'fr');\nregisterLocaleData(localeHe, 'he');\nregisterLocaleData(localeHr, 'hr');\nregisterLocaleData(localeHu, 'hu');\nregisterLocaleData(localeId, 'id');\nregisterLocaleData(localeIt, 'it');\nregisterLocaleData(localeJa, 'ja');\nregisterLocaleData(localeKn, 'kn');\nregisterLocaleData(localeKo, 'ko');\nregisterLocaleData(localeLv, 'lv');\nregisterLocaleData(localeMl, 'ml');\nregisterLocaleData(localeNb, 'nb');\nregisterLocaleData(localeNl, 'nl');\nregisterLocaleData(localePl, 'pl');\nregisterLocaleData(localePtBr, 'pt-BR');\nregisterLocaleData(localePtPt, 'pt-PT');\nregisterLocaleData(localeRo, 'ro');\nregisterLocaleData(localeRu, 'ru');\nregisterLocaleData(localeSk, 'sk');\nregisterLocaleData(localeSr, 'sr');\nregisterLocaleData(localeSv, 'sv');\nregisterLocaleData(localeTr, 'tr');\nregisterLocaleData(localeUk, 'uk');\nregisterLocaleData(localeZhCn, 'zh-CN');\nregisterLocaleData(localeZhTw, 'zh-TW');\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        InfiniteScrollModule,\n        DragDropModule,\n        ToasterModule.forChild(),\n        ReactiveFormsModule,\n        RouterModule,\n    ],\n    declarations: [\n        A11yTitleDirective,\n        AcceptEmergencyComponent,\n        AccessComponent,\n        AcceptOrganizationComponent,\n        AccountComponent,\n        SetPasswordComponent,\n        AddCreditComponent,\n        AddEditComponent,\n        AddEditCustomFieldsComponent,\n        AdjustPaymentComponent,\n        AdjustSubscription,\n        AdjustStorageComponent,\n        ApiActionDirective,\n        ApiKeyComponent,\n        AttachmentsComponent,\n        AutofocusDirective,\n        AvatarComponent,\n        BlurClickDirective,\n        BoxRowDirective,\n        BreachReportComponent,\n        BulkActionsComponent,\n        BulkDeleteComponent,\n        BulkMoveComponent,\n        BulkRestoreComponent,\n        BulkShareComponent,\n        CalloutComponent,\n        ChangeEmailComponent,\n        ChangeKdfComponent,\n        ChangePasswordComponent,\n        ChangePlanComponent,\n        CiphersComponent,\n        CollectionsComponent,\n        ColorPasswordPipe,\n        CreateOrganizationComponent,\n        DeauthorizeSessionsComponent,\n        DeleteAccountComponent,\n        DeleteOrganizationComponent,\n        DomainRulesComponent,\n        DownloadLicenseComponent,\n        EmergencyAccessAddEditComponent,\n        EmergencyAccessAttachmentsComponent,\n        EmergencyAccessComponent,\n        EmergencyAccessConfirmComponent,\n        EmergencyAccessTakeoverComponent,\n        EmergencyAccessViewComponent,\n        EmergencyAddEditComponent,\n        ExportComponent,\n        ExposedPasswordsReportComponent,\n        FallbackSrcDirective,\n        FamiliesForEnterpriseSetupComponent,\n        FolderAddEditComponent,\n        FooterComponent,\n        FrontendLayoutComponent,\n        GroupingsComponent,\n        HintComponent,\n        I18nPipe,\n        IconComponent,\n        ImportComponent,\n        InactiveTwoFactorReportComponent,\n        InputVerbatimDirective,\n        LinkSsoComponent,\n        LockComponent,\n        LoginComponent,\n        NavbarComponent,\n        NestedCheckboxComponent,\n        OptionsComponent,\n        OrgAccountComponent,\n        OrgAddEditComponent,\n        OrganizationBillingComponent,\n        OrganizationPlansComponent,\n        OrganizationSubscriptionComponent,\n        OrgAttachmentsComponent,\n        OrgBulkStatusComponent,\n        OrgBulkConfirmComponent,\n        OrgBulkRemoveComponent,\n        OrgCiphersComponent,\n        OrgCollectionAddEditComponent,\n        OrgCollectionsComponent,\n        OrgEntityEventsComponent,\n        OrgEntityUsersComponent,\n        OrgEventsComponent,\n        OrgExportComponent,\n        OrgExposedPasswordsReportComponent,\n        OrgImportComponent,\n        OrgInactiveTwoFactorReportComponent,\n        OrgGroupAddEditComponent,\n        OrgGroupingsComponent,\n        OrgGroupsComponent,\n        OrgManageCollectionsComponent,\n        OrgManageComponent,\n        OrgPeopleComponent,\n        OrgPolicyEditComponent,\n        OrgPoliciesComponent,\n        OrgResetPasswordComponent,\n        OrgReusedPasswordsReportComponent,\n        OrgSettingComponent,\n        OrgToolsComponent,\n        OrgTwoFactorSetupComponent,\n        OrgUserAddEditComponent,\n        OrgUserConfirmComponent,\n        OrgUserGroupsComponent,\n        OrganizationsComponent,\n        OrganizationLayoutComponent,\n        OrgUnsecuredWebsitesReportComponent,\n        OrgVaultComponent,\n        OrgWeakPasswordsReportComponent,\n        PasswordGeneratorComponent,\n        PasswordGeneratorHistoryComponent,\n        PasswordStrengthComponent,\n        PasswordRepromptComponent,\n        PaymentComponent,\n        PremiumComponent,\n        ProfileComponent,\n        PurgeVaultComponent,\n        RecoverDeleteComponent,\n        RecoverTwoFactorComponent,\n        RegisterComponent,\n        ReusedPasswordsReportComponent,\n        SearchCiphersPipe,\n        SearchPipe,\n        SelectCopyDirective,\n        SendAddEditComponent,\n        SendEffluxDatesComponent,\n        SendComponent,\n        SettingsComponent,\n        ShareComponent,\n        SponsoredFamiliesComponent,\n        SponsoringOrgRowComponent,\n        SsoComponent,\n        StopClickDirective,\n        StopPropDirective,\n        TaxInfoComponent,\n        ToolsComponent,\n        TrueFalseValueDirective,\n        TwoFactorAuthenticatorComponent,\n        TwoFactorComponent,\n        TwoFactorDuoComponent,\n        TwoFactorEmailComponent,\n        TwoFactorOptionsComponent,\n        TwoFactorRecoveryComponent,\n        TwoFactorSetupComponent,\n        TwoFactorVerifyComponent,\n        TwoFactorWebAuthnComponent,\n        TwoFactorYubiKeyComponent,\n        UnsecuredWebsitesReportComponent,\n        UpdateKeyComponent,\n        UpdateLicenseComponent,\n        UpdateTempPasswordComponent,\n        UserBillingComponent,\n        UserLayoutComponent,\n        UserSubscriptionComponent,\n        UserNamePipe,\n        VaultComponent,\n        VerifyEmailComponent,\n        VerifyEmailTokenComponent,\n        VerifyRecoverDeleteComponent,\n        WeakPasswordsReportComponent,\n        ProvidersComponent,\n        TwoFactorAuthenticationPolicyComponent,\n        MasterPasswordPolicyComponent,\n        SingleOrgPolicyComponent,\n        PasswordGeneratorPolicyComponent,\n        RequireSsoPolicyComponent,\n        PersonalOwnershipPolicyComponent,\n        DisableSendPolicyComponent,\n        SendOptionsPolicyComponent,\n        ResetPasswordPolicyComponent,\n        VaultTimeoutInputComponent,\n        AddEditCustomFieldsComponent,\n        VerifyMasterPasswordComponent,\n        RemovePasswordComponent,\n    ],\n    exports: [\n        A11yTitleDirective,\n        AvatarComponent,\n        CalloutComponent,\n        ApiActionDirective,\n        StopClickDirective,\n        StopPropDirective,\n        I18nPipe,\n        SearchPipe,\n        UserNamePipe,\n        NavbarComponent,\n        FooterComponent,\n        OrganizationPlansComponent,\n    ],\n    providers: [DatePipe, SearchPipe, UserNamePipe],\n    bootstrap: [],\n})\nexport class OssModule { }\n","import {\n    Directive,\n    ElementRef,\n    HostListener,\n    OnInit,\n} from '@angular/core';\n\n@Directive({\n    selector: '[appBoxRow]',\n})\nexport class BoxRowDirective implements OnInit {\n    el: HTMLElement = null;\n    formEls: Element[];\n\n    constructor(private elRef: ElementRef) {\n        this.el = elRef.nativeElement;\n    }\n\n    ngOnInit(): void {\n        this.formEls = Array.from(this.el.querySelectorAll('input:not([type=\"hidden\"]), select, textarea'));\n        this.formEls.forEach(formEl => {\n            formEl.addEventListener('focus', (event: Event) => {\n                this.el.classList.add('active');\n            }, false);\n\n            formEl.addEventListener('blur', (event: Event) => {\n                this.el.classList.remove('active');\n            }, false);\n        });\n    }\n\n    @HostListener('click', ['$event']) onClick(event: Event) {\n        const target = event.target as HTMLElement;\n        if (target !== this.el && !target.classList.contains('progress') &&\n            !target.classList.contains('progress-bar')) {\n            return;\n        }\n\n        if (this.formEls.length > 0) {\n            const formEl = (this.formEls[0] as HTMLElement);\n            if (formEl.tagName.toLowerCase() === 'input') {\n                const inputEl = (formEl as HTMLInputElement);\n                if (inputEl.type != null && inputEl.type.toLowerCase() === 'checkbox') {\n                    inputEl.click();\n                    return;\n                }\n            }\n            formEl.focus();\n        }\n    }\n}\n","import {\n    Pipe,\n    PipeTransform,\n} from '@angular/core';\n\nimport { CipherView } from 'jslib-common/models/view/cipherView';\n\n@Pipe({\n    name: 'searchCiphers',\n})\nexport class SearchCiphersPipe implements PipeTransform {\n    transform(ciphers: CipherView[], searchText: string, deleted: boolean = false): CipherView[] {\n        if (ciphers == null || ciphers.length === 0) {\n            return [];\n        }\n\n        if (searchText == null || searchText.length < 2) {\n            return ciphers.filter(c => {\n                return deleted !== c.isDeleted;\n            });\n        }\n\n        searchText = searchText.trim().toLowerCase();\n        return ciphers.filter(c => {\n            if (deleted !== c.isDeleted) {\n                return false;\n            }\n            if (c.name != null && c.name.toLowerCase().indexOf(searchText) > -1) {\n                return true;\n            }\n            if (searchText.length >= 8 && c.id.startsWith(searchText)) {\n                return true;\n            }\n            if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(searchText) > -1) {\n                return true;\n            }\n            if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(searchText) > -1) {\n                return true;\n            }\n\n            return false;\n        });\n    }\n}\n","import {\n    APP_INITIALIZER,\n    LOCALE_ID,\n    NgModule,\n} from '@angular/core';\n\nimport { ToasterModule } from 'angular2-toaster';\n\nimport { BroadcasterMessagingService } from '../../services/broadcasterMessaging.service';\nimport { HtmlStorageService } from '../../services/htmlStorage.service';\nimport { I18nService } from '../../services/i18n.service';\nimport { MemoryStorageService } from '../../services/memoryStorage.service';\nimport { PasswordRepromptService } from '../../services/passwordReprompt.service';\nimport { WebPlatformUtilsService } from '../../services/webPlatformUtils.service';\n\nimport { EventService } from './event.service';\nimport { OrganizationGuardService } from './organization-guard.service';\nimport { OrganizationTypeGuardService } from './organization-type-guard.service';\nimport { PolicyListService } from './policy-list.service';\nimport { RouterService } from './router.service';\n\nimport { AuthGuardService } from 'jslib-angular/services/auth-guard.service';\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\nimport { LockGuardService } from 'jslib-angular/services/lock-guard.service';\nimport { ModalService as ModalServiceAbstraction } from 'jslib-angular/services/modal.service';\nimport { UnauthGuardService } from 'jslib-angular/services/unauth-guard.service';\nimport { ValidationService } from 'jslib-angular/services/validation.service';\n\nimport { ApiService } from 'jslib-common/services/api.service';\nimport { AppIdService } from 'jslib-common/services/appId.service';\nimport { AuditService } from 'jslib-common/services/audit.service';\nimport { AuthService } from 'jslib-common/services/auth.service';\nimport { CipherService } from 'jslib-common/services/cipher.service';\nimport { CollectionService } from 'jslib-common/services/collection.service';\nimport { ConsoleLogService } from 'jslib-common/services/consoleLog.service';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\nimport { ContainerService } from 'jslib-common/services/container.service';\nimport { CryptoService } from 'jslib-common/services/crypto.service';\nimport { EnvironmentService } from 'jslib-common/services/environment.service';\nimport { EventService as EventLoggingService } from 'jslib-common/services/event.service';\nimport { ExportService } from 'jslib-common/services/export.service';\nimport { FileUploadService } from 'jslib-common/services/fileUpload.service';\nimport { FolderService } from 'jslib-common/services/folder.service';\nimport { ImportService } from 'jslib-common/services/import.service';\nimport { KeyConnectorService } from 'jslib-common/services/keyConnector.service';\nimport { NotificationsService } from 'jslib-common/services/notifications.service';\nimport { PasswordGenerationService } from 'jslib-common/services/passwordGeneration.service';\nimport { PolicyService } from 'jslib-common/services/policy.service';\nimport { SearchService } from 'jslib-common/services/search.service';\nimport { SendService } from 'jslib-common/services/send.service';\nimport { SettingsService } from 'jslib-common/services/settings.service';\nimport { StateService } from 'jslib-common/services/state.service';\nimport { SyncService } from 'jslib-common/services/sync.service';\nimport { TokenService } from 'jslib-common/services/token.service';\nimport { TotpService } from 'jslib-common/services/totp.service';\nimport { UserService } from 'jslib-common/services/user.service';\nimport { UserVerificationService } from 'jslib-common/services/userVerification.service';\nimport { VaultTimeoutService } from 'jslib-common/services/vaultTimeout.service';\nimport { WebCryptoFunctionService } from 'jslib-common/services/webCryptoFunction.service';\n\nimport { ApiService as ApiServiceAbstraction } from 'jslib-common/abstractions/api.service';\nimport { AuditService as AuditServiceAbstraction } from 'jslib-common/abstractions/audit.service';\nimport { AuthService as AuthServiceAbstraction } from 'jslib-common/abstractions/auth.service';\nimport { CipherService as CipherServiceAbstraction } from 'jslib-common/abstractions/cipher.service';\nimport { CollectionService as CollectionServiceAbstraction } from 'jslib-common/abstractions/collection.service';\nimport { CryptoService as CryptoServiceAbstraction } from 'jslib-common/abstractions/crypto.service';\nimport { CryptoFunctionService as CryptoFunctionServiceAbstraction } from 'jslib-common/abstractions/cryptoFunction.service';\nimport { EnvironmentService as EnvironmentServiceAbstraction, Urls } from 'jslib-common/abstractions/environment.service';\nimport { EventService as EventLoggingServiceAbstraction } from 'jslib-common/abstractions/event.service';\nimport { ExportService as ExportServiceAbstraction } from 'jslib-common/abstractions/export.service';\nimport { FileUploadService as FileUploadServiceAbstraction }  from 'jslib-common/abstractions/fileUpload.service';\nimport { FolderService as FolderServiceAbstraction } from 'jslib-common/abstractions/folder.service';\nimport { I18nService as I18nServiceAbstraction } from 'jslib-common/abstractions/i18n.service';\nimport { ImportService as ImportServiceAbstraction } from 'jslib-common/abstractions/import.service';\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from 'jslib-common/abstractions/keyConnector.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService as MessagingServiceAbstraction } from 'jslib-common/abstractions/messaging.service';\nimport { NotificationsService as NotificationsServiceAbstraction } from 'jslib-common/abstractions/notifications.service';\nimport {\n    PasswordGenerationService as PasswordGenerationServiceAbstraction,\n} from 'jslib-common/abstractions/passwordGeneration.service';\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from 'jslib-common/abstractions/passwordReprompt.service';\nimport { PlatformUtilsService as PlatformUtilsServiceAbstraction } from 'jslib-common/abstractions/platformUtils.service';\nimport { PolicyService as PolicyServiceAbstraction } from 'jslib-common/abstractions/policy.service';\nimport { SearchService as SearchServiceAbstraction } from 'jslib-common/abstractions/search.service';\nimport { SendService as SendServiceAbstraction } from 'jslib-common/abstractions/send.service';\nimport { SettingsService as SettingsServiceAbstraction } from 'jslib-common/abstractions/settings.service';\nimport { StateService as StateServiceAbstraction } from 'jslib-common/abstractions/state.service';\nimport { StorageService as StorageServiceAbstraction } from 'jslib-common/abstractions/storage.service';\nimport { SyncService as SyncServiceAbstraction } from 'jslib-common/abstractions/sync.service';\nimport { TokenService as TokenServiceAbstraction } from 'jslib-common/abstractions/token.service';\nimport { TotpService as TotpServiceAbstraction } from 'jslib-common/abstractions/totp.service';\nimport { UserService as UserServiceAbstraction } from 'jslib-common/abstractions/user.service';\nimport { UserVerificationService as UserVerificationServiceAbstraction } from 'jslib-common/abstractions/userVerification.service';\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from 'jslib-common/abstractions/vaultTimeout.service';\nimport { ModalService } from './modal.service';\n\nimport { ThemeType } from 'jslib-common/enums/themeType';\n\nconst i18nService = new I18nService(window.navigator.language, 'locales');\nconst stateService = new StateService();\nconst broadcasterService = new BroadcasterService();\nconst messagingService = new BroadcasterMessagingService(broadcasterService);\nconst consoleLogService = new ConsoleLogService(false);\nconst platformUtilsService = new WebPlatformUtilsService(i18nService, messagingService, consoleLogService, () => storageService);\nconst storageService: StorageServiceAbstraction = new HtmlStorageService(platformUtilsService);\nconst secureStorageService: StorageServiceAbstraction = new MemoryStorageService();\nconst cryptoFunctionService: CryptoFunctionServiceAbstraction = new WebCryptoFunctionService(window,\n    platformUtilsService);\nconst cryptoService = new CryptoService(storageService,\n    platformUtilsService.isDev() ? storageService : secureStorageService, cryptoFunctionService, platformUtilsService,\n    consoleLogService);\nconst tokenService = new TokenService(storageService);\nconst appIdService = new AppIdService(storageService);\nconst environmentService = new EnvironmentService(storageService);\nconst apiService = new ApiService(tokenService, platformUtilsService, environmentService,\n    async (expired: boolean) => messagingService.send('logout', { expired: expired }));\nconst userService = new UserService(tokenService, storageService);\nconst settingsService = new SettingsService(userService, storageService);\nexport let searchService: SearchService = null;\nconst fileUploadService = new FileUploadService(consoleLogService, apiService);\nconst cipherService = new CipherService(cryptoService, userService, settingsService,\n    apiService, fileUploadService, storageService, i18nService, () => searchService, consoleLogService);\nconst folderService = new FolderService(cryptoService, userService, apiService, storageService,\n    i18nService, cipherService);\nconst collectionService = new CollectionService(cryptoService, userService, storageService, i18nService);\nsearchService = new SearchService(cipherService, consoleLogService, i18nService);\nconst policyService = new PolicyService(userService, storageService, apiService);\nconst sendService = new SendService(cryptoService, userService, apiService, fileUploadService, storageService,\n    i18nService, cryptoFunctionService);\nconst keyConnectorService = new KeyConnectorService(storageService, userService, cryptoService, apiService,\n    tokenService, consoleLogService);\nconst vaultTimeoutService = new VaultTimeoutService(cipherService, folderService, collectionService,\n    cryptoService, platformUtilsService, storageService, messagingService, searchService, userService, tokenService,\n    policyService, keyConnectorService, null, async () => messagingService.send('logout', { expired: false }));\nconst syncService = new SyncService(userService, apiService, settingsService,\n    folderService, cipherService, cryptoService, collectionService, storageService, messagingService, policyService,\n    sendService, consoleLogService, tokenService, keyConnectorService,\n    async (expired: boolean) => messagingService.send('logout', { expired: expired }));\nconst passwordGenerationService = new PasswordGenerationService(cryptoService, storageService, policyService);\nconst totpService = new TotpService(storageService, cryptoFunctionService, consoleLogService);\nconst containerService = new ContainerService(cryptoService);\nconst authService = new AuthService(cryptoService, apiService,\n    userService, tokenService, appIdService, i18nService, platformUtilsService, messagingService, vaultTimeoutService,\n    consoleLogService, cryptoFunctionService, environmentService, keyConnectorService);\nconst exportService = new ExportService(folderService, cipherService, apiService, cryptoService);\nconst importService = new ImportService(cipherService, folderService, apiService, i18nService, collectionService,\n    platformUtilsService, cryptoService);\nconst notificationsService = new NotificationsService(userService, syncService, appIdService, apiService, vaultTimeoutService,\n    environmentService, async () => messagingService.send('logout', { expired: true }), consoleLogService);\nconst auditService = new AuditService(cryptoFunctionService, apiService);\nconst eventLoggingService = new EventLoggingService(storageService, apiService, userService, cipherService, consoleLogService);\nconst userVerificationService = new UserVerificationService(cryptoService, i18nService, apiService);\n\ncontainerService.attachToWindow(window);\n\nexport function initFactory(): Function {\n    function getBaseUrl() {\n        // If the base URL is `https://bitwarden.example.com/base/path/`,\n        // `window.location.href` should have one of the following forms:\n        //\n        // - `https://bitwarden.example.com/base/path/`\n        // - `https://bitwarden.example.com/base/path/#/some/route[?queryParam=...]`\n        //\n        // We want to get to just `https://bitwarden.example.com/base/path`.\n        let baseUrl = window.location.href;\n        baseUrl = baseUrl.replace(/#.*/, '');  // Strip off `#` and everything after.\n        baseUrl = baseUrl.replace(/\\/+$/, ''); // Trim any trailing `/` chars.\n        return baseUrl;\n    }\n    return async () => {\n        await (storageService as HtmlStorageService).init();\n\n        environmentService.setUrls({ base: getBaseUrl() }, false);\n\n        setTimeout(() => notificationsService.init(), 3000);\n\n        vaultTimeoutService.init(true);\n        const locale = await storageService.get<string>(ConstantsService.localeKey);\n        await i18nService.init(locale);\n        eventLoggingService.init(true);\n        authService.init();\n        const htmlEl = window.document.documentElement;\n        htmlEl.classList.add('locale_' + i18nService.translationLocale);\n\n        // Initial theme is set in index.html which must be updated if there are any changes to theming logic\n        platformUtilsService.onDefaultSystemThemeChange(async sysTheme => {\n            const bwTheme = await storageService.get<ThemeType>(ConstantsService.themeKey);\n            if (bwTheme === ThemeType.System) {\n                htmlEl.classList.remove('theme_' + ThemeType.Light, 'theme_' + ThemeType.Dark);\n                htmlEl.classList.add('theme_' + sysTheme);\n            }\n        });\n\n        stateService.save(ConstantsService.disableFaviconKey,\n            await storageService.get<boolean>(ConstantsService.disableFaviconKey));\n        stateService.save('enableGravatars', await storageService.get<boolean>('enableGravatars'));\n    };\n}\n\n@NgModule({\n    imports: [\n        ToasterModule,\n    ],\n    declarations: [],\n    providers: [\n        ValidationService,\n        AuthGuardService,\n        OrganizationGuardService,\n        OrganizationTypeGuardService,\n        UnauthGuardService,\n        RouterService,\n        EventService,\n        LockGuardService,\n        PolicyListService,\n        { provide: ModalServiceAbstraction, useClass: ModalService },\n        { provide: AuditServiceAbstraction, useValue: auditService },\n        { provide: AuthServiceAbstraction, useValue: authService },\n        { provide: CipherServiceAbstraction, useValue: cipherService },\n        { provide: FolderServiceAbstraction, useValue: folderService },\n        { provide: LogService, useValue: consoleLogService },\n        { provide: CollectionServiceAbstraction, useValue: collectionService },\n        { provide: EnvironmentServiceAbstraction, useValue: environmentService },\n        { provide: TotpServiceAbstraction, useValue: totpService },\n        { provide: TokenServiceAbstraction, useValue: tokenService },\n        { provide: I18nServiceAbstraction, useValue: i18nService },\n        { provide: CryptoServiceAbstraction, useValue: cryptoService },\n        { provide: PlatformUtilsServiceAbstraction, useValue: platformUtilsService },\n        { provide: PasswordGenerationServiceAbstraction, useValue: passwordGenerationService },\n        { provide: ApiServiceAbstraction, useValue: apiService },\n        { provide: FileUploadServiceAbstraction, useValue: fileUploadService },\n        { provide: SyncServiceAbstraction, useValue: syncService },\n        { provide: UserServiceAbstraction, useValue: userService },\n        { provide: MessagingServiceAbstraction, useValue: messagingService },\n        { provide: BroadcasterService, useValue: broadcasterService },\n        { provide: SettingsServiceAbstraction, useValue: settingsService },\n        { provide: VaultTimeoutServiceAbstraction, useValue: vaultTimeoutService },\n        { provide: StorageServiceAbstraction, useValue: storageService },\n        { provide: StateServiceAbstraction, useValue: stateService },\n        { provide: ExportServiceAbstraction, useValue: exportService },\n        { provide: SearchServiceAbstraction, useValue: searchService },\n        { provide: ImportServiceAbstraction, useValue: importService },\n        { provide: NotificationsServiceAbstraction, useValue: notificationsService },\n        { provide: CryptoFunctionServiceAbstraction, useValue: cryptoFunctionService },\n        { provide: EventLoggingServiceAbstraction, useValue: eventLoggingService },\n        { provide: PolicyServiceAbstraction, useValue: policyService },\n        { provide: SendServiceAbstraction, useValue: sendService },\n        { provide: KeyConnectorServiceAbstraction, useValue: keyConnectorService },\n        { provide: UserVerificationServiceAbstraction, useValue: userVerificationService },\n        { provide: PasswordRepromptServiceAbstraction, useClass: PasswordRepromptService },\n        { provide: LogService, useValue: consoleLogService },\n        {\n            provide: APP_INITIALIZER,\n            useFactory: initFactory,\n            deps: [],\n            multi: true,\n        },\n        {\n            provide: LOCALE_ID,\n            useFactory: () => i18nService.translationLocale,\n            deps: [],\n        },\n    ],\n})\nexport class ServicesModule {\n}\n","import { MessagingService } from 'jslib-common/abstractions/messaging.service';\n\nimport { BroadcasterService } from 'jslib-angular/services/broadcaster.service';\n\nexport class BroadcasterMessagingService implements MessagingService {\n    constructor(private broadcasterService: BroadcasterService) { }\n\n    send(subscriber: string, arg: any = {}) {\n        const message = Object.assign({}, { command: subscriber }, arg);\n        this.broadcasterService.send(message);\n    }\n}\n","import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nexport class HtmlStorageService implements StorageService {\n    private localStorageKeys = new Set(['appId', 'anonymousAppId', 'rememberedEmail', 'passwordGenerationOptions',\n        ConstantsService.disableFaviconKey, 'rememberEmail', 'enableGravatars', 'enableFullWidth',\n        ConstantsService.localeKey, ConstantsService.autoConfirmFingerprints,\n        ConstantsService.vaultTimeoutKey, ConstantsService.vaultTimeoutActionKey, ConstantsService.ssoCodeVerifierKey,\n        ConstantsService.ssoStateKey, 'ssoOrgIdentifier', ConstantsService.themeKey]);\n    private localStorageStartsWithKeys = ['twoFactorToken_', ConstantsService.collapsedGroupingsKey + '_'];\n    private memoryStorageStartsWithKeys = ['ciphers_', 'folders_', 'collections_', 'settings_', 'lastSync_'];\n    private memoryStorage = new Map<string, string>();\n\n    constructor(private platformUtilsService: PlatformUtilsService) { }\n\n    async init() {\n        // LockOption -> VaultTimeout (uses the same legacy string value for backwards compat)\n        const vaultTimeout = await this.get<number>(ConstantsService.vaultTimeoutKey);\n        if (vaultTimeout == null && !this.platformUtilsService.isDev()) {\n            await this.save(ConstantsService.vaultTimeoutKey, 15);\n        }\n\n        // Default Action to lock\n        const vaultTimeoutAction = await this.get<string>(ConstantsService.vaultTimeoutActionKey);\n        if (vaultTimeoutAction == null) {\n            await this.save(ConstantsService.vaultTimeoutActionKey, 'lock');\n        }\n    }\n\n    get<T>(key: string): Promise<T> {\n        let json: string = null;\n        if (this.isLocalStorage(key)) {\n            json = window.localStorage.getItem(key);\n        } else if (this.isMemoryStorage(key)) {\n            json = this.memoryStorage.get(key);\n        } else {\n            json = window.sessionStorage.getItem(key);\n        }\n        if (json != null) {\n            const obj = JSON.parse(json);\n            return Promise.resolve(obj as T);\n        }\n        return Promise.resolve(null);\n    }\n\n    async has(key: string): Promise<boolean> {\n        return await this.get(key) != null;\n    }\n\n    save(key: string, obj: any): Promise<any> {\n        if (obj == null) {\n            return this.remove(key);\n        }\n\n        if (obj instanceof Set) {\n            obj = Array.from(obj);\n        }\n\n        const json = JSON.stringify(obj);\n        if (this.isLocalStorage(key)) {\n            window.localStorage.setItem(key, json);\n        } else if (this.isMemoryStorage(key)) {\n            this.memoryStorage.set(key, json);\n        } else {\n            window.sessionStorage.setItem(key, json);\n        }\n        return Promise.resolve();\n    }\n\n    remove(key: string): Promise<any> {\n        if (this.isLocalStorage(key)) {\n            window.localStorage.removeItem(key);\n        } else if (this.isMemoryStorage(key)) {\n            this.memoryStorage.delete(key);\n        } else {\n            window.sessionStorage.removeItem(key);\n        }\n        return Promise.resolve();\n    }\n\n    private isLocalStorage(key: string): boolean {\n        if (this.localStorageKeys.has(key)) {\n            return true;\n        }\n        for (const swKey of this.localStorageStartsWithKeys) {\n            if (key.startsWith(swKey)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    private isMemoryStorage(key: string): boolean {\n        for (const swKey of this.memoryStorageStartsWithKeys) {\n            if (key.startsWith(swKey)) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n","import { I18nService as BaseI18nService } from 'jslib-common/services/i18n.service';\n\nexport class I18nService extends BaseI18nService {\n    constructor(systemLanguage: string, localesDirectory: string) {\n        super(systemLanguage || 'en-US', localesDirectory, async (formattedLocale: string) => {\n            const filePath = this.localesDirectory + '/' + formattedLocale + '/messages.json?cache=' +\n                process.env.CACHE_TAG;\n            const localesResult = await fetch(filePath);\n            const locales = await localesResult.json();\n            return locales;\n        });\n\n        // Please leave 'en' where it is, as it's our fallback language in case no translation can be found\n        this.supportedTranslationLocales = [\n            'en', 'az', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'eo', 'en-GB', 'en-IN', 'es', 'et', 'fi', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'kn', 'ko', 'lv', 'ml', 'nb',\n            'nl', 'pl', 'pt-PT', 'pt-BR', 'ro', 'ru', 'sk', 'sr', 'sv', 'tr', 'uk', 'zh-CN', 'zh-TW',\n        ];\n    }\n}\n","import { I18nService as I18nServiceAbstraction } from '../abstractions/i18n.service';\n\nexport class I18nService implements I18nServiceAbstraction {\n    locale: string;\n    // First locale is the default (English)\n    supportedTranslationLocales: string[] = ['en'];\n    translationLocale: string;\n    collator: Intl.Collator;\n    localeNames = new Map<string, string>([\n        ['af', 'Afrikaans'],\n        ['az', 'Azərbaycanca'],\n        ['be', 'Беларуская'],\n        ['bg', 'български'],\n        ['ca', 'català'],\n        ['cs', 'čeština'],\n        ['da', 'dansk'],\n        ['de', 'Deutsch'],\n        ['el', 'Ελληνικά'],\n        ['en', 'English'],\n        ['en-GB', 'English (British)'],\n        ['eo', 'Esperanto'],\n        ['es', 'español'],\n        ['et', 'eesti'],\n        ['fa', 'فارسی'],\n        ['fi', 'suomi'],\n        ['fr', 'français'],\n        ['he', 'עברית'],\n        ['hi', 'हिन्दी'],\n        ['hr', 'hrvatski'],\n        ['hu', 'magyar'],\n        ['id', 'Bahasa Indonesia'],\n        ['it', 'italiano'],\n        ['ja', '日本語'],\n        ['ko', '한국어'],\n        ['lv', 'Latvietis'],\n        ['ml', 'മലയാളം'],\n        ['nb', 'norsk (bokmål)'],\n        ['nl', 'Nederlands'],\n        ['pl', 'polski'],\n        ['pt-BR', 'português do Brasil'],\n        ['pt-PT', 'português'],\n        ['ro', 'română'],\n        ['ru', 'русский'],\n        ['sk', 'slovenčina'],\n        ['sr', 'Српски'],\n        ['sv', 'svenska'],\n        ['th', 'ไทย'],\n        ['tr', 'Türkçe'],\n        ['uk', 'українська'],\n        ['vi', 'Tiếng Việt'],\n        ['zh-CN', '中文(中国大陆)'],\n        ['zh-TW', '中文(台灣)'],\n    ]);\n\n    protected inited: boolean;\n    protected defaultMessages: any = {};\n    protected localeMessages: any = {};\n\n    constructor(protected systemLanguage: string, protected localesDirectory: string,\n        protected getLocalesJson: (formattedLocale: string) => Promise<any>) {\n        this.systemLanguage = systemLanguage.replace('_', '-');\n    }\n\n    async init(locale?: string) {\n        if (this.inited) {\n            throw new Error('i18n already initialized.');\n        }\n        if (this.supportedTranslationLocales == null || this.supportedTranslationLocales.length === 0) {\n            throw new Error('supportedTranslationLocales not set.');\n        }\n\n        this.inited = true;\n        this.locale = this.translationLocale = locale != null ? locale : this.systemLanguage;\n\n        try {\n            this.collator = new Intl.Collator(this.locale, { numeric: true, sensitivity: 'base' });\n        } catch {\n            this.collator = null;\n        }\n\n        if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n            this.translationLocale = this.translationLocale.slice(0, 2);\n\n            if (this.supportedTranslationLocales.indexOf(this.translationLocale) === -1) {\n                this.translationLocale = this.supportedTranslationLocales[0];\n            }\n        }\n\n        if (this.localesDirectory != null) {\n            await this.loadMessages(this.translationLocale, this.localeMessages);\n            if (this.translationLocale !== this.supportedTranslationLocales[0]) {\n                await this.loadMessages(this.supportedTranslationLocales[0], this.defaultMessages);\n            }\n        }\n    }\n\n    t(id: string, p1?: string, p2?: string, p3?: string): string {\n        return this.translate(id, p1, p2, p3);\n    }\n\n    translate(id: string, p1?: string, p2?: string, p3?: string): string {\n        let result: string;\n        if (this.localeMessages.hasOwnProperty(id) && this.localeMessages[id]) {\n            result = this.localeMessages[id];\n        } else if (this.defaultMessages.hasOwnProperty(id) && this.defaultMessages[id]) {\n            result = this.defaultMessages[id];\n        } else {\n            result = '';\n        }\n\n        if (result !== '') {\n            if (p1 != null) {\n                result = result.split('__$1__').join(p1);\n            }\n            if (p2 != null) {\n                result = result.split('__$2__').join(p2);\n            }\n            if (p3 != null) {\n                result = result.split('__$3__').join(p3);\n            }\n        }\n\n        return result;\n    }\n\n    private async loadMessages(locale: string, messagesObj: any): Promise<any> {\n        const formattedLocale = locale.replace('-', '_');\n        const locales = await this.getLocalesJson(formattedLocale);\n        for (const prop in locales) {\n            if (!locales.hasOwnProperty(prop)) {\n                continue;\n            }\n            messagesObj[prop] = locales[prop].message;\n\n            if (locales[prop].placeholders) {\n                for (const placeProp in locales[prop].placeholders) {\n                    if (!locales[prop].placeholders.hasOwnProperty(placeProp) ||\n                        !locales[prop].placeholders[placeProp].content) {\n                        continue;\n                    }\n\n                    const replaceToken = '\\\\$' + placeProp.toUpperCase() + '\\\\$';\n                    let replaceContent = locales[prop].placeholders[placeProp].content;\n                    if (replaceContent === '$1' || replaceContent === '$2' || replaceContent === '$3') {\n                        replaceContent = '__$' + replaceContent + '__';\n                    }\n                    messagesObj[prop] = messagesObj[prop].replace(new RegExp(replaceToken, 'g'), replaceContent);\n                }\n            }\n        }\n    }\n\n}\n","import { StorageService } from 'jslib-common/abstractions/storage.service';\n\nexport class MemoryStorageService implements StorageService {\n    private store = new Map<string, any>();\n\n    get<T>(key: string): Promise<T> {\n        if (this.store.has(key)) {\n            const obj = this.store.get(key);\n            return Promise.resolve(obj as T);\n        }\n        return Promise.resolve(null);\n    }\n\n    async has(key: string): Promise<boolean> {\n        return this.get(key) != null;\n    }\n\n    save(key: string, obj: any): Promise<any> {\n        if (obj == null) {\n            return this.remove(key);\n        }\n        this.store.set(key, obj);\n        return Promise.resolve();\n    }\n\n    remove(key: string): Promise<any> {\n        this.store.delete(key);\n        return Promise.resolve();\n    }\n}\n","import { Injectable } from '@angular/core';\n\nimport { PasswordRepromptService as BasePasswordRepromptService } from 'jslib-angular/services/passwordReprompt.service';\nimport { PasswordRepromptComponent } from '../app/components/password-reprompt.component';\n\n@Injectable()\nexport class PasswordRepromptService extends BasePasswordRepromptService {\n    component = PasswordRepromptComponent;\n}\n","import { Injectable } from '@angular/core';\n\nimport { KeyConnectorService } from 'jslib-common/abstractions/keyConnector.service';\nimport { PasswordRepromptService as PasswordRepromptServiceAbstraction } from 'jslib-common/abstractions/passwordReprompt.service';\n\nimport { PasswordRepromptComponent } from '../components/password-reprompt.component';\nimport { ModalService } from './modal.service';\n\n@Injectable()\nexport class PasswordRepromptService implements PasswordRepromptServiceAbstraction {\n    protected component = PasswordRepromptComponent;\n\n    constructor(private modalService: ModalService, private keyConnectorService: KeyConnectorService) { }\n\n    protectedFields() {\n        return ['TOTP', 'Password', 'H_Field', 'Card Number', 'Security Code'];\n    }\n\n    async showPasswordPrompt() {\n        if (!await this.enabled()) {\n            return true;\n        }\n\n        const ref = this.modalService.open(this.component, {allowMultipleModals: true});\n\n        if (ref == null) {\n            return false;\n        }\n\n        const result = await ref.onClosedPromise();\n        return result === true;\n    }\n\n    async enabled() {\n        return !await this.keyConnectorService.getUsesKeyConnector();\n    }\n}\n","import Swal, { SweetAlertIcon } from 'sweetalert2';\n\nimport { DeviceType } from 'jslib-common/enums/deviceType';\nimport { ThemeType } from 'jslib-common/enums/themeType';\n\nimport { I18nService } from 'jslib-common/abstractions/i18n.service';\nimport { LogService } from 'jslib-common/abstractions/log.service';\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\nimport { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';\nimport { StorageService } from 'jslib-common/abstractions/storage.service';\n\nimport { ConstantsService } from 'jslib-common/services/constants.service';\n\nexport class WebPlatformUtilsService implements PlatformUtilsService {\n    identityClientId: string = 'web';\n\n    private browserCache: DeviceType = null;\n    private prefersColorSchemeDark = window.matchMedia('(prefers-color-scheme: dark)');\n\n    constructor(private i18nService: I18nService, private messagingService: MessagingService,\n        private logService: LogService, private storageService: () => StorageService) { }\n\n    getDevice(): DeviceType {\n        if (this.browserCache != null) {\n            return this.browserCache;\n        }\n\n        if (navigator.userAgent.indexOf(' Firefox/') !== -1 || navigator.userAgent.indexOf(' Gecko/') !== -1) {\n            this.browserCache = DeviceType.FirefoxBrowser;\n        } else if (navigator.userAgent.indexOf(' OPR/') >= 0) {\n            this.browserCache = DeviceType.OperaBrowser;\n        } else if (navigator.userAgent.indexOf(' Edg/') !== -1) {\n            this.browserCache = DeviceType.EdgeBrowser;\n        } else if (navigator.userAgent.indexOf(' Vivaldi/') !== -1) {\n            this.browserCache = DeviceType.VivaldiBrowser;\n        } else if (navigator.userAgent.indexOf(' Safari/') !== -1 && navigator.userAgent.indexOf('Chrome') === -1) {\n            this.browserCache = DeviceType.SafariBrowser;\n        } else if ((window as any).chrome && navigator.userAgent.indexOf(' Chrome/') !== -1) {\n            this.browserCache = DeviceType.ChromeBrowser;\n        } else if (navigator.userAgent.indexOf(' Trident/') !== -1) {\n            this.browserCache = DeviceType.IEBrowser;\n        } else {\n            this.browserCache = DeviceType.UnknownBrowser;\n        }\n\n        return this.browserCache;\n    }\n\n    getDeviceString(): string {\n        const device = DeviceType[this.getDevice()].toLowerCase();\n        return device.replace('browser', '');\n    }\n\n    isFirefox(): boolean {\n        return this.getDevice() === DeviceType.FirefoxBrowser;\n    }\n\n    isChrome(): boolean {\n        return this.getDevice() === DeviceType.ChromeBrowser;\n    }\n\n    isEdge(): boolean {\n        return this.getDevice() === DeviceType.EdgeBrowser;\n    }\n\n    isOpera(): boolean {\n        return this.getDevice() === DeviceType.OperaBrowser;\n    }\n\n    isVivaldi(): boolean {\n        return this.getDevice() === DeviceType.VivaldiBrowser;\n    }\n\n    isSafari(): boolean {\n        return this.getDevice() === DeviceType.SafariBrowser;\n    }\n\n    isIE(): boolean {\n        return this.getDevice() === DeviceType.IEBrowser;\n    }\n\n    isMacAppStore(): boolean {\n        return false;\n    }\n\n    isViewOpen(): Promise<boolean> {\n        return Promise.resolve(false);\n    }\n\n    launchUri(uri: string, options?: any): void {\n        const a = document.createElement('a');\n        a.href = uri;\n        if (options == null || !options.sameWindow) {\n            a.target = '_blank';\n            a.rel = 'noreferrer noopener';\n        }\n        a.classList.add('d-none');\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n    }\n\n    saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void {\n        let blob: Blob = null;\n        let type: string = null;\n        const fileNameLower = fileName.toLowerCase();\n        let doDownload = true;\n        if (fileNameLower.endsWith('.pdf')) {\n            type = 'application/pdf';\n            doDownload = false;\n        } else if (fileNameLower.endsWith('.xlsx')) {\n            type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n        } else if (fileNameLower.endsWith('.docx')) {\n            type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n        } else if (fileNameLower.endsWith('.pptx')) {\n            type = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';\n        } else if (fileNameLower.endsWith('.csv')) {\n            type = 'text/csv';\n        } else if (fileNameLower.endsWith('.png')) {\n            type = 'image/png';\n        } else if (fileNameLower.endsWith('.jpg') || fileNameLower.endsWith('.jpeg')) {\n            type = 'image/jpeg';\n        } else if (fileNameLower.endsWith('.gif')) {\n            type = 'image/gif';\n        }\n        if (type != null) {\n            blobOptions = blobOptions || {};\n            if (blobOptions.type == null) {\n                blobOptions.type = type;\n            }\n        }\n        if (blobOptions != null && !this.isIE()) {\n            blob = new Blob([blobData], blobOptions);\n        } else {\n            blob = new Blob([blobData]);\n        }\n        if (navigator.msSaveOrOpenBlob) {\n            navigator.msSaveBlob(blob, fileName);\n        } else {\n            const a = win.document.createElement('a');\n            if (doDownload) {\n                a.download = fileName;\n            } else if (!this.isSafari()) {\n                a.target = '_blank';\n            }\n            a.href = URL.createObjectURL(blob);\n            a.style.position = 'fixed';\n            win.document.body.appendChild(a);\n            a.click();\n            win.document.body.removeChild(a);\n        }\n    }\n\n    getApplicationVersion(): Promise<string> {\n        return Promise.resolve(process.env.APPLICATION_VERSION || '-');\n    }\n\n    supportsWebAuthn(win: Window): boolean {\n        return (typeof (PublicKeyCredential) !== 'undefined');\n    }\n\n    supportsDuo(): boolean {\n        return true;\n    }\n\n    showToast(type: 'error' | 'success' | 'warning' | 'info', title: string, text: string | string[],\n        options?: any): void {\n        this.messagingService.send('showToast', {\n            text: text,\n            title: title,\n            type: type,\n            options: options,\n        });\n    }\n\n    async showDialog(body: string, title?: string, confirmText?: string, cancelText?: string, type?: string,\n        bodyIsHtml: boolean = false) {\n        let iconClasses: string = null;\n        if (type != null) {\n            // If you add custom types to this part, the type to SweetAlertIcon cast below needs to be changed.\n            switch (type) {\n                case 'success':\n                    iconClasses = 'fa-check text-success';\n                    break;\n                case 'warning':\n                    iconClasses = 'fa-warning text-warning';\n                    break;\n                case 'error':\n                    iconClasses = 'fa-bolt text-danger';\n                    break;\n                case 'info':\n                    iconClasses = 'fa-info-circle text-info';\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        const bootstrapModal = document.querySelector('div.modal');\n        if (bootstrapModal != null) {\n            bootstrapModal.removeAttribute('tabindex');\n        }\n\n        const iconHtmlStr = iconClasses != null ? `<i class=\"swal-custom-icon fa ${iconClasses}\"></i>` : undefined;\n        const confirmed = await Swal.fire({\n            heightAuto: false,\n            buttonsStyling: false,\n            icon: type as SweetAlertIcon, // required to be any of the SweetAlertIcons to output the iconHtml.\n            iconHtml: iconHtmlStr,\n            text: bodyIsHtml ? null : body,\n            html: bodyIsHtml ? body : null,\n            titleText: title,\n            showCancelButton: (cancelText != null),\n            cancelButtonText: cancelText,\n            showConfirmButton: true,\n            confirmButtonText: confirmText == null ? this.i18nService.t('ok') : confirmText,\n        });\n\n        if (bootstrapModal != null) {\n            bootstrapModal.setAttribute('tabindex', '-1');\n        }\n\n        return confirmed.value;\n    }\n\n    isDev(): boolean {\n        return false;\n    }\n\n    isSelfHost(): boolean {\n        return false;\n    }\n\n    copyToClipboard(text: string, options?: any): void | boolean {\n        let win = window;\n        let doc = window.document;\n        if (options && (options.window || options.win)) {\n            win = options.window || options.win;\n            doc = win.document;\n        } else if (options && options.doc) {\n            doc = options.doc;\n        }\n        if ((win as any).clipboardData && (win as any).clipboardData.setData) {\n            // IE specific code path to prevent textarea being shown while dialog is visible.\n            (win as any).clipboardData.setData('Text', text);\n        } else if (doc.queryCommandSupported && doc.queryCommandSupported('copy')) {\n            const textarea = doc.createElement('textarea');\n            textarea.textContent = text;\n            // Prevent scrolling to bottom of page in MS Edge.\n            textarea.style.position = 'fixed';\n            let copyEl = doc.body;\n            // For some reason copy command won't work when modal is open if appending to body\n            if (doc.body.classList.contains('modal-open')) {\n                copyEl = doc.body.querySelector<HTMLElement>('.modal');\n            }\n            copyEl.appendChild(textarea);\n            textarea.select();\n            let success = false;\n            try {\n                // Security exception may be thrown by some browsers.\n                success = doc.execCommand('copy');\n                if (!success) {\n                    this.logService.debug('Copy command unsupported or disabled.');\n                }\n            } catch (e) {\n                // tslint:disable-next-line\n                console.warn('Copy to clipboard failed.', e);\n            } finally {\n                copyEl.removeChild(textarea);\n            }\n            return success;\n        }\n    }\n\n    readFromClipboard(options?: any): Promise<string> {\n        throw new Error('Cannot read from clipboard on web.');\n    }\n\n    supportsBiometric() {\n        return Promise.resolve(false);\n    }\n\n    authenticateBiometric() {\n        return Promise.resolve(false);\n    }\n\n    supportsSecureStorage() {\n        return false;\n    }\n\n    getDefaultSystemTheme(): Promise<ThemeType.Light | ThemeType.Dark> {\n        return Promise.resolve(this.prefersColorSchemeDark.matches ? ThemeType.Dark : ThemeType.Light);\n    }\n\n    async getEffectiveTheme(): Promise<ThemeType.Light | ThemeType.Dark> {\n        const theme = await this.storageService().get<ThemeType>(ConstantsService.themeKey);\n        if (theme === ThemeType.Dark) {\n            return ThemeType.Dark;\n        } else if (theme === ThemeType.System) {\n            return this.getDefaultSystemTheme();\n        } else {\n            return ThemeType.Light;\n        }\n    }\n\n    onDefaultSystemThemeChange(callback: ((theme: ThemeType.Light | ThemeType.Dark) => unknown)) {\n        try {\n            this.prefersColorSchemeDark.addEventListener('change', ({ matches }) => {\n                callback(matches ? ThemeType.Dark : ThemeType.Light);\n            });\n        } catch (e) {\n            // Safari older than v14\n            this.prefersColorSchemeDark.addListener(ev => {\n                callback(ev.matches ? ThemeType.Dark : ThemeType.Light);\n            });\n        }\n    }\n}\n","import { DeviceType } from '../enums/deviceType';\nimport { PolicyType } from '../enums/policyType';\n\nimport { ApiService as ApiServiceAbstraction } from '../abstractions/api.service';\nimport { EnvironmentService } from '../abstractions/environment.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { TokenService } from '../abstractions/token.service';\n\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\nimport { BitPayInvoiceRequest } from '../models/request/bitPayInvoiceRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { DeleteRecoverRequest } from '../models/request/deleteRecoverRequest';\nimport { EmailRequest } from '../models/request/emailRequest';\nimport { EmailTokenRequest } from '../models/request/emailTokenRequest';\nimport { EmergencyAccessAcceptRequest } from '../models/request/emergencyAccessAcceptRequest';\nimport { EmergencyAccessConfirmRequest } from '../models/request/emergencyAccessConfirmRequest';\nimport { EmergencyAccessInviteRequest } from '../models/request/emergencyAccessInviteRequest';\nimport { EmergencyAccessPasswordRequest } from '../models/request/emergencyAccessPasswordRequest';\nimport { EmergencyAccessUpdateRequest } from '../models/request/emergencyAccessUpdateRequest';\nimport { EventRequest } from '../models/request/eventRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { GroupRequest } from '../models/request/groupRequest';\nimport { IapCheckRequest } from '../models/request/iapCheckRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportDirectoryRequest } from '../models/request/importDirectoryRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KdfRequest } from '../models/request/kdfRequest';\nimport { KeysRequest } from '../models/request/keysRequest';\nimport { OrganizationSponsorshipCreateRequest } from '../models/request/organization/organizationSponsorshipCreateRequest';\nimport { OrganizationSponsorshipRedeemRequest } from '../models/request/organization/organizationSponsorshipRedeemRequest';\nimport { OrganizationSsoRequest } from '../models/request/organization/organizationSsoRequest';\nimport { OrganizationCreateRequest } from '../models/request/organizationCreateRequest';\nimport { OrganizationImportRequest } from '../models/request/organizationImportRequest';\nimport { OrganizationKeysRequest } from '../models/request/organizationKeysRequest';\nimport { OrganizationSubscriptionUpdateRequest } from '../models/request/organizationSubscriptionUpdateRequest';\nimport { OrganizationTaxInfoUpdateRequest } from '../models/request/organizationTaxInfoUpdateRequest';\nimport { OrganizationUpdateRequest } from '../models/request/organizationUpdateRequest';\nimport { OrganizationUpgradeRequest } from '../models/request/organizationUpgradeRequest';\nimport { OrganizationUserAcceptRequest } from '../models/request/organizationUserAcceptRequest';\nimport { OrganizationUserBulkConfirmRequest } from '../models/request/organizationUserBulkConfirmRequest';\nimport { OrganizationUserBulkRequest } from '../models/request/organizationUserBulkRequest';\nimport { OrganizationUserConfirmRequest } from '../models/request/organizationUserConfirmRequest';\nimport { OrganizationUserInviteRequest } from '../models/request/organizationUserInviteRequest';\nimport { OrganizationUserResetPasswordEnrollmentRequest } from '../models/request/organizationUserResetPasswordEnrollmentRequest';\nimport { OrganizationUserResetPasswordRequest } from '../models/request/organizationUserResetPasswordRequest';\nimport { OrganizationUserUpdateGroupsRequest } from '../models/request/organizationUserUpdateGroupsRequest';\nimport { OrganizationUserUpdateRequest } from '../models/request/organizationUserUpdateRequest';\nimport { PasswordHintRequest } from '../models/request/passwordHintRequest';\nimport { PasswordRequest } from '../models/request/passwordRequest';\nimport { PaymentRequest } from '../models/request/paymentRequest';\nimport { PolicyRequest } from '../models/request/policyRequest';\nimport { PreloginRequest } from '../models/request/preloginRequest';\nimport { ProviderAddOrganizationRequest } from '../models/request/provider/providerAddOrganizationRequest';\nimport { ProviderOrganizationCreateRequest } from '../models/request/provider/providerOrganizationCreateRequest';\nimport { ProviderSetupRequest } from '../models/request/provider/providerSetupRequest';\nimport { ProviderUpdateRequest } from '../models/request/provider/providerUpdateRequest';\nimport { ProviderUserAcceptRequest } from '../models/request/provider/providerUserAcceptRequest';\nimport { ProviderUserBulkConfirmRequest } from '../models/request/provider/providerUserBulkConfirmRequest';\nimport { ProviderUserBulkRequest } from '../models/request/provider/providerUserBulkRequest';\nimport { ProviderUserConfirmRequest } from '../models/request/provider/providerUserConfirmRequest';\nimport { ProviderUserInviteRequest } from '../models/request/provider/providerUserInviteRequest';\nimport { ProviderUserUpdateRequest } from '../models/request/provider/providerUserUpdateRequest';\nimport { RegisterRequest } from '../models/request/registerRequest';\nimport { SeatRequest } from '../models/request/seatRequest';\nimport { SecretVerificationRequest } from '../models/request/secretVerificationRequest';\nimport { SelectionReadOnlyRequest } from '../models/request/selectionReadOnlyRequest';\nimport { SendAccessRequest } from '../models/request/sendAccessRequest';\nimport { SendRequest } from '../models/request/sendRequest';\nimport { SetPasswordRequest } from '../models/request/setPasswordRequest';\nimport { StorageRequest } from '../models/request/storageRequest';\nimport { TaxInfoUpdateRequest } from '../models/request/taxInfoUpdateRequest';\nimport { TokenRequest } from '../models/request/tokenRequest';\nimport { TwoFactorEmailRequest } from '../models/request/twoFactorEmailRequest';\nimport { TwoFactorProviderRequest } from '../models/request/twoFactorProviderRequest';\nimport { TwoFactorRecoveryRequest } from '../models/request/twoFactorRecoveryRequest';\nimport { UpdateDomainsRequest } from '../models/request/updateDomainsRequest';\nimport { UpdateKeyRequest } from '../models/request/updateKeyRequest';\nimport { UpdateProfileRequest } from '../models/request/updateProfileRequest';\nimport { UpdateTempPasswordRequest } from '../models/request/updateTempPasswordRequest';\nimport { UpdateTwoFactorAuthenticatorRequest } from '../models/request/updateTwoFactorAuthenticatorRequest';\nimport { UpdateTwoFactorDuoRequest } from '../models/request/updateTwoFactorDuoRequest';\nimport { UpdateTwoFactorEmailRequest } from '../models/request/updateTwoFactorEmailRequest';\nimport { UpdateTwoFactorWebAuthnDeleteRequest } from '../models/request/updateTwoFactorWebAuthnDeleteRequest';\nimport { UpdateTwoFactorWebAuthnRequest } from '../models/request/updateTwoFactorWebAuthnRequest';\nimport { UpdateTwoFactorYubioOtpRequest } from '../models/request/updateTwoFactorYubioOtpRequest';\nimport { VerifyBankRequest } from '../models/request/verifyBankRequest';\nimport { VerifyDeleteRecoverRequest } from '../models/request/verifyDeleteRecoverRequest';\nimport { VerifyEmailRequest } from '../models/request/verifyEmailRequest';\n\nimport { Utils } from '../misc/utils';\n\nimport { ApiKeyResponse } from '../models/response/apiKeyResponse';\nimport { AttachmentResponse } from '../models/response/attachmentResponse';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { BillingResponse } from '../models/response/billingResponse';\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport {\n    CollectionGroupDetailsResponse,\n    CollectionResponse,\n} from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport {\n    EmergencyAccessGranteeDetailsResponse,\n    EmergencyAccessGrantorDetailsResponse,\n    EmergencyAccessTakeoverResponse,\n    EmergencyAccessViewResponse\n} from '../models/response/emergencyAccessResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { EventResponse } from '../models/response/eventResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n    GroupDetailsResponse,\n    GroupResponse,\n} from '../models/response/groupResponse';\nimport { IdentityCaptchaResponse } from '../models/response/identityCaptchaResponse';\nimport { IdentityTokenResponse } from '../models/response/identityTokenResponse';\nimport { IdentityTwoFactorResponse } from '../models/response/identityTwoFactorResponse';\nimport { ListResponse } from '../models/response/listResponse';\nimport { OrganizationSsoResponse } from '../models/response/organization/organizationSsoResponse';\nimport { OrganizationAutoEnrollStatusResponse } from '../models/response/organizationAutoEnrollStatusResponse';\nimport { OrganizationKeysResponse } from '../models/response/organizationKeysResponse';\nimport { OrganizationResponse } from '../models/response/organizationResponse';\nimport { OrganizationSubscriptionResponse } from '../models/response/organizationSubscriptionResponse';\nimport { OrganizationUserBulkPublicKeyResponse } from '../models/response/organizationUserBulkPublicKeyResponse';\nimport { OrganizationUserBulkResponse } from '../models/response/organizationUserBulkResponse';\nimport {\n    OrganizationUserDetailsResponse,\n    OrganizationUserResetPasswordDetailsReponse,\n    OrganizationUserUserDetailsResponse,\n} from '../models/response/organizationUserResponse';\nimport { PaymentResponse } from '../models/response/paymentResponse';\nimport { PlanResponse } from '../models/response/planResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { PreloginResponse } from '../models/response/preloginResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { ProviderOrganizationOrganizationDetailsResponse, ProviderOrganizationResponse } from '../models/response/provider/providerOrganizationResponse';\nimport { ProviderResponse } from '../models/response/provider/providerResponse';\nimport { ProviderUserBulkPublicKeyResponse } from '../models/response/provider/providerUserBulkPublicKeyResponse';\nimport { ProviderUserBulkResponse } from '../models/response/provider/providerUserBulkResponse';\nimport {\n    ProviderUserResponse,\n    ProviderUserUserDetailsResponse\n} from '../models/response/provider/providerUserResponse';\nimport { SelectionReadOnlyResponse } from '../models/response/selectionReadOnlyResponse';\nimport { SendAccessResponse } from '../models/response/sendAccessResponse';\nimport { SendFileDownloadDataResponse } from '../models/response/sendFileDownloadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\nimport { SendResponse } from '../models/response/sendResponse';\nimport { SubscriptionResponse } from '../models/response/subscriptionResponse';\nimport { SyncResponse } from '../models/response/syncResponse';\nimport { TaxInfoResponse } from '../models/response/taxInfoResponse';\nimport { TaxRateResponse } from '../models/response/taxRateResponse';\nimport { TwoFactorAuthenticatorResponse } from '../models/response/twoFactorAuthenticatorResponse';\nimport { TwoFactorDuoResponse } from '../models/response/twoFactorDuoResponse';\nimport { TwoFactorEmailResponse } from '../models/response/twoFactorEmailResponse';\nimport { TwoFactorProviderResponse } from '../models/response/twoFactorProviderResponse';\nimport { TwoFactorRecoverResponse } from '../models/response/twoFactorRescoverResponse';\nimport { TwoFactorWebAuthnResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { ChallengeResponse } from '../models/response/twoFactorWebAuthnResponse';\nimport { TwoFactorYubiKeyResponse } from '../models/response/twoFactorYubiKeyResponse';\nimport { UserKeyResponse } from '../models/response/userKeyResponse';\n\nimport { SetKeyConnectorKeyRequest } from '../models/request/account/setKeyConnectorKeyRequest';\nimport { VerifyOTPRequest } from '../models/request/account/verifyOTPRequest';\nimport { KeyConnectorUserKeyRequest } from '../models/request/keyConnectorUserKeyRequest';\nimport { KeyConnectorUserKeyResponse } from '../models/response/keyConnectorUserKeyResponse';\nimport { SendAccessView } from '../models/view/sendAccessView';\n\n\n\nexport class ApiService implements ApiServiceAbstraction {\n    protected apiKeyRefresh: (clientId: string, clientSecret: string) => Promise<any>;\n    private device: DeviceType;\n    private deviceType: string;\n    private isWebClient = false;\n    private isDesktopClient = false;\n\n    constructor(private tokenService: TokenService, private platformUtilsService: PlatformUtilsService,\n        private environmentService: EnvironmentService, private logoutCallback: (expired: boolean) => Promise<void>,\n        private customUserAgent: string = null) {\n        this.device = platformUtilsService.getDevice();\n        this.deviceType = this.device.toString();\n        this.isWebClient = this.device === DeviceType.IEBrowser || this.device === DeviceType.ChromeBrowser ||\n            this.device === DeviceType.EdgeBrowser || this.device === DeviceType.FirefoxBrowser ||\n            this.device === DeviceType.OperaBrowser || this.device === DeviceType.SafariBrowser ||\n            this.device === DeviceType.UnknownBrowser || this.device === DeviceType.VivaldiBrowser;\n        this.isDesktopClient = this.device === DeviceType.WindowsDesktop || this.device === DeviceType.MacOsDesktop ||\n            this.device === DeviceType.LinuxDesktop;\n    }\n\n    // Auth APIs\n\n    async postIdentityToken(request: TokenRequest): Promise<IdentityTokenResponse | IdentityTwoFactorResponse | IdentityCaptchaResponse> {\n        const headers = new Headers({\n            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n            'Accept': 'application/json',\n            'Device-Type': this.deviceType,\n        });\n        if (this.customUserAgent != null) {\n            headers.set('User-Agent', this.customUserAgent);\n        }\n        request.alterIdentityTokenHeaders(headers);\n        const response = await this.fetch(new Request(this.environmentService.getIdentityUrl() + '/connect/token', {\n            body: this.qsStringify(request.toIdentityToken(request.clientId ?? this.platformUtilsService.identityClientId)),\n            credentials: this.getCredentials(),\n            cache: 'no-store',\n            headers: headers,\n            method: 'POST',\n        }));\n\n        let responseJson: any = null;\n        if (this.isJsonResponse(response)) {\n            responseJson = await response.json();\n        }\n\n        if (responseJson != null) {\n            if (response.status === 200) {\n                return new IdentityTokenResponse(responseJson);\n            } else if (response.status === 400 && responseJson.TwoFactorProviders2 &&\n                Object.keys(responseJson.TwoFactorProviders2).length) {\n                await this.tokenService.clearTwoFactorToken(request.email);\n                return new IdentityTwoFactorResponse(responseJson);\n            } else if (response.status === 400 && responseJson.HCaptcha_SiteKey &&\n                Object.keys(responseJson.HCaptcha_SiteKey).length) {\n                return new IdentityCaptchaResponse(responseJson);\n            }\n        }\n\n        return Promise.reject(new ErrorResponse(responseJson, response.status, true));\n    }\n\n    async refreshIdentityToken(): Promise<any> {\n        try {\n            await this.doAuthRefresh();\n        } catch (e) {\n            return Promise.reject(null);\n        }\n    }\n\n    // Account APIs\n\n    async getProfile(): Promise<ProfileResponse> {\n        const r = await this.send('GET', '/accounts/profile', null, true, true);\n        return new ProfileResponse(r);\n    }\n\n    async getUserBilling(): Promise<BillingResponse> {\n        const r = await this.send('GET', '/accounts/billing', null, true, true);\n        return new BillingResponse(r);\n    }\n\n    async getUserSubscription(): Promise<SubscriptionResponse> {\n        const r = await this.send('GET', '/accounts/subscription', null, true, true);\n        return new SubscriptionResponse(r);\n    }\n\n    async getTaxInfo(): Promise<TaxInfoResponse> {\n        const r = await this.send('GET', '/accounts/tax', null, true, true);\n        return new TaxInfoResponse(r);\n    }\n\n    async putProfile(request: UpdateProfileRequest): Promise<ProfileResponse> {\n        const r = await this.send('PUT', '/accounts/profile', request, true, true);\n        return new ProfileResponse(r);\n    }\n\n    putTaxInfo(request: TaxInfoUpdateRequest): Promise<any> {\n        return this.send('PUT', '/accounts/tax', request, true, false);\n    }\n\n    async postPrelogin(request: PreloginRequest): Promise<PreloginResponse> {\n        const r = await this.send('POST', '/accounts/prelogin', request, false, true);\n        return new PreloginResponse(r);\n    }\n\n    postEmailToken(request: EmailTokenRequest): Promise<any> {\n        return this.send('POST', '/accounts/email-token', request, true, false);\n    }\n\n    postEmail(request: EmailRequest): Promise<any> {\n        return this.send('POST', '/accounts/email', request, true, false);\n    }\n\n    postPassword(request: PasswordRequest): Promise<any> {\n        return this.send('POST', '/accounts/password', request, true, false);\n    }\n\n    setPassword(request: SetPasswordRequest): Promise<any> {\n        return this.send('POST', '/accounts/set-password', request, true, false);\n    }\n\n    postSetKeyConnectorKey(request: SetKeyConnectorKeyRequest): Promise<any> {\n        return this.send('POST', '/accounts/set-key-connector-key', request, true, false);\n    }\n\n    postSecurityStamp(request: SecretVerificationRequest): Promise<any> {\n        return this.send('POST', '/accounts/security-stamp', request, true, false);\n    }\n\n    deleteAccount(request: SecretVerificationRequest): Promise<any> {\n        return this.send('DELETE', '/accounts', request, true, false);\n    }\n\n    async getAccountRevisionDate(): Promise<number> {\n        const r = await this.send('GET', '/accounts/revision-date', null, true, true);\n        return r as number;\n    }\n\n    postPasswordHint(request: PasswordHintRequest): Promise<any> {\n        return this.send('POST', '/accounts/password-hint', request, false, false);\n    }\n\n    postRegister(request: RegisterRequest): Promise<any> {\n        return this.send('POST', '/accounts/register', request, false, false);\n    }\n\n    async postPremium(data: FormData): Promise<PaymentResponse> {\n        const r = await this.send('POST', '/accounts/premium', data, true, true);\n        return new PaymentResponse(r);\n    }\n\n    async postIapCheck(request: IapCheckRequest): Promise<any> {\n        return this.send('POST', '/accounts/iap-check', request, true, false);\n    }\n\n    postReinstatePremium(): Promise<any> {\n        return this.send('POST', '/accounts/reinstate-premium', null, true, false);\n    }\n\n    postCancelPremium(): Promise<any> {\n        return this.send('POST', '/accounts/cancel-premium', null, true, false);\n    }\n\n    async postAccountStorage(request: StorageRequest): Promise<PaymentResponse> {\n        const r = await this.send('POST', '/accounts/storage', request, true, true);\n        return new PaymentResponse(r);\n    }\n\n    postAccountPayment(request: PaymentRequest): Promise<any> {\n        return this.send('POST', '/accounts/payment', request, true, false);\n    }\n\n    postAccountLicense(data: FormData): Promise<any> {\n        return this.send('POST', '/accounts/license', data, true, false);\n    }\n\n    postAccountKeys(request: KeysRequest): Promise<any> {\n        return this.send('POST', '/accounts/keys', request, true, false);\n    }\n\n    postAccountKey(request: UpdateKeyRequest): Promise<any> {\n        return this.send('POST', '/accounts/key', request, true, false);\n    }\n\n    postAccountVerifyEmail(): Promise<any> {\n        return this.send('POST', '/accounts/verify-email', null, true, false);\n    }\n\n    postAccountVerifyEmailToken(request: VerifyEmailRequest): Promise<any> {\n        return this.send('POST', '/accounts/verify-email-token', request, false, false);\n    }\n\n    postAccountVerifyPassword(request: SecretVerificationRequest): Promise<any> {\n        return this.send('POST', '/accounts/verify-password', request, true, false);\n    }\n\n    postAccountRecoverDelete(request: DeleteRecoverRequest): Promise<any> {\n        return this.send('POST', '/accounts/delete-recover', request, false, false);\n    }\n\n    postAccountRecoverDeleteToken(request: VerifyDeleteRecoverRequest): Promise<any> {\n        return this.send('POST', '/accounts/delete-recover-token', request, false, false);\n    }\n\n    postAccountKdf(request: KdfRequest): Promise<any> {\n        return this.send('POST', '/accounts/kdf', request, true, false);\n    }\n\n    async deleteSsoUser(organizationId: string): Promise<any> {\n        return this.send('DELETE', '/accounts/sso/' + organizationId, null, true, false);\n    }\n\n    async getSsoUserIdentifier(): Promise<string> {\n        return this.send('GET', '/accounts/sso/user-identifier', null, true, true);\n    }\n\n    async postUserApiKey(id: string, request: SecretVerificationRequest): Promise<ApiKeyResponse> {\n        const r = await this.send('POST', '/accounts/api-key', request, true, true);\n        return new ApiKeyResponse(r);\n    }\n\n    async postUserRotateApiKey(id: string, request: SecretVerificationRequest): Promise<ApiKeyResponse> {\n        const r = await this.send('POST', '/accounts/rotate-api-key', request, true, true);\n        return new ApiKeyResponse(r);\n    }\n\n    putUpdateTempPassword(request: UpdateTempPasswordRequest): Promise<any> {\n        return this.send('PUT', '/accounts/update-temp-password', request, true, false);\n    }\n\n    postAccountRequestOTP(): Promise<void> {\n        return this.send('POST', '/accounts/request-otp', null, true, false);\n    }\n\n    postAccountVerifyOTP(request: VerifyOTPRequest): Promise<void> {\n        return this.send('POST', '/accounts/verify-otp', request, true, false);\n    }\n\n    postConvertToKeyConnector(): Promise<void> {\n        return this.send('POST', '/accounts/convert-to-key-connector', null, true, false);\n    }\n\n    // Folder APIs\n\n    async getFolder(id: string): Promise<FolderResponse> {\n        const r = await this.send('GET', '/folders/' + id, null, true, true);\n        return new FolderResponse(r);\n    }\n\n    async postFolder(request: FolderRequest): Promise<FolderResponse> {\n        const r = await this.send('POST', '/folders', request, true, true);\n        return new FolderResponse(r);\n    }\n\n    async putFolder(id: string, request: FolderRequest): Promise<FolderResponse> {\n        const r = await this.send('PUT', '/folders/' + id, request, true, true);\n        return new FolderResponse(r);\n    }\n\n    deleteFolder(id: string): Promise<any> {\n        return this.send('DELETE', '/folders/' + id, null, true, false);\n    }\n\n    // Send APIs\n\n    async getSend(id: string): Promise<SendResponse> {\n        const r = await this.send('GET', '/sends/' + id, null, true, true);\n        return new SendResponse(r);\n    }\n\n    async postSendAccess(id: string, request: SendAccessRequest, apiUrl?: string): Promise<SendAccessResponse> {\n        const addSendIdHeader = (headers: Headers) => {\n            headers.set('Send-Id', id);\n        };\n        const r = await this.send('POST', '/sends/access/' + id, request, false, true, apiUrl, addSendIdHeader);\n        return new SendAccessResponse(r);\n    }\n\n    async getSendFileDownloadData(send: SendAccessView, request: SendAccessRequest, apiUrl?: string): Promise<SendFileDownloadDataResponse> {\n        const addSendIdHeader = (headers: Headers) => {\n            headers.set('Send-Id', send.id);\n        };\n        const r = await this.send('POST', '/sends/' + send.id + '/access/file/' + send.file.id, request, false, true,\n            apiUrl, addSendIdHeader);\n        return new SendFileDownloadDataResponse(r);\n    }\n\n    async getSends(): Promise<ListResponse<SendResponse>> {\n        const r = await this.send('GET', '/sends', null, true, true);\n        return new ListResponse(r, SendResponse);\n    }\n\n    async postSend(request: SendRequest): Promise<SendResponse> {\n        const r = await this.send('POST', '/sends', request, true, true);\n        return new SendResponse(r);\n    }\n\n    async postFileTypeSend(request: SendRequest): Promise<SendFileUploadDataResponse> {\n        const r = await this.send('POST', '/sends/file/v2', request, true, true);\n        return new SendFileUploadDataResponse(r);\n    }\n\n    async renewSendFileUploadUrl(sendId: string, fileId: string): Promise<SendFileUploadDataResponse> {\n        const r = await this.send('GET', '/sends/' + sendId + '/file/' + fileId, null, true, true);\n        return new SendFileUploadDataResponse(r);\n    }\n\n    postSendFile(sendId: string, fileId: string, data: FormData): Promise<any> {\n        return this.send('POST', '/sends/' + sendId + '/file/' + fileId, data, true, false);\n    }\n\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    async postSendFileLegacy(data: FormData): Promise<SendResponse> {\n        const r = await this.send('POST', '/sends/file', data, true, true);\n        return new SendResponse(r);\n    }\n\n    async putSend(id: string, request: SendRequest): Promise<SendResponse> {\n        const r = await this.send('PUT', '/sends/' + id, request, true, true);\n        return new SendResponse(r);\n    }\n\n    async putSendRemovePassword(id: string): Promise<SendResponse> {\n        const r = await this.send('PUT', '/sends/' + id + '/remove-password', null, true, true);\n        return new SendResponse(r);\n    }\n\n    deleteSend(id: string): Promise<any> {\n        return this.send('DELETE', '/sends/' + id, null, true, false);\n    }\n\n    // Cipher APIs\n\n    async getCipher(id: string): Promise<CipherResponse> {\n        const r = await this.send('GET', '/ciphers/' + id, null, true, true);\n        return new CipherResponse(r);\n    }\n\n    async getCipherAdmin(id: string): Promise<CipherResponse> {\n        const r = await this.send('GET', '/ciphers/' + id + '/admin', null, true, true);\n        return new CipherResponse(r);\n    }\n\n    async getCiphersOrganization(organizationId: string): Promise<ListResponse<CipherResponse>> {\n        const r = await this.send('GET', '/ciphers/organization-details?organizationId=' + organizationId,\n            null, true, true);\n        return new ListResponse(r, CipherResponse);\n    }\n\n    async postCipher(request: CipherRequest): Promise<CipherResponse> {\n        const r = await this.send('POST', '/ciphers', request, true, true);\n        return new CipherResponse(r);\n    }\n\n    async postCipherCreate(request: CipherCreateRequest): Promise<CipherResponse> {\n        const r = await this.send('POST', '/ciphers/create', request, true, true);\n        return new CipherResponse(r);\n    }\n\n    async postCipherAdmin(request: CipherCreateRequest): Promise<CipherResponse> {\n        const r = await this.send('POST', '/ciphers/admin', request, true, true);\n        return new CipherResponse(r);\n    }\n\n    async putCipher(id: string, request: CipherRequest): Promise<CipherResponse> {\n        const r = await this.send('PUT', '/ciphers/' + id, request, true, true);\n        return new CipherResponse(r);\n    }\n\n    async putCipherAdmin(id: string, request: CipherRequest): Promise<CipherResponse> {\n        const r = await this.send('PUT', '/ciphers/' + id + '/admin', request, true, true);\n        return new CipherResponse(r);\n    }\n\n    deleteCipher(id: string): Promise<any> {\n        return this.send('DELETE', '/ciphers/' + id, null, true, false);\n    }\n\n    deleteCipherAdmin(id: string): Promise<any> {\n        return this.send('DELETE', '/ciphers/' + id + '/admin', null, true, false);\n    }\n\n    deleteManyCiphers(request: CipherBulkDeleteRequest): Promise<any> {\n        return this.send('DELETE', '/ciphers', request, true, false);\n    }\n\n    deleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise<any> {\n        return this.send('DELETE', '/ciphers/admin', request, true, false);\n    }\n\n    putMoveCiphers(request: CipherBulkMoveRequest): Promise<any> {\n        return this.send('PUT', '/ciphers/move', request, true, false);\n    }\n\n    async putShareCipher(id: string, request: CipherShareRequest): Promise<CipherResponse> {\n        const r = await this.send('PUT', '/ciphers/' + id + '/share', request, true, true);\n        return new CipherResponse(r);\n    }\n\n    putShareCiphers(request: CipherBulkShareRequest): Promise<any> {\n        return this.send('PUT', '/ciphers/share', request, true, false);\n    }\n\n    putCipherCollections(id: string, request: CipherCollectionsRequest): Promise<any> {\n        return this.send('PUT', '/ciphers/' + id + '/collections', request, true, false);\n    }\n\n    putCipherCollectionsAdmin(id: string, request: CipherCollectionsRequest): Promise<any> {\n        return this.send('PUT', '/ciphers/' + id + '/collections-admin', request, true, false);\n    }\n\n    postPurgeCiphers(request: SecretVerificationRequest, organizationId: string = null): Promise<any> {\n        let path = '/ciphers/purge';\n        if (organizationId != null) {\n            path += '?organizationId=' + organizationId;\n        }\n        return this.send('POST', path, request, true, false);\n    }\n\n    postImportCiphers(request: ImportCiphersRequest): Promise<any> {\n        return this.send('POST', '/ciphers/import', request, true, false);\n    }\n\n    postImportOrganizationCiphers(organizationId: string, request: ImportOrganizationCiphersRequest): Promise<any> {\n        return this.send('POST', '/ciphers/import-organization?organizationId=' + organizationId, request, true, false);\n    }\n\n    putDeleteCipher(id: string): Promise<any> {\n        return this.send('PUT', '/ciphers/' + id + '/delete', null, true, false);\n    }\n\n    putDeleteCipherAdmin(id: string): Promise<any> {\n        return this.send('PUT', '/ciphers/' + id + '/delete-admin', null, true, false);\n    }\n\n    putDeleteManyCiphers(request: CipherBulkDeleteRequest): Promise<any> {\n        return this.send('PUT', '/ciphers/delete', request, true, false);\n    }\n\n    putDeleteManyCiphersAdmin(request: CipherBulkDeleteRequest): Promise<any> {\n        return this.send('PUT', '/ciphers/delete-admin', request, true, false);\n    }\n\n    async putRestoreCipher(id: string): Promise<CipherResponse> {\n        const r = await this.send('PUT', '/ciphers/' + id + '/restore', null, true, true);\n        return new CipherResponse(r);\n    }\n\n    async putRestoreCipherAdmin(id: string): Promise<CipherResponse> {\n        const r = await this.send('PUT', '/ciphers/' + id + '/restore-admin', null, true, true);\n        return new CipherResponse(r);\n    }\n\n    async putRestoreManyCiphers(request: CipherBulkDeleteRequest): Promise<ListResponse<CipherResponse>> {\n        const r = await this.send('PUT', '/ciphers/restore', request, true, true);\n        return new ListResponse<CipherResponse>(r, CipherResponse);\n    }\n\n    // Attachments APIs\n\n    async getAttachmentData(cipherId: string, attachmentId: string, emergencyAccessId?: string): Promise<AttachmentResponse> {\n        const path = (emergencyAccessId != null ?\n            '/emergency-access/' + emergencyAccessId + '/' :\n            '/ciphers/') + cipherId + '/attachment/' + attachmentId;\n        const r = await this.send('GET', path, null, true, true);\n        return new AttachmentResponse(r);\n    }\n\n    async postCipherAttachment(id: string, request: AttachmentRequest): Promise<AttachmentUploadDataResponse> {\n        const r = await this.send('POST', '/ciphers/' + id + '/attachment/v2', request, true, true);\n        return new AttachmentUploadDataResponse(r);\n    }\n\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    async postCipherAttachmentLegacy(id: string, data: FormData): Promise<CipherResponse> {\n        const r = await this.send('POST', '/ciphers/' + id + '/attachment', data, true, true);\n        return new CipherResponse(r);\n    }\n\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    async postCipherAttachmentAdminLegacy(id: string, data: FormData): Promise<CipherResponse> {\n        const r = await this.send('POST', '/ciphers/' + id + '/attachment-admin', data, true, true);\n        return new CipherResponse(r);\n    }\n\n    deleteCipherAttachment(id: string, attachmentId: string): Promise<any> {\n        return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId, null, true, false);\n    }\n\n    deleteCipherAttachmentAdmin(id: string, attachmentId: string): Promise<any> {\n        return this.send('DELETE', '/ciphers/' + id + '/attachment/' + attachmentId + '/admin', null, true, false);\n    }\n\n    postShareCipherAttachment(id: string, attachmentId: string, data: FormData,\n        organizationId: string): Promise<any> {\n        return this.send('POST', '/ciphers/' + id + '/attachment/' +\n            attachmentId + '/share?organizationId=' + organizationId, data, true, false);\n    }\n\n    async renewAttachmentUploadUrl(id: string, attachmentId: string): Promise<AttachmentUploadDataResponse> {\n        const r = await this.send('GET', '/ciphers/' + id + '/attachment/' + attachmentId + '/renew', null, true, true);\n        return new AttachmentUploadDataResponse(r);\n    }\n\n    postAttachmentFile(id: string, attachmentId: string, data: FormData): Promise<any> {\n        return this.send('POST', '/ciphers/' + id + '/attachment/' + attachmentId, data, true, false);\n    }\n\n    // Collections APIs\n\n    async getCollectionDetails(organizationId: string, id: string): Promise<CollectionGroupDetailsResponse> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/details',\n            null, true, true);\n        return new CollectionGroupDetailsResponse(r);\n    }\n\n    async getUserCollections(): Promise<ListResponse<CollectionResponse>> {\n        const r = await this.send('GET', '/collections', null, true, true);\n        return new ListResponse(r, CollectionResponse);\n    }\n\n    async getCollections(organizationId: string): Promise<ListResponse<CollectionResponse>> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/collections', null, true, true);\n        return new ListResponse(r, CollectionResponse);\n    }\n\n    async getCollectionUsers(organizationId: string, id: string): Promise<SelectionReadOnlyResponse[]> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/collections/' + id + '/users',\n            null, true, true);\n        return r.map((dr: any) => new SelectionReadOnlyResponse(dr));\n    }\n\n    async postCollection(organizationId: string, request: CollectionRequest): Promise<CollectionResponse> {\n        const r = await this.send('POST', '/organizations/' + organizationId + '/collections', request, true, true);\n        return new CollectionResponse(r);\n    }\n\n    async putCollection(organizationId: string, id: string, request: CollectionRequest): Promise<CollectionResponse> {\n        const r = await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id,\n            request, true, true);\n        return new CollectionResponse(r);\n    }\n\n    async putCollectionUsers(organizationId: string, id: string, request: SelectionReadOnlyRequest[]): Promise<any> {\n        await this.send('PUT', '/organizations/' + organizationId + '/collections/' + id + '/users',\n            request, true, false);\n    }\n\n    deleteCollection(organizationId: string, id: string): Promise<any> {\n        return this.send('DELETE', '/organizations/' + organizationId + '/collections/' + id, null, true, false);\n    }\n\n    deleteCollectionUser(organizationId: string, id: string, organizationUserId: string): Promise<any> {\n        return this.send('DELETE',\n            '/organizations/' + organizationId + '/collections/' + id + '/user/' + organizationUserId,\n            null, true, false);\n    }\n\n    // Groups APIs\n\n    async getGroupDetails(organizationId: string, id: string): Promise<GroupDetailsResponse> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/details',\n            null, true, true);\n        return new GroupDetailsResponse(r);\n    }\n\n    async getGroups(organizationId: string): Promise<ListResponse<GroupResponse>> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/groups', null, true, true);\n        return new ListResponse(r, GroupResponse);\n    }\n\n    async getGroupUsers(organizationId: string, id: string): Promise<string[]> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/groups/' + id + '/users',\n            null, true, true);\n        return r;\n    }\n\n    async postGroup(organizationId: string, request: GroupRequest): Promise<GroupResponse> {\n        const r = await this.send('POST', '/organizations/' + organizationId + '/groups', request, true, true);\n        return new GroupResponse(r);\n    }\n\n    async putGroup(organizationId: string, id: string, request: GroupRequest): Promise<GroupResponse> {\n        const r = await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id, request, true, true);\n        return new GroupResponse(r);\n    }\n\n    async putGroupUsers(organizationId: string, id: string, request: string[]): Promise<any> {\n        await this.send('PUT', '/organizations/' + organizationId + '/groups/' + id + '/users', request, true, false);\n    }\n\n    deleteGroup(organizationId: string, id: string): Promise<any> {\n        return this.send('DELETE', '/organizations/' + organizationId + '/groups/' + id, null, true, false);\n    }\n\n    deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise<any> {\n        return this.send('DELETE',\n            '/organizations/' + organizationId + '/groups/' + id + '/user/' + organizationUserId, null, true, false);\n    }\n\n    // Policy APIs\n\n    async getPolicy(organizationId: string, type: PolicyType): Promise<PolicyResponse> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/policies/' + type, null, true, true);\n        return new PolicyResponse(r);\n    }\n\n    async getPolicies(organizationId: string): Promise<ListResponse<PolicyResponse>> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/policies', null, true, true);\n        return new ListResponse(r, PolicyResponse);\n    }\n\n    async getPoliciesByToken(organizationId: string, token: string, email: string, organizationUserId: string):\n        Promise<ListResponse<PolicyResponse>> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/policies/token?' +\n            'token=' + encodeURIComponent(token) + '&email=' + encodeURIComponent(email) +\n            '&organizationUserId=' + organizationUserId, null, false, true);\n        return new ListResponse(r, PolicyResponse);\n    }\n\n    async putPolicy(organizationId: string, type: PolicyType, request: PolicyRequest): Promise<PolicyResponse> {\n        const r = await this.send('PUT', '/organizations/' + organizationId + '/policies/' + type, request, true, true);\n        return new PolicyResponse(r);\n    }\n\n    // Organization User APIs\n\n    async getOrganizationUser(organizationId: string, id: string): Promise<OrganizationUserDetailsResponse> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id, null, true, true);\n        return new OrganizationUserDetailsResponse(r);\n    }\n\n    async getOrganizationUserGroups(organizationId: string, id: string): Promise<string[]> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id + '/groups',\n            null, true, true);\n        return r;\n    }\n\n    async getOrganizationUsers(organizationId: string): Promise<ListResponse<OrganizationUserUserDetailsResponse>> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/users', null, true, true);\n        return new ListResponse(r, OrganizationUserUserDetailsResponse);\n    }\n\n    async getOrganizationUserResetPasswordDetails(organizationId: string, id: string):\n        Promise<OrganizationUserResetPasswordDetailsReponse> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/users/' + id +\n            '/reset-password-details', null, true, true);\n        return new OrganizationUserResetPasswordDetailsReponse(r);\n    }\n\n    async getOrganizationAutoEnrollStatus(identifier: string): Promise<OrganizationAutoEnrollStatusResponse> {\n        const r = await this.send('GET', '/organizations/' + identifier + '/auto-enroll-status', null, true, true);\n        return new OrganizationAutoEnrollStatusResponse(r);\n    }\n\n    postOrganizationUserInvite(organizationId: string, request: OrganizationUserInviteRequest): Promise<any> {\n        return this.send('POST', '/organizations/' + organizationId + '/users/invite', request, true, false);\n    }\n\n    postOrganizationUserReinvite(organizationId: string, id: string): Promise<any> {\n        return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/reinvite', null, true, false);\n    }\n\n    async postManyOrganizationUserReinvite(organizationId: string, request: OrganizationUserBulkRequest): Promise<ListResponse<OrganizationUserBulkResponse>> {\n        const r = await this.send('POST', '/organizations/' + organizationId + '/users/reinvite', request, true, true);\n        return new ListResponse(r, OrganizationUserBulkResponse);\n    }\n\n    postOrganizationUserAccept(organizationId: string, id: string,\n        request: OrganizationUserAcceptRequest): Promise<any> {\n        return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/accept', request, true, false);\n    }\n\n    postOrganizationUserConfirm(organizationId: string, id: string,\n        request: OrganizationUserConfirmRequest): Promise<any> {\n        return this.send('POST', '/organizations/' + organizationId + '/users/' + id + '/confirm',\n            request, true, false);\n    }\n\n    async postOrganizationUsersPublicKey(organizationId: string, request: OrganizationUserBulkRequest): Promise<ListResponse<OrganizationUserBulkPublicKeyResponse>> {\n        const r = await this.send('POST', '/organizations/' + organizationId + '/users/public-keys', request, true, true);\n        return new ListResponse(r, OrganizationUserBulkPublicKeyResponse);\n    }\n\n    async postOrganizationUserBulkConfirm(organizationId: string, request: OrganizationUserBulkConfirmRequest): Promise<ListResponse<OrganizationUserBulkResponse>> {\n        const r = await this.send('POST', '/organizations/' + organizationId + '/users/confirm', request, true, true);\n        return new ListResponse(r, OrganizationUserBulkResponse);\n    }\n\n    putOrganizationUser(organizationId: string, id: string, request: OrganizationUserUpdateRequest): Promise<any> {\n        return this.send('PUT', '/organizations/' + organizationId + '/users/' + id, request, true, false);\n    }\n\n    putOrganizationUserGroups(organizationId: string, id: string,\n        request: OrganizationUserUpdateGroupsRequest): Promise<any> {\n        return this.send('PUT', '/organizations/' + organizationId + '/users/' + id + '/groups', request, true, false);\n    }\n\n    putOrganizationUserResetPasswordEnrollment(organizationId: string, userId: string,\n        request: OrganizationUserResetPasswordEnrollmentRequest): Promise<any> {\n        return this.send('PUT', '/organizations/' + organizationId + '/users/' + userId + '/reset-password-enrollment',\n            request, true, false);\n    }\n\n    putOrganizationUserResetPassword(organizationId: string, id: string,\n        request: OrganizationUserResetPasswordRequest): Promise<any> {\n        return this.send('PUT', '/organizations/' + organizationId + '/users/' + id + '/reset-password',\n            request, true, false);\n    }\n\n    deleteOrganizationUser(organizationId: string, id: string): Promise<any> {\n        return this.send('DELETE', '/organizations/' + organizationId + '/users/' + id, null, true, false);\n    }\n\n    async deleteManyOrganizationUsers(organizationId: string, request: OrganizationUserBulkRequest): Promise<ListResponse<OrganizationUserBulkResponse>> {\n        const r = await this.send('DELETE', '/organizations/' + organizationId + '/users', request, true, true);\n        return new ListResponse(r, OrganizationUserBulkResponse);\n    }\n\n    // Plan APIs\n\n    async getPlans(): Promise<ListResponse<PlanResponse>> {\n        const r = await this.send('GET', '/plans/', null, true, true);\n        return new ListResponse(r, PlanResponse);\n    }\n\n    async postImportDirectory(organizationId: string, request: ImportDirectoryRequest): Promise<any> {\n        return this.send('POST', '/organizations/' + organizationId + '/import', request, true, false);\n    }\n\n    async postPublicImportDirectory(request: OrganizationImportRequest): Promise<any> {\n        return this.send('POST', '/public/organization/import', request, true, false);\n    }\n\n    async getTaxRates(): Promise<ListResponse<TaxRateResponse>> {\n        const r = await this.send('GET', '/plans/sales-tax-rates/', null, true, true);\n        return new ListResponse(r, TaxRateResponse);\n    }\n\n    // Settings APIs\n\n    async getSettingsDomains(): Promise<DomainsResponse> {\n        const r = await this.send('GET', '/settings/domains', null, true, true);\n        return new DomainsResponse(r);\n    }\n\n    async putSettingsDomains(request: UpdateDomainsRequest): Promise<DomainsResponse> {\n        const r = await this.send('PUT', '/settings/domains', request, true, true);\n        return new DomainsResponse(r);\n    }\n\n    // Sync APIs\n\n    async getSync(): Promise<SyncResponse> {\n        const path = this.isDesktopClient || this.isWebClient ? '/sync?excludeDomains=true' : '/sync';\n        const r = await this.send('GET', path, null, true, true);\n        return new SyncResponse(r);\n    }\n\n    // Two-factor APIs\n\n    async getTwoFactorProviders(): Promise<ListResponse<TwoFactorProviderResponse>> {\n        const r = await this.send('GET', '/two-factor', null, true, true);\n        return new ListResponse(r, TwoFactorProviderResponse);\n    }\n\n    async getTwoFactorOrganizationProviders(organizationId: string): Promise<ListResponse<TwoFactorProviderResponse>> {\n        const r = await this.send('GET', '/organizations/' + organizationId + '/two-factor', null, true, true);\n        return new ListResponse(r, TwoFactorProviderResponse);\n    }\n\n    async getTwoFactorAuthenticator(request: SecretVerificationRequest): Promise<TwoFactorAuthenticatorResponse> {\n        const r = await this.send('POST', '/two-factor/get-authenticator', request, true, true);\n        return new TwoFactorAuthenticatorResponse(r);\n    }\n\n    async getTwoFactorEmail(request: SecretVerificationRequest): Promise<TwoFactorEmailResponse> {\n        const r = await this.send('POST', '/two-factor/get-email', request, true, true);\n        return new TwoFactorEmailResponse(r);\n    }\n\n    async getTwoFactorDuo(request: SecretVerificationRequest): Promise<TwoFactorDuoResponse> {\n        const r = await this.send('POST', '/two-factor/get-duo', request, true, true);\n        return new TwoFactorDuoResponse(r);\n    }\n\n    async getTwoFactorOrganizationDuo(organizationId: string,\n        request: SecretVerificationRequest): Promise<TwoFactorDuoResponse> {\n        const r = await this.send('POST', '/organizations/' + organizationId + '/two-factor/get-duo',\n            request, true, true);\n        return new TwoFactorDuoResponse(r);\n    }\n\n    async getTwoFactorYubiKey(request: SecretVerificationRequest): Promise<TwoFactorYubiKeyResponse> {\n        const r = await this.send('POST', '/two-factor/get-yubikey', request, true, true);\n        return new TwoFactorYubiKeyResponse(r);\n    }\n\n    async getTwoFactorWebAuthn(request: SecretVerificationRequest): Promise<TwoFactorWebAuthnResponse> {\n        const r = await this.send('POST', '/two-factor/get-webauthn', request, true, true);\n        return new TwoFactorWebAuthnResponse(r);\n    }\n\n    async getTwoFactorWebAuthnChallenge(request: SecretVerificationRequest): Promise<ChallengeResponse> {\n        const r = await this.send('POST', '/two-factor/get-webauthn-challenge', request, true, true);\n        return new ChallengeResponse(r);\n    }\n\n    async getTwoFactorRecover(request: SecretVerificationRequest): Promise<TwoFactorRecoverResponse> {\n        const r = await this.send('POST', '/two-factor/get-recover', request, true, true);\n        return new TwoFactorRecoverResponse(r);\n    }\n\n    async putTwoFactorAuthenticator(\n        request: UpdateTwoFactorAuthenticatorRequest): Promise<TwoFactorAuthenticatorResponse> {\n        const r = await this.send('PUT', '/two-factor/authenticator', request, true, true);\n        return new TwoFactorAuthenticatorResponse(r);\n    }\n\n    async putTwoFactorEmail(request: UpdateTwoFactorEmailRequest): Promise<TwoFactorEmailResponse> {\n        const r = await this.send('PUT', '/two-factor/email', request, true, true);\n        return new TwoFactorEmailResponse(r);\n    }\n\n    async putTwoFactorDuo(request: UpdateTwoFactorDuoRequest): Promise<TwoFactorDuoResponse> {\n        const r = await this.send('PUT', '/two-factor/duo', request, true, true);\n        return new TwoFactorDuoResponse(r);\n    }\n\n    async putTwoFactorOrganizationDuo(organizationId: string,\n        request: UpdateTwoFactorDuoRequest): Promise<TwoFactorDuoResponse> {\n        const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/duo', request, true, true);\n        return new TwoFactorDuoResponse(r);\n    }\n\n    async putTwoFactorYubiKey(request: UpdateTwoFactorYubioOtpRequest): Promise<TwoFactorYubiKeyResponse> {\n        const r = await this.send('PUT', '/two-factor/yubikey', request, true, true);\n        return new TwoFactorYubiKeyResponse(r);\n    }\n\n    async putTwoFactorWebAuthn(request: UpdateTwoFactorWebAuthnRequest): Promise<TwoFactorWebAuthnResponse> {\n        const response = request.deviceResponse.response as AuthenticatorAttestationResponse;\n        const data: any = Object.assign({}, request);\n\n        data.deviceResponse = {\n            id: request.deviceResponse.id,\n            rawId: btoa(request.deviceResponse.id),\n            type: request.deviceResponse.type,\n            extensions: request.deviceResponse.getClientExtensionResults(),\n            response: {\n                AttestationObject: Utils.fromBufferToB64(response.attestationObject),\n                clientDataJson: Utils.fromBufferToB64(response.clientDataJSON),\n            },\n        };\n\n        const r = await this.send('PUT', '/two-factor/webauthn', data, true, true);\n        return new TwoFactorWebAuthnResponse(r);\n    }\n\n    async deleteTwoFactorWebAuthn(request: UpdateTwoFactorWebAuthnDeleteRequest): Promise<TwoFactorWebAuthnResponse> {\n        const r = await this.send('DELETE', '/two-factor/webauthn', request, true, true);\n        return new TwoFactorWebAuthnResponse(r);\n    }\n\n    async putTwoFactorDisable(request: TwoFactorProviderRequest): Promise<TwoFactorProviderResponse> {\n        const r = await this.send('PUT', '/two-factor/disable', request, true, true);\n        return new TwoFactorProviderResponse(r);\n    }\n\n    async putTwoFactorOrganizationDisable(organizationId: string,\n        request: TwoFactorProviderRequest): Promise<TwoFactorProviderResponse> {\n        const r = await this.send('PUT', '/organizations/' + organizationId + '/two-factor/disable',\n            request, true, true);\n        return new TwoFactorProviderResponse(r);\n    }\n\n    postTwoFactorRecover(request: TwoFactorRecoveryRequest): Promise<any> {\n        return this.send('POST', '/two-factor/recover', request, false, false);\n    }\n\n    postTwoFactorEmailSetup(request: TwoFactorEmailRequest): Promise<any> {\n        return this.send('POST', '/two-factor/send-email', request, true, false);\n    }\n\n    postTwoFactorEmail(request: TwoFactorEmailRequest): Promise<any> {\n        return this.send('POST', '/two-factor/send-email-login', request, false, false);\n    }\n\n    // Emergency Access APIs\n\n    async getEmergencyAccessTrusted(): Promise<ListResponse<EmergencyAccessGranteeDetailsResponse>> {\n        const r = await this.send('GET', '/emergency-access/trusted', null, true, true);\n        return new ListResponse(r, EmergencyAccessGranteeDetailsResponse);\n    }\n\n    async getEmergencyAccessGranted(): Promise<ListResponse<EmergencyAccessGrantorDetailsResponse>> {\n        const r = await this.send('GET', '/emergency-access/granted', null, true, true);\n        return new ListResponse(r, EmergencyAccessGrantorDetailsResponse);\n    }\n\n    async getEmergencyAccess(id: string): Promise<EmergencyAccessGranteeDetailsResponse> {\n        const r = await this.send('GET', '/emergency-access/' + id, null, true, true);\n        return new EmergencyAccessGranteeDetailsResponse(r);\n    }\n\n    async getEmergencyGrantorPolicies(id: string): Promise<ListResponse<PolicyResponse>> {\n        const r = await this.send('GET', '/emergency-access/' + id + '/policies', null, true, true);\n        return new ListResponse(r, PolicyResponse);\n    }\n\n    putEmergencyAccess(id: string, request: EmergencyAccessUpdateRequest): Promise<any> {\n        return this.send('PUT', '/emergency-access/' + id, request, true, false);\n    }\n\n    deleteEmergencyAccess(id: string): Promise<any> {\n        return this.send('DELETE', '/emergency-access/' + id, null, true, false);\n    }\n\n    postEmergencyAccessInvite(request: EmergencyAccessInviteRequest): Promise<any> {\n        return this.send('POST', '/emergency-access/invite', request, true, false);\n    }\n\n    postEmergencyAccessReinvite(id: string): Promise<any> {\n        return this.send('POST', '/emergency-access/' + id + '/reinvite', null, true, false);\n    }\n\n    postEmergencyAccessAccept(id: string, request: EmergencyAccessAcceptRequest): Promise<any> {\n        return this.send('POST', '/emergency-access/' + id + '/accept', request, true, false);\n    }\n\n    postEmergencyAccessConfirm(id: string, request: EmergencyAccessConfirmRequest): Promise<any> {\n        return this.send('POST', '/emergency-access/' + id + '/confirm', request, true, false);\n    }\n\n    postEmergencyAccessInitiate(id: string): Promise<any> {\n        return this.send('POST', '/emergency-access/' + id + '/initiate', null, true, false);\n    }\n\n    postEmergencyAccessApprove(id: string): Promise<any> {\n        return this.send('POST', '/emergency-access/' + id + '/approve', null, true, false);\n    }\n\n    postEmergencyAccessReject(id: string): Promise<any> {\n        return this.send('POST', '/emergency-access/' + id + '/reject', null, true, false);\n    }\n\n    async postEmergencyAccessTakeover(id: string): Promise<EmergencyAccessTakeoverResponse> {\n        const r = await this.send('POST', '/emergency-access/' + id + '/takeover', null, true, true);\n        return new EmergencyAccessTakeoverResponse(r);\n    }\n\n    async postEmergencyAccessPassword(id: string, request: EmergencyAccessPasswordRequest): Promise<any> {\n        const r = await this.send('POST', '/emergency-access/' + id + '/password', request, true, true);\n    }\n\n    async postEmergencyAccessView(id: string): Promise<EmergencyAccessViewResponse> {\n        const r = await this.send('POST', '/emergency-access/' + id + '/view', null, true, true);\n        return new EmergencyAccessViewResponse(r);\n    }\n\n    // Organization APIs\n\n    async getOrganization(id: string): Promise<OrganizationResponse> {\n        const r = await this.send('GET', '/organizations/' + id, null, true, true);\n        return new OrganizationResponse(r);\n    }\n\n    async getOrganizationBilling(id: string): Promise<BillingResponse> {\n        const r = await this.send('GET', '/organizations/' + id + '/billing', null, true, true);\n        return new BillingResponse(r);\n    }\n\n    async getOrganizationSubscription(id: string): Promise<OrganizationSubscriptionResponse> {\n        const r = await this.send('GET', '/organizations/' + id + '/subscription', null, true, true);\n        return new OrganizationSubscriptionResponse(r);\n    }\n\n    async getOrganizationLicense(id: string, installationId: string): Promise<any> {\n        return this.send('GET', '/organizations/' + id + '/license?installationId=' + installationId,\n            null, true, true);\n    }\n\n    async getOrganizationTaxInfo(id: string): Promise<TaxInfoResponse> {\n        const r = await this.send('GET', '/organizations/' + id + '/tax', null, true, true);\n        return new TaxInfoResponse(r);\n    }\n\n    async getOrganizationSso(id: string): Promise<OrganizationSsoResponse> {\n        const r = await this.send('GET', '/organizations/' + id + '/sso', null, true, true);\n        return new OrganizationSsoResponse(r);\n    }\n\n    async postOrganization(request: OrganizationCreateRequest): Promise<OrganizationResponse> {\n        const r = await this.send('POST', '/organizations', request, true, true);\n        return new OrganizationResponse(r);\n    }\n\n    async putOrganization(id: string, request: OrganizationUpdateRequest): Promise<OrganizationResponse> {\n        const r = await this.send('PUT', '/organizations/' + id, request, true, true);\n        return new OrganizationResponse(r);\n    }\n\n    async putOrganizationTaxInfo(id: string, request: OrganizationTaxInfoUpdateRequest): Promise<any> {\n        return this.send('PUT', '/organizations/' + id + '/tax', request, true, false);\n    }\n\n    postLeaveOrganization(id: string): Promise<any> {\n        return this.send('POST', '/organizations/' + id + '/leave', null, true, false);\n    }\n\n    async postOrganizationLicense(data: FormData): Promise<OrganizationResponse> {\n        const r = await this.send('POST', '/organizations/license', data, true, true);\n        return new OrganizationResponse(r);\n    }\n\n    async postOrganizationLicenseUpdate(id: string, data: FormData): Promise<any> {\n        return this.send('POST', '/organizations/' + id + '/license', data, true, false);\n    }\n\n    async postOrganizationApiKey(id: string, request: SecretVerificationRequest): Promise<ApiKeyResponse> {\n        const r = await this.send('POST', '/organizations/' + id + '/api-key', request, true, true);\n        return new ApiKeyResponse(r);\n    }\n\n    async postOrganizationRotateApiKey(id: string, request: SecretVerificationRequest): Promise<ApiKeyResponse> {\n        const r = await this.send('POST', '/organizations/' + id + '/rotate-api-key', request, true, true);\n        return new ApiKeyResponse(r);\n    }\n\n    async postOrganizationSso(id: string, request: OrganizationSsoRequest): Promise<OrganizationSsoResponse> {\n        const r = await this.send('POST', '/organizations/' + id + '/sso', request, true, true);\n        return new OrganizationSsoResponse(r);\n    }\n\n    async postOrganizationUpgrade(id: string, request: OrganizationUpgradeRequest): Promise<PaymentResponse> {\n        const r = await this.send('POST', '/organizations/' + id + '/upgrade', request, true, true);\n        return new PaymentResponse(r);\n    }\n\n    async postOrganizationUpdateSubscription(id: string, request: OrganizationSubscriptionUpdateRequest): Promise<void> {\n        return this.send('POST', '/organizations/' + id + '/subscription', request, true, false);\n    }\n\n    async postOrganizationSeat(id: string, request: SeatRequest): Promise<PaymentResponse> {\n        const r = await this.send('POST', '/organizations/' + id + '/seat', request, true, true);\n        return new PaymentResponse(r);\n    }\n\n    async postOrganizationStorage(id: string, request: StorageRequest): Promise<PaymentResponse> {\n        const r = await this.send('POST', '/organizations/' + id + '/storage', request, true, true);\n        return new PaymentResponse(r);\n    }\n\n    postOrganizationPayment(id: string, request: PaymentRequest): Promise<any> {\n        return this.send('POST', '/organizations/' + id + '/payment', request, true, false);\n    }\n\n    postOrganizationVerifyBank(id: string, request: VerifyBankRequest): Promise<any> {\n        return this.send('POST', '/organizations/' + id + '/verify-bank', request, true, false);\n    }\n\n    postOrganizationCancel(id: string): Promise<any> {\n        return this.send('POST', '/organizations/' + id + '/cancel', null, true, false);\n    }\n\n    postOrganizationReinstate(id: string): Promise<any> {\n        return this.send('POST', '/organizations/' + id + '/reinstate', null, true, false);\n    }\n\n    deleteOrganization(id: string, request: SecretVerificationRequest): Promise<any> {\n        return this.send('DELETE', '/organizations/' + id, request, true, false);\n    }\n\n    async getOrganizationKeys(id: string): Promise<OrganizationKeysResponse> {\n        const r = await this.send('GET', '/organizations/' + id + '/keys', null, true, true);\n        return new OrganizationKeysResponse(r);\n    }\n\n    async postOrganizationKeys(id: string, request: OrganizationKeysRequest): Promise<OrganizationKeysResponse> {\n        const r = await this.send('POST', '/organizations/' + id + '/keys', request, true, true);\n        return new OrganizationKeysResponse(r);\n    }\n\n    // Provider APIs\n\n    async postProviderSetup(id: string, request: ProviderSetupRequest) {\n        const r = await this.send('POST', '/providers/' + id + '/setup', request, true, true);\n        return new ProviderResponse(r);\n    }\n\n    async getProvider(id: string) {\n        const r = await this.send('GET', '/providers/' + id, null, true, true);\n        return new ProviderResponse(r);\n    }\n\n    async putProvider(id: string, request: ProviderUpdateRequest) {\n        const r = await this.send('PUT', '/providers/' + id, request, true, true);\n        return new ProviderResponse(r);\n    }\n\n    // Provider User APIs\n\n    async getProviderUsers(providerId: string): Promise<ListResponse<ProviderUserUserDetailsResponse>> {\n        const r = await this.send('GET', '/providers/' + providerId + '/users', null, true, true);\n        return new ListResponse(r, ProviderUserUserDetailsResponse);\n    }\n\n    async getProviderUser(providerId: string, id: string): Promise<ProviderUserResponse> {\n        const r = await this.send('GET', '/providers/' + providerId + '/users/' + id, null, true, true);\n        return new ProviderUserResponse(r);\n    }\n\n    postProviderUserInvite(providerId: string, request: ProviderUserInviteRequest): Promise<any> {\n        return this.send('POST', '/providers/' + providerId + '/users/invite', request, true, false);\n    }\n\n    postProviderUserReinvite(providerId: string, id: string): Promise<any> {\n        return this.send('POST', '/providers/' + providerId + '/users/' + id + '/reinvite', null, true, false);\n    }\n\n    async postManyProviderUserReinvite(providerId: string, request: ProviderUserBulkRequest): Promise<ListResponse<ProviderUserBulkResponse>> {\n        const r = await this.send('POST', '/providers/' + providerId + '/users/reinvite', request, true, true);\n        return new ListResponse(r, ProviderUserBulkResponse);\n    }\n\n    async postProviderUserBulkConfirm(providerId: string, request: ProviderUserBulkConfirmRequest): Promise<ListResponse<ProviderUserBulkResponse>> {\n        const r = await this.send('POST', '/providers/' + providerId + '/users/confirm', request, true, true);\n        return new ListResponse(r, ProviderUserBulkResponse);\n    }\n\n    async deleteManyProviderUsers(providerId: string, request: ProviderUserBulkRequest): Promise<ListResponse<ProviderUserBulkResponse>> {\n        const r = await this.send('DELETE', '/providers/' + providerId + '/users', request, true, true);\n        return new ListResponse(r, ProviderUserBulkResponse);\n    }\n\n    postProviderUserAccept(providerId: string, id: string, request: ProviderUserAcceptRequest): Promise<any> {\n        return this.send('POST', '/providers/' + providerId + '/users/' + id + '/accept', request, true, false);\n    }\n\n    postProviderUserConfirm(providerId: string, id: string, request: ProviderUserConfirmRequest): Promise<any> {\n        return this.send('POST', '/providers/' + providerId + '/users/' + id + '/confirm',\n            request, true, false);\n    }\n\n    async postProviderUsersPublicKey(providerId: string, request: ProviderUserBulkRequest): Promise<ListResponse<ProviderUserBulkPublicKeyResponse>> {\n        const r = await this.send('POST', '/providers/' + providerId + '/users/public-keys', request, true, true);\n        return new ListResponse(r, ProviderUserBulkPublicKeyResponse);\n    }\n\n\n    putProviderUser(providerId: string, id: string, request: ProviderUserUpdateRequest): Promise<any> {\n        return this.send('PUT', '/providers/' + providerId + '/users/' + id, request, true, false);\n    }\n\n    deleteProviderUser(providerId: string, id: string): Promise<any> {\n        return this.send('DELETE', '/providers/' + providerId + '/users/' + id, null, true, false);\n    }\n\n    // Provider Organization APIs\n\n    async getProviderClients(providerId: string): Promise<ListResponse<ProviderOrganizationOrganizationDetailsResponse>> {\n        const r = await this.send('GET', '/providers/' + providerId + '/organizations', null, true, true);\n        return new ListResponse(r, ProviderOrganizationOrganizationDetailsResponse);\n    }\n\n    postProviderAddOrganization(providerId: string, request: ProviderAddOrganizationRequest): Promise<any> {\n        return this.send('POST', '/providers/' + providerId + '/organizations/add', request, true, false);\n    }\n\n    async postProviderCreateOrganization(providerId: string, request: ProviderOrganizationCreateRequest): Promise<ProviderOrganizationResponse> {\n        const r = await this.send('POST', '/providers/' + providerId + '/organizations', request, true, true);\n        return new ProviderOrganizationResponse(r);\n    }\n\n    deleteProviderOrganization(providerId: string, id: string): Promise<any> {\n        return this.send('DELETE', '/providers/' + providerId + '/organizations/' + id, null, true, false);\n    }\n\n    // Event APIs\n\n    async getEvents(start: string, end: string, token: string): Promise<ListResponse<EventResponse>> {\n        const r = await this.send('GET', this.addEventParameters('/events', start, end, token), null, true, true);\n        return new ListResponse(r, EventResponse);\n    }\n\n    async getEventsCipher(id: string, start: string, end: string,\n        token: string): Promise<ListResponse<EventResponse>> {\n        const r = await this.send('GET', this.addEventParameters('/ciphers/' + id + '/events', start, end, token),\n            null, true, true);\n        return new ListResponse(r, EventResponse);\n    }\n\n    async getEventsOrganization(id: string, start: string, end: string,\n        token: string): Promise<ListResponse<EventResponse>> {\n        const r = await this.send('GET', this.addEventParameters('/organizations/' + id + '/events', start, end, token),\n            null, true, true);\n        return new ListResponse(r, EventResponse);\n    }\n\n    async getEventsOrganizationUser(organizationId: string, id: string,\n        start: string, end: string, token: string): Promise<ListResponse<EventResponse>> {\n        const r = await this.send('GET',\n            this.addEventParameters('/organizations/' + organizationId + '/users/' + id + '/events', start, end, token),\n            null, true, true);\n        return new ListResponse(r, EventResponse);\n    }\n\n    async getEventsProvider(id: string, start: string, end: string, token: string): Promise<ListResponse<EventResponse>> {\n        const r = await this.send('GET', this.addEventParameters('/providers/' + id + '/events', start, end, token), null, true, true);\n        return new ListResponse(r, EventResponse);\n    }\n\n    async getEventsProviderUser(providerId: string, id: string,\n        start: string, end: string, token: string): Promise<ListResponse<EventResponse>> {\n        const r = await this.send('GET',\n            this.addEventParameters('/providers/' + providerId + '/users/' + id + '/events', start, end, token),\n            null, true, true);\n        return new ListResponse(r, EventResponse);\n    }\n\n    async postEventsCollect(request: EventRequest[]): Promise<any> {\n        const authHeader = await this.getActiveBearerToken();\n        const headers = new Headers({\n            'Device-Type': this.deviceType,\n            'Authorization': 'Bearer ' + authHeader,\n            'Content-Type': 'application/json; charset=utf-8',\n        });\n        if (this.customUserAgent != null) {\n            headers.set('User-Agent', this.customUserAgent);\n        }\n        const response = await this.fetch(new Request(this.environmentService.getEventsUrl() + '/collect', {\n            cache: 'no-store',\n            credentials: this.getCredentials(),\n            method: 'POST',\n            body: JSON.stringify(request),\n            headers: headers,\n        }));\n        if (response.status !== 200) {\n            return Promise.reject('Event post failed.');\n        }\n    }\n\n    // User APIs\n\n    async getUserPublicKey(id: string): Promise<UserKeyResponse> {\n        const r = await this.send('GET', '/users/' + id + '/public-key', null, true, true);\n        return new UserKeyResponse(r);\n    }\n\n    // HIBP APIs\n\n    async getHibpBreach(username: string): Promise<BreachAccountResponse[]> {\n        const r = await this.send('GET', '/hibp/breach?username=' + username, null, true, true);\n        return r.map((a: any) => new BreachAccountResponse(a));\n    }\n\n    // Misc\n\n    async postBitPayInvoice(request: BitPayInvoiceRequest): Promise<string> {\n        const r = await this.send('POST', '/bitpay-invoice', request, true, true);\n        return r as string;\n    }\n\n    async postSetupPayment(): Promise<string> {\n        const r = await this.send('POST', '/setup-payment', null, true, true);\n        return r as string;\n    }\n\n    // Key Connector\n\n    async getUserKeyFromKeyConnector(keyConnectorUrl: string): Promise<KeyConnectorUserKeyResponse> {\n        const authHeader = await this.getActiveBearerToken();\n\n        const response = await this.fetch(new Request(keyConnectorUrl + '/user-keys', {\n            cache: 'no-store',\n            method: 'GET',\n            headers: new Headers({\n                'Accept': 'application/json',\n                'Authorization': 'Bearer ' + authHeader,\n            }),\n        }));\n\n        if (response.status !== 200) {\n            const error = await this.handleError(response, false, true);\n            return Promise.reject(error);\n        }\n\n        return new KeyConnectorUserKeyResponse(await response.json());\n    }\n\n    async postUserKeyToKeyConnector(keyConnectorUrl: string, request: KeyConnectorUserKeyRequest): Promise<void> {\n        const authHeader = await this.getActiveBearerToken();\n\n        const response = await this.fetch(new Request(keyConnectorUrl + '/user-keys', {\n            cache: 'no-store',\n            method: 'POST',\n            headers: new Headers({\n                'Accept': 'application/json',\n                'Authorization': 'Bearer ' + authHeader,\n                'Content-Type': 'application/json; charset=utf-8',\n            }),\n            body: JSON.stringify(request),\n        }));\n\n        if (response.status !== 200) {\n            const error = await this.handleError(response, false, true);\n            return Promise.reject(error);\n        }\n    }\n\n    async getKeyConnectorAlive(keyConnectorUrl: string) {\n        const response = await this.fetch(new Request(keyConnectorUrl + '/alive', {\n            cache: 'no-store',\n            method: 'GET',\n            headers: new Headers({\n                'Accept': 'application/json',\n                'Content-Type': 'application/json; charset=utf-8',\n            }),\n        }));\n\n        if (response.status !== 200) {\n            const error = await this.handleError(response, false, true);\n            return Promise.reject(error);\n        }\n    }\n\n    // Helpers\n\n    async getActiveBearerToken(): Promise<string> {\n        let accessToken = await this.tokenService.getToken();\n        if (this.tokenService.tokenNeedsRefresh()) {\n            await this.doAuthRefresh();\n            accessToken = await this.tokenService.getToken();\n        }\n        return accessToken;\n    }\n\n    fetch(request: Request): Promise<Response> {\n        if (request.method === 'GET') {\n            request.headers.set('Cache-Control', 'no-store');\n            request.headers.set('Pragma', 'no-cache');\n        }\n        return this.nativeFetch(request);\n    }\n\n    nativeFetch(request: Request): Promise<Response> {\n        return fetch(request);\n    }\n\n    async preValidateSso(identifier: string): Promise<boolean> {\n        if (identifier == null || identifier === '') {\n            throw new Error('Organization Identifier was not provided.');\n        }\n        const headers = new Headers({\n            'Accept': 'application/json',\n            'Device-Type': this.deviceType,\n        });\n        if (this.customUserAgent != null) {\n            headers.set('User-Agent', this.customUserAgent);\n        }\n\n        const path = `/account/prevalidate?domainHint=${encodeURIComponent(identifier)}`;\n        const response = await this.fetch(new Request(this.environmentService.getIdentityUrl() + path, {\n            cache: 'no-store',\n            credentials: this.getCredentials(),\n            headers: headers,\n            method: 'GET',\n        }));\n\n        if (response.status === 200) {\n            return true;\n        } else {\n            const error = await this.handleError(response, false, true);\n            return Promise.reject(error);\n        }\n    }\n\n    async postCreateSponsorship(sponsoredOrgId: string, request: OrganizationSponsorshipCreateRequest): Promise<void> {\n        return await this.send('POST',\n            '/organization/sponsorship/' + sponsoredOrgId + '/families-for-enterprise',\n            request, true, false);\n    }\n\n    async deleteRevokeSponsorship(sponsoringOrganizationId: string): Promise<void> {\n        return await this.send('DELETE',\n            '/organization/sponsorship/' + sponsoringOrganizationId,\n            null, true, false);\n    }\n\n    async deleteRemoveSponsorship(sponsoringOrgId: string): Promise<void> {\n        return await this.send('DELETE',\n            '/organization/sponsorship/sponsored/' + sponsoringOrgId,\n            null, true, false);\n    }\n\n    async postPreValidateSponsorshipToken(sponsorshipToken: string): Promise<boolean> {\n        const r = await this.send('POST', '/organization/sponsorship/validate-token?sponsorshipToken=' + encodeURIComponent(sponsorshipToken),\n            null, true, true);\n        return r as boolean;\n    }\n\n    async postRedeemSponsorship(sponsorshipToken: string, request: OrganizationSponsorshipRedeemRequest): Promise<void> {\n        return await this.send('POST', '/organization/sponsorship/redeem?sponsorshipToken=' + encodeURIComponent(sponsorshipToken),\n            request, true, false);\n    }\n\n    async postResendSponsorshipOffer(sponsoringOrgId: string): Promise<void> {\n        return await this.send('POST',\n            '/organization/sponsorship/' + sponsoringOrgId + '/families-for-enterprise/resend',\n            null, true, false);\n    }\n\n\n    protected async doAuthRefresh(): Promise<void> {\n        const refreshToken = await this.tokenService.getRefreshToken();\n        if (refreshToken != null && refreshToken !== '') {\n            return this.doRefreshToken();\n        }\n\n        const clientId = await this.tokenService.getClientId();\n        const clientSecret = await this.tokenService.getClientSecret();\n        if (!Utils.isNullOrWhitespace(clientId) && !Utils.isNullOrWhitespace(clientSecret)) {\n            return this.doApiTokenRefresh();\n        }\n\n        throw new Error('Cannot refresh token, no refresh token or api keys are stored');\n    }\n\n    protected async doApiTokenRefresh(): Promise<void> {\n        const clientId = await this.tokenService.getClientId();\n        const clientSecret = await this.tokenService.getClientSecret();\n        if (Utils.isNullOrWhitespace(clientId) || Utils.isNullOrWhitespace(clientSecret) || this.apiKeyRefresh == null) {\n            throw new Error();\n        }\n\n        await this.apiKeyRefresh(clientId, clientSecret);\n    }\n\n    protected async doRefreshToken(): Promise<void> {\n        const refreshToken = await this.tokenService.getRefreshToken();\n        if (refreshToken == null || refreshToken === '') {\n            throw new Error();\n        }\n        const headers = new Headers({\n            'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',\n            'Accept': 'application/json',\n            'Device-Type': this.deviceType,\n        });\n        if (this.customUserAgent != null) {\n            headers.set('User-Agent', this.customUserAgent);\n        }\n\n        const decodedToken = this.tokenService.decodeToken();\n        const response = await this.fetch(new Request(this.environmentService.getIdentityUrl() + '/connect/token', {\n            body: this.qsStringify({\n                grant_type: 'refresh_token',\n                client_id: decodedToken.client_id,\n                refresh_token: refreshToken,\n            }),\n            cache: 'no-store',\n            credentials: this.getCredentials(),\n            headers: headers,\n            method: 'POST',\n        }));\n\n        if (response.status === 200) {\n            const responseJson = await response.json();\n            const tokenResponse = new IdentityTokenResponse(responseJson);\n            await this.tokenService.setTokens(tokenResponse.accessToken, tokenResponse.refreshToken, null);\n        } else {\n            const error = await this.handleError(response, true, true);\n            return Promise.reject(error);\n        }\n    }\n\n    private async send(method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, body: any,\n        authed: boolean, hasResponse: boolean, apiUrl?: string,\n        alterHeaders?: (headers: Headers) => void): Promise<any> {\n        apiUrl = Utils.isNullOrWhitespace(apiUrl) ? this.environmentService.getApiUrl() : apiUrl;\n\n        const requestUrl = apiUrl + path;\n        // Prevent directory traversal from malicious paths\n        if (new URL(requestUrl).href !== requestUrl) {\n            return Promise.reject('Invalid request url path.');\n        }\n\n        const headers = new Headers({\n            'Device-Type': this.deviceType,\n        });\n        if (this.customUserAgent != null) {\n            headers.set('User-Agent', this.customUserAgent);\n        }\n\n        const requestInit: RequestInit = {\n            cache: 'no-store',\n            credentials: this.getCredentials(),\n            method: method,\n        };\n\n        if (authed) {\n            const authHeader = await this.getActiveBearerToken();\n            headers.set('Authorization', 'Bearer ' + authHeader);\n        }\n        if (body != null) {\n            if (typeof body === 'string') {\n                requestInit.body = body;\n                headers.set('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');\n            } else if (typeof body === 'object') {\n                if (body instanceof FormData) {\n                    requestInit.body = body;\n                } else {\n                    headers.set('Content-Type', 'application/json; charset=utf-8');\n                    requestInit.body = JSON.stringify(body);\n                }\n            }\n        }\n        if (hasResponse) {\n            headers.set('Accept', 'application/json');\n        }\n        if (alterHeaders != null) {\n            alterHeaders(headers);\n        }\n\n        requestInit.headers = headers;\n        const response = await this.fetch(new Request(requestUrl, requestInit));\n\n        if (hasResponse && response.status === 200) {\n            const responseJson = await response.json();\n            return responseJson;\n        } else if (response.status !== 200) {\n            const error = await this.handleError(response, false, authed);\n            return Promise.reject(error);\n        }\n    }\n\n    private async handleError(response: Response, tokenError: boolean, authed: boolean): Promise<ErrorResponse> {\n        if (authed && ((tokenError && response.status === 400) || response.status === 401 || response.status === 403)) {\n            await this.logoutCallback(true);\n            return null;\n        }\n\n        let responseJson: any = null;\n        if (this.isJsonResponse(response)) {\n            responseJson = await response.json();\n        } else if (this.isTextResponse(response)) {\n            responseJson = { Message: await response.text() };\n        }\n\n        return new ErrorResponse(responseJson, response.status, tokenError);\n    }\n\n    private qsStringify(params: any): string {\n        return Object.keys(params).map(key => {\n            return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n        }).join('&');\n    }\n\n    private getCredentials(): RequestCredentials {\n        if (!this.isWebClient || this.environmentService.hasBaseUrl()) {\n            return 'include';\n        }\n        return undefined;\n    }\n\n    private addEventParameters(base: string, start: string, end: string, token: string) {\n        if (start != null) {\n            base += ('?start=' + start);\n        }\n        if (end != null) {\n            base += (base.indexOf('?') > -1 ? '&' : '?');\n            base += ('end=' + end);\n        }\n        if (token != null) {\n            base += (base.indexOf('?') > -1 ? '&' : '?');\n            base += ('continuationToken=' + token);\n        }\n        return base;\n    }\n\n    private isJsonResponse(response: Response): boolean {\n        const typeHeader = response.headers.get('content-type');\n        return typeHeader != null && typeHeader.indexOf('application/json') > -1;\n    }\n\n    private isTextResponse(response: Response): boolean {\n        const typeHeader = response.headers.get('content-type');\n        return typeHeader != null && typeHeader.indexOf('text') > -1;\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ApiKeyResponse extends BaseResponse {\n    apiKey: string;\n\n    constructor(response: any) {\n        super(response);\n        this.apiKey = this.getResponseProperty('ApiKey');\n    }\n}\n","import { FileUploadType } from '../../enums/fileUploadType';\nimport { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\n\nexport class AttachmentUploadDataResponse extends BaseResponse {\n    attachmentId: string;\n    fileUploadType: FileUploadType;\n    cipherResponse: CipherResponse;\n    cipherMiniResponse: CipherResponse;\n    url: string = null;\n    constructor(response: any) {\n        super(response);\n        this.attachmentId = this.getResponseProperty('AttachmentId');\n        this.fileUploadType = this.getResponseProperty('FileUploadType');\n        const cipherResponse = this.getResponseProperty('CipherResponse');\n        const cipherMiniResponse = this.getResponseProperty('CipherMiniResponse');\n        this.cipherResponse = cipherResponse == null ? null : new CipherResponse(cipherResponse);\n        this.cipherMiniResponse = cipherMiniResponse == null ? null : new CipherResponse(cipherMiniResponse);\n        this.url = this.getResponseProperty('Url');\n    }\n\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { PaymentMethodType } from '../../enums/paymentMethodType';\nimport { TransactionType } from '../../enums/transactionType';\n\nexport class BillingResponse extends BaseResponse {\n    balance: number;\n    paymentSource: BillingSourceResponse;\n    invoices: BillingInvoiceResponse[] = [];\n    transactions: BillingTransactionResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n        this.balance = this.getResponseProperty('Balance');\n        const paymentSource = this.getResponseProperty('PaymentSource');\n        const transactions = this.getResponseProperty('Transactions');\n        const invoices = this.getResponseProperty('Invoices');\n        this.paymentSource = paymentSource == null ? null : new BillingSourceResponse(paymentSource);\n        if (transactions != null) {\n            this.transactions = transactions.map((t: any) => new BillingTransactionResponse(t));\n        }\n        if (invoices != null) {\n            this.invoices = invoices.map((i: any) => new BillingInvoiceResponse(i));\n        }\n    }\n}\n\nexport class BillingSourceResponse extends BaseResponse {\n    type: PaymentMethodType;\n    cardBrand: string;\n    description: string;\n    needsVerification: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.type = this.getResponseProperty('Type');\n        this.cardBrand = this.getResponseProperty('CardBrand');\n        this.description = this.getResponseProperty('Description');\n        this.needsVerification = this.getResponseProperty('NeedsVerification');\n    }\n}\n\nexport class BillingInvoiceResponse extends BaseResponse {\n    url: string;\n    pdfUrl: string;\n    number: string;\n    paid: boolean;\n    date: string;\n    amount: number;\n\n    constructor(response: any) {\n        super(response);\n        this.url = this.getResponseProperty('Url');\n        this.pdfUrl = this.getResponseProperty('PdfUrl');\n        this.number = this.getResponseProperty('Number');\n        this.paid = this.getResponseProperty('Paid');\n        this.date = this.getResponseProperty('Date');\n        this.amount = this.getResponseProperty('Amount');\n    }\n}\n\nexport class BillingTransactionResponse extends BaseResponse {\n    createdDate: string;\n    amount: number;\n    refunded: boolean;\n    partiallyRefunded: boolean;\n    refundedAmount: number;\n    type: TransactionType;\n    paymentMethodType: PaymentMethodType;\n    details: string;\n\n    constructor(response: any) {\n        super(response);\n        this.createdDate = this.getResponseProperty('CreatedDate');\n        this.amount = this.getResponseProperty('Amount');\n        this.refunded = this.getResponseProperty('Refunded');\n        this.partiallyRefunded = this.getResponseProperty('PartiallyRefunded');\n        this.refundedAmount = this.getResponseProperty('RefundedAmount');\n        this.type = this.getResponseProperty('Type');\n        this.paymentMethodType = this.getResponseProperty('PaymentMethodType');\n        this.details = this.getResponseProperty('Details');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class BreachAccountResponse extends BaseResponse {\n    addedDate: string;\n    breachDate: string;\n    dataClasses: string[];\n    description: string;\n    domain: string;\n    isActive: boolean;\n    isVerified: boolean;\n    logoPath: string;\n    modifiedDate: string;\n    name: string;\n    pwnCount: number;\n    title: string;\n\n    constructor(response: any) {\n        super(response);\n        this.addedDate = this.getResponseProperty('AddedDate');\n        this.breachDate = this.getResponseProperty('BreachDate');\n        this.dataClasses = this.getResponseProperty('DataClasses');\n        this.description = this.getResponseProperty('Description');\n        this.domain = this.getResponseProperty('Domain');\n        this.isActive = this.getResponseProperty('IsActive');\n        this.isVerified = this.getResponseProperty('IsVerified');\n        this.logoPath = this.getResponseProperty('LogoPath');\n        this.modifiedDate = this.getResponseProperty('ModifiedDate');\n        this.name = this.getResponseProperty('Name');\n        this.pwnCount = this.getResponseProperty('PwnCount');\n        this.title = this.getResponseProperty('Title');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class GlobalDomainResponse extends BaseResponse {\n    type: number;\n    domains: string[];\n    excluded: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.type = this.getResponseProperty('Type');\n        this.domains = this.getResponseProperty('Domains');\n        this.excluded = this.getResponseProperty('Excluded');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { DeviceType } from '../../enums/deviceType';\nimport { EventType } from '../../enums/eventType';\n\nexport class EventResponse extends BaseResponse {\n    type: EventType;\n    userId: string;\n    organizationId: string;\n    providerId: string;\n    cipherId: string;\n    collectionId: string;\n    groupId: string;\n    policyId: string;\n    organizationUserId: string;\n    providerUserId: string;\n    providerOrganizationId: string;\n    actingUserId: string;\n    date: string;\n    deviceType: DeviceType;\n    ipAddress: string;\n\n    constructor(response: any) {\n        super(response);\n        this.type = this.getResponseProperty('Type');\n        this.userId = this.getResponseProperty('UserId');\n        this.organizationId = this.getResponseProperty('OrganizationId');\n        this.providerId = this.getResponseProperty('ProviderId');\n        this.cipherId = this.getResponseProperty('CipherId');\n        this.collectionId = this.getResponseProperty('CollectionId');\n        this.groupId = this.getResponseProperty('GroupId');\n        this.policyId = this.getResponseProperty('PolicyId');\n        this.organizationUserId = this.getResponseProperty('OrganizationUserId');\n        this.providerUserId = this.getResponseProperty('ProviderUserId');\n        this.providerOrganizationId = this.getResponseProperty('ProviderOrganizationId');\n        this.actingUserId = this.getResponseProperty('ActingUserId');\n        this.date = this.getResponseProperty('Date');\n        this.deviceType = this.getResponseProperty('DeviceType');\n        this.ipAddress = this.getResponseProperty('IpAddress');\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nexport class GroupResponse extends BaseResponse {\n    id: string;\n    organizationId: string;\n    name: string;\n    accessAll: boolean;\n    externalId: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.organizationId = this.getResponseProperty('OrganizationId');\n        this.name = this.getResponseProperty('Name');\n        this.accessAll = this.getResponseProperty('AccessAll');\n        this.externalId = this.getResponseProperty('ExternalId');\n    }\n}\n\nexport class GroupDetailsResponse extends GroupResponse {\n    collections: SelectionReadOnlyResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n        const collections = this.getResponseProperty('Collections');\n        if (collections != null) {\n            this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n        }\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class IdentityCaptchaResponse extends BaseResponse {\n    siteKey: string;\n\n    constructor(response: any) {\n        super(response);\n        this.siteKey = this.getResponseProperty('HCaptcha_SiteKey');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class IdentityTokenResponse extends BaseResponse {\n    accessToken: string;\n    expiresIn: number;\n    refreshToken: string;\n    tokenType: string;\n\n    resetMasterPassword: boolean;\n    privateKey: string;\n    key: string;\n    twoFactorToken: string;\n    kdf: KdfType;\n    kdfIterations: number;\n    forcePasswordReset: boolean;\n    apiUseKeyConnector: boolean;\n    keyConnectorUrl: string;\n\n    constructor(response: any) {\n        super(response);\n        this.accessToken = response.access_token;\n        this.expiresIn = response.expires_in;\n        this.refreshToken = response.refresh_token;\n        this.tokenType = response.token_type;\n\n        this.resetMasterPassword = this.getResponseProperty('ResetMasterPassword');\n        this.privateKey = this.getResponseProperty('PrivateKey');\n        this.key = this.getResponseProperty('Key');\n        this.twoFactorToken = this.getResponseProperty('TwoFactorToken');\n        this.kdf = this.getResponseProperty('Kdf');\n        this.kdfIterations = this.getResponseProperty('KdfIterations');\n        this.forcePasswordReset = this.getResponseProperty('ForcePasswordReset');\n        this.apiUseKeyConnector = this.getResponseProperty('ApiUseKeyConnector');\n        this.keyConnectorUrl = this.getResponseProperty('KeyConnectorUrl');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class IdentityTwoFactorResponse extends BaseResponse {\n    twoFactorProviders: TwoFactorProviderType[];\n    twoFactorProviders2 = new Map<TwoFactorProviderType, { [key: string]: string; }>();\n    captchaToken: string;\n\n    constructor(response: any) {\n        super(response);\n        this.captchaToken = this.getResponseProperty('CaptchaBypassToken');\n        this.twoFactorProviders = this.getResponseProperty('TwoFactorProviders');\n        const twoFactorProviders2 = this.getResponseProperty('TwoFactorProviders2');\n        if (twoFactorProviders2 != null) {\n            for (const prop in twoFactorProviders2) {\n                if (twoFactorProviders2.hasOwnProperty(prop)) {\n                    this.twoFactorProviders2.set(parseInt(prop, null), twoFactorProviders2[prop]);\n                }\n            }\n        }\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class ListResponse<T> extends BaseResponse {\n    data: T[];\n    continuationToken: string;\n\n    constructor(response: any, t: new (dataResponse: any) => T) {\n        super(response);\n        const data = this.getResponseProperty('Data');\n        this.data = data == null ? [] : data.map((dr: any) => new t(dr));\n        this.continuationToken = this.getResponseProperty('ContinuationToken');\n    }\n}\n","import { SsoConfigApi } from '../../api/ssoConfigApi';\nimport { BaseResponse } from '../baseResponse';\n\nexport class OrganizationSsoResponse extends BaseResponse {\n    enabled: boolean;\n    data: SsoConfigApi;\n    urls: SsoUrls;\n\n    constructor(response: any) {\n        super(response);\n        this.enabled = this.getResponseProperty('Enabled');\n        this.data = new SsoConfigApi(this.getResponseProperty('Data'));\n        this.urls = new SsoUrls(this.getResponseProperty('Urls'));\n    }\n}\n\nclass SsoUrls extends BaseResponse {\n    callbackPath: string;\n    signedOutCallbackPath: string;\n    spEntityId: string;\n    spMetadataUrl: string;\n    spAcsUrl: string;\n\n    constructor(response: any) {\n        super(response);\n        this.callbackPath = this.getResponseProperty('CallbackPath');\n        this.signedOutCallbackPath = this.getResponseProperty('SignedOutCallbackPath');\n        this.spEntityId = this.getResponseProperty('SpEntityId');\n        this.spMetadataUrl = this.getResponseProperty('SpMetadataUrl');\n        this.spAcsUrl = this.getResponseProperty('SpAcsUrl');\n    }\n}\n","import { BaseResponse } from '../response/baseResponse';\n\nenum SsoType {\n    OpenIdConnect = 1,\n    Saml2 = 2,\n}\n\nenum OpenIdConnectRedirectBehavior {\n    RedirectGet = 0,\n    FormPost = 1,\n}\n\nenum Saml2BindingType {\n    HttpRedirect = 1,\n    HttpPost = 2,\n    Artifact = 4,\n}\n\nenum Saml2NameIdFormat {\n    NotConfigured = 0,\n    Unspecified = 1,\n    EmailAddress = 2,\n    X509SubjectName = 3,\n    WindowsDomainQualifiedName = 4,\n    KerberosPrincipalName = 5,\n    EntityIdentifier = 6,\n    Persistent = 7,\n    Transient = 8,\n}\n\nenum Saml2SigningBehavior {\n    IfIdpWantAuthnRequestsSigned = 0,\n    Always = 1,\n    Never = 3,\n}\n\nexport class SsoConfigApi extends BaseResponse {\n    configType: SsoType;\n\n    keyConnectorEnabled: boolean;\n    keyConnectorUrl: string;\n\n    // OpenId\n    authority: string;\n    clientId: string;\n    clientSecret: string;\n    metadataAddress: string;\n    redirectBehavior: OpenIdConnectRedirectBehavior;\n    getClaimsFromUserInfoEndpoint: boolean;\n    additionalScopes: string;\n    additionalUserIdClaimTypes: string;\n    additionalEmailClaimTypes: string;\n    additionalNameClaimTypes: string;\n    acrValues: string;\n    expectedReturnAcrValue: string;\n\n    // SAML\n    spNameIdFormat: Saml2NameIdFormat;\n    spOutboundSigningAlgorithm: string;\n    spSigningBehavior: Saml2SigningBehavior;\n    spMinIncomingSigningAlgorithm: boolean;\n    spWantAssertionsSigned: boolean;\n    spValidateCertificates: boolean;\n\n    idpEntityId: string;\n    idpBindingType: Saml2BindingType;\n    idpSingleSignOnServiceUrl: string;\n    idpSingleLogoutServiceUrl: string;\n    idpArtifactResolutionServiceUrl: string;\n    idpX509PublicCert: string;\n    idpOutboundSigningAlgorithm: string;\n    idpAllowUnsolicitedAuthnResponse: boolean;\n    idpDisableOutboundLogoutRequests: boolean;\n    idpWantAuthnRequestsSigned: boolean;\n\n    constructor(data: any = null) {\n        super(data);\n        if (data == null) {\n            return;\n        }\n\n        this.configType = this.getResponseProperty('ConfigType');\n\n        this.keyConnectorEnabled = this.getResponseProperty('KeyConnectorEnabled');\n        this.keyConnectorUrl = this.getResponseProperty('KeyConnectorUrl');\n\n        this.authority = this.getResponseProperty('Authority');\n        this.clientId = this.getResponseProperty('ClientId');\n        this.clientSecret = this.getResponseProperty('ClientSecret');\n        this.metadataAddress = this.getResponseProperty('MetadataAddress');\n        this.redirectBehavior = this.getResponseProperty('RedirectBehavior');\n        this.getClaimsFromUserInfoEndpoint = this.getResponseProperty('GetClaimsFromUserInfoEndpoint');\n        this.additionalScopes = this.getResponseProperty('AdditionalScopes');\n        this.additionalUserIdClaimTypes = this.getResponseProperty('AdditionalUserIdClaimTypes');\n        this.additionalEmailClaimTypes = this.getResponseProperty('AdditionalEmailClaimTypes');\n        this.additionalNameClaimTypes = this.getResponseProperty('AdditionalNameClaimTypes');\n        this.acrValues = this.getResponseProperty('AcrValues');\n        this.expectedReturnAcrValue = this.getResponseProperty('ExpectedReturnAcrValue');\n\n        this.spNameIdFormat = this.getResponseProperty('SpNameIdFormat');\n        this.spOutboundSigningAlgorithm = this.getResponseProperty('SpOutboundSigningAlgorithm');\n        this.spSigningBehavior = this.getResponseProperty('SpSigningBehavior');\n        this.spMinIncomingSigningAlgorithm = this.getResponseProperty('SpMinIncomingSigningAlgorithm');\n        this.spWantAssertionsSigned = this.getResponseProperty('SpWantAssertionsSigned');\n        this.spValidateCertificates = this.getResponseProperty('SpValidateCertificates');\n\n        this.idpEntityId = this.getResponseProperty('IdpEntityId');\n        this.idpBindingType = this.getResponseProperty('IdpBindingType');\n        this.idpSingleSignOnServiceUrl = this.getResponseProperty('IdpSingleSignOnServiceUrl');\n        this.idpSingleLogoutServiceUrl = this.getResponseProperty('IdpSingleLogoutServiceUrl');\n        this.idpArtifactResolutionServiceUrl = this.getResponseProperty('IdpArtifactResolutionServiceUrl');\n        this.idpX509PublicCert = this.getResponseProperty('IdpX509PublicCert');\n        this.idpOutboundSigningAlgorithm = this.getResponseProperty('IdpOutboundSigningAlgorithm');\n        this.idpAllowUnsolicitedAuthnResponse = this.getResponseProperty('IdpAllowUnsolicitedAuthnResponse');\n        this.idpDisableOutboundLogoutRequests = this.getResponseProperty('IdpDisableOutboundLogoutRequests');\n        this.idpWantAuthnRequestsSigned = this.getResponseProperty('IdpWantAuthnRequestsSigned');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class OrganizationAutoEnrollStatusResponse extends BaseResponse {\n    id: string;\n    resetPasswordEnabled: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.resetPasswordEnabled = this.getResponseProperty('ResetPasswordEnabled');\n    }\n}\n","import { KeysResponse } from './keysResponse';\n\nexport class OrganizationKeysResponse extends KeysResponse {\n    constructor(response: any) {\n        super(response);\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class KeysResponse extends BaseResponse {\n    privateKey: string;\n    publicKey: string;\n\n    constructor(response: any) {\n        super(response);\n        this.privateKey = this.getResponseProperty('PrivateKey');\n        this.publicKey = this.getResponseProperty('PublicKey');\n    }\n}\n","import { OrganizationResponse } from './organizationResponse';\nimport {\n    BillingSubscriptionResponse,\n    BillingSubscriptionUpcomingInvoiceResponse,\n} from './subscriptionResponse';\n\nexport class OrganizationSubscriptionResponse extends OrganizationResponse {\n    storageName: string;\n    storageGb: number;\n    subscription: BillingSubscriptionResponse;\n    upcomingInvoice: BillingSubscriptionUpcomingInvoiceResponse;\n    expiration: string;\n\n    constructor(response: any) {\n        super(response);\n        this.storageName = this.getResponseProperty('StorageName');\n        this.storageGb = this.getResponseProperty('StorageGb');\n        const subscription = this.getResponseProperty('Subscription');\n        this.subscription = subscription == null ? null : new BillingSubscriptionResponse(subscription);\n        const upcomingInvoice = this.getResponseProperty('UpcomingInvoice');\n        this.upcomingInvoice = upcomingInvoice == null ? null :\n            new BillingSubscriptionUpcomingInvoiceResponse(upcomingInvoice);\n        this.expiration = this.getResponseProperty('Expiration');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class OrganizationUserBulkResponse extends BaseResponse {\n    id: string;\n    error: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.error = this.getResponseProperty('Error');\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { SelectionReadOnlyResponse } from './selectionReadOnlyResponse';\n\nimport { PermissionsApi } from '../api/permissionsApi';\n\nimport { KdfType } from '../../enums/kdfType';\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\n\nexport class OrganizationUserResponse extends BaseResponse {\n    id: string;\n    userId: string;\n    type: OrganizationUserType;\n    status: OrganizationUserStatusType;\n    accessAll: boolean;\n    permissions: PermissionsApi;\n    resetPasswordEnrolled: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.userId = this.getResponseProperty('UserId');\n        this.type = this.getResponseProperty('Type');\n        this.status = this.getResponseProperty('Status');\n        this.permissions = new PermissionsApi(this.getResponseProperty('Permissions'));\n        this.accessAll = this.getResponseProperty('AccessAll');\n        this.resetPasswordEnrolled = this.getResponseProperty('ResetPasswordEnrolled');\n    }\n}\n\nexport class OrganizationUserUserDetailsResponse extends OrganizationUserResponse {\n    name: string;\n    email: string;\n    twoFactorEnabled: boolean;\n    usesKeyConnector: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.name = this.getResponseProperty('Name');\n        this.email = this.getResponseProperty('Email');\n        this.twoFactorEnabled = this.getResponseProperty('TwoFactorEnabled');\n        this.usesKeyConnector = this.getResponseProperty('UsesKeyConnector') ?? false;\n    }\n}\n\nexport class OrganizationUserDetailsResponse extends OrganizationUserResponse {\n    collections: SelectionReadOnlyResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n        const collections = this.getResponseProperty('Collections');\n        if (collections != null) {\n            this.collections = collections.map((c: any) => new SelectionReadOnlyResponse(c));\n        }\n    }\n}\n\nexport class OrganizationUserResetPasswordDetailsReponse extends BaseResponse {\n    kdf: KdfType;\n    kdfIterations: number;\n    resetPasswordKey: string;\n    encryptedPrivateKey: string;\n\n    constructor(response: any) {\n        super(response);\n        this.kdf = this.getResponseProperty('Kdf');\n        this.kdfIterations = this.getResponseProperty('KdfIterations');\n        this.resetPasswordKey = this.getResponseProperty('ResetPasswordKey');\n        this.encryptedPrivateKey = this.getResponseProperty('EncryptedPrivateKey');\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { ProfileResponse } from './profileResponse';\n\nexport class PaymentResponse extends BaseResponse {\n    userProfile: ProfileResponse;\n    paymentIntentClientSecret: string;\n    success: boolean;\n\n    constructor(response: any) {\n        super(response);\n        const userProfile = this.getResponseProperty('UserProfile');\n        if (userProfile != null) {\n            this.userProfile = new ProfileResponse(userProfile);\n        }\n        this.paymentIntentClientSecret = this.getResponseProperty('PaymentIntentClientSecret');\n        this.success = this.getResponseProperty('Success');\n    }\n}\n","import { ProfileOrganizationResponse } from './profileOrganizationResponse';\n\nexport class ProfileProviderOrganizationResponse extends ProfileOrganizationResponse {\n    constructor(response: any) {\n        super(response);\n        this.keyConnectorEnabled = false;\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { ProviderUserStatusType } from '../../enums/providerUserStatusType';\nimport { ProviderUserType } from '../../enums/providerUserType';\n\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class ProfileProviderResponse extends BaseResponse {\n    id: string;\n    name: string;\n    key: string;\n    status: ProviderUserStatusType;\n    type: ProviderUserType;\n    enabled: boolean;\n    permissions: PermissionsApi;\n    userId: string;\n    useEvents: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.name = this.getResponseProperty('Name');\n        this.key = this.getResponseProperty('Key');\n        this.status = this.getResponseProperty('Status');\n        this.type = this.getResponseProperty('Type');\n        this.enabled = this.getResponseProperty('Enabled');\n        this.permissions = new PermissionsApi(this.getResponseProperty('permissions'));\n        this.userId = this.getResponseProperty('UserId');\n        this.useEvents = this.getResponseProperty('UseEvents');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { KdfType } from '../../enums/kdfType';\n\nexport class PreloginResponse extends BaseResponse {\n    kdf: KdfType;\n    kdfIterations: number;\n\n    constructor(response: any) {\n        super(response);\n        this.kdf = this.getResponseProperty('Kdf');\n        this.kdfIterations = this.getResponseProperty('KdfIterations');\n    }\n}\n","import { BaseResponse } from '../baseResponse';\n\nexport class ProviderOrganizationResponse extends BaseResponse {\n    id: string;\n    providerId: string;\n    organizationId: string;\n    key: string;\n    settings: string;\n    creationDate: string;\n    revisionDate: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.providerId = this.getResponseProperty('ProviderId');\n        this.organizationId = this.getResponseProperty('OrganizationId');\n        this.key = this.getResponseProperty('Key');\n        this.settings = this.getResponseProperty('Settings');\n        this.creationDate = this.getResponseProperty('CreationDate');\n        this.revisionDate = this.getResponseProperty('RevisionDate');\n    }\n}\n\nexport class ProviderOrganizationOrganizationDetailsResponse extends ProviderOrganizationResponse {\n    organizationName: string;\n\n    constructor(response: any) {\n        super(response);\n        this.organizationName = this.getResponseProperty('OrganizationName');\n    }\n}\n","import { BaseResponse } from '../baseResponse';\n\nexport class ProviderResponse extends BaseResponse {\n    id: string;\n    name: string;\n    businessName: string;\n    billingEmail: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.name = this.getResponseProperty('Name');\n        this.businessName = this.getResponseProperty('BusinessName');\n        this.billingEmail = this.getResponseProperty('BillingEmail');\n    }\n}\n","import { OrganizationUserBulkPublicKeyResponse } from '../organizationUserBulkPublicKeyResponse';\n\nexport class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {\n\n}\n","import { BaseResponse } from '../baseResponse';\n\nexport class ProviderUserBulkResponse extends BaseResponse {\n    id: string;\n    error: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.error = this.getResponseProperty('Error');\n    }\n}\n","import { BaseResponse } from '../baseResponse';\n\nimport { PermissionsApi } from '../../api/permissionsApi';\n\nimport { ProviderUserStatusType } from '../../../enums/providerUserStatusType';\nimport { ProviderUserType } from '../../../enums/providerUserType';\n\nexport class ProviderUserResponse extends BaseResponse {\n    id: string;\n    userId: string;\n    type: ProviderUserType;\n    status: ProviderUserStatusType;\n    permissions: PermissionsApi;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.userId = this.getResponseProperty('UserId');\n        this.type = this.getResponseProperty('Type');\n        this.status = this.getResponseProperty('Status');\n        this.permissions = new PermissionsApi(this.getResponseProperty('Permissions'));\n    }\n}\n\nexport class ProviderUserUserDetailsResponse extends ProviderUserResponse {\n    name: string;\n    email: string;\n\n    constructor(response: any) {\n        super(response);\n        this.name = this.getResponseProperty('Name');\n        this.email = this.getResponseProperty('Email');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { SendFileApi } from '../api/sendFileApi';\nimport { SendTextApi } from '../api/sendTextApi';\n\nexport class SendAccessResponse extends BaseResponse {\n    id: string;\n    type: SendType;\n    name: string;\n    file: SendFileApi;\n    text: SendTextApi;\n    expirationDate: Date;\n    creatorIdentifier: string;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.type = this.getResponseProperty('Type');\n        this.name = this.getResponseProperty('Name');\n\n        const text = this.getResponseProperty('Text');\n        if (text != null) {\n            this.text = new SendTextApi(text);\n        }\n\n        const file = this.getResponseProperty('File');\n        if (file != null) {\n            this.file = new SendFileApi(file);\n        }\n\n        this.expirationDate = this.getResponseProperty('ExpirationDate');\n        this.creatorIdentifier = this.getResponseProperty('CreatorIdentifier');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class SendFileDownloadDataResponse extends BaseResponse {\n\n    id: string = null;\n    url: string = null;\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.url = this.getResponseProperty('Url');\n    }\n}\n","import { FileUploadType } from '../../enums/fileUploadType';\n\nimport { BaseResponse } from './baseResponse';\nimport { SendResponse } from './sendResponse';\n\nexport class SendFileUploadDataResponse extends BaseResponse {\n\n    fileUploadType: FileUploadType;\n    sendResponse: SendResponse;\n    url: string = null;\n    constructor(response: any) {\n        super(response);\n        this.fileUploadType = this.getResponseProperty('FileUploadType');\n        const sendResponse = this.getResponseProperty('SendResponse');\n        this.sendResponse = sendResponse == null ? null : new SendResponse(sendResponse);\n        this.url = this.getResponseProperty('Url');\n    }\n}\n","import { BaseResponse } from './baseResponse';\nimport { CipherResponse } from './cipherResponse';\nimport { CollectionDetailsResponse } from './collectionResponse';\nimport { DomainsResponse } from './domainsResponse';\nimport { FolderResponse } from './folderResponse';\nimport { PolicyResponse } from './policyResponse';\nimport { ProfileResponse } from './profileResponse';\nimport { SendResponse } from './sendResponse';\n\nexport class SyncResponse extends BaseResponse {\n    profile?: ProfileResponse;\n    folders: FolderResponse[] = [];\n    collections: CollectionDetailsResponse[] = [];\n    ciphers: CipherResponse[] = [];\n    domains?: DomainsResponse;\n    policies?: PolicyResponse[] = [];\n    sends: SendResponse[] = [];\n\n    constructor(response: any) {\n        super(response);\n\n        const profile = this.getResponseProperty('Profile');\n        if (profile != null) {\n            this.profile = new ProfileResponse(profile);\n        }\n\n        const folders = this.getResponseProperty('Folders');\n        if (folders != null) {\n            this.folders = folders.map((f: any) => new FolderResponse(f));\n        }\n\n        const collections = this.getResponseProperty('Collections');\n        if (collections != null) {\n            this.collections = collections.map((c: any) => new CollectionDetailsResponse(c));\n        }\n\n        const ciphers = this.getResponseProperty('Ciphers');\n        if (ciphers != null) {\n            this.ciphers = ciphers.map((c: any) => new CipherResponse(c));\n        }\n\n        const domains = this.getResponseProperty('Domains');\n        if (domains != null) {\n            this.domains = new DomainsResponse(domains);\n        }\n\n        const policies = this.getResponseProperty('Policies');\n        if (policies != null) {\n            this.policies = policies.map((p: any) => new PolicyResponse(p));\n        }\n\n        const sends = this.getResponseProperty('Sends');\n        if (sends != null) {\n            this.sends = sends.map((s: any) => new SendResponse(s));\n        }\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TaxInfoResponse extends BaseResponse {\n    taxId: string;\n    taxIdType: string;\n    line1: string;\n    line2: string;\n    city: string;\n    state: string;\n    country: string;\n    postalCode: string;\n\n    constructor(response: any) {\n        super(response);\n        this.taxId = this.getResponseProperty('TaxIdNumber');\n        this.taxIdType = this.getResponseProperty('TaxIdType');\n        this.line1 = this.getResponseProperty('Line1');\n        this.line2 = this.getResponseProperty('Line2');\n        this.city = this.getResponseProperty('City');\n        this.state = this.getResponseProperty('State');\n        this.postalCode = this.getResponseProperty('PostalCode');\n        this.country = this.getResponseProperty('Country');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TaxRateResponse extends BaseResponse {\n    id: string;\n    country: string;\n    state: string;\n    postalCode: string;\n    rate: number;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.country = this.getResponseProperty('Country');\n        this.state = this.getResponseProperty('State');\n        this.postalCode = this.getResponseProperty('PostalCode');\n        this.rate = this.getResponseProperty('Rate');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorAuthenticatorResponse extends BaseResponse {\n    enabled: boolean;\n    key: string;\n\n    constructor(response: any) {\n        super(response);\n        this.enabled = this.getResponseProperty('Enabled');\n        this.key = this.getResponseProperty('Key');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorDuoResponse extends BaseResponse {\n    enabled: boolean;\n    host: string;\n    secretKey: string;\n    integrationKey: string;\n\n    constructor(response: any) {\n        super(response);\n        this.enabled = this.getResponseProperty('Enabled');\n        this.host = this.getResponseProperty('Host');\n        this.secretKey = this.getResponseProperty('SecretKey');\n        this.integrationKey = this.getResponseProperty('IntegrationKey');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorEmailResponse extends BaseResponse {\n    enabled: boolean;\n    email: string;\n\n    constructor(response: any) {\n        super(response);\n        this.enabled = this.getResponseProperty('Enabled');\n        this.email = this.getResponseProperty('Email');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { TwoFactorProviderType } from '../../enums/twoFactorProviderType';\n\nexport class TwoFactorProviderResponse extends BaseResponse {\n    enabled: boolean;\n    type: TwoFactorProviderType;\n\n    constructor(response: any) {\n        super(response);\n        this.enabled = this.getResponseProperty('Enabled');\n        this.type = this.getResponseProperty('Type');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorRecoverResponse extends BaseResponse {\n    code: string;\n\n    constructor(response: any) {\n        super(response);\n        this.code = this.getResponseProperty('Code');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class TwoFactorYubiKeyResponse extends BaseResponse {\n    enabled: boolean;\n    key1: string;\n    key2: string;\n    key3: string;\n    key4: string;\n    key5: string;\n    nfc: boolean;\n\n    constructor(response: any) {\n        super(response);\n        this.enabled = this.getResponseProperty('Enabled');\n        this.key1 = this.getResponseProperty('Key1');\n        this.key2 = this.getResponseProperty('Key2');\n        this.key3 = this.getResponseProperty('Key3');\n        this.key4 = this.getResponseProperty('Key4');\n        this.key5 = this.getResponseProperty('Key5');\n        this.nfc = this.getResponseProperty('Nfc');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class UserKeyResponse extends BaseResponse {\n    userId: string;\n    publicKey: string;\n\n    constructor(response: any) {\n        super(response);\n        this.userId = this.getResponseProperty('UserId');\n        this.publicKey = this.getResponseProperty('PublicKey');\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nexport class KeyConnectorUserKeyResponse extends BaseResponse {\n    key: string;\n\n    constructor(response: any) {\n        super(response);\n        this.key = this.getResponseProperty('Key');\n    }\n}\n","import { Utils } from '../misc/utils';\n\nimport { AppIdService as AppIdServiceAbstraction } from '../abstractions/appId.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class AppIdService implements AppIdServiceAbstraction {\n    constructor(private storageService: StorageService) {\n    }\n\n    getAppId(): Promise<string> {\n        return this.makeAndGetAppId('appId');\n    }\n\n    getAnonymousAppId(): Promise<string> {\n        return this.makeAndGetAppId('anonymousAppId');\n    }\n\n    private async makeAndGetAppId(key: string) {\n        const existingId = await this.storageService.get<string>(key);\n        if (existingId != null) {\n            return existingId;\n        }\n\n        const guid = Utils.newGuid();\n        await this.storageService.save(key, guid);\n        return guid;\n    }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { AuditService as AuditServiceAbstraction } from '../abstractions/audit.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\n\nimport { throttle } from '../misc/throttle';\nimport { Utils } from '../misc/utils';\n\nimport { BreachAccountResponse } from '../models/response/breachAccountResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nconst PwnedPasswordsApi = 'https://api.pwnedpasswords.com/range/';\n\nexport class AuditService implements AuditServiceAbstraction {\n    constructor(private cryptoFunctionService: CryptoFunctionService, private apiService: ApiService) { }\n\n    @throttle(100, () => 'passwordLeaked')\n    async passwordLeaked(password: string): Promise<number> {\n        const hashBytes = await this.cryptoFunctionService.hash(password, 'sha1');\n        const hash = Utils.fromBufferToHex(hashBytes).toUpperCase();\n        const hashStart = hash.substr(0, 5);\n        const hashEnding = hash.substr(5);\n\n        const response = await this.apiService.nativeFetch(new Request(PwnedPasswordsApi + hashStart));\n        const leakedHashes = await response.text();\n        const match = leakedHashes.split(/\\r?\\n/).find(v => {\n            return v.split(':')[0] === hashEnding;\n        });\n\n        return match != null ? parseInt(match.split(':')[1], 10) : 0;\n    }\n\n    async breachedAccounts(username: string): Promise<BreachAccountResponse[]> {\n        try {\n            return await this.apiService.getHibpBreach(username);\n        } catch (e) {\n            const error = e as ErrorResponse;\n            if (error.statusCode === 404) {\n                return [];\n            }\n            throw new Error();\n        }\n    }\n}\n","/**\n * Use as a Decorator on async functions, it will limit how many times the function can be\n * in-flight at a time.\n *\n * Calls beyond the limit will be queued, and run when one of the active calls finishes\n */\nexport function throttle(limit: number, throttleKey: (args: any[]) => string) {\n    return <T>(target: any, propertyKey: string | symbol,\n        descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<T>>) => {\n        const originalMethod: () => Promise<T> = descriptor.value;\n        const allThrottles = new Map<any, Map<string, (() => void)[]>>();\n\n        const getThrottles = (obj: any) => {\n            let throttles = allThrottles.get(obj);\n            if (throttles != null) {\n                return throttles;\n            }\n            throttles = new Map<string, (() => void)[]>();\n            allThrottles.set(obj, throttles);\n            return throttles;\n        };\n\n        return {\n            value: function(...args: any[]) {\n                const throttles = getThrottles(this);\n                const argsThrottleKey = throttleKey(args);\n                let queue = throttles.get(argsThrottleKey);\n                if (queue == null) {\n                    queue = [];\n                    throttles.set(argsThrottleKey, queue);\n                }\n\n                return new Promise<T>((resolve, reject) => {\n                    const exec = () => {\n                        const onFinally = () => {\n                            queue.splice(queue.indexOf(exec), 1);\n                            if (queue.length >= limit) {\n                                queue[limit - 1]();\n                            } else if (queue.length === 0) {\n                                throttles.delete(argsThrottleKey);\n                                if (throttles.size === 0) {\n                                    allThrottles.delete(this);\n                                }\n                            }\n                        };\n                        originalMethod.apply(this, args).then((val: any) => {\n                            onFinally();\n                            return val;\n                        }).catch((err: any) => {\n                            onFinally();\n                            throw err;\n                        }).then(resolve, reject);\n                    };\n                    queue.push(exec);\n                    if (queue.length <= limit) {\n                        exec();\n                    }\n                });\n            },\n        };\n    };\n}\n","import { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\n\nimport { CipherData } from '../models/data/cipherData';\n\nimport { Attachment } from '../models/domain/attachment';\nimport { Card } from '../models/domain/card';\nimport { Cipher } from '../models/domain/cipher';\nimport Domain from '../models/domain/domainBase';\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { Field } from '../models/domain/field';\nimport { Identity } from '../models/domain/identity';\nimport { Login } from '../models/domain/login';\nimport { LoginUri } from '../models/domain/loginUri';\nimport { Password } from '../models/domain/password';\nimport { SecureNote } from '../models/domain/secureNote';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { AttachmentRequest } from '../models/request/attachmentRequest';\nimport { CipherBulkDeleteRequest } from '../models/request/cipherBulkDeleteRequest';\nimport { CipherBulkMoveRequest } from '../models/request/cipherBulkMoveRequest';\nimport { CipherBulkRestoreRequest } from '../models/request/cipherBulkRestoreRequest';\nimport { CipherBulkShareRequest } from '../models/request/cipherBulkShareRequest';\nimport { CipherCollectionsRequest } from '../models/request/cipherCollectionsRequest';\nimport { CipherCreateRequest } from '../models/request/cipherCreateRequest';\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CipherShareRequest } from '../models/request/cipherShareRequest';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { ErrorResponse } from '../models/response/errorResponse';\n\nimport { AttachmentView } from '../models/view/attachmentView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FieldView } from '../models/view/fieldView';\nimport { PasswordHistoryView } from '../models/view/passwordHistoryView';\nimport { View } from '../models/view/view';\n\nimport { SortedCiphersCache } from '../models/domain/sortedCiphersCache';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService as CipherServiceAbstraction } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FileUploadService } from '../abstractions/fileUpload.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { LogService } from '../abstractions/log.service';\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n    ciphersPrefix: 'ciphers_',\n    localData: 'sitesLocalData',\n    neverDomains: 'neverDomains',\n};\n\nconst DomainMatchBlacklist = new Map<string, Set<string>>([\n    ['google.com', new Set(['script.google.com'])],\n]);\n\nexport class CipherService implements CipherServiceAbstraction {\n    // tslint:disable-next-line\n    _decryptedCipherCache: CipherView[];\n\n    private sortedCiphersCache: SortedCiphersCache = new SortedCiphersCache(this.sortCiphersByLastUsed);\n\n    constructor(private cryptoService: CryptoService, private userService: UserService,\n        private settingsService: SettingsService, private apiService: ApiService,\n        private fileUploadService: FileUploadService, private storageService: StorageService,\n        private i18nService: I18nService, private searchService: () => SearchService,\n        private logService: LogService) {\n    }\n\n    get decryptedCipherCache() {\n        return this._decryptedCipherCache;\n    }\n    set decryptedCipherCache(value: CipherView[]) {\n        this._decryptedCipherCache = value;\n        if (this.searchService != null) {\n            if (value == null) {\n                this.searchService().clearIndex();\n            } else {\n                this.searchService().indexCiphers();\n            }\n        }\n    }\n\n    clearCache(): void {\n        this.decryptedCipherCache = null;\n        this.sortedCiphersCache.clear();\n    }\n\n    async encrypt(model: CipherView, key?: SymmetricCryptoKey, originalCipher: Cipher = null): Promise<Cipher> {\n        // Adjust password history\n        if (model.id != null) {\n            if (originalCipher == null) {\n                originalCipher = await this.get(model.id);\n            }\n            if (originalCipher != null) {\n                const existingCipher = await originalCipher.decrypt();\n                model.passwordHistory = existingCipher.passwordHistory || [];\n                if (model.type === CipherType.Login && existingCipher.type === CipherType.Login) {\n                    if (existingCipher.login.password != null && existingCipher.login.password !== '' &&\n                        existingCipher.login.password !== model.login.password) {\n                        const ph = new PasswordHistoryView();\n                        ph.password = existingCipher.login.password;\n                        ph.lastUsedDate = model.login.passwordRevisionDate = new Date();\n                        model.passwordHistory.splice(0, 0, ph);\n                    } else {\n                        model.login.passwordRevisionDate = existingCipher.login.passwordRevisionDate;\n                    }\n                }\n                if (existingCipher.hasFields) {\n                    const existingHiddenFields = existingCipher.fields.filter(f => f.type === FieldType.Hidden &&\n                        f.name != null && f.name !== '' && f.value != null && f.value !== '');\n                    const hiddenFields = model.fields == null ? [] :\n                        model.fields.filter(f => f.type === FieldType.Hidden && f.name != null && f.name !== '');\n                    existingHiddenFields.forEach(ef => {\n                        const matchedField = hiddenFields.find(f => f.name === ef.name);\n                        if (matchedField == null || matchedField.value !== ef.value) {\n                            const ph = new PasswordHistoryView();\n                            ph.password = ef.name + ': ' + ef.value;\n                            ph.lastUsedDate = new Date();\n                            model.passwordHistory.splice(0, 0, ph);\n                        }\n                    });\n                }\n            }\n            if (model.passwordHistory != null && model.passwordHistory.length === 0) {\n                model.passwordHistory = null;\n            } else if (model.passwordHistory != null && model.passwordHistory.length > 5) {\n                // only save last 5 history\n                model.passwordHistory = model.passwordHistory.slice(0, 5);\n            }\n        }\n\n        const cipher = new Cipher();\n        cipher.id = model.id;\n        cipher.folderId = model.folderId;\n        cipher.favorite = model.favorite;\n        cipher.organizationId = model.organizationId;\n        cipher.type = model.type;\n        cipher.collectionIds = model.collectionIds;\n        cipher.revisionDate = model.revisionDate;\n        cipher.reprompt = model.reprompt;\n\n        if (key == null && cipher.organizationId != null) {\n            key = await this.cryptoService.getOrgKey(cipher.organizationId);\n            if (key == null) {\n                throw new Error('Cannot encrypt cipher for organization. No key.');\n            }\n        }\n        await Promise.all([\n            this.encryptObjProperty(model, cipher, {\n                name: null,\n                notes: null,\n            }, key),\n            this.encryptCipherData(cipher, model, key),\n            this.encryptFields(model.fields, key).then(fields => {\n                cipher.fields = fields;\n            }),\n            this.encryptPasswordHistories(model.passwordHistory, key).then(ph => {\n                cipher.passwordHistory = ph;\n            }),\n            this.encryptAttachments(model.attachments, key).then(attachments => {\n                cipher.attachments = attachments;\n            }),\n        ]);\n\n        return cipher;\n    }\n\n    async encryptAttachments(attachmentsModel: AttachmentView[], key: SymmetricCryptoKey): Promise<Attachment[]> {\n        if (attachmentsModel == null || attachmentsModel.length === 0) {\n            return null;\n        }\n\n        const promises: Promise<any>[] = [];\n        const encAttachments: Attachment[] = [];\n        attachmentsModel.forEach(async model => {\n            const attachment = new Attachment();\n            attachment.id = model.id;\n            attachment.size = model.size;\n            attachment.sizeName = model.sizeName;\n            attachment.url = model.url;\n            const promise = this.encryptObjProperty(model, attachment, {\n                fileName: null,\n            }, key).then(async () => {\n                if (model.key != null) {\n                    attachment.key = await this.cryptoService.encrypt(model.key.key, key);\n                }\n                encAttachments.push(attachment);\n            });\n            promises.push(promise);\n        });\n\n        await Promise.all(promises);\n        return encAttachments;\n    }\n\n    async encryptFields(fieldsModel: FieldView[], key: SymmetricCryptoKey): Promise<Field[]> {\n        if (!fieldsModel || !fieldsModel.length) {\n            return null;\n        }\n\n        const self = this;\n        const encFields: Field[] = [];\n        await fieldsModel.reduce((promise, field) => {\n            return promise.then(() => {\n                return self.encryptField(field, key);\n            }).then((encField: Field) => {\n                encFields.push(encField);\n            });\n        }, Promise.resolve());\n\n        return encFields;\n    }\n\n    async encryptField(fieldModel: FieldView, key: SymmetricCryptoKey): Promise<Field> {\n        const field = new Field();\n        field.type = fieldModel.type;\n        field.linkedId = fieldModel.linkedId;\n        // normalize boolean type field values\n        if (fieldModel.type === FieldType.Boolean && fieldModel.value !== 'true') {\n            fieldModel.value = 'false';\n        }\n\n        await this.encryptObjProperty(fieldModel, field, {\n            name: null,\n            value: null,\n        }, key);\n\n        return field;\n    }\n\n    async encryptPasswordHistories(phModels: PasswordHistoryView[], key: SymmetricCryptoKey): Promise<Password[]> {\n        if (!phModels || !phModels.length) {\n            return null;\n        }\n\n        const self = this;\n        const encPhs: Password[] = [];\n        await phModels.reduce((promise, ph) => {\n            return promise.then(() => {\n                return self.encryptPasswordHistory(ph, key);\n            }).then((encPh: Password) => {\n                encPhs.push(encPh);\n            });\n        }, Promise.resolve());\n\n        return encPhs;\n    }\n\n    async encryptPasswordHistory(phModel: PasswordHistoryView, key: SymmetricCryptoKey): Promise<Password> {\n        const ph = new Password();\n        ph.lastUsedDate = phModel.lastUsedDate;\n\n        await this.encryptObjProperty(phModel, ph, {\n            password: null,\n        }, key);\n\n        return ph;\n    }\n\n    async get(id: string): Promise<Cipher> {\n        const userId = await this.userService.getUserId();\n        const localData = await this.storageService.get<any>(Keys.localData);\n        const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n        if (ciphers == null || !ciphers.hasOwnProperty(id)) {\n            return null;\n        }\n\n        return new Cipher(ciphers[id], false, localData ? localData[id] : null);\n    }\n\n    async getAll(): Promise<Cipher[]> {\n        const userId = await this.userService.getUserId();\n        const localData = await this.storageService.get<any>(Keys.localData);\n        const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n        const response: Cipher[] = [];\n        for (const id in ciphers) {\n            if (ciphers.hasOwnProperty(id)) {\n                response.push(new Cipher(ciphers[id], false, localData ? localData[id] : null));\n            }\n        }\n        return response;\n    }\n\n    @sequentialize(() => 'getAllDecrypted')\n    async getAllDecrypted(): Promise<CipherView[]> {\n        if (this.decryptedCipherCache != null) {\n            const userId = await this.userService.getUserId();\n            if (this.searchService != null && (this.searchService().indexedEntityId ?? userId) !== userId)\n            {\n                await this.searchService().indexCiphers(userId, this.decryptedCipherCache);\n            }\n            return this.decryptedCipherCache;\n        }\n\n        const decCiphers: CipherView[] = [];\n        const hasKey = await this.cryptoService.hasKey();\n        if (!hasKey) {\n            throw new Error('No key.');\n        }\n\n        const promises: any[] = [];\n        const ciphers = await this.getAll();\n        ciphers.forEach(cipher => {\n            promises.push(cipher.decrypt().then(c => decCiphers.push(c)));\n        });\n\n        await Promise.all(promises);\n        decCiphers.sort(this.getLocaleSortingFunction());\n        this.decryptedCipherCache = decCiphers;\n        return this.decryptedCipherCache;\n    }\n\n    async getAllDecryptedForGrouping(groupingId: string, folder: boolean = true): Promise<CipherView[]> {\n        const ciphers = await this.getAllDecrypted();\n\n        return ciphers.filter(cipher => {\n            if (cipher.isDeleted) {\n                return false;\n            }\n            if (folder && cipher.folderId === groupingId) {\n                return true;\n            } else if (!folder && cipher.collectionIds != null && cipher.collectionIds.indexOf(groupingId) > -1) {\n                return true;\n            }\n\n            return false;\n        });\n    }\n\n    async getAllDecryptedForUrl(url: string, includeOtherTypes?: CipherType[],\n        defaultMatch: UriMatchType = null): Promise<CipherView[]> {\n        if (url == null && includeOtherTypes == null) {\n            return Promise.resolve([]);\n        }\n\n        const domain = Utils.getDomain(url);\n        const eqDomainsPromise = domain == null ? Promise.resolve([]) :\n            this.settingsService.getEquivalentDomains().then((eqDomains: any[][]) => {\n                let matches: any[] = [];\n                eqDomains.forEach(eqDomain => {\n                    if (eqDomain.length && eqDomain.indexOf(domain) >= 0) {\n                        matches = matches.concat(eqDomain);\n                    }\n                });\n\n                if (!matches.length) {\n                    matches.push(domain);\n                }\n\n                return matches;\n            });\n\n        const result = await Promise.all([eqDomainsPromise, this.getAllDecrypted()]);\n        const matchingDomains = result[0];\n        const ciphers = result[1];\n\n        if (defaultMatch == null) {\n            defaultMatch = await this.storageService.get<UriMatchType>(ConstantsService.defaultUriMatch);\n            if (defaultMatch == null) {\n                defaultMatch = UriMatchType.Domain;\n            }\n        }\n\n        return ciphers.filter(cipher => {\n            if (cipher.deletedDate != null) {\n                return false;\n            }\n            if (includeOtherTypes != null && includeOtherTypes.indexOf(cipher.type) > -1) {\n                return true;\n            }\n\n            if (url != null && cipher.type === CipherType.Login && cipher.login.uris != null) {\n                for (let i = 0; i < cipher.login.uris.length; i++) {\n                    const u = cipher.login.uris[i];\n                    if (u.uri == null) {\n                        continue;\n                    }\n\n                    const match = u.match == null ? defaultMatch : u.match;\n                    switch (match) {\n                        case UriMatchType.Domain:\n                            if (domain != null && u.domain != null && matchingDomains.indexOf(u.domain) > -1) {\n                                if (DomainMatchBlacklist.has(u.domain)) {\n                                    const domainUrlHost = Utils.getHost(url);\n                                    if (!DomainMatchBlacklist.get(u.domain).has(domainUrlHost)) {\n                                        return true;\n                                    }\n                                } else {\n                                    return true;\n                                }\n                            }\n                            break;\n                        case UriMatchType.Host:\n                            const urlHost = Utils.getHost(url);\n                            if (urlHost != null && urlHost === Utils.getHost(u.uri)) {\n                                return true;\n                            }\n                            break;\n                        case UriMatchType.Exact:\n                            if (url === u.uri) {\n                                return true;\n                            }\n                            break;\n                        case UriMatchType.StartsWith:\n                            if (url.startsWith(u.uri)) {\n                                return true;\n                            }\n                            break;\n                        case UriMatchType.RegularExpression:\n                            try {\n                                const regex = new RegExp(u.uri, 'i');\n                                if (regex.test(url)) {\n                                    return true;\n                                }\n                            } catch (e) {\n                                this.logService.error(e);\n                            }\n                            break;\n                        case UriMatchType.Never:\n                        default:\n                            break;\n                    }\n                }\n            }\n\n            return false;\n        });\n    }\n\n    async getAllFromApiForOrganization(organizationId: string): Promise<CipherView[]> {\n        const ciphers = await this.apiService.getCiphersOrganization(organizationId);\n        if (ciphers != null && ciphers.data != null && ciphers.data.length) {\n            const decCiphers: CipherView[] = [];\n            const promises: any[] = [];\n            ciphers.data.forEach(r => {\n                const data = new CipherData(r);\n                const cipher = new Cipher(data);\n                promises.push(cipher.decrypt().then(c => decCiphers.push(c)));\n            });\n            await Promise.all(promises);\n            decCiphers.sort(this.getLocaleSortingFunction());\n            return decCiphers;\n        } else {\n            return [];\n        }\n    }\n\n    async getLastUsedForUrl(url: string, autofillOnPageLoad: boolean = false): Promise<CipherView> {\n        return this.getCipherForUrl(url, true, false, autofillOnPageLoad);\n    }\n\n    async getLastLaunchedForUrl(url: string, autofillOnPageLoad: boolean = false): Promise<CipherView> {\n        return this.getCipherForUrl(url, false, true, autofillOnPageLoad);\n    }\n\n    async getNextCipherForUrl(url: string): Promise<CipherView> {\n        return this.getCipherForUrl(url, false, false, false);\n    }\n\n    updateLastUsedIndexForUrl(url: string) {\n        this.sortedCiphersCache.updateLastUsedIndex(url);\n    }\n\n    async updateLastUsedDate(id: string): Promise<void> {\n        let ciphersLocalData = await this.storageService.get<any>(Keys.localData);\n        if (!ciphersLocalData) {\n            ciphersLocalData = {};\n        }\n\n        if (ciphersLocalData[id]) {\n            ciphersLocalData[id].lastUsedDate = new Date().getTime();\n        } else {\n            ciphersLocalData[id] = {\n                lastUsedDate: new Date().getTime(),\n            };\n        }\n\n        await this.storageService.save(Keys.localData, ciphersLocalData);\n\n        if (this.decryptedCipherCache == null) {\n            return;\n        }\n\n        for (let i = 0; i < this.decryptedCipherCache.length; i++) {\n            const cached = this.decryptedCipherCache[i];\n            if (cached.id === id) {\n                cached.localData = ciphersLocalData[id];\n                break;\n            }\n        }\n    }\n\n    async updateLastLaunchedDate(id: string): Promise<void> {\n        let ciphersLocalData = await this.storageService.get<any>(Keys.localData);\n        if (!ciphersLocalData) {\n            ciphersLocalData = {};\n        }\n\n        if (ciphersLocalData[id]) {\n            ciphersLocalData[id].lastLaunched = new Date().getTime();\n        } else {\n            ciphersLocalData[id] = {\n                lastUsedDate: new Date().getTime(),\n            };\n        }\n\n        await this.storageService.save(Keys.localData, ciphersLocalData);\n\n        if (this.decryptedCipherCache == null) {\n            return;\n        }\n\n        for (let i = 0; i < this.decryptedCipherCache.length; i++) {\n            const cached = this.decryptedCipherCache[i];\n            if (cached.id === id) {\n                cached.localData = ciphersLocalData[id];\n                break;\n            }\n        }\n    }\n\n    async saveNeverDomain(domain: string): Promise<void> {\n        if (domain == null) {\n            return;\n        }\n\n        let domains = await this.storageService.get<{ [id: string]: any; }>(Keys.neverDomains);\n        if (!domains) {\n            domains = {};\n        }\n        domains[domain] = null;\n        await this.storageService.save(Keys.neverDomains, domains);\n    }\n\n    async saveWithServer(cipher: Cipher): Promise<any> {\n        let response: CipherResponse;\n        if (cipher.id == null) {\n            if (cipher.collectionIds != null) {\n                const request = new CipherCreateRequest(cipher);\n                response = await this.apiService.postCipherCreate(request);\n            } else {\n                const request = new CipherRequest(cipher);\n                response = await this.apiService.postCipher(request);\n            }\n            cipher.id = response.id;\n        } else {\n            const request = new CipherRequest(cipher);\n            response = await this.apiService.putCipher(cipher.id, request);\n        }\n\n        const userId = await this.userService.getUserId();\n        const data = new CipherData(response, userId, cipher.collectionIds);\n        await this.upsert(data);\n    }\n\n    async shareWithServer(cipher: CipherView, organizationId: string, collectionIds: string[]): Promise<any> {\n        const attachmentPromises: Promise<any>[] = [];\n        if (cipher.attachments != null) {\n            cipher.attachments.forEach(attachment => {\n                if (attachment.key == null) {\n                    attachmentPromises.push(this.shareAttachmentWithServer(attachment, cipher.id, organizationId));\n                }\n            });\n        }\n        await Promise.all(attachmentPromises);\n\n        cipher.organizationId = organizationId;\n        cipher.collectionIds = collectionIds;\n        const encCipher = await this.encrypt(cipher);\n        const request = new CipherShareRequest(encCipher);\n        const response = await this.apiService.putShareCipher(cipher.id, request);\n        const userId = await this.userService.getUserId();\n        const data = new CipherData(response, userId, collectionIds);\n        await this.upsert(data);\n    }\n\n    async shareManyWithServer(ciphers: CipherView[], organizationId: string, collectionIds: string[]): Promise<any> {\n        const promises: Promise<any>[] = [];\n        const encCiphers: Cipher[] = [];\n        for (const cipher of ciphers) {\n            cipher.organizationId = organizationId;\n            cipher.collectionIds = collectionIds;\n            promises.push(this.encrypt(cipher).then(c => {\n                encCiphers.push(c);\n            }));\n        }\n        await Promise.all(promises);\n        const request = new CipherBulkShareRequest(encCiphers, collectionIds);\n        await this.apiService.putShareCiphers(request);\n        const userId = await this.userService.getUserId();\n        await this.upsert(encCiphers.map(c => c.toCipherData(userId)));\n    }\n\n    saveAttachmentWithServer(cipher: Cipher, unencryptedFile: any, admin = false): Promise<Cipher> {\n        return new Promise((resolve, reject) => {\n            const reader = new FileReader();\n            reader.readAsArrayBuffer(unencryptedFile);\n            reader.onload = async (evt: any) => {\n                try {\n                    const cData = await this.saveAttachmentRawWithServer(cipher,\n                        unencryptedFile.name, evt.target.result, admin);\n                    resolve(cData);\n                } catch (e) {\n                    reject(e);\n                }\n            };\n            reader.onerror = evt => {\n                reject('Error reading file.');\n            };\n        });\n    }\n\n    async saveAttachmentRawWithServer(cipher: Cipher, filename: string,\n        data: ArrayBuffer, admin = false): Promise<Cipher> {\n        const key = await this.cryptoService.getOrgKey(cipher.organizationId);\n        const encFileName = await this.cryptoService.encrypt(filename, key);\n\n        const dataEncKey = await this.cryptoService.makeEncKey(key);\n        const encData = await this.cryptoService.encryptToBytes(data, dataEncKey[0]);\n\n        const request: AttachmentRequest = {\n            key: dataEncKey[1].encryptedString,\n            fileName: encFileName.encryptedString,\n            fileSize: encData.buffer.byteLength,\n            adminRequest: admin,\n        };\n\n        let response: CipherResponse;\n        try {\n            const uploadDataResponse = await this.apiService.postCipherAttachment(cipher.id, request);\n            response = admin ? uploadDataResponse.cipherMiniResponse : uploadDataResponse.cipherResponse;\n            await this.fileUploadService.uploadCipherAttachment(admin, uploadDataResponse, encFileName, encData);\n        } catch (e) {\n            if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404 || (e as ErrorResponse).statusCode === 405) {\n                response = await this.legacyServerAttachmentFileUpload(admin, cipher.id, encFileName, encData, dataEncKey[1]);\n            } else if (e instanceof ErrorResponse) {\n                throw new Error((e as ErrorResponse).getSingleMessage());\n            } else {\n                throw e;\n            }\n        }\n\n        const userId = await this.userService.getUserId();\n        const cData = new CipherData(response, userId, cipher.collectionIds);\n        if (!admin) {\n            await this.upsert(cData);\n        }\n        return new Cipher(cData);\n    }\n\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    async legacyServerAttachmentFileUpload(admin: boolean, cipherId: string, encFileName: EncString,\n        encData: EncArrayBuffer, key: EncString) {\n        const fd = new FormData();\n        try {\n            const blob = new Blob([encData.buffer], { type: 'application/octet-stream' });\n            fd.append('key', key.encryptedString);\n            fd.append('data', blob, encFileName.encryptedString);\n        } catch (e) {\n            if (Utils.isNode && !Utils.isBrowser) {\n                fd.append('key', key.encryptedString);\n                fd.append('data', Buffer.from(encData.buffer) as any, {\n                    filepath: encFileName.encryptedString,\n                    contentType: 'application/octet-stream',\n                } as any);\n            } else {\n                throw e;\n            }\n        }\n\n        let response: CipherResponse;\n        try {\n            if (admin) {\n                response = await this.apiService.postCipherAttachmentAdminLegacy(cipherId, fd);\n            } else {\n                response = await this.apiService.postCipherAttachmentLegacy(cipherId, fd);\n            }\n        } catch (e) {\n            throw new Error((e as ErrorResponse).getSingleMessage());\n        }\n\n        return response;\n    }\n\n    async saveCollectionsWithServer(cipher: Cipher): Promise<any> {\n        const request = new CipherCollectionsRequest(cipher.collectionIds);\n        await this.apiService.putCipherCollections(cipher.id, request);\n        const userId = await this.userService.getUserId();\n        const data = cipher.toCipherData(userId);\n        await this.upsert(data);\n    }\n\n    async upsert(cipher: CipherData | CipherData[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n        if (ciphers == null) {\n            ciphers = {};\n        }\n\n        if (cipher instanceof CipherData) {\n            const c = cipher as CipherData;\n            ciphers[c.id] = c;\n        } else {\n            (cipher as CipherData[]).forEach(c => {\n                ciphers[c.id] = c;\n            });\n        }\n\n        await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n        this.decryptedCipherCache = null;\n    }\n\n    async replace(ciphers: { [id: string]: CipherData; }): Promise<any> {\n        const userId = await this.userService.getUserId();\n        await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n        this.decryptedCipherCache = null;\n    }\n\n    async clear(userId: string): Promise<any> {\n        await this.storageService.remove(Keys.ciphersPrefix + userId);\n        this.clearCache();\n    }\n\n    async moveManyWithServer(ids: string[], folderId: string): Promise<any> {\n        await this.apiService.putMoveCiphers(new CipherBulkMoveRequest(ids, folderId));\n\n        const userId = await this.userService.getUserId();\n        let ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n        if (ciphers == null) {\n            ciphers = {};\n        }\n\n        ids.forEach(id => {\n            if (ciphers.hasOwnProperty(id)) {\n                ciphers[id].folderId = folderId;\n            }\n        });\n\n        await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n        this.decryptedCipherCache = null;\n    }\n\n    async delete(id: string | string[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n        if (ciphers == null) {\n            return;\n        }\n\n        if (typeof id === 'string') {\n            if (ciphers[id] == null) {\n                return;\n            }\n            delete ciphers[id];\n        } else {\n            (id as string[]).forEach(i => {\n                delete ciphers[i];\n            });\n        }\n\n        await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n        this.decryptedCipherCache = null;\n    }\n\n    async deleteWithServer(id: string): Promise<any> {\n        await this.apiService.deleteCipher(id);\n        await this.delete(id);\n    }\n\n    async deleteManyWithServer(ids: string[]): Promise<any> {\n        await this.apiService.deleteManyCiphers(new CipherBulkDeleteRequest(ids));\n        await this.delete(ids);\n    }\n\n    async deleteAttachment(id: string, attachmentId: string): Promise<void> {\n        const userId = await this.userService.getUserId();\n        const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n\n        if (ciphers == null || !ciphers.hasOwnProperty(id) || ciphers[id].attachments == null) {\n            return;\n        }\n\n        for (let i = 0; i < ciphers[id].attachments.length; i++) {\n            if (ciphers[id].attachments[i].id === attachmentId) {\n                ciphers[id].attachments.splice(i, 1);\n            }\n        }\n\n        await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n        this.decryptedCipherCache = null;\n    }\n\n    async deleteAttachmentWithServer(id: string, attachmentId: string): Promise<void> {\n        try {\n            await this.apiService.deleteCipherAttachment(id, attachmentId);\n        } catch (e) {\n            return Promise.reject((e as ErrorResponse).getSingleMessage());\n        }\n        await this.deleteAttachment(id, attachmentId);\n    }\n\n    sortCiphersByLastUsed(a: CipherView, b: CipherView): number {\n        const aLastUsed = a.localData && a.localData.lastUsedDate ? a.localData.lastUsedDate as number : null;\n        const bLastUsed = b.localData && b.localData.lastUsedDate ? b.localData.lastUsedDate as number : null;\n\n        const bothNotNull = aLastUsed != null && bLastUsed != null;\n        if (bothNotNull && aLastUsed < bLastUsed) {\n            return 1;\n        }\n        if (aLastUsed != null && bLastUsed == null) {\n            return -1;\n        }\n\n        if (bothNotNull && aLastUsed > bLastUsed) {\n            return -1;\n        }\n        if (bLastUsed != null && aLastUsed == null) {\n            return 1;\n        }\n\n        return 0;\n    }\n\n    sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number {\n        const result = this.sortCiphersByLastUsed(a, b);\n        if (result !== 0) {\n            return result;\n        }\n\n        return this.getLocaleSortingFunction()(a, b);\n    }\n\n    getLocaleSortingFunction(): (a: CipherView, b: CipherView) => number {\n        return (a, b) => {\n            let aName = a.name;\n            let bName = b.name;\n\n            if (aName == null && bName != null) {\n                return -1;\n            }\n            if (aName != null && bName == null) {\n                return 1;\n            }\n            if (aName == null && bName == null) {\n                return 0;\n            }\n\n            const result = this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n                aName.localeCompare(bName);\n\n            if (result !== 0 || a.type !== CipherType.Login || b.type !== CipherType.Login) {\n                return result;\n            }\n\n            if (a.login.username != null) {\n                aName += a.login.username;\n            }\n\n            if (b.login.username != null) {\n                bName += b.login.username;\n            }\n\n            return this.i18nService.collator ? this.i18nService.collator.compare(aName, bName) :\n                aName.localeCompare(bName);\n        };\n    }\n\n    async softDelete(id: string | string[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n        if (ciphers == null) {\n            return;\n        }\n\n        const setDeletedDate = (cipherId: string) => {\n            if (ciphers[cipherId] == null) {\n                return;\n            }\n            ciphers[cipherId].deletedDate = new Date().toISOString();\n        };\n\n        if (typeof id === 'string') {\n            setDeletedDate(id);\n        } else {\n            (id as string[]).forEach(setDeletedDate);\n        }\n\n        await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n        this.decryptedCipherCache = null;\n    }\n\n    async softDeleteWithServer(id: string): Promise<any> {\n        await this.apiService.putDeleteCipher(id);\n        await this.softDelete(id);\n    }\n\n    async softDeleteManyWithServer(ids: string[]): Promise<any> {\n        await this.apiService.putDeleteManyCiphers(new CipherBulkDeleteRequest(ids));\n        await this.softDelete(ids);\n    }\n\n    async restore(cipher: { id: string, revisionDate: string; } | { id: string, revisionDate: string; }[]) {\n        const userId = await this.userService.getUserId();\n        const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(\n            Keys.ciphersPrefix + userId);\n        if (ciphers == null) {\n            return;\n        }\n\n        const clearDeletedDate = (c: { id: string, revisionDate: string; }) => {\n            if (ciphers[c.id] == null) {\n                return;\n            }\n            ciphers[c.id].deletedDate = null;\n            ciphers[c.id].revisionDate = c.revisionDate;\n        };\n\n\n        if (cipher.constructor.name === 'Array') {\n            (cipher as { id: string, revisionDate: string; }[]).forEach(clearDeletedDate);\n        } else {\n            clearDeletedDate(cipher as { id: string, revisionDate: string; });\n        }\n\n        await this.storageService.save(Keys.ciphersPrefix + userId, ciphers);\n        this.decryptedCipherCache = null;\n    }\n\n    async restoreWithServer(id: string): Promise<any> {\n        const response = await this.apiService.putRestoreCipher(id);\n        await this.restore({ id: id, revisionDate: response.revisionDate });\n    }\n\n    async restoreManyWithServer(ids: string[]): Promise<any> {\n        const response = await this.apiService.putRestoreManyCiphers(new CipherBulkRestoreRequest(ids));\n        const restores: { id: string, revisionDate: string; }[] = [];\n        for (const cipher of response.data) {\n            restores.push({ id: cipher.id, revisionDate: cipher.revisionDate });\n        }\n        await this.restore(restores);\n    }\n\n    // Helpers\n\n    private async shareAttachmentWithServer(attachmentView: AttachmentView, cipherId: string,\n        organizationId: string): Promise<any> {\n        const attachmentResponse = await this.apiService.nativeFetch(\n            new Request(attachmentView.url, { cache: 'no-store' }));\n        if (attachmentResponse.status !== 200) {\n            throw Error('Failed to download attachment: ' + attachmentResponse.status.toString());\n        }\n\n        const buf = await attachmentResponse.arrayBuffer();\n        const decBuf = await this.cryptoService.decryptFromBytes(buf, null);\n        const key = await this.cryptoService.getOrgKey(organizationId);\n        const encFileName = await this.cryptoService.encrypt(attachmentView.fileName, key);\n\n        const dataEncKey = await this.cryptoService.makeEncKey(key);\n        const encData = await this.cryptoService.encryptToBytes(decBuf, dataEncKey[0]);\n\n        const fd = new FormData();\n        try {\n            const blob = new Blob([encData.buffer], { type: 'application/octet-stream' });\n            fd.append('key', dataEncKey[1].encryptedString);\n            fd.append('data', blob, encFileName.encryptedString);\n        } catch (e) {\n            if (Utils.isNode && !Utils.isBrowser) {\n                fd.append('key', dataEncKey[1].encryptedString);\n                fd.append('data', Buffer.from(encData.buffer) as any, {\n                    filepath: encFileName.encryptedString,\n                    contentType: 'application/octet-stream',\n                } as any);\n            } else {\n                throw e;\n            }\n        }\n\n        try {\n            await this.apiService.postShareCipherAttachment(cipherId, attachmentView.id, fd, organizationId);\n        } catch (e) {\n            throw new Error((e as ErrorResponse).getSingleMessage());\n        }\n    }\n\n    private async encryptObjProperty<V extends View, D extends Domain>(model: V, obj: D,\n        map: any, key: SymmetricCryptoKey): Promise<void> {\n        const promises = [];\n        const self = this;\n\n        for (const prop in map) {\n            if (!map.hasOwnProperty(prop)) {\n                continue;\n            }\n\n            // tslint:disable-next-line\n            (function (theProp, theObj) {\n                const p = Promise.resolve().then(() => {\n                    const modelProp = (model as any)[(map[theProp] || theProp)];\n                    if (modelProp && modelProp !== '') {\n                        return self.cryptoService.encrypt(modelProp, key);\n                    }\n                    return null;\n                }).then((val: EncString) => {\n                    (theObj as any)[theProp] = val;\n                });\n                promises.push(p);\n            })(prop, obj);\n        }\n\n        await Promise.all(promises);\n    }\n\n    private async encryptCipherData(cipher: Cipher, model: CipherView, key: SymmetricCryptoKey) {\n        switch (cipher.type) {\n            case CipherType.Login:\n                cipher.login = new Login();\n                cipher.login.passwordRevisionDate = model.login.passwordRevisionDate;\n                cipher.login.autofillOnPageLoad = model.login.autofillOnPageLoad;\n                await this.encryptObjProperty(model.login, cipher.login, {\n                    username: null,\n                    password: null,\n                    totp: null,\n                }, key);\n\n                if (model.login.uris != null) {\n                    cipher.login.uris = [];\n                    for (let i = 0; i < model.login.uris.length; i++) {\n                        const loginUri = new LoginUri();\n                        loginUri.match = model.login.uris[i].match;\n                        await this.encryptObjProperty(model.login.uris[i], loginUri, {\n                            uri: null,\n                        }, key);\n                        cipher.login.uris.push(loginUri);\n                    }\n                }\n                return;\n            case CipherType.SecureNote:\n                cipher.secureNote = new SecureNote();\n                cipher.secureNote.type = model.secureNote.type;\n                return;\n            case CipherType.Card:\n                cipher.card = new Card();\n                await this.encryptObjProperty(model.card, cipher.card, {\n                    cardholderName: null,\n                    brand: null,\n                    number: null,\n                    expMonth: null,\n                    expYear: null,\n                    code: null,\n                }, key);\n                return;\n            case CipherType.Identity:\n                cipher.identity = new Identity();\n                await this.encryptObjProperty(model.identity, cipher.identity, {\n                    title: null,\n                    firstName: null,\n                    middleName: null,\n                    lastName: null,\n                    address1: null,\n                    address2: null,\n                    address3: null,\n                    city: null,\n                    state: null,\n                    postalCode: null,\n                    country: null,\n                    company: null,\n                    email: null,\n                    phone: null,\n                    ssn: null,\n                    username: null,\n                    passportNumber: null,\n                    licenseNumber: null,\n                }, key);\n                return;\n            default:\n                throw new Error('Unknown cipher type.');\n        }\n    }\n\n    private async getCipherForUrl(url: string, lastUsed: boolean, lastLaunched: boolean, autofillOnPageLoad: boolean): Promise<CipherView> {\n        const cacheKey = autofillOnPageLoad ? 'autofillOnPageLoad-' + url : url;\n\n        if (!this.sortedCiphersCache.isCached(cacheKey)) {\n            let ciphers = await this.getAllDecryptedForUrl(url);\n            if (!ciphers) {\n                return null;\n            }\n\n            if (autofillOnPageLoad) {\n                const autofillOnPageLoadDefault = await this.storageService.get(ConstantsService.autoFillOnPageLoadDefaultKey);\n                ciphers = ciphers.filter(cipher => cipher.login.autofillOnPageLoad ||\n                    (cipher.login.autofillOnPageLoad == null && autofillOnPageLoadDefault !== false));\n                if (ciphers.length === 0) {\n                    return null;\n                }\n            }\n\n            this.sortedCiphersCache.addCiphers(cacheKey, ciphers);\n        }\n\n        if (lastLaunched) {\n            return this.sortedCiphersCache.getLastLaunched(cacheKey);\n        } else if (lastUsed) {\n            return this.sortedCiphersCache.getLastUsed(cacheKey);\n        } else {\n            return this.sortedCiphersCache.getNext(cacheKey);\n        }\n    }\n}\n","export class CipherBulkMoveRequest {\n    ids: string[];\n    folderId: string;\n\n    constructor(ids: string[], folderId: string) {\n        this.ids = ids == null ? [] : ids;\n        this.folderId = folderId;\n    }\n}\n","export class CipherBulkRestoreRequest {\n    ids: string[];\n\n    constructor(ids: string[]) {\n        this.ids = ids == null ? [] : ids;\n    }\n}\n","import { CipherWithIdRequest } from './cipherWithIdRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherBulkShareRequest {\n    ciphers: CipherWithIdRequest[];\n    collectionIds: string[];\n\n    constructor(ciphers: Cipher[], collectionIds: string[]) {\n        if (ciphers != null) {\n            this.ciphers = [];\n            ciphers.forEach(c => {\n                this.ciphers.push(new CipherWithIdRequest(c));\n            });\n        }\n        this.collectionIds = collectionIds;\n    }\n}\n","import { CipherRequest } from './cipherRequest';\n\nimport { Cipher } from '../domain/cipher';\n\nexport class CipherShareRequest {\n    cipher: CipherRequest;\n    collectionIds: string[];\n\n    constructor(cipher: Cipher) {\n        this.cipher = new CipherRequest(cipher);\n        this.collectionIds = cipher.collectionIds;\n    }\n}\n","import { CipherView } from '../view/cipherView';\n\nconst CacheTTL = 3000;\n\nexport class SortedCiphersCache {\n    private readonly sortedCiphersByUrl: Map<string, Ciphers> = new Map<string, Ciphers>();\n    private readonly timeouts: Map<string, any> = new Map<string, any>();\n\n    constructor(private readonly comparator: (a: CipherView, b: CipherView) => number) { }\n\n    isCached(url: string) {\n        return this.sortedCiphersByUrl.has(url);\n    }\n\n    addCiphers(url: string, ciphers: CipherView[]) {\n        ciphers.sort(this.comparator);\n        this.sortedCiphersByUrl.set(url, new Ciphers(ciphers));\n        this.resetTimer(url);\n    }\n\n    getLastUsed(url: string) {\n        this.resetTimer(url);\n        return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastUsed() : null;\n    }\n\n    getLastLaunched(url: string) {\n        return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getLastLaunched() : null;\n    }\n\n    getNext(url: string) {\n        this.resetTimer(url);\n        return this.isCached(url) ? this.sortedCiphersByUrl.get(url).getNext() : null;\n    }\n\n    updateLastUsedIndex(url: string) {\n        if (this.isCached(url)) {\n            this.sortedCiphersByUrl.get(url).updateLastUsedIndex();\n        }\n    }\n\n    clear() {\n        this.sortedCiphersByUrl.clear();\n        this.timeouts.clear();\n    }\n\n    private resetTimer(url: string) {\n        clearTimeout(this.timeouts.get(url));\n        this.timeouts.set(url, setTimeout(() => {\n            this.sortedCiphersByUrl.delete(url);\n            this.timeouts.delete(url);\n        }, CacheTTL));\n    }\n}\n\nclass Ciphers {\n    lastUsedIndex = -1;\n\n    constructor(private readonly ciphers: CipherView[]) { }\n\n    getLastUsed() {\n        this.lastUsedIndex = Math.max(this.lastUsedIndex, 0);\n        return this.ciphers[this.lastUsedIndex];\n    }\n\n    getLastLaunched() {\n        const usedCiphers = this.ciphers.filter(cipher => cipher.localData?.lastLaunched);\n        const sortedCiphers = usedCiphers.sort((x, y) => y.localData.lastLaunched.valueOf() - x.localData.lastLaunched.valueOf());\n        return sortedCiphers[0];\n    }\n\n    getNextIndex() {\n        return (this.lastUsedIndex + 1) % this.ciphers.length;\n    }\n\n    getNext() {\n        return this.ciphers[this.getNextIndex()];\n    }\n\n    updateLastUsedIndex() {\n        this.lastUsedIndex = this.getNextIndex();\n    }\n}\n","import { CollectionData } from '../models/data/collectionData';\n\nimport { Collection } from '../models/domain/collection';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nimport { CollectionService as CollectionServiceAbstraction } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n    collectionsPrefix: 'collections_',\n};\nconst NestingDelimiter = '/';\n\nexport class CollectionService implements CollectionServiceAbstraction {\n    decryptedCollectionCache: CollectionView[];\n\n    constructor(private cryptoService: CryptoService, private userService: UserService,\n        private storageService: StorageService, private i18nService: I18nService) {\n    }\n\n    clearCache(): void {\n        this.decryptedCollectionCache = null;\n    }\n\n    async encrypt(model: CollectionView): Promise<Collection> {\n        if (model.organizationId == null) {\n            throw new Error('Collection has no organization id.');\n        }\n        const key = await this.cryptoService.getOrgKey(model.organizationId);\n        if (key == null) {\n            throw new Error('No key for this collection\\'s organization.');\n        }\n        const collection = new Collection();\n        collection.id = model.id;\n        collection.organizationId = model.organizationId;\n        collection.readOnly = model.readOnly;\n        collection.name = await this.cryptoService.encrypt(model.name, key);\n        return collection;\n    }\n\n    async decryptMany(collections: Collection[]): Promise<CollectionView[]> {\n        if (collections == null) {\n            return [];\n        }\n        const decCollections: CollectionView[] = [];\n        const promises: Promise<any>[] = [];\n        collections.forEach(collection => {\n            promises.push(collection.decrypt().then(c => decCollections.push(c)));\n        });\n        await Promise.all(promises);\n        return decCollections.sort(Utils.getSortFunction(this.i18nService, 'name'));\n    }\n\n    async get(id: string): Promise<Collection> {\n        const userId = await this.userService.getUserId();\n        const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n            Keys.collectionsPrefix + userId);\n        if (collections == null || !collections.hasOwnProperty(id)) {\n            return null;\n        }\n\n        return new Collection(collections[id]);\n    }\n\n    async getAll(): Promise<Collection[]> {\n        const userId = await this.userService.getUserId();\n        const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n            Keys.collectionsPrefix + userId);\n        const response: Collection[] = [];\n        for (const id in collections) {\n            if (collections.hasOwnProperty(id)) {\n                response.push(new Collection(collections[id]));\n            }\n        }\n        return response;\n    }\n\n    async getAllDecrypted(): Promise<CollectionView[]> {\n        if (this.decryptedCollectionCache != null) {\n            return this.decryptedCollectionCache;\n        }\n\n        const hasKey = await this.cryptoService.hasKey();\n        if (!hasKey) {\n            throw new Error('No key.');\n        }\n\n        const collections = await this.getAll();\n        this.decryptedCollectionCache = await this.decryptMany(collections);\n        return this.decryptedCollectionCache;\n    }\n\n    async getAllNested(collections: CollectionView[] = null): Promise<TreeNode<CollectionView>[]> {\n        if (collections == null) {\n            collections = await this.getAllDecrypted();\n        }\n        const nodes: TreeNode<CollectionView>[] = [];\n        collections.forEach(c => {\n            const collectionCopy = new CollectionView();\n            collectionCopy.id = c.id;\n            collectionCopy.organizationId = c.organizationId;\n            const parts = c.name != null ? c.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n            ServiceUtils.nestedTraverse(nodes, 0, parts, collectionCopy, null, NestingDelimiter);\n        });\n        return nodes;\n    }\n\n    async getNested(id: string): Promise<TreeNode<CollectionView>> {\n        const collections = await this.getAllNested();\n        return ServiceUtils.getTreeNodeObject(collections, id) as TreeNode<CollectionView>;\n    }\n\n    async upsert(collection: CollectionData | CollectionData[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        let collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n            Keys.collectionsPrefix + userId);\n        if (collections == null) {\n            collections = {};\n        }\n\n        if (collection instanceof CollectionData) {\n            const c = collection as CollectionData;\n            collections[c.id] = c;\n        } else {\n            (collection as CollectionData[]).forEach(c => {\n                collections[c.id] = c;\n            });\n        }\n\n        await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n        this.decryptedCollectionCache = null;\n    }\n\n    async replace(collections: { [id: string]: CollectionData; }): Promise<any> {\n        const userId = await this.userService.getUserId();\n        await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n        this.decryptedCollectionCache = null;\n    }\n\n    async clear(userId: string): Promise<any> {\n        await this.storageService.remove(Keys.collectionsPrefix + userId);\n        this.decryptedCollectionCache = null;\n    }\n\n    async delete(id: string | string[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        const collections = await this.storageService.get<{ [id: string]: CollectionData; }>(\n            Keys.collectionsPrefix + userId);\n        if (collections == null) {\n            return;\n        }\n\n        if (typeof id === 'string') {\n            const i = id as string;\n            delete collections[id];\n        } else {\n            (id as string[]).forEach(i => {\n                delete collections[i];\n            });\n        }\n\n        await this.storageService.save(Keys.collectionsPrefix + userId, collections);\n        this.decryptedCollectionCache = null;\n    }\n}\n","export class TreeNode<T extends ITreeNodeObject> {\n    parent: T;\n    node: T;\n    children: TreeNode<T>[] = [];\n\n    constructor(node: T, name: string, parent: T) {\n        this.parent = parent;\n        this.node = node;\n        this.node.name = name;\n    }\n}\n\nexport interface ITreeNodeObject {\n    id: string;\n    name: string;\n}\n","export enum LogLevelType {\n    Debug,\n    Info,\n    Warning,\n    Error,\n}\n","import { CryptoService } from '../abstractions/crypto.service';\n\nexport class ContainerService {\n    constructor(private cryptoService: CryptoService) {\n    }\n\n    // deprecated, use attachToGlobal instead\n    attachToWindow(win: any) {\n        this.attachToGlobal(win);\n    }\n\n    attachToGlobal(global: any) {\n        if (!global.bitwardenContainerService) {\n            global.bitwardenContainerService = this;\n        }\n    }\n\n    getCryptoService(): CryptoService {\n        return this.cryptoService;\n    }\n}\n","import * as bigInt from 'big-integer';\n\nimport { EncryptionType } from '../enums/encryptionType';\nimport { HashPurpose } from '../enums/hashPurpose';\nimport { KdfType } from '../enums/kdfType';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncryptedObject } from '../models/domain/encryptedObject';\nimport { EncString } from '../models/domain/encString';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { ProfileOrganizationResponse } from '../models/response/profileOrganizationResponse';\n\nimport { CryptoService as CryptoServiceAbstraction } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { LogService } from '../abstractions/log.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport {\n    KeySuffixOptions,\n    StorageService,\n} from '../abstractions/storage.service';\n\nimport { ConstantsService } from './constants.service';\n\nimport { sequentialize } from '../misc/sequentialize';\nimport { Utils } from '../misc/utils';\nimport { EEFLongWordList } from '../misc/wordlist';\nimport { ProfileProviderOrganizationResponse } from '../models/response/profileProviderOrganizationResponse';\nimport { ProfileProviderResponse } from '../models/response/profileProviderResponse';\n\nexport const Keys = {\n    key: 'key', // Master Key\n    encOrgKeys: 'encOrgKeys',\n    encProviderKeys: 'encProviderKeys',\n    encPrivateKey: 'encPrivateKey',\n    encKey: 'encKey', // Generated Symmetric Key\n    keyHash: 'keyHash',\n};\n\nexport class CryptoService implements CryptoServiceAbstraction {\n    private key: SymmetricCryptoKey;\n    private encKey: SymmetricCryptoKey;\n    private legacyEtmKey: SymmetricCryptoKey;\n    private keyHash: string;\n    private publicKey: ArrayBuffer;\n    private privateKey: ArrayBuffer;\n    private orgKeys: Map<string, SymmetricCryptoKey>;\n    private providerKeys: Map<string, SymmetricCryptoKey>;\n\n    constructor(private storageService: StorageService, protected secureStorageService: StorageService,\n        private cryptoFunctionService: CryptoFunctionService, protected platformUtilService: PlatformUtilsService,\n        protected logService: LogService) {\n    }\n\n    async setKey(key: SymmetricCryptoKey): Promise<any> {\n        this.key = key;\n\n        await this.storeKey(key);\n    }\n\n    setKeyHash(keyHash: string): Promise<{}> {\n        this.keyHash = keyHash;\n        return this.storageService.save(Keys.keyHash, keyHash);\n    }\n\n    async setEncKey(encKey: string): Promise<{}> {\n        if (encKey == null) {\n            return;\n        }\n\n        await this.storageService.save(Keys.encKey, encKey);\n        this.encKey = null;\n    }\n\n    async setEncPrivateKey(encPrivateKey: string): Promise<{}> {\n        if (encPrivateKey == null) {\n            return;\n        }\n\n        await this.storageService.save(Keys.encPrivateKey, encPrivateKey);\n        this.privateKey = null;\n    }\n\n    async setOrgKeys(orgs: ProfileOrganizationResponse[], providerOrgs: ProfileProviderOrganizationResponse[]): Promise<{}> {\n        const orgKeys: any = {};\n        orgs.forEach(org => {\n            orgKeys[org.id] = org.key;\n        });\n\n        for (const providerOrg of providerOrgs) {\n            // Convert provider encrypted keys to user encrypted.\n            const providerKey = await this.getProviderKey(providerOrg.providerId);\n            const decValue = await this.decryptToBytes(new EncString(providerOrg.key), providerKey);\n            orgKeys[providerOrg.id] = await (await this.rsaEncrypt(decValue)).encryptedString;\n        }\n\n        this.orgKeys = null;\n        return this.storageService.save(Keys.encOrgKeys, orgKeys);\n    }\n\n    setProviderKeys(providers: ProfileProviderResponse[]): Promise<{}> {\n        const providerKeys: any = {};\n        providers.forEach(provider => {\n            providerKeys[provider.id] = provider.key;\n        });\n\n        this.providerKeys = null;\n        return this.storageService.save(Keys.encProviderKeys, providerKeys);\n    }\n\n    async getKey(keySuffix?: KeySuffixOptions): Promise<SymmetricCryptoKey> {\n        if (this.key != null) {\n            return this.key;\n        }\n\n        keySuffix ||= 'auto';\n        const symmetricKey = await this.getKeyFromStorage(keySuffix);\n\n        if (symmetricKey != null) {\n            this.setKey(symmetricKey);\n        }\n\n        return symmetricKey;\n    }\n\n    async getKeyFromStorage(keySuffix: KeySuffixOptions): Promise<SymmetricCryptoKey> {\n        const key = await this.retrieveKeyFromStorage(keySuffix);\n        if (key != null) {\n\n            const symmetricKey = new SymmetricCryptoKey(Utils.fromB64ToArray(key).buffer);\n\n            if (!await this.validateKey(symmetricKey)) {\n                this.logService.warning('Wrong key, throwing away stored key');\n                this.secureStorageService.remove(Keys.key, { keySuffix: keySuffix });\n                return null;\n            }\n\n            return symmetricKey;\n        }\n        return null;\n    }\n\n    async getKeyHash(): Promise<string> {\n        if (this.keyHash != null) {\n            return this.keyHash;\n        }\n\n        const keyHash = await this.storageService.get<string>(Keys.keyHash);\n        if (keyHash != null) {\n            this.keyHash = keyHash;\n        }\n\n        return keyHash == null ? null : this.keyHash;\n    }\n\n    async compareAndUpdateKeyHash(masterPassword: string, key: SymmetricCryptoKey): Promise<boolean> {\n        const storedKeyHash = await this.getKeyHash();\n        if (masterPassword != null && storedKeyHash != null) {\n            const localKeyHash = await this.hashPassword(masterPassword, key, HashPurpose.LocalAuthorization);\n            if (localKeyHash != null && storedKeyHash === localKeyHash) {\n                return true;\n            }\n\n            // TODO: remove serverKeyHash check in 1-2 releases after everyone's keyHash has been updated\n            const serverKeyHash = await this.hashPassword(masterPassword, key, HashPurpose.ServerAuthorization);\n            if (serverKeyHash != null && storedKeyHash === serverKeyHash) {\n                await this.setKeyHash(localKeyHash);\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    @sequentialize(() => 'getEncKey')\n    async getEncKey(key: SymmetricCryptoKey = null): Promise<SymmetricCryptoKey> {\n        if (this.encKey != null) {\n            return this.encKey;\n        }\n\n        const encKey = await this.storageService.get<string>(Keys.encKey);\n        if (encKey == null) {\n            return null;\n        }\n\n        if (key == null) {\n            key = await this.getKey();\n        }\n        if (key == null) {\n            return null;\n        }\n\n        let decEncKey: ArrayBuffer;\n        const encKeyCipher = new EncString(encKey);\n        if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_B64) {\n            decEncKey = await this.decryptToBytes(encKeyCipher, key);\n        } else if (encKeyCipher.encryptionType === EncryptionType.AesCbc256_HmacSha256_B64) {\n            const newKey = await this.stretchKey(key);\n            decEncKey = await this.decryptToBytes(encKeyCipher, newKey);\n        } else {\n            throw new Error('Unsupported encKey type.');\n        }\n\n        if (decEncKey == null) {\n            return null;\n        }\n        this.encKey = new SymmetricCryptoKey(decEncKey);\n        return this.encKey;\n    }\n\n    async getPublicKey(): Promise<ArrayBuffer> {\n        if (this.publicKey != null) {\n            return this.publicKey;\n        }\n\n        const privateKey = await this.getPrivateKey();\n        if (privateKey == null) {\n            return null;\n        }\n\n        this.publicKey = await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n        return this.publicKey;\n    }\n\n    async getPrivateKey(): Promise<ArrayBuffer> {\n        if (this.privateKey != null) {\n            return this.privateKey;\n        }\n\n        const encPrivateKey = await this.storageService.get<string>(Keys.encPrivateKey);\n        if (encPrivateKey == null) {\n            return null;\n        }\n\n        this.privateKey = await this.decryptToBytes(new EncString(encPrivateKey), null);\n        return this.privateKey;\n    }\n\n    async getFingerprint(userId: string, publicKey?: ArrayBuffer): Promise<string[]> {\n        if (publicKey == null) {\n            publicKey = await this.getPublicKey();\n        }\n        if (publicKey === null) {\n            throw new Error('No public key available.');\n        }\n        const keyFingerprint = await this.cryptoFunctionService.hash(publicKey, 'sha256');\n        const userFingerprint = await this.cryptoFunctionService.hkdfExpand(keyFingerprint, userId, 32, 'sha256');\n        return this.hashPhrase(userFingerprint);\n    }\n\n    @sequentialize(() => 'getOrgKeys')\n    async getOrgKeys(): Promise<Map<string, SymmetricCryptoKey>> {\n        if (this.orgKeys != null && this.orgKeys.size > 0) {\n            return this.orgKeys;\n        }\n\n        const encOrgKeys = await this.storageService.get<any>(Keys.encOrgKeys);\n        if (encOrgKeys == null) {\n            return null;\n        }\n\n        const orgKeys: Map<string, SymmetricCryptoKey> = new Map<string, SymmetricCryptoKey>();\n        let setKey = false;\n\n        for (const orgId in encOrgKeys) {\n            if (!encOrgKeys.hasOwnProperty(orgId)) {\n                continue;\n            }\n\n            const decValue = await this.rsaDecrypt(encOrgKeys[orgId]);\n            orgKeys.set(orgId, new SymmetricCryptoKey(decValue));\n            setKey = true;\n        }\n\n        if (setKey) {\n            this.orgKeys = orgKeys;\n        }\n\n        return this.orgKeys;\n    }\n\n    async getOrgKey(orgId: string): Promise<SymmetricCryptoKey> {\n        if (orgId == null) {\n            return null;\n        }\n\n        const orgKeys = await this.getOrgKeys();\n        if (orgKeys == null || !orgKeys.has(orgId)) {\n            return null;\n        }\n\n        return orgKeys.get(orgId);\n    }\n\n    @sequentialize(() => 'getProviderKeys')\n    async getProviderKeys(): Promise<Map<string, SymmetricCryptoKey>> {\n        if (this.providerKeys != null && this.providerKeys.size > 0) {\n            return this.providerKeys;\n        }\n\n        const encProviderKeys = await this.storageService.get<any>(Keys.encProviderKeys);\n        if (encProviderKeys == null) {\n            return null;\n        }\n\n        const providerKeys: Map<string, SymmetricCryptoKey> = new Map<string, SymmetricCryptoKey>();\n        let setKey = false;\n\n        for (const orgId in encProviderKeys) {\n            if (!encProviderKeys.hasOwnProperty(orgId)) {\n                continue;\n            }\n\n            const decValue = await this.rsaDecrypt(encProviderKeys[orgId]);\n            providerKeys.set(orgId, new SymmetricCryptoKey(decValue));\n            setKey = true;\n        }\n\n        if (setKey) {\n            this.providerKeys = providerKeys;\n        }\n\n        return this.providerKeys;\n    }\n\n    async getProviderKey(providerId: string): Promise<SymmetricCryptoKey> {\n        if (providerId == null) {\n            return null;\n        }\n\n        const providerKeys = await this.getProviderKeys();\n        if (providerKeys == null || !providerKeys.has(providerId)) {\n            return null;\n        }\n\n        return providerKeys.get(providerId);\n    }\n\n    async hasKey(): Promise<boolean> {\n        return this.hasKeyInMemory() || await this.hasKeyStored('auto') || await this.hasKeyStored('biometric');\n    }\n\n    hasKeyInMemory(): boolean {\n        return this.key != null;\n    }\n\n    hasKeyStored(keySuffix: KeySuffixOptions): Promise<boolean> {\n        return this.secureStorageService.has(Keys.key, { keySuffix: keySuffix });\n    }\n\n    async hasEncKey(): Promise<boolean> {\n        const encKey = await this.storageService.get<string>(Keys.encKey);\n        return encKey != null;\n    }\n\n    async clearKey(clearSecretStorage: boolean = true): Promise<any> {\n        this.key = this.legacyEtmKey = null;\n        if (clearSecretStorage) {\n            this.clearStoredKey('auto');\n            this.clearStoredKey('biometric');\n        }\n    }\n\n    async clearStoredKey(keySuffix: KeySuffixOptions) {\n        await this.secureStorageService.remove(Keys.key, { keySuffix: keySuffix });\n    }\n\n    clearKeyHash(): Promise<any> {\n        this.keyHash = null;\n        return this.storageService.remove(Keys.keyHash);\n    }\n\n    clearEncKey(memoryOnly?: boolean): Promise<any> {\n        this.encKey = null;\n        if (memoryOnly) {\n            return Promise.resolve();\n        }\n        return this.storageService.remove(Keys.encKey);\n    }\n\n    clearKeyPair(memoryOnly?: boolean): Promise<any> {\n        this.privateKey = null;\n        this.publicKey = null;\n        if (memoryOnly) {\n            return Promise.resolve();\n        }\n        return this.storageService.remove(Keys.encPrivateKey);\n    }\n\n    clearOrgKeys(memoryOnly?: boolean): Promise<any> {\n        this.orgKeys = null;\n        if (memoryOnly) {\n            return Promise.resolve();\n        }\n        return this.storageService.remove(Keys.encOrgKeys);\n    }\n\n    clearProviderKeys(memoryOnly?: boolean): Promise<any> {\n        this.providerKeys = null;\n        if (memoryOnly) {\n            return Promise.resolve();\n        }\n        return this.storageService.remove(Keys.encOrgKeys);\n    }\n\n    clearPinProtectedKey(): Promise<any> {\n        return this.storageService.remove(ConstantsService.pinProtectedKey);\n    }\n\n    async clearKeys(): Promise<any> {\n        await this.clearKey();\n        await this.clearKeyHash();\n        await this.clearOrgKeys();\n        await this.clearProviderKeys();\n        await this.clearEncKey();\n        await this.clearKeyPair();\n        await this.clearPinProtectedKey();\n    }\n\n    async toggleKey(): Promise<any> {\n        const key = await this.getKey();\n\n        await this.setKey(key);\n    }\n\n    async makeKey(password: string, salt: string, kdf: KdfType, kdfIterations: number):\n        Promise<SymmetricCryptoKey> {\n        let key: ArrayBuffer = null;\n        if (kdf == null || kdf === KdfType.PBKDF2_SHA256) {\n            if (kdfIterations == null) {\n                kdfIterations = 5000;\n            } else if (kdfIterations < 5000) {\n                throw new Error('PBKDF2 iteration minimum is 5000.');\n            }\n            key = await this.cryptoFunctionService.pbkdf2(password, salt, 'sha256', kdfIterations);\n        } else {\n            throw new Error('Unknown Kdf.');\n        }\n        return new SymmetricCryptoKey(key);\n    }\n\n    async makeKeyFromPin(pin: string, salt: string, kdf: KdfType, kdfIterations: number,\n        protectedKeyCs: EncString = null):\n        Promise<SymmetricCryptoKey> {\n        if (protectedKeyCs == null) {\n            const pinProtectedKey = await this.storageService.get<string>(ConstantsService.pinProtectedKey);\n            if (pinProtectedKey == null) {\n                throw new Error('No PIN protected key found.');\n            }\n            protectedKeyCs = new EncString(pinProtectedKey);\n        }\n        const pinKey = await this.makePinKey(pin, salt, kdf, kdfIterations);\n        const decKey = await this.decryptToBytes(protectedKeyCs, pinKey);\n        return new SymmetricCryptoKey(decKey);\n    }\n\n    async makeShareKey(): Promise<[EncString, SymmetricCryptoKey]> {\n        const shareKey = await this.cryptoFunctionService.randomBytes(64);\n        const publicKey = await this.getPublicKey();\n        const encShareKey = await this.rsaEncrypt(shareKey, publicKey);\n        return [encShareKey, new SymmetricCryptoKey(shareKey)];\n    }\n\n    async makeKeyPair(key?: SymmetricCryptoKey): Promise<[string, EncString]> {\n        const keyPair = await this.cryptoFunctionService.rsaGenerateKeyPair(2048);\n        const publicB64 = Utils.fromBufferToB64(keyPair[0]);\n        const privateEnc = await this.encrypt(keyPair[1], key);\n        return [publicB64, privateEnc];\n    }\n\n    async makePinKey(pin: string, salt: string, kdf: KdfType, kdfIterations: number): Promise<SymmetricCryptoKey> {\n        const pinKey = await this.makeKey(pin, salt, kdf, kdfIterations);\n        return await this.stretchKey(pinKey);\n    }\n\n    async makeSendKey(keyMaterial: ArrayBuffer): Promise<SymmetricCryptoKey> {\n        const sendKey = await this.cryptoFunctionService.hkdf(keyMaterial, 'bitwarden-send', 'send', 64, 'sha256');\n        return new SymmetricCryptoKey(sendKey);\n    }\n\n    async hashPassword(password: string, key: SymmetricCryptoKey, hashPurpose?: HashPurpose): Promise<string> {\n        if (key == null) {\n            key = await this.getKey();\n        }\n        if (password == null || key == null) {\n            throw new Error('Invalid parameters.');\n        }\n\n        const iterations = hashPurpose === HashPurpose.LocalAuthorization ? 2 : 1;\n        const hash = await this.cryptoFunctionService.pbkdf2(key.key, password, 'sha256', iterations);\n        return Utils.fromBufferToB64(hash);\n    }\n\n    async makeEncKey(key: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n        const theKey = await this.getKeyForEncryption(key);\n        const encKey = await this.cryptoFunctionService.randomBytes(64);\n        return this.buildEncKey(theKey, encKey);\n    }\n\n    async remakeEncKey(key: SymmetricCryptoKey, encKey?: SymmetricCryptoKey): Promise<[SymmetricCryptoKey, EncString]> {\n        if (encKey == null) {\n            encKey = await this.getEncKey();\n        }\n        return this.buildEncKey(key, encKey.key);\n    }\n\n    async encrypt(plainValue: string | ArrayBuffer, key?: SymmetricCryptoKey): Promise<EncString> {\n        if (plainValue == null) {\n            return Promise.resolve(null);\n        }\n\n        let plainBuf: ArrayBuffer;\n        if (typeof (plainValue) === 'string') {\n            plainBuf = Utils.fromUtf8ToArray(plainValue).buffer;\n        } else {\n            plainBuf = plainValue;\n        }\n\n        const encObj = await this.aesEncrypt(plainBuf, key);\n        const iv = Utils.fromBufferToB64(encObj.iv);\n        const data = Utils.fromBufferToB64(encObj.data);\n        const mac = encObj.mac != null ? Utils.fromBufferToB64(encObj.mac) : null;\n        return new EncString(encObj.key.encType, data, iv, mac);\n    }\n\n    async encryptToBytes(plainValue: ArrayBuffer, key?: SymmetricCryptoKey): Promise<EncArrayBuffer> {\n        const encValue = await this.aesEncrypt(plainValue, key);\n        let macLen = 0;\n        if (encValue.mac != null) {\n            macLen = encValue.mac.byteLength;\n        }\n\n        const encBytes = new Uint8Array(1 + encValue.iv.byteLength + macLen + encValue.data.byteLength);\n        encBytes.set([encValue.key.encType]);\n        encBytes.set(new Uint8Array(encValue.iv), 1);\n        if (encValue.mac != null) {\n            encBytes.set(new Uint8Array(encValue.mac), 1 + encValue.iv.byteLength);\n        }\n\n        encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength + macLen);\n        return new EncArrayBuffer(encBytes.buffer);\n    }\n\n    async rsaEncrypt(data: ArrayBuffer, publicKey?: ArrayBuffer): Promise<EncString> {\n        if (publicKey == null) {\n            publicKey = await this.getPublicKey();\n        }\n        if (publicKey == null) {\n            throw new Error('Public key unavailable.');\n        }\n\n        const encBytes = await this.cryptoFunctionService.rsaEncrypt(data, publicKey, 'sha1');\n        return new EncString(EncryptionType.Rsa2048_OaepSha1_B64, Utils.fromBufferToB64(encBytes));\n    }\n\n    async rsaDecrypt(encValue: string, privateKeyValue?: ArrayBuffer): Promise<ArrayBuffer> {\n        const headerPieces = encValue.split('.');\n        let encType: EncryptionType = null;\n        let encPieces: string[];\n\n        if (headerPieces.length === 1) {\n            encType = EncryptionType.Rsa2048_OaepSha256_B64;\n            encPieces = [headerPieces[0]];\n        } else if (headerPieces.length === 2) {\n            try {\n                encType = parseInt(headerPieces[0], null);\n                encPieces = headerPieces[1].split('|');\n            } catch (e) {\n                this.logService.error(e);\n            }\n        }\n\n        switch (encType) {\n            case EncryptionType.Rsa2048_OaepSha256_B64:\n            case EncryptionType.Rsa2048_OaepSha1_B64:\n            // HmacSha256 types are deprecated\n            case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n            case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n                break;\n            default:\n                throw new Error('encType unavailable.');\n        }\n\n        if (encPieces == null || encPieces.length <= 0) {\n            throw new Error('encPieces unavailable.');\n        }\n\n        const data = Utils.fromB64ToArray(encPieces[0]).buffer;\n        const privateKey = privateKeyValue ?? await this.getPrivateKey();\n        if (privateKey == null) {\n            throw new Error('No private key.');\n        }\n\n        let alg: 'sha1' | 'sha256' = 'sha1';\n        switch (encType) {\n            case EncryptionType.Rsa2048_OaepSha256_B64:\n            case EncryptionType.Rsa2048_OaepSha256_HmacSha256_B64:\n                alg = 'sha256';\n                break;\n            case EncryptionType.Rsa2048_OaepSha1_B64:\n            case EncryptionType.Rsa2048_OaepSha1_HmacSha256_B64:\n                break;\n            default:\n                throw new Error('encType unavailable.');\n        }\n\n        return this.cryptoFunctionService.rsaDecrypt(data, privateKey, alg);\n    }\n\n    async decryptToBytes(encString: EncString, key?: SymmetricCryptoKey): Promise<ArrayBuffer> {\n        const iv = Utils.fromB64ToArray(encString.iv).buffer;\n        const data = Utils.fromB64ToArray(encString.data).buffer;\n        const mac = encString.mac ? Utils.fromB64ToArray(encString.mac).buffer : null;\n        const decipher = await this.aesDecryptToBytes(encString.encryptionType, data, iv, mac, key);\n        if (decipher == null) {\n            return null;\n        }\n\n        return decipher;\n    }\n\n    async decryptToUtf8(encString: EncString, key?: SymmetricCryptoKey): Promise<string> {\n        return await this.aesDecryptToUtf8(encString.encryptionType, encString.data,\n            encString.iv, encString.mac, key);\n    }\n\n    async decryptFromBytes(encBuf: ArrayBuffer, key: SymmetricCryptoKey): Promise<ArrayBuffer> {\n        if (encBuf == null) {\n            throw new Error('no encBuf.');\n        }\n\n        const encBytes = new Uint8Array(encBuf);\n        const encType = encBytes[0];\n        let ctBytes: Uint8Array = null;\n        let ivBytes: Uint8Array = null;\n        let macBytes: Uint8Array = null;\n\n        switch (encType) {\n            case EncryptionType.AesCbc128_HmacSha256_B64:\n            case EncryptionType.AesCbc256_HmacSha256_B64:\n                if (encBytes.length <= 49) { // 1 + 16 + 32 + ctLength\n                    return null;\n                }\n\n                ivBytes = encBytes.slice(1, 17);\n                macBytes = encBytes.slice(17, 49);\n                ctBytes = encBytes.slice(49);\n                break;\n            case EncryptionType.AesCbc256_B64:\n                if (encBytes.length <= 17) { // 1 + 16 + ctLength\n                    return null;\n                }\n\n                ivBytes = encBytes.slice(1, 17);\n                ctBytes = encBytes.slice(17);\n                break;\n            default:\n                return null;\n        }\n\n        return await this.aesDecryptToBytes(encType, ctBytes.buffer, ivBytes.buffer,\n            macBytes != null ? macBytes.buffer : null, key);\n    }\n\n    // EFForg/OpenWireless\n    // ref https://github.com/EFForg/OpenWireless/blob/master/app/js/diceware.js\n    async randomNumber(min: number, max: number): Promise<number> {\n        let rval = 0;\n        const range = max - min + 1;\n        const bitsNeeded = Math.ceil(Math.log2(range));\n        if (bitsNeeded > 53) {\n            throw new Error('We cannot generate numbers larger than 53 bits.');\n        }\n\n        const bytesNeeded = Math.ceil(bitsNeeded / 8);\n        const mask = Math.pow(2, bitsNeeded) - 1;\n        // 7776 -> (2^13 = 8192) -1 == 8191 or 0x00001111 11111111\n\n        // Fill a byte array with N random numbers\n        const byteArray = new Uint8Array(await this.cryptoFunctionService.randomBytes(bytesNeeded));\n\n        let p = (bytesNeeded - 1) * 8;\n        for (let i = 0; i < bytesNeeded; i++) {\n            rval += byteArray[i] * Math.pow(2, p);\n            p -= 8;\n        }\n\n        // Use & to apply the mask and reduce the number of recursive lookups\n        // tslint:disable-next-line\n        rval = rval & mask;\n\n        if (rval >= range) {\n            // Integer out of acceptable range\n            return this.randomNumber(min, max);\n        }\n\n        // Return an integer that falls within the range\n        return min + rval;\n    }\n\n    async validateKey(key: SymmetricCryptoKey) {\n        try {\n            const encPrivateKey = await this.storageService.get<string>(Keys.encPrivateKey);\n            const encKey = await this.getEncKey(key);\n            if (encPrivateKey == null || encKey == null) {\n                return false;\n            }\n\n            const privateKey = await this.decryptToBytes(new EncString(encPrivateKey), encKey);\n            await this.cryptoFunctionService.rsaExtractPublicKey(privateKey);\n        } catch (e) {\n            return false;\n        }\n\n        return true;\n    }\n\n    // Helpers\n\n    protected async storeKey(key: SymmetricCryptoKey) {\n        if (await this.shouldStoreKey('auto') || await this.shouldStoreKey('biometric')) {\n            this.secureStorageService.save(Keys.key, key.keyB64);\n        } else {\n            this.secureStorageService.remove(Keys.key);\n        }\n    }\n\n    protected async shouldStoreKey(keySuffix: KeySuffixOptions) {\n        let shouldStoreKey = false;\n        if (keySuffix === 'auto') {\n            const vaultTimeout = await this.storageService.get<number>(ConstantsService.vaultTimeoutKey);\n            shouldStoreKey = vaultTimeout == null;\n        } else if (keySuffix === 'biometric') {\n            const biometricUnlock = await this.storageService.get<boolean>(ConstantsService.biometricUnlockKey);\n            shouldStoreKey = biometricUnlock && this.platformUtilService.supportsSecureStorage();\n        }\n        return shouldStoreKey;\n    }\n\n    protected retrieveKeyFromStorage(keySuffix: KeySuffixOptions) {\n        return this.secureStorageService.get<string>(Keys.key, { keySuffix: keySuffix });\n    }\n\n    private async aesEncrypt(data: ArrayBuffer, key: SymmetricCryptoKey): Promise<EncryptedObject> {\n        const obj = new EncryptedObject();\n        obj.key = await this.getKeyForEncryption(key);\n        obj.iv = await this.cryptoFunctionService.randomBytes(16);\n        obj.data = await this.cryptoFunctionService.aesEncrypt(data, obj.iv, obj.key.encKey);\n\n        if (obj.key.macKey != null) {\n            const macData = new Uint8Array(obj.iv.byteLength + obj.data.byteLength);\n            macData.set(new Uint8Array(obj.iv), 0);\n            macData.set(new Uint8Array(obj.data), obj.iv.byteLength);\n            obj.mac = await this.cryptoFunctionService.hmac(macData.buffer, obj.key.macKey, 'sha256');\n        }\n\n        return obj;\n    }\n\n    private async aesDecryptToUtf8(encType: EncryptionType, data: string, iv: string, mac: string,\n        key: SymmetricCryptoKey): Promise<string> {\n        const keyForEnc = await this.getKeyForEncryption(key);\n        const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n        if (theKey.macKey != null && mac == null) {\n            this.logService.error('mac required.');\n            return null;\n        }\n\n        if (theKey.encType !== encType) {\n            this.logService.error('encType unavailable.');\n            return null;\n        }\n\n        const fastParams = this.cryptoFunctionService.aesDecryptFastParameters(data, iv, mac, theKey);\n        if (fastParams.macKey != null && fastParams.mac != null) {\n            const computedMac = await this.cryptoFunctionService.hmacFast(fastParams.macData,\n                fastParams.macKey, 'sha256');\n            const macsEqual = await this.cryptoFunctionService.compareFast(fastParams.mac, computedMac);\n            if (!macsEqual) {\n                this.logService.error('mac failed.');\n                return null;\n            }\n        }\n\n        return this.cryptoFunctionService.aesDecryptFast(fastParams);\n    }\n\n    private async aesDecryptToBytes(encType: EncryptionType, data: ArrayBuffer, iv: ArrayBuffer,\n        mac: ArrayBuffer, key: SymmetricCryptoKey): Promise<ArrayBuffer> {\n        const keyForEnc = await this.getKeyForEncryption(key);\n        const theKey = this.resolveLegacyKey(encType, keyForEnc);\n\n        if (theKey.macKey != null && mac == null) {\n            return null;\n        }\n\n        if (theKey.encType !== encType) {\n            return null;\n        }\n\n        if (theKey.macKey != null && mac != null) {\n            const macData = new Uint8Array(iv.byteLength + data.byteLength);\n            macData.set(new Uint8Array(iv), 0);\n            macData.set(new Uint8Array(data), iv.byteLength);\n            const computedMac = await this.cryptoFunctionService.hmac(macData.buffer, theKey.macKey, 'sha256');\n            if (computedMac === null) {\n                return null;\n            }\n\n            const macsMatch = await this.cryptoFunctionService.compare(mac, computedMac);\n            if (!macsMatch) {\n                this.logService.error('mac failed.');\n                return null;\n            }\n        }\n\n        return await this.cryptoFunctionService.aesDecrypt(data, iv, theKey.encKey);\n    }\n\n    private async getKeyForEncryption(key?: SymmetricCryptoKey): Promise<SymmetricCryptoKey> {\n        if (key != null) {\n            return key;\n        }\n\n        const encKey = await this.getEncKey();\n        if (encKey != null) {\n            return encKey;\n        }\n\n        return await this.getKey();\n    }\n\n    private resolveLegacyKey(encType: EncryptionType, key: SymmetricCryptoKey): SymmetricCryptoKey {\n        if (encType === EncryptionType.AesCbc128_HmacSha256_B64 &&\n            key.encType === EncryptionType.AesCbc256_B64) {\n            // Old encrypt-then-mac scheme, make a new key\n            if (this.legacyEtmKey == null) {\n                this.legacyEtmKey = new SymmetricCryptoKey(key.key, EncryptionType.AesCbc128_HmacSha256_B64);\n            }\n            return this.legacyEtmKey;\n        }\n\n        return key;\n    }\n\n    private async stretchKey(key: SymmetricCryptoKey): Promise<SymmetricCryptoKey> {\n        const newKey = new Uint8Array(64);\n        const encKey = await this.cryptoFunctionService.hkdfExpand(key.key, 'enc', 32, 'sha256');\n        const macKey = await this.cryptoFunctionService.hkdfExpand(key.key, 'mac', 32, 'sha256');\n        newKey.set(new Uint8Array(encKey));\n        newKey.set(new Uint8Array(macKey), 32);\n        return new SymmetricCryptoKey(newKey.buffer);\n    }\n\n    private async hashPhrase(hash: ArrayBuffer, minimumEntropy: number = 64) {\n        const entropyPerWord = Math.log(EEFLongWordList.length) / Math.log(2);\n        let numWords = Math.ceil(minimumEntropy / entropyPerWord);\n\n        const hashArr = Array.from(new Uint8Array(hash));\n        const entropyAvailable = hashArr.length * 4;\n        if (numWords * entropyPerWord > entropyAvailable) {\n            throw new Error('Output entropy of hash function is too small');\n        }\n\n        const phrase: string[] = [];\n        let hashNumber = bigInt.fromArray(hashArr, 256);\n        while (numWords--) {\n            const remainder = hashNumber.mod(EEFLongWordList.length);\n            hashNumber = hashNumber.divide(EEFLongWordList.length);\n            phrase.push(EEFLongWordList[remainder as any]);\n        }\n        return phrase;\n    }\n\n    private async buildEncKey(key: SymmetricCryptoKey, encKey: ArrayBuffer)\n        : Promise<[SymmetricCryptoKey, EncString]> {\n        let encKeyEnc: EncString = null;\n        if (key.key.byteLength === 32) {\n            const newKey = await this.stretchKey(key);\n            encKeyEnc = await this.encrypt(encKey, newKey);\n        } else if (key.key.byteLength === 64) {\n            encKeyEnc = await this.encrypt(encKey, key);\n        } else {\n            throw new Error('Invalid key size.');\n        }\n        return [new SymmetricCryptoKey(encKey), encKeyEnc];\n    }\n}\n","export class EncArrayBuffer {\n    constructor(public buffer: ArrayBuffer) { }\n}\n","import { SymmetricCryptoKey } from './symmetricCryptoKey';\n\nexport class EncryptedObject {\n    iv: ArrayBuffer;\n    data: ArrayBuffer;\n    mac: ArrayBuffer;\n    key: SymmetricCryptoKey;\n}\n","import { Observable, Subject } from 'rxjs';\n\nimport { EnvironmentUrls } from '../models/domain/environmentUrls';\n\nimport { ConstantsService } from './constants.service';\n\nimport { EnvironmentService as EnvironmentServiceAbstraction, Urls } from '../abstractions/environment.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nexport class EnvironmentService implements EnvironmentServiceAbstraction {\n\n    private readonly urlsSubject = new Subject<Urls>();\n    urls: Observable<Urls> = this.urlsSubject; // tslint:disable-line\n\n    private baseUrl: string;\n    private webVaultUrl: string;\n    private apiUrl: string;\n    private identityUrl: string;\n    private iconsUrl: string;\n    private notificationsUrl: string;\n    private eventsUrl: string;\n    private keyConnectorUrl: string;\n\n    constructor(private storageService: StorageService) {}\n\n    hasBaseUrl() {\n        return this.baseUrl != null;\n    }\n\n    getNotificationsUrl() {\n        if (this.notificationsUrl != null) {\n            return this.notificationsUrl;\n        }\n\n        if (this.baseUrl != null) {\n            return this.baseUrl + '/notifications';\n        }\n\n        return 'https://notifications.bitwarden.com';\n    }\n\n    getWebVaultUrl() {\n        if (this.webVaultUrl != null) {\n            return this.webVaultUrl;\n        }\n\n        if (this.baseUrl) {\n            return this.baseUrl;\n        }\n        return 'https://vault.bitwarden.com';\n    }\n\n    getSendUrl() {\n        return this.getWebVaultUrl() === 'https://vault.bitwarden.com'\n            ? 'https://send.bitwarden.com/#'\n            : this.getWebVaultUrl() + '/#/send/';\n    }\n\n    getIconsUrl() {\n        if (this.iconsUrl != null) {\n            return this.iconsUrl;\n        }\n\n        if (this.baseUrl) {\n            return this.baseUrl + '/icons';\n        }\n\n        return 'https://icons.bitwarden.net';\n    }\n\n    getApiUrl() {\n        if (this.apiUrl != null) {\n            return this.apiUrl;\n        }\n\n        if (this.baseUrl) {\n            return this.baseUrl + '/api';\n        }\n\n        return 'https://api.bitwarden.com';\n    }\n\n    getIdentityUrl() {\n        if (this.identityUrl != null) {\n            return this.identityUrl;\n        }\n\n        if (this.baseUrl) {\n            return this.baseUrl + '/identity';\n        }\n\n        return 'https://identity.bitwarden.com';\n    }\n\n    getEventsUrl() {\n        if (this.eventsUrl != null) {\n            return this.eventsUrl;\n        }\n\n        if (this.baseUrl) {\n            return this.baseUrl + '/events';\n        }\n\n        return 'https://events.bitwarden.com';\n    }\n\n    getKeyConnectorUrl() {\n        return this.keyConnectorUrl;\n    }\n\n    async setUrlsFromStorage(): Promise<void> {\n        const urlsObj: any = await this.storageService.get(ConstantsService.environmentUrlsKey);\n        const urls = urlsObj || {\n            base: null,\n            api: null,\n            identity: null,\n            icons: null,\n            notifications: null,\n            events: null,\n            webVault: null,\n            keyConnector: null,\n        };\n\n        const envUrls = new EnvironmentUrls();\n\n        if (urls.base) {\n            this.baseUrl = envUrls.base = urls.base;\n            return;\n        }\n\n        this.webVaultUrl = urls.webVault;\n        this.apiUrl = envUrls.api = urls.api;\n        this.identityUrl = envUrls.identity = urls.identity;\n        this.iconsUrl = urls.icons;\n        this.notificationsUrl = urls.notifications;\n        this.eventsUrl = envUrls.events = urls.events;\n        this.keyConnectorUrl = urls.keyConnector;\n    }\n\n    async setUrls(urls: Urls, saveSettings: boolean = true): Promise<any> {\n        urls.base = this.formatUrl(urls.base);\n        urls.webVault = this.formatUrl(urls.webVault);\n        urls.api = this.formatUrl(urls.api);\n        urls.identity = this.formatUrl(urls.identity);\n        urls.icons = this.formatUrl(urls.icons);\n        urls.notifications = this.formatUrl(urls.notifications);\n        urls.events = this.formatUrl(urls.events);\n        urls.keyConnector = this.formatUrl(urls.keyConnector);\n\n        if (saveSettings) {\n            await this.storageService.save(ConstantsService.environmentUrlsKey, {\n                base: urls.base,\n                api: urls.api,\n                identity: urls.identity,\n                webVault: urls.webVault,\n                icons: urls.icons,\n                notifications: urls.notifications,\n                events: urls.events,\n                keyConnector: urls.keyConnector,\n            });\n        }\n\n        this.baseUrl = urls.base;\n        this.webVaultUrl = urls.webVault;\n        this.apiUrl = urls.api;\n        this.identityUrl = urls.identity;\n        this.iconsUrl = urls.icons;\n        this.notificationsUrl = urls.notifications;\n        this.eventsUrl = urls.events;\n        this.keyConnectorUrl = urls.keyConnector;\n\n        this.urlsSubject.next(urls);\n\n        return urls;\n    }\n\n    getUrls() {\n        return {\n            base: this.baseUrl,\n            webVault: this.webVaultUrl,\n            api: this.apiUrl,\n            identity: this.identityUrl,\n            icons: this.iconsUrl,\n            notifications: this.notificationsUrl,\n            events: this.eventsUrl,\n            keyConnector: this.keyConnectorUrl,\n        };\n    }\n\n    private formatUrl(url: string): string {\n        if (url == null || url === '') {\n            return null;\n        }\n\n        url = url.replace(/\\/+$/g, '');\n        if (!url.startsWith('http://') && !url.startsWith('https://')) {\n            url = 'https://' + url;\n        }\n\n        return url.trim();\n    }\n}\n","export class EnvironmentUrls {\n    base: string;\n    api: string;\n    identity: string;\n    events: string;\n}\n","import { EventType } from '../enums/eventType';\n\nimport { EventData } from '../models/data/eventData';\n\nimport { EventRequest } from '../models/request/eventRequest';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { EventService as EventServiceAbstraction } from '../abstractions/event.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { LogService } from '../abstractions/log.service';\nimport { ConstantsService } from './constants.service';\n\nexport class EventService implements EventServiceAbstraction {\n    private inited = false;\n\n    constructor(private storageService: StorageService, private apiService: ApiService,\n        private userService: UserService, private cipherService: CipherService,\n        private logService: LogService) { }\n\n    init(checkOnInterval: boolean) {\n        if (this.inited) {\n            return;\n        }\n\n        this.inited = true;\n        if (checkOnInterval) {\n            this.uploadEvents();\n            setInterval(() => this.uploadEvents(), 60 * 1000); // check every 60 seconds\n        }\n    }\n\n    async collect(eventType: EventType, cipherId: string = null, uploadImmediately = false): Promise<any> {\n        const authed = await this.userService.isAuthenticated();\n        if (!authed) {\n            return;\n        }\n        const organizations = await this.userService.getAllOrganizations();\n        if (organizations == null) {\n            return;\n        }\n        const orgIds = new Set<string>(organizations.filter(o => o.useEvents).map(o => o.id));\n        if (orgIds.size === 0) {\n            return;\n        }\n        if (cipherId != null) {\n            const cipher = await this.cipherService.get(cipherId);\n            if (cipher == null || cipher.organizationId == null || !orgIds.has(cipher.organizationId)) {\n                return;\n            }\n        }\n        let eventCollection = await this.storageService.get<EventData[]>(ConstantsService.eventCollectionKey);\n        if (eventCollection == null) {\n            eventCollection = [];\n        }\n        const event = new EventData();\n        event.type = eventType;\n        event.cipherId = cipherId;\n        event.date = new Date().toISOString();\n        eventCollection.push(event);\n        await this.storageService.save(ConstantsService.eventCollectionKey, eventCollection);\n        if (uploadImmediately) {\n            await this.uploadEvents();\n        }\n    }\n\n    async uploadEvents(): Promise<any> {\n        const authed = await this.userService.isAuthenticated();\n        if (!authed) {\n            return;\n        }\n        const eventCollection = await this.storageService.get<EventData[]>(ConstantsService.eventCollectionKey);\n        if (eventCollection == null || eventCollection.length === 0) {\n            return;\n        }\n        const request = eventCollection.map(e => {\n            const req = new EventRequest();\n            req.type = e.type;\n            req.cipherId = e.cipherId;\n            req.date = e.date;\n            return req;\n        });\n        try {\n            await this.apiService.postEventsCollect(request);\n            this.clearEvents();\n        } catch (e) {\n            this.logService.error(e);\n        }\n    }\n\n    async clearEvents(): Promise<any> {\n        await this.storageService.remove(ConstantsService.eventCollectionKey);\n    }\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventData {\n    type: EventType;\n    cipherId: string;\n    date: string;\n}\n","import { EventType } from '../../enums/eventType';\n\nexport class EventRequest {\n    type: EventType;\n    cipherId: string;\n    date: string;\n}\n","import * as papa from 'papaparse';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { ExportService as ExportServiceAbstraction } from '../abstractions/export.service';\nimport { FolderService } from '../abstractions/folder.service';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { Cipher } from '../models/domain/cipher';\nimport { Collection } from '../models/domain/collection';\nimport { Folder } from '../models/domain/folder';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\n\nimport { CipherWithIds as CipherExport } from '../models/export/cipherWithIds';\nimport { CollectionWithId as CollectionExport } from '../models/export/collectionWithId';\nimport { Event } from '../models/export/event';\nimport { FolderWithId as FolderExport } from '../models/export/folderWithId';\nimport { EventView } from '../models/view/eventView';\n\nimport { Utils } from '../misc/utils';\n\nexport class ExportService implements ExportServiceAbstraction {\n    constructor(private folderService: FolderService, private cipherService: CipherService,\n        private apiService: ApiService, private cryptoService: CryptoService) { }\n\n    async getExport(format: 'csv' | 'json' | 'encrypted_json' = 'csv'): Promise<string> {\n        if (format === 'encrypted_json') {\n            return this.getEncryptedExport();\n        } else {\n            return this.getDecryptedExport(format);\n        }\n    }\n\n    async getOrganizationExport(organizationId: string,\n        format: 'csv' | 'json' | 'encrypted_json' = 'csv'): Promise<string> {\n        if (format === 'encrypted_json') {\n            return this.getOrganizationEncryptedExport(organizationId);\n        } else {\n            return this.getOrganizationDecryptedExport(organizationId, format);\n        }\n    }\n\n    async getEventExport(events: EventView[]): Promise<string> {\n        return papa.unparse(events.map(e => new Event(e)));\n    }\n\n    getFileName(prefix: string = null, extension: string = 'csv'): string {\n        const now = new Date();\n        const dateString =\n            now.getFullYear() + '' + this.padNumber(now.getMonth() + 1, 2) + '' + this.padNumber(now.getDate(), 2) +\n            this.padNumber(now.getHours(), 2) + '' + this.padNumber(now.getMinutes(), 2) +\n            this.padNumber(now.getSeconds(), 2);\n\n        return 'bitwarden' + (prefix ? ('_' + prefix) : '') + '_export_' + dateString + '.' + extension;\n    }\n\n    private async getDecryptedExport(format: 'json' | 'csv'): Promise<string> {\n        let decFolders: FolderView[] = [];\n        let decCiphers: CipherView[] = [];\n        const promises = [];\n\n        promises.push(this.folderService.getAllDecrypted().then(folders => {\n            decFolders = folders;\n        }));\n\n        promises.push(this.cipherService.getAllDecrypted().then(ciphers => {\n            decCiphers = ciphers.filter(f => f.deletedDate == null);\n        }));\n\n        await Promise.all(promises);\n\n        if (format === 'csv') {\n            const foldersMap = new Map<string, FolderView>();\n            decFolders.forEach(f => {\n                if (f.id != null) {\n                    foldersMap.set(f.id, f);\n                }\n            });\n\n            const exportCiphers: any[] = [];\n            decCiphers.forEach(c => {\n                // only export logins and secure notes\n                if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n                    return;\n                }\n                if (c.organizationId != null) {\n                    return;\n                }\n\n                const cipher: any = {};\n                cipher.folder = c.folderId != null && foldersMap.has(c.folderId) ?\n                    foldersMap.get(c.folderId).name : null;\n                cipher.favorite = c.favorite ? 1 : null;\n                this.buildCommonCipher(cipher, c);\n                exportCiphers.push(cipher);\n            });\n\n            return papa.unparse(exportCiphers);\n        } else {\n            const jsonDoc: any = {\n                encrypted: false,\n                folders: [],\n                items: [],\n            };\n\n            decFolders.forEach(f => {\n                if (f.id == null) {\n                    return;\n                }\n                const folder = new FolderExport();\n                folder.build(f);\n                jsonDoc.folders.push(folder);\n            });\n\n            decCiphers.forEach(c => {\n                if (c.organizationId != null) {\n                    return;\n                }\n                const cipher = new CipherExport();\n                cipher.build(c);\n                cipher.collectionIds = null;\n                jsonDoc.items.push(cipher);\n            });\n\n            return JSON.stringify(jsonDoc, null, '  ');\n        }\n    }\n\n    private async getEncryptedExport(): Promise<string> {\n        let folders: Folder[] = [];\n        let ciphers: Cipher[] = [];\n        const promises = [];\n\n        promises.push(this.folderService.getAll().then(f => {\n            folders = f;\n        }));\n\n        promises.push(this.cipherService.getAll().then(c => {\n            ciphers = c.filter(f => f.deletedDate == null);\n        }));\n\n        await Promise.all(promises);\n\n        const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid());\n\n        const jsonDoc: any = {\n            encrypted: true,\n            encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n            folders: [],\n            items: [],\n        };\n\n        folders.forEach(f => {\n            if (f.id == null) {\n                return;\n            }\n            const folder = new FolderExport();\n            folder.build(f);\n            jsonDoc.folders.push(folder);\n        });\n\n        ciphers.forEach(c => {\n            if (c.organizationId != null) {\n                return;\n            }\n            const cipher = new CipherExport();\n            cipher.build(c);\n            cipher.collectionIds = null;\n            jsonDoc.items.push(cipher);\n        });\n\n        return JSON.stringify(jsonDoc, null, '  ');\n    }\n\n    private async getOrganizationDecryptedExport(organizationId: string, format: 'json' | 'csv'): Promise<string> {\n        const decCollections: CollectionView[] = [];\n        const decCiphers: CipherView[] = [];\n        const promises = [];\n\n        promises.push(this.apiService.getCollections(organizationId).then(collections => {\n            const collectionPromises: any = [];\n            if (collections != null && collections.data != null && collections.data.length > 0) {\n                collections.data.forEach(c => {\n                    const collection = new Collection(new CollectionData(c as CollectionDetailsResponse));\n                    collectionPromises.push(collection.decrypt().then(decCol => {\n                        decCollections.push(decCol);\n                    }));\n                });\n            }\n            return Promise.all(collectionPromises);\n        }));\n\n        promises.push(this.apiService.getCiphersOrganization(organizationId).then(ciphers => {\n            const cipherPromises: any = [];\n            if (ciphers != null && ciphers.data != null && ciphers.data.length > 0) {\n                ciphers.data.filter(c => c.deletedDate === null).forEach(c => {\n                    const cipher = new Cipher(new CipherData(c));\n                    cipherPromises.push(cipher.decrypt().then(decCipher => {\n                        decCiphers.push(decCipher);\n                    }));\n                });\n            }\n            return Promise.all(cipherPromises);\n        }));\n\n        await Promise.all(promises);\n\n        if (format === 'csv') {\n            const collectionsMap = new Map<string, CollectionView>();\n            decCollections.forEach(c => {\n                collectionsMap.set(c.id, c);\n            });\n\n            const exportCiphers: any[] = [];\n            decCiphers.forEach(c => {\n                // only export logins and secure notes\n                if (c.type !== CipherType.Login && c.type !== CipherType.SecureNote) {\n                    return;\n                }\n\n                const cipher: any = {};\n                cipher.collections = [];\n                if (c.collectionIds != null) {\n                    cipher.collections = c.collectionIds.filter(id => collectionsMap.has(id))\n                        .map(id => collectionsMap.get(id).name);\n                }\n                this.buildCommonCipher(cipher, c);\n                exportCiphers.push(cipher);\n            });\n\n            return papa.unparse(exportCiphers);\n        } else {\n            const jsonDoc: any = {\n                encrypted: false,\n                collections: [],\n                items: [],\n            };\n\n            decCollections.forEach(c => {\n                const collection = new CollectionExport();\n                collection.build(c);\n                jsonDoc.collections.push(collection);\n            });\n\n            decCiphers.forEach(c => {\n                const cipher = new CipherExport();\n                cipher.build(c);\n                jsonDoc.items.push(cipher);\n            });\n            return JSON.stringify(jsonDoc, null, '  ');\n        }\n    }\n\n    private async getOrganizationEncryptedExport(organizationId: string): Promise<string> {\n        const collections: Collection[] = [];\n        const ciphers: Cipher[] = [];\n        const promises = [];\n\n        promises.push(this.apiService.getCollections(organizationId).then(c => {\n            const collectionPromises: any = [];\n            if (c != null && c.data != null && c.data.length > 0) {\n                c.data.forEach(r => {\n                    const collection = new Collection(new CollectionData(r as CollectionDetailsResponse));\n                    collections.push(collection);\n                });\n            }\n            return Promise.all(collectionPromises);\n        }));\n\n        promises.push(this.apiService.getCiphersOrganization(organizationId).then(c => {\n            const cipherPromises: any = [];\n            if (c != null && c.data != null && c.data.length > 0) {\n                c.data.filter(item => item.deletedDate === null).forEach(item => {\n                    const cipher = new Cipher(new CipherData(item));\n                    ciphers.push(cipher);\n                });\n            }\n            return Promise.all(cipherPromises);\n        }));\n\n        await Promise.all(promises);\n\n        const orgKey = await this.cryptoService.getOrgKey(organizationId);\n        const encKeyValidation = await this.cryptoService.encrypt(Utils.newGuid(), orgKey);\n\n        const jsonDoc: any = {\n            encrypted: true,\n            encKeyValidation_DO_NOT_EDIT: encKeyValidation.encryptedString,\n            collections: [],\n            items: [],\n        };\n\n        collections.forEach(c => {\n            const collection = new CollectionExport();\n            collection.build(c);\n            jsonDoc.collections.push(collection);\n        });\n\n        ciphers.forEach(c => {\n            const cipher = new CipherExport();\n            cipher.build(c);\n            jsonDoc.items.push(cipher);\n        });\n        return JSON.stringify(jsonDoc, null, '  ');\n    }\n\n    private padNumber(num: number, width: number, padCharacter: string = '0'): string {\n        const numString = num.toString();\n        return numString.length >= width ? numString :\n            new Array(width - numString.length + 1).join(padCharacter) + numString;\n    }\n\n    private buildCommonCipher(cipher: any, c: CipherView) {\n        cipher.type = null;\n        cipher.name = c.name;\n        cipher.notes = c.notes;\n        cipher.fields = null;\n        cipher.reprompt = c.reprompt;\n        // Login props\n        cipher.login_uri = null;\n        cipher.login_username = null;\n        cipher.login_password = null;\n        cipher.login_totp = null;\n\n        if (c.fields) {\n            c.fields.forEach((f: any) => {\n                if (!cipher.fields) {\n                    cipher.fields = '';\n                } else {\n                    cipher.fields += '\\n';\n                }\n\n                cipher.fields += ((f.name || '') + ': ' + f.value);\n            });\n        }\n\n        switch (c.type) {\n            case CipherType.Login:\n                cipher.type = 'login';\n                cipher.login_username = c.login.username;\n                cipher.login_password = c.login.password;\n                cipher.login_totp = c.login.totp;\n\n                if (c.login.uris) {\n                    cipher.login_uri = [];\n                    c.login.uris.forEach(u => {\n                        cipher.login_uri.push(u.uri);\n                    });\n                }\n                break;\n            case CipherType.SecureNote:\n                cipher.type = 'note';\n                break;\n            default:\n                return;\n        }\n\n        return cipher;\n    }\n}\n","import { CipherRepromptType } from '../../enums/cipherRepromptType';\nimport { CipherType } from '../../enums/cipherType';\n\nimport { CipherView } from '../view/cipherView';\n\nimport { Cipher as CipherDomain } from '../domain/cipher';\nimport { EncString } from '../domain/encString';\n\nimport { Card } from './card';\nimport { Field } from './field';\nimport { Identity } from './identity';\nimport { Login } from './login';\nimport { SecureNote } from './secureNote';\n\nexport class Cipher {\n    static template(): Cipher {\n        const req = new Cipher();\n        req.organizationId = null;\n        req.collectionIds = null;\n        req.folderId = null;\n        req.type = CipherType.Login;\n        req.name = 'Item name';\n        req.notes = 'Some notes about this item.';\n        req.favorite = false;\n        req.fields = [];\n        req.login = null;\n        req.secureNote = null;\n        req.card = null;\n        req.identity = null;\n        req.reprompt = CipherRepromptType.None;\n        return req;\n    }\n\n    static toView(req: Cipher, view = new CipherView()) {\n        view.type = req.type;\n        view.folderId = req.folderId;\n        if (view.organizationId == null) {\n            view.organizationId = req.organizationId;\n        }\n        if (view.collectionIds || req.collectionIds) {\n            const set = new Set((view.collectionIds ?? []).concat(req.collectionIds ?? []));\n            view.collectionIds = Array.from(set.values());\n        }\n        view.name = req.name;\n        view.notes = req.notes;\n        view.favorite = req.favorite;\n        view.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n        if (req.fields != null) {\n            view.fields = req.fields.map(f => Field.toView(f));\n        }\n\n        switch (req.type) {\n            case CipherType.Login:\n                view.login = Login.toView(req.login);\n                break;\n            case CipherType.SecureNote:\n                view.secureNote = SecureNote.toView(req.secureNote);\n                break;\n            case CipherType.Card:\n                view.card = Card.toView(req.card);\n                break;\n            case CipherType.Identity:\n                view.identity = Identity.toView(req.identity);\n                break;\n        }\n\n        return view;\n    }\n\n    static toDomain(req: Cipher, domain = new CipherDomain()) {\n        domain.type = req.type;\n        domain.folderId = req.folderId;\n        if (domain.organizationId == null) {\n            domain.organizationId = req.organizationId;\n        }\n        domain.name = req.name != null ? new EncString(req.name) : null;\n        domain.notes = req.notes != null ? new EncString(req.notes) : null;\n        domain.favorite = req.favorite;\n        domain.reprompt = req.reprompt ?? CipherRepromptType.None;\n\n        if (req.fields != null) {\n            domain.fields = req.fields.map(f => Field.toDomain(f));\n        }\n\n        switch (req.type) {\n            case CipherType.Login:\n                domain.login = Login.toDomain(req.login);\n                break;\n            case CipherType.SecureNote:\n                domain.secureNote = SecureNote.toDomain(req.secureNote);\n                break;\n            case CipherType.Card:\n                domain.card = Card.toDomain(req.card);\n                break;\n            case CipherType.Identity:\n                domain.identity = Identity.toDomain(req.identity);\n                break;\n        }\n\n        return domain;\n    }\n\n    type: CipherType;\n    folderId: string;\n    organizationId: string;\n    collectionIds: string[];\n    name: string;\n    notes: string;\n    favorite: boolean;\n    fields: Field[];\n    login: Login;\n    secureNote: SecureNote;\n    card: Card;\n    identity: Identity;\n    reprompt: CipherRepromptType;\n\n    // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n    build(o: CipherView | CipherDomain) {\n        this.organizationId = o.organizationId;\n        this.folderId = o.folderId;\n        this.type = o.type;\n        this.reprompt = o.reprompt;\n\n        if (o instanceof CipherView) {\n            this.name = o.name;\n            this.notes = o.notes;\n        } else {\n            this.name = o.name?.encryptedString;\n            this.notes = o.notes?.encryptedString;\n        }\n\n        this.favorite = o.favorite;\n\n        if (o.fields != null) {\n            if (o instanceof CipherView) {\n                this.fields = o.fields.map(f => new Field(f));\n            } else {\n                this.fields = o.fields.map(f => new Field(f));\n            }\n        }\n\n        switch (o.type) {\n            case CipherType.Login:\n                this.login = new Login(o.login);\n                break;\n            case CipherType.SecureNote:\n                this.secureNote = new SecureNote(o.secureNote);\n                break;\n            case CipherType.Card:\n                this.card = new Card(o.card);\n                break;\n            case CipherType.Identity:\n                this.identity = new Identity(o.identity);\n                break;\n        }\n    }\n}\n","import { CardView } from '../view/cardView';\n\nimport { Card as CardDomain } from '../domain/card';\nimport { EncString } from '../domain/encString';\n\nexport class Card {\n    static template(): Card {\n        const req = new Card();\n        req.cardholderName = 'John Doe';\n        req.brand = 'visa';\n        req.number = '4242424242424242';\n        req.expMonth = '04';\n        req.expYear = '2023';\n        req.code = '123';\n        return req;\n    }\n\n    static toView(req: Card, view = new CardView()) {\n        view.cardholderName = req.cardholderName;\n        view.brand = req.brand;\n        view.number = req.number;\n        view.expMonth = req.expMonth;\n        view.expYear = req.expYear;\n        view.code = req.code;\n        return view;\n    }\n\n    static toDomain(req: Card, domain = new CardDomain()) {\n        domain.cardholderName = req.cardholderName != null ? new EncString(req.cardholderName) : null;\n        domain.brand = req.brand != null ? new EncString(req.brand) : null;\n        domain.number = req.number != null ? new EncString(req.number) : null;\n        domain.expMonth = req.expMonth != null ? new EncString(req.expMonth) : null;\n        domain.expYear = req.expYear != null ? new EncString(req.expYear) : null;\n        domain.code = req.code != null ? new EncString(req.code) : null;\n        return domain;\n    }\n\n    cardholderName: string;\n    brand: string;\n    number: string;\n    expMonth: string;\n    expYear: string;\n    code: string;\n\n    constructor(o?: CardView | CardDomain) {\n        if (o == null) {\n            return;\n        }\n\n        if (o instanceof CardView) {\n            this.cardholderName = o.cardholderName;\n            this.brand = o.brand;\n            this.number = o.number;\n            this.expMonth = o.expMonth;\n            this.expYear = o.expYear;\n            this.code = o.code;\n        } else {\n            this.cardholderName = o.cardholderName?.encryptedString;\n            this.brand = o.brand?.encryptedString;\n            this.number = o.number?.encryptedString;\n            this.expMonth = o.expMonth?.encryptedString;\n            this.expYear = o.expYear?.encryptedString;\n            this.code = o.code?.encryptedString;\n        }\n    }\n}\n","import { FieldType } from '../../enums/fieldType';\nimport { LinkedIdType } from '../../enums/linkedIdType';\n\nimport { FieldView } from '../view/fieldView';\n\nimport { EncString } from '../domain/encString';\nimport { Field as FieldDomain } from '../domain/field';\n\nexport class Field {\n    static template(): Field {\n        const req = new Field();\n        req.name = 'Field name';\n        req.value = 'Some value';\n        req.type = FieldType.Text;\n        return req;\n    }\n\n    static toView(req: Field, view = new FieldView()) {\n        view.type = req.type;\n        view.value = req.value;\n        view.name = req.name;\n        view.linkedId = req.linkedId;\n        return view;\n    }\n\n    static toDomain(req: Field, domain = new FieldDomain()) {\n        domain.type = req.type;\n        domain.value = req.value != null ? new EncString(req.value) : null;\n        domain.name = req.name != null ? new EncString(req.name) : null;\n        domain.linkedId = req.linkedId;\n        return domain;\n    }\n\n    name: string;\n    value: string;\n    type: FieldType;\n    linkedId: LinkedIdType;\n\n    constructor(o?: FieldView | FieldDomain) {\n        if (o == null) {\n            return;\n        }\n\n        if (o instanceof FieldView) {\n            this.name = o.name;\n            this.value = o.value;\n        } else {\n            this.name = o.name?.encryptedString;\n            this.value = o.value?.encryptedString;\n        }\n        this.type = o.type;\n        this.linkedId = o.linkedId;\n    }\n}\n","import { IdentityView } from '../view/identityView';\n\nimport { EncString } from '../domain/encString';\nimport { Identity as IdentityDomain } from '../domain/identity';\n\nexport class Identity {\n    static template(): Identity {\n        const req = new Identity();\n        req.title = 'Mr';\n        req.firstName = 'John';\n        req.middleName = 'William';\n        req.lastName = 'Doe';\n        req.address1 = '123 Any St';\n        req.address2 = 'Apt #123';\n        req.address3 = null;\n        req.city = 'New York';\n        req.state = 'NY';\n        req.postalCode = '10001';\n        req.country = 'US';\n        req.company = 'Acme Inc.';\n        req.email = 'john@company.com';\n        req.phone = '5555551234';\n        req.ssn = '000-123-4567';\n        req.username = 'jdoe';\n        req.passportNumber = 'US-123456789';\n        req.licenseNumber = 'D123-12-123-12333';\n        return req;\n    }\n\n    static toView(req: Identity, view = new IdentityView()) {\n        view.title = req.title;\n        view.firstName = req.firstName;\n        view.middleName = req.middleName;\n        view.lastName = req.lastName;\n        view.address1 = req.address1;\n        view.address2 = req.address2;\n        view.address3 = req.address3;\n        view.city = req.city;\n        view.state = req.state;\n        view.postalCode = req.postalCode;\n        view.country = req.country;\n        view.company = req.company;\n        view.email = req.email;\n        view.phone = req.phone;\n        view.ssn = req.ssn;\n        view.username = req.username;\n        view.passportNumber = req.passportNumber;\n        view.licenseNumber = req.licenseNumber;\n        return view;\n    }\n\n    static toDomain(req: Identity, domain = new IdentityDomain()) {\n        domain.title = req.title != null ? new EncString(req.title) : null;\n        domain.firstName = req.firstName != null ? new EncString(req.firstName) : null;\n        domain.middleName = req.middleName != null ? new EncString(req.middleName) : null;\n        domain.lastName = req.lastName != null ? new EncString(req.lastName) : null;\n        domain.address1 = req.address1 != null ? new EncString(req.address1) : null;\n        domain.address2 = req.address2 != null ? new EncString(req.address2) : null;\n        domain.address3 = req.address3 != null ? new EncString(req.address3) : null;\n        domain.city = req.city != null ? new EncString(req.city) : null;\n        domain.state = req.state != null ? new EncString(req.state) : null;\n        domain.postalCode = req.postalCode != null ? new EncString(req.postalCode) : null;\n        domain.country = req.country != null ? new EncString(req.country) : null;\n        domain.company = req.company != null ? new EncString(req.company) : null;\n        domain.email = req.email != null ? new EncString(req.email) : null;\n        domain.phone = req.phone != null ? new EncString(req.phone) : null;\n        domain.ssn = req.ssn != null ? new EncString(req.ssn) : null;\n        domain.username = req.username != null ? new EncString(req.username) : null;\n        domain.passportNumber = req.passportNumber != null ? new EncString(req.passportNumber) : null;\n        domain.licenseNumber = req.licenseNumber != null ? new EncString(req.licenseNumber) : null;\n        return domain;\n    }\n\n    title: string;\n    firstName: string;\n    middleName: string;\n    lastName: string;\n    address1: string;\n    address2: string;\n    address3: string;\n    city: string;\n    state: string;\n    postalCode: string;\n    country: string;\n    company: string;\n    email: string;\n    phone: string;\n    ssn: string;\n    username: string;\n    passportNumber: string;\n    licenseNumber: string;\n\n    constructor(o?: IdentityView | IdentityDomain) {\n        if (o == null) {\n            return;\n        }\n\n        if (o instanceof IdentityView) {\n            this.title = o.title;\n            this.firstName = o.firstName;\n            this.middleName = o.middleName;\n            this.lastName = o.lastName;\n            this.address1 = o.address1;\n            this.address2 = o.address2;\n            this.address3 = o.address3;\n            this.city = o.city;\n            this.state = o.state;\n            this.postalCode = o.postalCode;\n            this.country = o.country;\n            this.company = o.company;\n            this.email = o.email;\n            this.phone = o.phone;\n            this.ssn = o.ssn;\n            this.username = o.username;\n            this.passportNumber = o.passportNumber;\n            this.licenseNumber = o.licenseNumber;\n        } else {\n            this.title = o.title?.encryptedString;\n            this.firstName = o.firstName?.encryptedString;\n            this.middleName = o.middleName?.encryptedString;\n            this.lastName = o.lastName?.encryptedString;\n            this.address1 = o.address1?.encryptedString;\n            this.address2 = o.address2?.encryptedString;\n            this.address3 = o.address3?.encryptedString;\n            this.city = o.city?.encryptedString;\n            this.state = o.state?.encryptedString;\n            this.postalCode = o.postalCode?.encryptedString;\n            this.country = o.country?.encryptedString;\n            this.company = o.company?.encryptedString;\n            this.email = o.email?.encryptedString;\n            this.phone = o.phone?.encryptedString;\n            this.ssn = o.ssn?.encryptedString;\n            this.username = o.username?.encryptedString;\n            this.passportNumber = o.passportNumber?.encryptedString;\n            this.licenseNumber = o.licenseNumber?.encryptedString;\n        }\n    }\n}\n","import { LoginUri } from './loginUri';\n\nimport { LoginView } from '../view/loginView';\n\nimport { EncString } from '../domain/encString';\nimport { Login as LoginDomain } from '../domain/login';\n\nexport class Login {\n    static template(): Login {\n        const req = new Login();\n        req.uris = [];\n        req.username = 'jdoe';\n        req.password = 'myp@ssword123';\n        req.totp = 'JBSWY3DPEHPK3PXP';\n        return req;\n    }\n\n    static toView(req: Login, view = new LoginView()) {\n        if (req.uris != null) {\n            view.uris = req.uris.map(u => LoginUri.toView(u));\n        }\n        view.username = req.username;\n        view.password = req.password;\n        view.totp = req.totp;\n        return view;\n    }\n\n    static toDomain(req: Login, domain = new LoginDomain()) {\n        if (req.uris != null) {\n            domain.uris = req.uris.map(u => LoginUri.toDomain(u));\n        }\n        domain.username = req.username != null ? new EncString(req.username) : null;\n        domain.password = req.password != null ? new EncString(req.password) : null;\n        domain.totp = req.totp != null ? new EncString(req.totp) : null;\n        return domain;\n    }\n\n    uris: LoginUri[];\n    username: string;\n    password: string;\n    totp: string;\n\n    constructor(o?: LoginView | LoginDomain) {\n        if (o == null) {\n            return;\n        }\n\n        if (o.uris != null) {\n            if (o instanceof LoginView) {\n                this.uris = o.uris.map(u => new LoginUri(u));\n            } else {\n                this.uris = o.uris.map(u => new LoginUri(u));\n            }\n        }\n\n        if (o instanceof LoginView) {\n            this.username = o.username;\n            this.password = o.password;\n            this.totp = o.totp;\n        } else {\n            this.username = o.username?.encryptedString;\n            this.password = o.password?.encryptedString;\n            this.totp = o.totp?.encryptedString;\n        }\n    }\n}\n","import { UriMatchType } from '../../enums/uriMatchType';\n\nimport { LoginUriView } from '../view/loginUriView';\n\nimport { EncString } from '../domain/encString';\nimport { LoginUri as LoginUriDomain } from '../domain/loginUri';\n\nexport class LoginUri {\n    static template(): LoginUri {\n        const req = new LoginUri();\n        req.uri = 'https://google.com';\n        req.match = null;\n        return req;\n    }\n\n    static toView(req: LoginUri, view = new LoginUriView()) {\n        view.uri = req.uri;\n        view.match = req.match;\n        return view;\n    }\n\n    static toDomain(req: LoginUri, domain = new LoginUriDomain()) {\n        domain.uri = req.uri != null ? new EncString(req.uri) : null;\n        domain.match = req.match;\n        return domain;\n    }\n\n    uri: string;\n    match: UriMatchType = null;\n\n    constructor(o?: LoginUriView | LoginUriDomain) {\n        if (o == null) {\n            return;\n        }\n\n        if (o instanceof LoginUriView) {\n            this.uri = o.uri;\n        } else {\n            this.uri = o.uri?.encryptedString;\n        }\n        this.match = o.match;\n    }\n}\n","import { SecureNoteType } from '../../enums/secureNoteType';\n\nimport { SecureNoteView } from '../view/secureNoteView';\n\nimport { SecureNote as SecureNoteDomain } from '../domain/secureNote';\n\nexport class SecureNote {\n    static template(): SecureNote {\n        const req = new SecureNote();\n        req.type = SecureNoteType.Generic;\n        return req;\n    }\n\n    static toView(req: SecureNote, view = new SecureNoteView()) {\n        view.type = req.type;\n        return view;\n    }\n\n    static toDomain(req: SecureNote, view = new SecureNoteDomain()) {\n        view.type = req.type;\n        return view;\n    }\n\n    type: SecureNoteType;\n\n    constructor(o?: SecureNoteView | SecureNoteDomain) {\n        if (o == null) {\n            return;\n        }\n\n        this.type = o.type;\n    }\n}\n","import { CollectionView } from '../view/collectionView';\n\nimport { Collection as CollectionDomain } from '../domain/collection';\nimport { EncString } from '../domain/encString';\n\nexport class Collection {\n    static template(): Collection {\n        const req = new Collection();\n        req.organizationId = '00000000-0000-0000-0000-000000000000';\n        req.name = 'Collection name';\n        req.externalId = null;\n        return req;\n    }\n\n    static toView(req: Collection, view = new CollectionView()) {\n        view.name = req.name;\n        view.externalId = req.externalId;\n        if (view.organizationId == null) {\n            view.organizationId = req.organizationId;\n        }\n        return view;\n    }\n\n    static toDomain(req: Collection, domain = new CollectionDomain()) {\n        domain.name = req.name != null ? new EncString(req.name) : null;\n        domain.externalId = req.externalId;\n        if (domain.organizationId == null) {\n            domain.organizationId = req.organizationId;\n        }\n        return domain;\n    }\n\n    organizationId: string;\n    name: string;\n    externalId: string;\n\n    // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n    build(o: CollectionView | CollectionDomain) {\n        this.organizationId = o.organizationId;\n        if (o instanceof CollectionView) {\n            this.name = o.name;\n        } else {\n            this.name = o.name?.encryptedString;\n        }\n        this.externalId = o.externalId;\n    }\n}\n","import { EventType } from '../../enums/eventType';\nimport { EventView } from '../view/eventView';\n\nexport class Event {\n    message: string;\n    appIcon: string;\n    appName: string;\n    userId: string;\n    userName: string;\n    userEmail: string;\n    date: string;\n    ip: string;\n    type: string;\n\n    constructor(event: EventView) {\n        this.message = event.humanReadableMessage;\n        this.appIcon = event.appIcon;\n        this.appName = event.appName;\n        this.userId = event.userId;\n        this.userName = event.userName;\n        this.userEmail = event.userEmail;\n        this.date = event.date;\n        this.ip = event.ip;\n        this.type = EventType[event.type];\n    }\n}\n","import { FolderView } from '../view/folderView';\n\nimport { EncString } from '../domain/encString';\nimport { Folder as FolderDomain } from '../domain/folder';\n\nexport class Folder {\n    static template(): Folder {\n        const req = new Folder();\n        req.name = 'Folder name';\n        return req;\n    }\n\n    static toView(req: Folder, view = new FolderView()) {\n        view.name = req.name;\n        return view;\n    }\n\n    static toDomain(req: Folder, domain = new FolderDomain()) {\n        domain.name = req.name != null ? new EncString(req.name) : null;\n        return domain;\n    }\n\n    name: string;\n\n    // Use build method instead of ctor so that we can control order of JSON stringify for pretty print\n    build(o: FolderView | FolderDomain) {\n        if (o instanceof FolderView) {\n            this.name = o.name;\n        } else {\n            this.name = o.name?.encryptedString;\n        }\n    }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { FileUploadService as FileUploadServiceAbstraction } from '../abstractions/fileUpload.service';\nimport { LogService } from '../abstractions/log.service';\n\nimport { FileUploadType } from '../enums/fileUploadType';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\n\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\n\nimport { AzureFileUploadService } from './azureFileUpload.service';\nimport { BitwardenFileUploadService } from './bitwardenFileUpload.service';\n\nexport class FileUploadService implements FileUploadServiceAbstraction {\n    private azureFileUploadService: AzureFileUploadService;\n    private bitwardenFileUploadService: BitwardenFileUploadService;\n\n    constructor(private logService: LogService, private apiService: ApiService) {\n        this.azureFileUploadService = new AzureFileUploadService(logService);\n        this.bitwardenFileUploadService = new BitwardenFileUploadService(apiService);\n    }\n\n    async uploadSendFile(uploadData: SendFileUploadDataResponse, fileName: EncString, encryptedFileData: EncArrayBuffer) {\n        try {\n            switch (uploadData.fileUploadType) {\n                case FileUploadType.Direct:\n                    await this.bitwardenFileUploadService.upload(fileName.encryptedString, encryptedFileData,\n                        fd => this.apiService.postSendFile(uploadData.sendResponse.id, uploadData.sendResponse.file.id, fd));\n                    break;\n                case FileUploadType.Azure:\n                    const renewalCallback = async () => {\n                        const renewalResponse = await this.apiService.renewSendFileUploadUrl(uploadData.sendResponse.id,\n                            uploadData.sendResponse.file.id);\n                        return renewalResponse.url;\n                    };\n                    await this.azureFileUploadService.upload(uploadData.url, encryptedFileData,\n                        renewalCallback);\n                    break;\n                default:\n                    throw new Error('Unknown file upload type');\n            }\n        } catch (e) {\n            await this.apiService.deleteSend(uploadData.sendResponse.id);\n            throw e;\n        }\n    }\n\n    async uploadCipherAttachment(admin: boolean, uploadData: AttachmentUploadDataResponse, encryptedFileName: EncString,\n        encryptedFileData: EncArrayBuffer) {\n        const response = admin ? uploadData.cipherMiniResponse : uploadData.cipherResponse;\n        try {\n            switch (uploadData.fileUploadType) {\n                case FileUploadType.Direct:\n                    await this.bitwardenFileUploadService.upload(encryptedFileName.encryptedString, encryptedFileData,\n                        fd => this.apiService.postAttachmentFile(response.id, uploadData.attachmentId, fd));\n                    break;\n                case FileUploadType.Azure:\n                    const renewalCallback = async () => {\n                        const renewalResponse = await this.apiService.renewAttachmentUploadUrl(response.id,\n                            uploadData.attachmentId);\n                        return renewalResponse.url;\n                    };\n                    await this.azureFileUploadService.upload(uploadData.url, encryptedFileData, renewalCallback);\n                    break;\n                default:\n                    throw new Error('Unknown file upload type.');\n            }\n        } catch (e) {\n            if (admin) {\n                await this.apiService.deleteCipherAttachmentAdmin(response.id, uploadData.attachmentId);\n            } else {\n                await this.apiService.deleteCipherAttachment(response.id, uploadData.attachmentId);\n            }\n            throw e;\n        }\n    }\n}\n","export enum FileUploadType {\n    Direct = 0,\n    Azure = 1,\n}\n","import { LogService } from '../abstractions/log.service';\n\nimport { Utils } from '../misc/utils';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\n\nconst MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB\nconst MAX_BLOCKS_PER_BLOB = 50000;\n\nexport class AzureFileUploadService {\n    constructor(private logService: LogService) { }\n\n    async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise<string>) {\n        if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {\n            return await this.azureUploadBlob(url, data);\n        } else {\n            return await this.azureUploadBlocks(url, data, renewalCallback);\n        }\n    }\n    private async azureUploadBlob(url: string, data: EncArrayBuffer) {\n        const urlObject = Utils.getUrl(url);\n        const headers = new Headers({\n            'x-ms-date': new Date().toUTCString(),\n            'x-ms-version': urlObject.searchParams.get('sv'),\n            'Content-Length': data.buffer.byteLength.toString(),\n            'x-ms-blob-type': 'BlockBlob',\n        });\n\n        const request = new Request(url, {\n            body: data.buffer,\n            cache: 'no-store',\n            method: 'PUT',\n            headers: headers,\n        });\n\n        const blobResponse = await fetch(request);\n\n        if (blobResponse.status !== 201) {\n            throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);\n        }\n    }\n    private async azureUploadBlocks(url: string, data: EncArrayBuffer, renewalCallback: () => Promise<string>) {\n        const baseUrl = Utils.getUrl(url);\n        const blockSize = this.getMaxBlockSize(baseUrl.searchParams.get('sv'));\n        let blockIndex = 0;\n        const numBlocks = Math.ceil(data.buffer.byteLength / blockSize);\n        const blocksStaged: string[] = [];\n\n        if (numBlocks > MAX_BLOCKS_PER_BLOB) {\n            throw new Error(`Cannot upload file, exceeds maximum size of ${blockSize * MAX_BLOCKS_PER_BLOB}`);\n        }\n\n        try {\n            while (blockIndex < numBlocks) {\n                url = await this.renewUrlIfNecessary(url, renewalCallback);\n                const blockUrl = Utils.getUrl(url);\n                const blockId = this.encodedBlockId(blockIndex);\n                blockUrl.searchParams.append('comp', 'block');\n                blockUrl.searchParams.append('blockid', blockId);\n                const start = blockIndex * blockSize;\n                const blockData = data.buffer.slice(start, start + blockSize);\n                const blockHeaders = new Headers({\n                    'x-ms-date': new Date().toUTCString(),\n                    'x-ms-version': blockUrl.searchParams.get('sv'),\n                    'Content-Length': blockData.byteLength.toString(),\n                });\n\n                const blockRequest = new Request(blockUrl.toString(), {\n                    body: blockData,\n                    cache: 'no-store',\n                    method: 'PUT',\n                    headers: blockHeaders,\n                });\n\n                const blockResponse = await fetch(blockRequest);\n\n                if (blockResponse.status !== 201) {\n                    const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;\n                    this.logService.error(message + '\\n' + await blockResponse.json());\n                    throw new Error(message);\n                }\n\n                blocksStaged.push(blockId);\n                blockIndex++;\n            }\n\n            url = await this.renewUrlIfNecessary(url, renewalCallback);\n            const blockListUrl = Utils.getUrl(url);\n            const blockListXml = this.blockListXml(blocksStaged);\n            blockListUrl.searchParams.append('comp', 'blocklist');\n            const headers = new Headers({\n                'x-ms-date': new Date().toUTCString(),\n                'x-ms-version': blockListUrl.searchParams.get('sv'),\n                'Content-Length': blockListXml.length.toString(),\n            });\n\n            const request = new Request(blockListUrl.toString(), {\n                body: blockListXml,\n                cache: 'no-store',\n                method: 'PUT',\n                headers: headers,\n            });\n\n            const response = await fetch(request);\n\n            if (response.status !== 201) {\n                const message = `Unsuccessful block list PUT. Received status ${response.status}`;\n                this.logService.error(message + '\\n' + await response.json());\n                throw new Error(message);\n            }\n        } catch (e) {\n            throw e;\n        }\n    }\n\n    private async renewUrlIfNecessary(url: string, renewalCallback: () => Promise<string>): Promise<string> {\n        const urlObject = Utils.getUrl(url);\n        const expiry = new Date(urlObject.searchParams.get('se') ?? '');\n\n        if (isNaN(expiry.getTime())) {\n            expiry.setTime(Date.now() + 3600000);\n        }\n\n        if (expiry.getTime() < Date.now() + 1000) {\n            return await renewalCallback();\n        }\n        return url;\n    }\n\n    private encodedBlockId(blockIndex: number) {\n        // Encoded blockId max size is 64, so pre-encoding max size is 48\n        const utfBlockId = ('000000000000000000000000000000000000000000000000' + blockIndex.toString()).slice(-48);\n        return Utils.fromUtf8ToB64(utfBlockId);\n    }\n\n    private blockListXml(blockIdList: string[]) {\n        let xml = '<?xml version=\"1.0\" encoding=\"utf-8\"?><BlockList>';\n        blockIdList.forEach(blockId => {\n            xml += `<Latest>${blockId}</Latest>`;\n        });\n        xml += '</BlockList>';\n        return xml;\n    }\n\n    private getMaxBlockSize(version: string) {\n        if (Version.compare(version, '2019-12-12') >= 0) {\n            return 4000 * 1024 * 1024; // 4000 MiB\n        } else if (Version.compare(version, '2016-05-31') >= 0) {\n            return 100 * 1024 * 1024; // 100 MiB\n        } else {\n            return 4 * 1024 * 1024; // 4 MiB\n        }\n    }\n}\n\nclass Version {\n    /**\n     * Compares two Azure Versions against each other\n     * @param a Version to compare\n     * @param b Version to compare\n     * @returns a number less than zero if b is newer than a, 0 if equal,\n     * and greater than zero if a is newer than b\n     */\n    static compare(a: Required<Version> | string, b: Required<Version> | string) {\n        if (typeof (a) === 'string') {\n            a = new Version(a);\n        }\n\n        if (typeof (b) === 'string') {\n            b = new Version(b);\n        }\n\n        return a.year !== b.year ? a.year - b.year :\n            a.month !== b.month ? a.month - b.month :\n                a.day !== b.day ? a.day - b.day :\n                    0;\n    }\n    year = 0;\n    month = 0;\n    day = 0;\n\n    constructor(version: string) {\n        try {\n            const parts = version.split('-').map(v => Number.parseInt(v, 10));\n            this.year = parts[0];\n            this.month = parts[1];\n            this.day = parts[2];\n        } catch {\n            // Ignore error\n        }\n    }\n    /**\n     * Compares two Azure Versions against each other\n     * @param compareTo Version to compare against\n     * @returns a number less than zero if compareTo is newer, 0 if equal,\n     * and greater than zero if this is greater than compareTo\n     */\n    compare(compareTo: Required<Version> | string) {\n        return Version.compare(this, compareTo);\n    }\n}\n","import { ApiService } from '../abstractions/api.service';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\n\nimport { Utils } from '../misc/utils';\n\nexport class BitwardenFileUploadService\n{\n    constructor(private apiService: ApiService) { }\n\n    async upload(encryptedFileName: string, encryptedFileData: EncArrayBuffer, apiCall: (fd: FormData) => Promise<any>) {\n        const fd = new FormData();\n        try {\n            const blob = new Blob([encryptedFileData.buffer], { type: 'application/octet-stream' });\n            fd.append('data', blob, encryptedFileName);\n        } catch (e) {\n            if (Utils.isNode && !Utils.isBrowser) {\n                fd.append('data', Buffer.from(encryptedFileData.buffer) as any, {\n                    filepath: encryptedFileName,\n                    contentType: 'application/octet-stream',\n                } as any);\n            } else {\n                throw e;\n            }\n        }\n\n        await apiCall(fd);\n    }\n}\n","import { FolderData } from '../models/data/folderData';\n\nimport { Folder } from '../models/domain/folder';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\nimport { TreeNode } from '../models/domain/treeNode';\n\nimport { FolderRequest } from '../models/request/folderRequest';\n\nimport { FolderResponse } from '../models/response/folderResponse';\n\nimport { FolderView } from '../models/view/folderView';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService as FolderServiceAbstraction } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\nimport { CipherData } from '../models/data/cipherData';\n\nimport { ServiceUtils } from '../misc/serviceUtils';\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n    foldersPrefix: 'folders_',\n    ciphersPrefix: 'ciphers_',\n};\nconst NestingDelimiter = '/';\n\nexport class FolderService implements FolderServiceAbstraction {\n    decryptedFolderCache: FolderView[];\n\n    constructor(private cryptoService: CryptoService, private userService: UserService,\n        private apiService: ApiService, private storageService: StorageService,\n        private i18nService: I18nService, private cipherService: CipherService) { }\n\n    clearCache(): void {\n        this.decryptedFolderCache = null;\n    }\n\n    async encrypt(model: FolderView, key?: SymmetricCryptoKey): Promise<Folder> {\n        const folder = new Folder();\n        folder.id = model.id;\n        folder.name = await this.cryptoService.encrypt(model.name, key);\n        return folder;\n    }\n\n    async get(id: string): Promise<Folder> {\n        const userId = await this.userService.getUserId();\n        const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n            Keys.foldersPrefix + userId);\n        if (folders == null || !folders.hasOwnProperty(id)) {\n            return null;\n        }\n\n        return new Folder(folders[id]);\n    }\n\n    async getAll(): Promise<Folder[]> {\n        const userId = await this.userService.getUserId();\n        const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n            Keys.foldersPrefix + userId);\n        const response: Folder[] = [];\n        for (const id in folders) {\n            if (folders.hasOwnProperty(id)) {\n                response.push(new Folder(folders[id]));\n            }\n        }\n        return response;\n    }\n\n    async getAllDecrypted(): Promise<FolderView[]> {\n        if (this.decryptedFolderCache != null) {\n            return this.decryptedFolderCache;\n        }\n\n        const hasKey = await this.cryptoService.hasKey();\n        if (!hasKey) {\n            throw new Error('No key.');\n        }\n\n        const decFolders: FolderView[] = [];\n        const promises: Promise<any>[] = [];\n        const folders = await this.getAll();\n        folders.forEach(folder => {\n            promises.push(folder.decrypt().then(f => decFolders.push(f)));\n        });\n\n        await Promise.all(promises);\n        decFolders.sort(Utils.getSortFunction(this.i18nService, 'name'));\n\n        const noneFolder = new FolderView();\n        noneFolder.name = this.i18nService.t('noneFolder');\n        decFolders.push(noneFolder);\n\n        this.decryptedFolderCache = decFolders;\n        return this.decryptedFolderCache;\n    }\n\n    async getAllNested(): Promise<TreeNode<FolderView>[]> {\n        const folders = await this.getAllDecrypted();\n        const nodes: TreeNode<FolderView>[] = [];\n        folders.forEach(f => {\n            const folderCopy = new FolderView();\n            folderCopy.id = f.id;\n            folderCopy.revisionDate = f.revisionDate;\n            const parts = f.name != null ? f.name.replace(/^\\/+|\\/+$/g, '').split(NestingDelimiter) : [];\n            ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NestingDelimiter);\n        });\n        return nodes;\n    }\n\n    async getNested(id: string): Promise<TreeNode<FolderView>> {\n        const folders = await this.getAllNested();\n        return ServiceUtils.getTreeNodeObject(folders, id) as TreeNode<FolderView>;\n    }\n\n    async saveWithServer(folder: Folder): Promise<any> {\n        const request = new FolderRequest(folder);\n\n        let response: FolderResponse;\n        if (folder.id == null) {\n            response = await this.apiService.postFolder(request);\n            folder.id = response.id;\n        } else {\n            response = await this.apiService.putFolder(folder.id, request);\n        }\n\n        const userId = await this.userService.getUserId();\n        const data = new FolderData(response, userId);\n        await this.upsert(data);\n    }\n\n    async upsert(folder: FolderData | FolderData[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        let folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n            Keys.foldersPrefix + userId);\n        if (folders == null) {\n            folders = {};\n        }\n\n        if (folder instanceof FolderData) {\n            const f = folder as FolderData;\n            folders[f.id] = f;\n        } else {\n            (folder as FolderData[]).forEach(f => {\n                folders[f.id] = f;\n            });\n        }\n\n        await this.storageService.save(Keys.foldersPrefix + userId, folders);\n        this.decryptedFolderCache = null;\n    }\n\n    async replace(folders: { [id: string]: FolderData; }): Promise<any> {\n        const userId = await this.userService.getUserId();\n        await this.storageService.save(Keys.foldersPrefix + userId, folders);\n        this.decryptedFolderCache = null;\n    }\n\n    async clear(userId: string): Promise<any> {\n        await this.storageService.remove(Keys.foldersPrefix + userId);\n        this.decryptedFolderCache = null;\n    }\n\n    async delete(id: string | string[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        const folders = await this.storageService.get<{ [id: string]: FolderData; }>(\n            Keys.foldersPrefix + userId);\n        if (folders == null) {\n            return;\n        }\n\n        if (typeof id === 'string') {\n            if (folders[id] == null) {\n                return;\n            }\n            delete folders[id];\n        } else {\n            (id as string[]).forEach(i => {\n                delete folders[i];\n            });\n        }\n\n        await this.storageService.save(Keys.foldersPrefix + userId, folders);\n        this.decryptedFolderCache = null;\n\n        // Items in a deleted folder are re-assigned to \"No Folder\"\n        const ciphers = await this.storageService.get<{ [id: string]: CipherData; }>(Keys.ciphersPrefix + userId);\n        if (ciphers != null) {\n            const updates: CipherData[] = [];\n            for (const cId in ciphers) {\n                if (ciphers[cId].folderId === id) {\n                    ciphers[cId].folderId = null;\n                    updates.push(ciphers[cId]);\n                }\n            }\n            if (updates.length > 0) {\n                this.cipherService.upsert(updates);\n            }\n        }\n    }\n\n    async deleteWithServer(id: string): Promise<any> {\n        await this.apiService.deleteFolder(id);\n        await this.delete(id);\n    }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport {\n    ImportOption,\n    ImportService as ImportServiceAbstraction,\n} from '../abstractions/import.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { Utils } from '../misc/utils';\n\nimport { CipherRequest } from '../models/request/cipherRequest';\nimport { CollectionRequest } from '../models/request/collectionRequest';\nimport { FolderRequest } from '../models/request/folderRequest';\nimport { ImportCiphersRequest } from '../models/request/importCiphersRequest';\nimport { ImportOrganizationCiphersRequest } from '../models/request/importOrganizationCiphersRequest';\nimport { KvpRequest } from '../models/request/kvpRequest';\n\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { CipherView } from '../models/view/cipherView';\n\nimport { AscendoCsvImporter } from '../importers/ascendoCsvImporter';\nimport { AvastCsvImporter } from '../importers/avastCsvImporter';\nimport { AvastJsonImporter } from '../importers/avastJsonImporter';\nimport { AviraCsvImporter } from '../importers/aviraCsvImporter';\nimport { BitwardenCsvImporter } from '../importers/bitwardenCsvImporter';\nimport { BitwardenJsonImporter } from '../importers/bitwardenJsonImporter';\nimport { BlackBerryCsvImporter } from '../importers/blackBerryCsvImporter';\nimport { BlurCsvImporter } from '../importers/blurCsvImporter';\nimport { ButtercupCsvImporter } from '../importers/buttercupCsvImporter';\nimport { ChromeCsvImporter } from '../importers/chromeCsvImporter';\nimport { ClipperzHtmlImporter } from '../importers/clipperzHtmlImporter';\nimport { CodebookCsvImporter } from '../importers/codebookCsvImporter';\nimport { DashlaneJsonImporter } from '../importers/dashlaneJsonImporter';\nimport { EncryptrCsvImporter } from '../importers/encryptrCsvImporter';\nimport { EnpassCsvImporter } from '../importers/enpassCsvImporter';\nimport { EnpassJsonImporter } from '../importers/enpassJsonImporter';\nimport { FirefoxCsvImporter } from '../importers/firefoxCsvImporter';\nimport { FSecureFskImporter } from '../importers/fsecureFskImporter';\nimport { GnomeJsonImporter } from '../importers/gnomeJsonImporter';\nimport { Importer } from '../importers/importer';\nimport { KasperskyTxtImporter } from '../importers/kasperskyTxtImporter';\nimport { KeePass2XmlImporter } from '../importers/keepass2XmlImporter';\nimport { KeePassXCsvImporter } from '../importers/keepassxCsvImporter';\nimport { KeeperCsvImporter } from '../importers/keeperCsvImporter';\nimport { LastPassCsvImporter } from '../importers/lastpassCsvImporter';\nimport { LogMeOnceCsvImporter } from '../importers/logMeOnceCsvImporter';\nimport { MeldiumCsvImporter } from '../importers/meldiumCsvImporter';\nimport { MSecureCsvImporter } from '../importers/msecureCsvImporter';\nimport { MykiCsvImporter } from '../importers/mykiCsvImporter';\nimport { NordPassCsvImporter } from '../importers/nordpassCsvImporter';\nimport { OnePassword1PifImporter } from '../importers/onepasswordImporters/onepassword1PifImporter';\nimport { OnePasswordMacCsvImporter } from '../importers/onepasswordImporters/onepasswordMacCsvImporter';\nimport { OnePasswordWinCsvImporter } from '../importers/onepasswordImporters/onepasswordWinCsvImporter';\nimport { PadlockCsvImporter } from '../importers/padlockCsvImporter';\nimport { PassKeepCsvImporter } from '../importers/passkeepCsvImporter';\nimport { PassmanJsonImporter } from '../importers/passmanJsonImporter';\nimport { PasspackCsvImporter } from '../importers/passpackCsvImporter';\nimport { PasswordAgentCsvImporter } from '../importers/passwordAgentCsvImporter';\nimport { PasswordBossJsonImporter } from '../importers/passwordBossJsonImporter';\nimport { PasswordDragonXmlImporter } from '../importers/passwordDragonXmlImporter';\nimport { PasswordSafeXmlImporter } from '../importers/passwordSafeXmlImporter';\nimport { PasswordWalletTxtImporter } from '../importers/passwordWalletTxtImporter';\nimport { RememBearCsvImporter } from '../importers/rememBearCsvImporter';\nimport { RoboFormCsvImporter } from '../importers/roboformCsvImporter';\nimport { SafariCsvImporter } from '../importers/safariCsvImporter';\nimport { SafeInCloudXmlImporter } from '../importers/safeInCloudXmlImporter';\nimport { SaferPassCsvImporter } from '../importers/saferpassCsvImport';\nimport { SecureSafeCsvImporter } from '../importers/secureSafeCsvImporter';\nimport { SplashIdCsvImporter } from '../importers/splashIdCsvImporter';\nimport { StickyPasswordXmlImporter } from '../importers/stickyPasswordXmlImporter';\nimport { TrueKeyCsvImporter } from '../importers/truekeyCsvImporter';\nimport { UpmCsvImporter } from '../importers/upmCsvImporter';\nimport { YotiCsvImporter } from '../importers/yotiCsvImporter';\nimport { ZohoVaultCsvImporter } from '../importers/zohoVaultCsvImporter';\n\nexport class ImportService implements ImportServiceAbstraction {\n    featuredImportOptions = [\n        { id: 'bitwardenjson', name: 'Bitwarden (json)' },\n        { id: 'bitwardencsv', name: 'Bitwarden (csv)' },\n        { id: 'chromecsv', name: 'Chrome (csv)' },\n        { id: 'dashlanejson', name: 'Dashlane (json)' },\n        { id: 'firefoxcsv', name: 'Firefox (csv)' },\n        { id: 'keepass2xml', name: 'KeePass 2 (xml)' },\n        { id: 'lastpasscsv', name: 'LastPass (csv)' },\n        { id: 'safaricsv', name: 'Safari and macOS (csv)' },\n        { id: '1password1pif', name: '1Password (1pif)' },\n    ];\n\n    regularImportOptions: ImportOption[] = [\n        { id: 'keepassxcsv', name: 'KeePassX (csv)' },\n        { id: '1passwordwincsv', name: '1Password 6 and 7 Windows (csv)' },\n        { id: '1passwordmaccsv', name: '1Password 6 and 7 Mac (csv)' },\n        { id: 'roboformcsv', name: 'RoboForm (csv)' },\n        { id: 'keepercsv', name: 'Keeper (csv)' },\n        { id: 'enpasscsv', name: 'Enpass (csv)' },\n        { id: 'enpassjson', name: 'Enpass (json)' },\n        { id: 'safeincloudxml', name: 'SafeInCloud (xml)' },\n        { id: 'pwsafexml', name: 'Password Safe (xml)' },\n        { id: 'stickypasswordxml', name: 'Sticky Password (xml)' },\n        { id: 'msecurecsv', name: 'mSecure (csv)' },\n        { id: 'truekeycsv', name: 'True Key (csv)' },\n        { id: 'passwordbossjson', name: 'Password Boss (json)' },\n        { id: 'zohovaultcsv', name: 'Zoho Vault (csv)' },\n        { id: 'splashidcsv', name: 'SplashID (csv)' },\n        { id: 'passworddragonxml', name: 'Password Dragon (xml)' },\n        { id: 'padlockcsv', name: 'Padlock (csv)' },\n        { id: 'passboltcsv', name: 'Passbolt (csv)' },\n        { id: 'clipperzhtml', name: 'Clipperz (html)' },\n        { id: 'aviracsv', name: 'Avira (csv)' },\n        { id: 'saferpasscsv', name: 'SaferPass (csv)' },\n        { id: 'upmcsv', name: 'Universal Password Manager (csv)' },\n        { id: 'ascendocsv', name: 'Ascendo DataVault (csv)' },\n        { id: 'meldiumcsv', name: 'Meldium (csv)' },\n        { id: 'passkeepcsv', name: 'PassKeep (csv)' },\n        { id: 'operacsv', name: 'Opera (csv)' },\n        { id: 'vivaldicsv', name: 'Vivaldi (csv)' },\n        { id: 'gnomejson', name: 'GNOME Passwords and Keys/Seahorse (json)' },\n        { id: 'blurcsv', name: 'Blur (csv)' },\n        { id: 'passwordagentcsv', name: 'Password Agent (csv)' },\n        { id: 'passpackcsv', name: 'Passpack (csv)' },\n        { id: 'passmanjson', name: 'Passman (json)' },\n        { id: 'avastcsv', name: 'Avast Passwords (csv)' },\n        { id: 'avastjson', name: 'Avast Passwords (json)' },\n        { id: 'fsecurefsk', name: 'F-Secure KEY (fsk)' },\n        { id: 'kasperskytxt', name: 'Kaspersky Password Manager (txt)' },\n        { id: 'remembearcsv', name: 'RememBear (csv)' },\n        { id: 'passwordwallettxt', name: 'PasswordWallet (txt)' },\n        { id: 'mykicsv', name: 'Myki (csv)' },\n        { id: 'securesafecsv', name: 'SecureSafe (csv)' },\n        { id: 'logmeoncecsv', name: 'LogMeOnce (csv)' },\n        { id: 'blackberrycsv', name: 'BlackBerry Password Keeper (csv)' },\n        { id: 'buttercupcsv', name: 'Buttercup (csv)' },\n        { id: 'codebookcsv', name: 'Codebook (csv)' },\n        { id: 'encryptrcsv', name: 'Encryptr (csv)' },\n        { id: 'yoticsv', name: 'Yoti (csv)' },\n        { id: 'nordpasscsv', name: 'Nordpass (csv)' },\n    ];\n\n    constructor(private cipherService: CipherService, private folderService: FolderService,\n        private apiService: ApiService, private i18nService: I18nService,\n        private collectionService: CollectionService, private platformUtilsService: PlatformUtilsService,\n        private cryptoService: CryptoService) { }\n\n    getImportOptions(): ImportOption[] {\n        return this.featuredImportOptions.concat(this.regularImportOptions);\n    }\n\n    async import(importer: Importer, fileContents: string, organizationId: string = null): Promise<Error> {\n        const importResult = await importer.parse(fileContents);\n        if (importResult.success) {\n            if (importResult.folders.length === 0 && importResult.ciphers.length === 0) {\n                return new Error(this.i18nService.t('importNothingError'));\n            } else if (importResult.ciphers.length > 0) {\n                const halfway = Math.floor(importResult.ciphers.length / 2);\n                const last = importResult.ciphers.length - 1;\n\n                if (this.badData(importResult.ciphers[0]) &&\n                    this.badData(importResult.ciphers[halfway]) &&\n                    this.badData(importResult.ciphers[last])) {\n                    return new Error(this.i18nService.t('importFormatError'));\n                }\n            }\n            try {\n                await this.postImport(importResult, organizationId);\n            } catch (error) {\n                const errorResponse = new ErrorResponse(error, 400);\n                return this.handleServerError(errorResponse, importResult);\n            }\n            return null;\n        } else {\n            if (!Utils.isNullOrWhitespace(importResult.errorMessage)) {\n                return new Error(importResult.errorMessage);\n            } else {\n                return new Error(this.i18nService.t('importFormatError'));\n            }\n        }\n    }\n\n    getImporter(format: string, organizationId: string = null): Importer {\n        const importer = this.getImporterInstance(format);\n        if (importer == null) {\n            return null;\n        }\n        importer.organizationId = organizationId;\n        return importer;\n    }\n\n    private getImporterInstance(format: string) {\n        if (format == null || format === '') {\n            return null;\n        }\n\n        switch (format) {\n            case 'bitwardencsv':\n                return new BitwardenCsvImporter();\n            case 'bitwardenjson':\n                return new BitwardenJsonImporter(this.cryptoService, this.i18nService);\n            case 'lastpasscsv':\n            case 'passboltcsv':\n                return new LastPassCsvImporter();\n            case 'keepassxcsv':\n                return new KeePassXCsvImporter();\n            case 'aviracsv':\n                return new AviraCsvImporter();\n            case 'blurcsv':\n                return new BlurCsvImporter();\n            case 'safeincloudxml':\n                return new SafeInCloudXmlImporter();\n            case 'padlockcsv':\n                return new PadlockCsvImporter();\n            case 'keepass2xml':\n                return new KeePass2XmlImporter();\n            case 'chromecsv':\n            case 'operacsv':\n            case 'vivaldicsv':\n                return new ChromeCsvImporter();\n            case 'firefoxcsv':\n                return new FirefoxCsvImporter();\n            case 'upmcsv':\n                return new UpmCsvImporter();\n            case 'saferpasscsv':\n                return new SaferPassCsvImporter();\n            case 'safaricsv':\n                return new SafariCsvImporter();\n            case 'meldiumcsv':\n                return new MeldiumCsvImporter();\n            case '1password1pif':\n                return new OnePassword1PifImporter();\n            case '1passwordwincsv':\n                return new OnePasswordWinCsvImporter();\n            case '1passwordmaccsv':\n                return new OnePasswordMacCsvImporter();\n            case 'keepercsv':\n                return new KeeperCsvImporter();\n            case 'passworddragonxml':\n                return new PasswordDragonXmlImporter();\n            case 'enpasscsv':\n                return new EnpassCsvImporter();\n            case 'enpassjson':\n                return new EnpassJsonImporter();\n            case 'pwsafexml':\n                return new PasswordSafeXmlImporter();\n            case 'dashlanejson':\n                return new DashlaneJsonImporter();\n            case 'msecurecsv':\n                return new MSecureCsvImporter();\n            case 'stickypasswordxml':\n                return new StickyPasswordXmlImporter();\n            case 'truekeycsv':\n                return new TrueKeyCsvImporter();\n            case 'clipperzhtml':\n                return new ClipperzHtmlImporter();\n            case 'roboformcsv':\n                return new RoboFormCsvImporter();\n            case 'ascendocsv':\n                return new AscendoCsvImporter();\n            case 'passwordbossjson':\n                return new PasswordBossJsonImporter();\n            case 'zohovaultcsv':\n                return new ZohoVaultCsvImporter();\n            case 'splashidcsv':\n                return new SplashIdCsvImporter();\n            case 'passkeepcsv':\n                return new PassKeepCsvImporter();\n            case 'gnomejson':\n                return new GnomeJsonImporter();\n            case 'passwordagentcsv':\n                return new PasswordAgentCsvImporter();\n            case 'passpackcsv':\n                return new PasspackCsvImporter();\n            case 'passmanjson':\n                return new PassmanJsonImporter();\n            case 'avastcsv':\n                return new AvastCsvImporter();\n            case 'avastjson':\n                return new AvastJsonImporter();\n            case 'fsecurefsk':\n                return new FSecureFskImporter();\n            case 'kasperskytxt':\n                return new KasperskyTxtImporter();\n            case 'remembearcsv':\n                return new RememBearCsvImporter();\n            case 'passwordwallettxt':\n                return new PasswordWalletTxtImporter();\n            case 'mykicsv':\n                return new MykiCsvImporter();\n            case 'securesafecsv':\n                return new SecureSafeCsvImporter();\n            case 'logmeoncecsv':\n                return new LogMeOnceCsvImporter();\n            case 'blackberrycsv':\n                return new BlackBerryCsvImporter();\n            case 'buttercupcsv':\n                return new ButtercupCsvImporter();\n            case 'codebookcsv':\n                return new CodebookCsvImporter();\n            case 'encryptrcsv':\n                return new EncryptrCsvImporter();\n            case 'yoticsv':\n                return new YotiCsvImporter();\n            case 'nordpasscsv':\n                return new NordPassCsvImporter();\n            default:\n                return null;\n        }\n    }\n\n    private async postImport(importResult: ImportResult, organizationId: string = null) {\n        if (organizationId == null) {\n            const request = new ImportCiphersRequest();\n            for (let i = 0; i < importResult.ciphers.length; i++) {\n                const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n                request.ciphers.push(new CipherRequest(c));\n            }\n            if (importResult.folders != null) {\n                for (let i = 0; i < importResult.folders.length; i++) {\n                    const f = await this.folderService.encrypt(importResult.folders[i]);\n                    request.folders.push(new FolderRequest(f));\n                }\n            }\n            if (importResult.folderRelationships != null) {\n                importResult.folderRelationships.forEach(r =>\n                    request.folderRelationships.push(new KvpRequest(r[0], r[1])));\n            }\n            return await this.apiService.postImportCiphers(request);\n        } else {\n            const request = new ImportOrganizationCiphersRequest();\n            for (let i = 0; i < importResult.ciphers.length; i++) {\n                importResult.ciphers[i].organizationId = organizationId;\n                const c = await this.cipherService.encrypt(importResult.ciphers[i]);\n                request.ciphers.push(new CipherRequest(c));\n            }\n            if (importResult.collections != null) {\n                for (let i = 0; i < importResult.collections.length; i++) {\n                    importResult.collections[i].organizationId = organizationId;\n                    const c = await this.collectionService.encrypt(importResult.collections[i]);\n                    request.collections.push(new CollectionRequest(c));\n                }\n            }\n            if (importResult.collectionRelationships != null) {\n                importResult.collectionRelationships.forEach(r =>\n                    request.collectionRelationships.push(new KvpRequest(r[0], r[1])));\n            }\n            return await this.apiService.postImportOrganizationCiphers(organizationId, request);\n        }\n    }\n\n    private badData(c: CipherView) {\n        return (c.name == null || c.name === '--') &&\n            (c.type === CipherType.Login && c.login != null && Utils.isNullOrWhitespace(c.login.password));\n    }\n\n    private handleServerError(errorResponse: ErrorResponse, importResult: ImportResult): Error {\n        if (errorResponse.validationErrors == null) {\n            return new Error(errorResponse.message);\n        }\n\n        let errorMessage = '';\n\n        Object.entries(errorResponse.validationErrors).forEach(([key, value], index) => {\n            let item;\n            let itemType;\n            const i = Number(key.match(/[0-9]+/)[0]);\n\n            switch (key.match(/^\\w+/)[0]) {\n                case 'Ciphers':\n                    item = importResult.ciphers[i];\n                    itemType = CipherType[item.type];\n                    break;\n                case 'Folders':\n                    item = importResult.folders[i];\n                    itemType = 'Folder';\n                    break;\n                case 'Collections':\n                    item = importResult.collections[i];\n                    itemType = 'Collection';\n                    break;\n                default:\n                    return;\n            }\n\n            if (index > 0) {\n                errorMessage += '\\n\\n';\n            }\n\n            if (itemType !== 'Folder' && itemType !== 'Collection') {\n                errorMessage += '[' + (i + 1) + '] ';\n            }\n\n            errorMessage += '[' + itemType + '] \"' + item.name + '\": ' + value;\n        });\n\n        return new Error(errorMessage);\n    }\n}\n","import { CipherRequest } from './cipherRequest';\nimport { FolderRequest } from './folderRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportCiphersRequest {\n    ciphers: CipherRequest[] = [];\n    folders: FolderRequest[] = [];\n    folderRelationships: KvpRequest<number, number>[] = [];\n}\n","import { CipherRequest } from './cipherRequest';\nimport { CollectionRequest } from './collectionRequest';\nimport { KvpRequest } from './kvpRequest';\n\nexport class ImportOrganizationCiphersRequest {\n    ciphers: CipherRequest[] = [];\n    collections: CollectionRequest[] = [];\n    collectionRelationships: KvpRequest<number, number>[] = [];\n}\n","export class KvpRequest<TK, TV> {\n    key: TK;\n    value: TV;\n\n    constructor(key: TK, value: TV) {\n        this.key = key;\n        this.value = value;\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AscendoCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.length < 2) {\n                return;\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n            cipher.name = this.getValueOrDefault(value[0], '--');\n\n            if (value.length > 2 && (value.length % 2) === 0) {\n                for (let i = 0; i < value.length - 2; i += 2) {\n                    const val: string = value[i + 2];\n                    const field: string = value[i + 1];\n                    if (this.isNullOrWhitespace(val) || this.isNullOrWhitespace(field)) {\n                        continue;\n                    }\n\n                    const fieldLower = field.toLowerCase();\n                    if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n                        cipher.login.password = this.getValueOrDefault(val);\n                    } else if (cipher.login.username == null &&\n                        this.usernameFieldNames.indexOf(fieldLower) > -1) {\n                        cipher.login.username = this.getValueOrDefault(val);\n                    } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n                        this.uriFieldNames.indexOf(fieldLower) > -1) {\n                        cipher.login.uris = this.makeUriArray(val);\n                    } else {\n                        this.processKvp(cipher, field, val);\n                    }\n                }\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AvastCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.name);\n            cipher.login.uris = this.makeUriArray(value.web);\n            cipher.login.password = this.getValueOrDefault(value.password);\n            cipher.login.username = this.getValueOrDefault(value.login);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class AvastJsonImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = JSON.parse(data);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        if (results.logins != null) {\n            results.logins.forEach((value: any) => {\n                const cipher = this.initLoginCipher();\n                cipher.name = this.getValueOrDefault(value.custName);\n                cipher.notes = this.getValueOrDefault(value.note);\n                cipher.login.uris = this.makeUriArray(value.url);\n                cipher.login.password = this.getValueOrDefault(value.pwd);\n                cipher.login.username = this.getValueOrDefault(value.loginName);\n                this.cleanupCipher(cipher);\n                result.ciphers.push(cipher);\n            });\n        }\n\n        if (results.notes != null) {\n            results.notes.forEach((value: any) => {\n                const cipher = this.initLoginCipher();\n                cipher.type = CipherType.SecureNote;\n                cipher.secureNote.type = SecureNoteType.Generic;\n                cipher.name = this.getValueOrDefault(value.label);\n                cipher.notes = this.getValueOrDefault(value.text);\n                this.cleanupCipher(cipher);\n                result.ciphers.push(cipher);\n            });\n        }\n\n        if (results.cards != null) {\n            results.cards.forEach((value: any) => {\n                const cipher = this.initLoginCipher();\n                cipher.type = CipherType.Card;\n                cipher.name = this.getValueOrDefault(value.custName);\n                cipher.notes = this.getValueOrDefault(value.note);\n                cipher.card.cardholderName = this.getValueOrDefault(value.holderName);\n                cipher.card.number = this.getValueOrDefault(value.cardNumber);\n                cipher.card.code = this.getValueOrDefault(value.cvv);\n                cipher.card.brand = this.getCardBrand(cipher.card.number);\n                if (value.expirationDate != null) {\n                    if (value.expirationDate.month != null) {\n                        cipher.card.expMonth = value.expirationDate.month + '';\n                    }\n                    if (value.expirationDate.year != null) {\n                        cipher.card.expYear = value.expirationDate.year + '';\n                    }\n                }\n                this.cleanupCipher(cipher);\n                result.ciphers.push(cipher);\n            });\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class AviraCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.name,\n                this.getValueOrDefault(this.nameFromUrl(value.website), '--'));\n            cipher.login.uris = this.makeUriArray(value.website);\n            cipher.login.password = this.getValueOrDefault(value.password);\n\n            if (this.isNullOrWhitespace(value.username) && !this.isNullOrWhitespace(value.secondary_username)) {\n                cipher.login.username = value.secondary_username;\n            } else {\n                cipher.login.username = this.getValueOrDefault(value.username);\n                cipher.notes = this.getValueOrDefault(value.secondary_username);\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { CollectionView } from '../models/view/collectionView';\nimport { FieldView } from '../models/view/fieldView';\nimport { FolderView } from '../models/view/folderView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherRepromptType } from '../enums/cipherRepromptType';\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class BitwardenCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (this.organization && !this.isNullOrWhitespace(value.collections)) {\n                const collections = (value.collections as string).split(',');\n                collections.forEach(col => {\n                    let addCollection = true;\n                    let collectionIndex = result.collections.length;\n\n                    for (let i = 0; i < result.collections.length; i++) {\n                        if (result.collections[i].name === col) {\n                            addCollection = false;\n                            collectionIndex = i;\n                            break;\n                        }\n                    }\n\n                    if (addCollection) {\n                        const collection = new CollectionView();\n                        collection.name = col;\n                        result.collections.push(collection);\n                    }\n\n                    result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n                });\n            } else if (!this.organization) {\n                this.processFolder(result, value.folder);\n            }\n\n            const cipher = new CipherView();\n            cipher.favorite = !this.organization && this.getValueOrDefault(value.favorite, '0') !== '0' ? true : false;\n            cipher.type = CipherType.Login;\n            cipher.notes = this.getValueOrDefault(value.notes);\n            cipher.name = this.getValueOrDefault(value.name, '--');\n            try {\n                cipher.reprompt = parseInt(this.getValueOrDefault(value.reprompt, CipherRepromptType.None.toString()), 10);\n            } catch (e) {\n                // tslint:disable-next-line\n                console.error('Unable to parse reprompt value', e);\n                cipher.reprompt = CipherRepromptType.None;\n            }\n\n            if (!this.isNullOrWhitespace(value.fields)) {\n                const fields = this.splitNewLine(value.fields);\n                for (let i = 0; i < fields.length; i++) {\n                    if (this.isNullOrWhitespace(fields[i])) {\n                        continue;\n                    }\n\n                    const delimPosition = fields[i].lastIndexOf(': ');\n                    if (delimPosition === -1) {\n                        continue;\n                    }\n\n                    if (cipher.fields == null) {\n                        cipher.fields = [];\n                    }\n\n                    const field = new FieldView();\n                    field.name = fields[i].substr(0, delimPosition);\n                    field.value = null;\n                    field.type = FieldType.Text;\n                    if (fields[i].length > (delimPosition + 2)) {\n                        field.value = fields[i].substr(delimPosition + 2);\n                    }\n                    cipher.fields.push(field);\n                }\n            }\n\n            const valueType = value.type != null ? value.type.toLowerCase() : null;\n            switch (valueType) {\n                case 'note':\n                    cipher.type = CipherType.SecureNote;\n                    cipher.secureNote = new SecureNoteView();\n                    cipher.secureNote.type = SecureNoteType.Generic;\n                    break;\n                default:\n                    cipher.type = CipherType.Login;\n                    cipher.login = new LoginView();\n                    cipher.login.totp = this.getValueOrDefault(value.login_totp || value.totp);\n                    cipher.login.username = this.getValueOrDefault(value.login_username || value.username);\n                    cipher.login.password = this.getValueOrDefault(value.login_password || value.password);\n                    const uris = this.parseSingleRowCsv(value.login_uri || value.uri);\n                    cipher.login.uris = this.makeUriArray(uris);\n                    break;\n            }\n\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { EncString } from '../models/domain/encString';\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherWithIds } from '../models/export/cipherWithIds';\nimport { CollectionWithId } from '../models/export/collectionWithId';\nimport { FolderWithId } from '../models/export/folderWithId';\n\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\n\nexport class BitwardenJsonImporter extends BaseImporter implements Importer {\n    private results: any;\n    private result: ImportResult;\n\n    constructor(private cryptoService: CryptoService, private i18nService: I18nService) {\n        super();\n    }\n\n    async parse(data: string): Promise<ImportResult> {\n        this.result = new ImportResult();\n        this.results = JSON.parse(data);\n        if (this.results == null || this.results.items == null || this.results.items.length === 0) {\n            this.result.success = false;\n            return this.result;\n        }\n\n        if (this.results.encrypted) {\n            await this.parseEncrypted();\n        } else {\n            this.parseDecrypted();\n        }\n\n        return this.result;\n    }\n\n    private async parseEncrypted() {\n        if (this.results.encKeyValidation_DO_NOT_EDIT != null) {\n            const orgKey = await this.cryptoService.getOrgKey(this.organizationId);\n            const encKeyValidation = new EncString(this.results.encKeyValidation_DO_NOT_EDIT);\n            const encKeyValidationDecrypt = await this.cryptoService.decryptToUtf8(encKeyValidation, orgKey);\n            if (encKeyValidationDecrypt === null) {\n                this.result.success = false;\n                this.result.errorMessage = this.i18nService.t('importEncKeyError');\n                return;\n            }\n        }\n\n        const groupingsMap = new Map<string, number>();\n\n        if (this.organization && this.results.collections != null) {\n            for (const c of this.results.collections as CollectionWithId[]) {\n                const collection = CollectionWithId.toDomain(c);\n                if (collection != null) {\n                    collection.id = null;\n                    collection.organizationId = this.organizationId;\n                    const view = await collection.decrypt();\n                    groupingsMap.set(c.id, this.result.collections.length);\n                    this.result.collections.push(view);\n                }\n            }\n        } else if (!this.organization && this.results.folders != null) {\n            for (const f of this.results.folders as FolderWithId[]) {\n                const folder = FolderWithId.toDomain(f);\n                if (folder != null) {\n                    folder.id = null;\n                    const view = await folder.decrypt();\n                    groupingsMap.set(f.id, this.result.folders.length);\n                    this.result.folders.push(view);\n                }\n            }\n        }\n\n        for (const c of this.results.items as CipherWithIds[]) {\n            const cipher = CipherWithIds.toDomain(c);\n            // reset ids incase they were set for some reason\n            cipher.id = null;\n            cipher.folderId = null;\n            cipher.organizationId = this.organizationId;\n            cipher.collectionIds = null;\n\n            // make sure password history is limited\n            if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n                cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n            }\n\n            if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n                this.result.folderRelationships.push([this.result.ciphers.length, groupingsMap.get(c.folderId)]);\n            } else if (this.organization && c.collectionIds != null) {\n                c.collectionIds.forEach(cId => {\n                    if (groupingsMap.has(cId)) {\n                        this.result.collectionRelationships.push([this.result.ciphers.length, groupingsMap.get(cId)]);\n                    }\n                });\n            }\n\n            const view = await cipher.decrypt();\n            this.cleanupCipher(view);\n            this.result.ciphers.push(view);\n        }\n\n        this.result.success = true;\n    }\n\n    private parseDecrypted() {\n        const groupingsMap = new Map<string, number>();\n        if (this.organization && this.results.collections != null) {\n            this.results.collections.forEach((c: CollectionWithId) => {\n                const collection = CollectionWithId.toView(c);\n                if (collection != null) {\n                    collection.id = null;\n                    collection.organizationId = null;\n                    groupingsMap.set(c.id, this.result.collections.length);\n                    this.result.collections.push(collection);\n                }\n            });\n        } else if (!this.organization && this.results.folders != null) {\n            this.results.folders.forEach((f: FolderWithId) => {\n                const folder = FolderWithId.toView(f);\n                if (folder != null) {\n                    folder.id = null;\n                    groupingsMap.set(f.id, this.result.folders.length);\n                    this.result.folders.push(folder);\n                }\n            });\n        }\n\n        this.results.items.forEach((c: CipherWithIds) => {\n            const cipher = CipherWithIds.toView(c);\n            // reset ids incase they were set for some reason\n            cipher.id = null;\n            cipher.folderId = null;\n            cipher.organizationId = null;\n            cipher.collectionIds = null;\n\n            // make sure password history is limited\n            if (cipher.passwordHistory != null && cipher.passwordHistory.length > 5) {\n                cipher.passwordHistory = cipher.passwordHistory.slice(0, 5);\n            }\n\n            if (!this.organization && c.folderId != null && groupingsMap.has(c.folderId)) {\n                this.result.folderRelationships.push([this.result.ciphers.length, groupingsMap.get(c.folderId)]);\n            } else if (this.organization && c.collectionIds != null) {\n                c.collectionIds.forEach(cId => {\n                    if (groupingsMap.has(cId)) {\n                        this.result.collectionRelationships.push([this.result.ciphers.length, groupingsMap.get(cId)]);\n                    }\n                });\n            }\n\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n        });\n\n        this.result.success = true;\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlackBerryCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.grouping === 'list') {\n                return;\n            }\n            const cipher = this.initLoginCipher();\n            cipher.favorite = value.fav === '1';\n            cipher.name = this.getValueOrDefault(value.name);\n            cipher.notes = this.getValueOrDefault(value.extra);\n            if (value.grouping !== 'note') {\n                cipher.login.uris = this.makeUriArray(value.url);\n                cipher.login.password = this.getValueOrDefault(value.password);\n                cipher.login.username = this.getValueOrDefault(value.username);\n            }\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class BlurCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.label === 'null') {\n                value.label = null;\n            }\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.label,\n                this.getValueOrDefault(this.nameFromUrl(value.domain), '--'));\n            cipher.login.uris = this.makeUriArray(value.domain);\n            cipher.login.password = this.getValueOrDefault(value.password);\n\n            if (this.isNullOrWhitespace(value.email) && !this.isNullOrWhitespace(value.username)) {\n                cipher.login.username = value.username;\n            } else {\n                cipher.login.username = this.getValueOrDefault(value.email);\n                cipher.notes = this.getValueOrDefault(value.username);\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst OfficialProps = [\n    '!group_id', '!group_name', 'title', 'username', 'password', 'URL', 'id',\n];\n\nexport class ButtercupCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            this.processFolder(result, this.getValueOrDefault(value['!group_name']));\n\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.title, '--');\n            cipher.login.username = this.getValueOrDefault(value.username);\n            cipher.login.password = this.getValueOrDefault(value.password);\n            cipher.login.uris = this.makeUriArray(value.URL);\n\n            let processingCustomFields = false;\n            for (const prop in value) {\n                if (value.hasOwnProperty(prop)) {\n                    if (!processingCustomFields && OfficialProps.indexOf(prop) === -1) {\n                        processingCustomFields = true;\n                    }\n                    if (processingCustomFields) {\n                        this.processKvp(cipher, prop, value[prop]);\n                    }\n                }\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ChromeCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.name, '--');\n            cipher.login.username = this.getValueOrDefault(value.username);\n            cipher.login.password = this.getValueOrDefault(value.password);\n            cipher.login.uris = this.makeUriArray(value.url);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class ClipperzHtmlImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const doc = this.parseXml(data);\n        if (doc == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const textarea = doc.querySelector('textarea');\n        if (textarea == null || this.isNullOrWhitespace(textarea.textContent)) {\n            result.errorMessage = 'Missing textarea.';\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const entries = JSON.parse(textarea.textContent);\n        entries.forEach((entry: any) => {\n            const cipher = this.initLoginCipher();\n            if (!this.isNullOrWhitespace(entry.label)) {\n                cipher.name = entry.label.split(' ')[0];\n            }\n            if (entry.data != null && !this.isNullOrWhitespace(entry.data.notes)) {\n                cipher.notes = entry.data.notes.split('\\\\n').join('\\n');\n            }\n\n            if (entry.currentVersion != null && entry.currentVersion.fields != null) {\n                for (const property in entry.currentVersion.fields) {\n                    if (!entry.currentVersion.fields.hasOwnProperty(property)) {\n                        continue;\n                    }\n\n                    const field = entry.currentVersion.fields[property];\n                    const actionType = field.actionType != null ? field.actionType.toLowerCase() : null;\n                    switch (actionType) {\n                        case 'password':\n                            cipher.login.password = this.getValueOrDefault(field.value);\n                            break;\n                        case 'email':\n                        case 'username':\n                        case 'user':\n                        case 'name':\n                            cipher.login.username = this.getValueOrDefault(field.value);\n                            break;\n                        case 'url':\n                            cipher.login.uris = this.makeUriArray(field.value);\n                            break;\n                        default:\n                            const labelLower = field.label != null ? field.label.toLowerCase() : null;\n                            if (cipher.login.password == null && this.passwordFieldNames.indexOf(labelLower) > -1) {\n                                cipher.login.password = this.getValueOrDefault(field.value);\n                            } else if (cipher.login.username == null &&\n                                this.usernameFieldNames.indexOf(labelLower) > -1) {\n                                cipher.login.username = this.getValueOrDefault(field.value);\n                            } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n                                this.uriFieldNames.indexOf(labelLower) > -1) {\n                                cipher.login.uris = this.makeUriArray(field.value);\n                            } else {\n                                this.processKvp(cipher, field.label, field.value);\n                            }\n                            break;\n                    }\n                }\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class CodebookCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            this.processFolder(result, this.getValueOrDefault(value.Category));\n\n            const cipher = this.initLoginCipher();\n            cipher.favorite = this.getValueOrDefault(value.Favorite) === 'True';\n            cipher.name = this.getValueOrDefault(value.Entry, '--');\n            cipher.notes = this.getValueOrDefault(value.Note);\n            cipher.login.username = this.getValueOrDefault(value.Username, value.Email);\n            cipher.login.password = this.getValueOrDefault(value.Password);\n            cipher.login.totp = this.getValueOrDefault(value.TOTP);\n            cipher.login.uris = this.makeUriArray(value.Website);\n\n            if (!this.isNullOrWhitespace(value.Username)) {\n                this.processKvp(cipher, 'Email', value.Email);\n            }\n            this.processKvp(cipher, 'Phone', value.Phone);\n            this.processKvp(cipher, 'PIN', value.PIN);\n            this.processKvp(cipher, 'Account', value.Account);\n            this.processKvp(cipher, 'Date', value.Date);\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst HandledResults = new Set(['ADDRESS', 'AUTHENTIFIANT', 'BANKSTATEMENT', 'IDCARD', 'IDENTITY',\n    'PAYMENTMEANS_CREDITCARD', 'PAYMENTMEAN_PAYPAL', 'EMAIL']);\n\nexport class DashlaneJsonImporter extends BaseImporter implements Importer {\n    private result: ImportResult;\n\n    parse(data: string): Promise<ImportResult> {\n        this.result = new ImportResult();\n        const results = JSON.parse(data);\n        if (results == null || results.length === 0) {\n            this.result.success = false;\n            return Promise.resolve(this.result);\n        }\n\n        if (results.ADDRESS != null) {\n            this.processAddress(results.ADDRESS);\n        }\n        if (results.AUTHENTIFIANT != null) {\n            this.processAuth(results.AUTHENTIFIANT);\n        }\n        if (results.BANKSTATEMENT != null) {\n            this.processNote(results.BANKSTATEMENT, 'BankAccountName');\n        }\n        if (results.IDCARD != null) {\n            this.processNote(results.IDCARD, 'Fullname');\n        }\n        if (results.PAYMENTMEANS_CREDITCARD != null) {\n            this.processCard(results.PAYMENTMEANS_CREDITCARD);\n        }\n        if (results.IDENTITY != null) {\n            this.processIdentity(results.IDENTITY);\n        }\n\n        for (const key in results) {\n            if (results.hasOwnProperty(key) && !HandledResults.has(key)) {\n                this.processNote(results[key], null, 'Generic Note');\n            }\n        }\n\n        this.result.success = true;\n        return Promise.resolve(this.result);\n    }\n\n    private processAuth(results: any[]) {\n        results.forEach((credential: any) => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(credential.title);\n\n            cipher.login.username = this.getValueOrDefault(credential.login,\n                this.getValueOrDefault(credential.secondaryLogin));\n            if (this.isNullOrWhitespace(cipher.login.username)) {\n                cipher.login.username = this.getValueOrDefault(credential.email);\n            } else if (!this.isNullOrWhitespace(credential.email)) {\n                cipher.notes = ('Email: ' + credential.email + '\\n');\n            }\n\n            cipher.login.password = this.getValueOrDefault(credential.password);\n            cipher.login.uris = this.makeUriArray(credential.domain);\n            cipher.notes += this.getValueOrDefault(credential.note, '');\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n        });\n    }\n\n    private processIdentity(results: any[]) {\n        results.forEach((obj: any) => {\n            const cipher = new CipherView();\n            cipher.identity = new IdentityView();\n            cipher.type = CipherType.Identity;\n            cipher.name = this.getValueOrDefault(obj.fullName, '');\n            const nameParts = cipher.name.split(' ');\n            if (nameParts.length > 0) {\n                cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n            }\n            if (nameParts.length === 2) {\n                cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n            } else if (nameParts.length === 3) {\n                cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n                cipher.identity.lastName = this.getValueOrDefault(nameParts[2]);\n            }\n            cipher.identity.username = this.getValueOrDefault(obj.pseudo);\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n        });\n    }\n\n    private processAddress(results: any[]) {\n        results.forEach((obj: any) => {\n            const cipher = new CipherView();\n            cipher.identity = new IdentityView();\n            cipher.type = CipherType.Identity;\n            cipher.name = this.getValueOrDefault(obj.addressName);\n            cipher.identity.address1 = this.getValueOrDefault(obj.addressFull);\n            cipher.identity.city = this.getValueOrDefault(obj.city);\n            cipher.identity.state = this.getValueOrDefault(obj.state);\n            cipher.identity.postalCode = this.getValueOrDefault(obj.zipcode);\n            cipher.identity.country = this.getValueOrDefault(obj.country);\n            if (cipher.identity.country != null) {\n                cipher.identity.country = cipher.identity.country.toUpperCase();\n            }\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n        });\n    }\n\n    private processCard(results: any[]) {\n        results.forEach((obj: any) => {\n            const cipher = new CipherView();\n            cipher.card = new CardView();\n            cipher.type = CipherType.Card;\n            cipher.name = this.getValueOrDefault(obj.bank);\n            cipher.card.number = this.getValueOrDefault(obj.cardNumber);\n            cipher.card.brand = this.getCardBrand(cipher.card.number);\n            cipher.card.cardholderName = this.getValueOrDefault(obj.owner);\n            if (!this.isNullOrWhitespace(cipher.card.brand)) {\n                if (this.isNullOrWhitespace(cipher.name)) {\n                    cipher.name = cipher.card.brand;\n                } else {\n                    cipher.name += (' - ' + cipher.card.brand);\n                }\n            }\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n        });\n    }\n\n    private processNote(results: any[], nameProperty: string, name: string = null) {\n        results.forEach((obj: any) => {\n            const cipher = new CipherView();\n            cipher.secureNote = new SecureNoteView();\n            cipher.type = CipherType.SecureNote;\n            cipher.secureNote.type = SecureNoteType.Generic;\n            if (name != null) {\n                cipher.name = name;\n            } else {\n                cipher.name = this.getValueOrDefault(obj[nameProperty]);\n            }\n            for (const key in obj) {\n                if (obj.hasOwnProperty(key) && key !== nameProperty) {\n                    this.processKvp(cipher, key, obj[key].toString());\n                }\n            }\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n        });\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class EncryptrCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.Label, '--');\n            cipher.notes = this.getValueOrDefault(value.Notes);\n            const text = this.getValueOrDefault(value.Text);\n            if (!this.isNullOrWhitespace(text)) {\n                if (this.isNullOrWhitespace(cipher.notes)) {\n                    cipher.notes = text;\n                } else {\n                    cipher.notes += ('\\n\\n' + text);\n                }\n            }\n\n            const type = value['Entry Type'];\n            if (type === 'Password') {\n                cipher.login.username = this.getValueOrDefault(value.Username);\n                cipher.login.password = this.getValueOrDefault(value.Password);\n                cipher.login.uris = this.makeUriArray(value['Site URL']);\n            } else if (type === 'Credit Card') {\n                cipher.type = CipherType.Card;\n                cipher.card = new CardView();\n                cipher.card.cardholderName = this.getValueOrDefault(value['Name on card']);\n                cipher.card.number = this.getValueOrDefault(value['Card Number']);\n                cipher.card.brand = this.getCardBrand(cipher.card.number);\n                cipher.card.code = this.getValueOrDefault(value.CVV);\n                const expiry = this.getValueOrDefault(value.Expiry);\n                if (!this.isNullOrWhitespace(expiry)) {\n                    const expParts = expiry.split('/');\n                    if (expParts.length > 1) {\n                        cipher.card.expMonth = parseInt(expParts[0], null).toString();\n                        cipher.card.expYear = (2000 + parseInt(expParts[1], null)).toString();\n                    }\n                }\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class EnpassCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        let firstRow = true;\n        results.forEach(value => {\n            if (value.length < 2 || (firstRow && (value[0] === 'Title' || value[0] === 'title'))) {\n                firstRow = false;\n                return;\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValueOrDefault(value[value.length - 1]);\n            cipher.name = this.getValueOrDefault(value[0], '--');\n\n            if (value.length === 2 || (!this.containsField(value, 'username') &&\n                !this.containsField(value, 'password') && !this.containsField(value, 'email') &&\n                !this.containsField(value, 'url'))) {\n                cipher.type = CipherType.SecureNote;\n                cipher.secureNote = new SecureNoteView();\n                cipher.secureNote.type = SecureNoteType.Generic;\n            }\n\n            if (this.containsField(value, 'cardholder') && this.containsField(value, 'number') &&\n                this.containsField(value, 'expiry date')) {\n                cipher.type = CipherType.Card;\n                cipher.card = new CardView();\n            }\n\n            if (value.length > 2 && (value.length % 2) === 0) {\n                for (let i = 0; i < value.length - 2; i += 2) {\n                    const fieldValue: string = value[i + 2];\n                    if (this.isNullOrWhitespace(fieldValue)) {\n                        continue;\n                    }\n\n                    const fieldName: string = value[i + 1];\n                    const fieldNameLower = fieldName.toLowerCase();\n\n                    if (cipher.type === CipherType.Login) {\n                        if (fieldNameLower === 'url' && (cipher.login.uris == null || cipher.login.uris.length === 0)) {\n                            cipher.login.uris = this.makeUriArray(fieldValue);\n                            continue;\n                        } else if ((fieldNameLower === 'username' || fieldNameLower === 'email') &&\n                            this.isNullOrWhitespace(cipher.login.username)) {\n                            cipher.login.username = fieldValue;\n                            continue;\n                        } else if (fieldNameLower === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n                            cipher.login.password = fieldValue;\n                            continue;\n                        } else if (fieldNameLower === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n                            cipher.login.totp = fieldValue;\n                            continue;\n                        }\n                    } else if (cipher.type === CipherType.Card) {\n                        if (fieldNameLower === 'cardholder' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n                            cipher.card.cardholderName = fieldValue;\n                            continue;\n                        } else if (fieldNameLower === 'number' && this.isNullOrWhitespace(cipher.card.number)) {\n                            cipher.card.number = fieldValue;\n                            cipher.card.brand = this.getCardBrand(fieldValue);\n                            continue;\n                        } else if (fieldNameLower === 'cvc' && this.isNullOrWhitespace(cipher.card.code)) {\n                            cipher.card.code = fieldValue;\n                            continue;\n                        } else if (fieldNameLower === 'expiry date' && this.isNullOrWhitespace(cipher.card.expMonth) &&\n                            this.isNullOrWhitespace(cipher.card.expYear)) {\n                            if (this.setCardExpiration(cipher, fieldValue)) {\n                                continue;\n                            }\n                        } else if (fieldNameLower === 'type') {\n                            // Skip since brand was determined from number above\n                            continue;\n                        }\n                    }\n\n                    this.processKvp(cipher, fieldName, fieldValue);\n                }\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private containsField(fields: any[], name: string) {\n        if (fields == null || name == null) {\n            return false;\n        }\n        return fields.filter(f => !this.isNullOrWhitespace(f) &&\n            f.toLowerCase() === name.toLowerCase()).length > 0;\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\n\nexport class EnpassJsonImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = JSON.parse(data);\n        if (results == null || results.items == null || results.items.length === 0) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const foldersMap = new Map<string, string>();\n        const foldersIndexMap = new Map<string, number>();\n        const folderTree = this.buildFolderTree(results.folders);\n        this.flattenFolderTree(null, folderTree, foldersMap);\n        foldersMap.forEach((val, key) => {\n            foldersIndexMap.set(key, result.folders.length);\n            const f = new FolderView();\n            f.name = val;\n            result.folders.push(f);\n        });\n\n        results.items.forEach((item: any) => {\n            if (item.folders != null && item.folders.length > 0 && foldersIndexMap.has(item.folders[0])) {\n                result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(item.folders[0])]);\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(item.title);\n            cipher.favorite = item.favorite > 0;\n\n            if (item.template_type != null && item.fields != null && item.fields.length > 0) {\n                if (item.template_type.indexOf('login.') === 0 || item.template_type.indexOf('password.') === 0) {\n                    this.processLogin(cipher, item.fields);\n                } else if (item.template_type.indexOf('creditcard.') === 0) {\n                    this.processCard(cipher, item.fields);\n                } else if (item.template_type.indexOf('identity.') < 0 &&\n                    item.fields.some((f: any) => f.type === 'password' && !this.isNullOrWhitespace(f.value))) {\n                    this.processLogin(cipher, item.fields);\n                } else {\n                    this.processNote(cipher, item.fields);\n                }\n            }\n\n            cipher.notes += ('\\n' + this.getValueOrDefault(item.note, ''));\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private processLogin(cipher: CipherView, fields: any[]) {\n        const urls: string[] = [];\n        fields.forEach((field: any) => {\n            if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n                return;\n            }\n\n            if ((field.type === 'username' || field.type === 'email') &&\n                this.isNullOrWhitespace(cipher.login.username)) {\n                cipher.login.username = field.value;\n            } else if (field.type === 'password' && this.isNullOrWhitespace(cipher.login.password)) {\n                cipher.login.password = field.value;\n            } else if (field.type === 'totp' && this.isNullOrWhitespace(cipher.login.totp)) {\n                cipher.login.totp = field.value;\n            } else if (field.type === 'url') {\n                urls.push(field.value);\n            } else {\n                this.processKvp(cipher, field.label, field.value,\n                    field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n            }\n        });\n        cipher.login.uris = this.makeUriArray(urls);\n    }\n\n    private processCard(cipher: CipherView, fields: any[]) {\n        cipher.card = new CardView();\n        cipher.type = CipherType.Card;\n        fields.forEach((field: any) => {\n            if (this.isNullOrWhitespace(field.value) || field.type === 'section' || field.type === 'ccType') {\n                return;\n            }\n\n            if (field.type === 'ccName' && this.isNullOrWhitespace(cipher.card.cardholderName)) {\n                cipher.card.cardholderName = field.value;\n            } else if (field.type === 'ccNumber' && this.isNullOrWhitespace(cipher.card.number)) {\n                cipher.card.number = field.value;\n                cipher.card.brand = this.getCardBrand(cipher.card.number);\n            } else if (field.type === 'ccCvc' && this.isNullOrWhitespace(cipher.card.code)) {\n                cipher.card.code = field.value;\n            } else if (field.type === 'ccExpiry' && this.isNullOrWhitespace(cipher.card.expYear)) {\n                if (!this.setCardExpiration(cipher, field.value)) {\n                    this.processKvp(cipher, field.label, field.value,\n                        field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n                }\n            } else {\n                this.processKvp(cipher, field.label, field.value,\n                    field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n            }\n        });\n    }\n\n    private processNote(cipher: CipherView, fields: any[]) {\n        fields.forEach((field: any) => {\n            if (this.isNullOrWhitespace(field.value) || field.type === 'section') {\n                return;\n            }\n            this.processKvp(cipher, field.label, field.value,\n                field.sensitive === 1 ? FieldType.Hidden : FieldType.Text);\n        });\n    }\n\n    private buildFolderTree(folders: any[]): any[] {\n        if (folders == null) {\n            return [];\n        }\n        const folderTree: any[] = [];\n        const map = new Map<string, any>([]);\n        folders.forEach((obj: any) => {\n            map.set(obj.uuid, obj);\n            obj.children = [];\n        });\n        folders.forEach((obj: any) => {\n            if (obj.parent_uuid != null && obj.parent_uuid !== '' && map.has(obj.parent_uuid)) {\n                map.get(obj.parent_uuid).children.push(obj);\n            } else {\n                folderTree.push(obj);\n            }\n        });\n        return folderTree;\n    }\n\n    private flattenFolderTree(titlePrefix: string, tree: any[], map: Map<string, string>) {\n        if (tree == null) {\n            return;\n        }\n        tree.forEach((f: any) => {\n            if (f.title != null && f.title.trim() !== '') {\n                let title = f.title.trim();\n                if (titlePrefix != null && titlePrefix.trim() !== '') {\n                    title = titlePrefix + '/' + title;\n                }\n                map.set(f.uuid, title);\n                if (f.children != null && f.children.length !== 0) {\n                    this.flattenFolderTree(title, f.children, map);\n                }\n            }\n        });\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class FirefoxCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.filter(value => {\n            return value.url !== 'chrome://FirefoxAccounts';\n        }).forEach(value => {\n            const cipher = this.initLoginCipher();\n            const url = this.getValueOrDefault(value.url, this.getValueOrDefault(value.hostname));\n            cipher.name = this.getValueOrDefault(this.nameFromUrl(url), '--');\n            cipher.login.username = this.getValueOrDefault(value.username);\n            cipher.login.password = this.getValueOrDefault(value.password);\n            cipher.login.uris = this.makeUriArray(url);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class FSecureFskImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = JSON.parse(data);\n        if (results == null || results.data == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        for (const key in results.data) {\n            if (!results.data.hasOwnProperty(key)) {\n                continue;\n            }\n\n            const value = results.data[key];\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.service);\n            cipher.notes = this.getValueOrDefault(value.notes);\n\n            if (value.style === 'website') {\n                cipher.login.username = this.getValueOrDefault(value.username);\n                cipher.login.password = this.getValueOrDefault(value.password);\n                cipher.login.uris = this.makeUriArray(value.url);\n            } else if (value.style === 'creditcard') {\n                cipher.type = CipherType.Card;\n                cipher.card = new CardView();\n                cipher.card.cardholderName = this.getValueOrDefault(value.username);\n                cipher.card.number = this.getValueOrDefault(value.creditNumber);\n                cipher.card.brand = this.getCardBrand(cipher.card.number);\n                cipher.card.code = this.getValueOrDefault(value.creditCvv);\n                if (!this.isNullOrWhitespace(value.creditExpiry)) {\n                    if (!this.setCardExpiration(cipher, value.creditExpiry)) {\n                        this.processKvp(cipher, 'Expiration', value.creditExpiry);\n                    }\n                }\n                if (!this.isNullOrWhitespace(value.password)) {\n                    this.processKvp(cipher, 'PIN', value.password);\n                }\n            } else {\n                continue;\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class GnomeJsonImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = JSON.parse(data);\n        if (results == null || Object.keys(results).length === 0) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        for (const keyRing in results) {\n            if (!results.hasOwnProperty(keyRing) || this.isNullOrWhitespace(keyRing) ||\n                results[keyRing].length === 0) {\n                continue;\n            }\n\n            results[keyRing].forEach((value: any) => {\n                if (this.isNullOrWhitespace(value.display_name) || value.display_name.indexOf('http') !== 0) {\n                    return;\n                }\n\n                this.processFolder(result, keyRing);\n                const cipher = this.initLoginCipher();\n                cipher.name = value.display_name.replace('http://', '').replace('https://', '');\n                if (cipher.name.length > 30) {\n                    cipher.name = cipher.name.substring(0, 30);\n                }\n                cipher.login.password = this.getValueOrDefault(value.secret);\n                cipher.login.uris = this.makeUriArray(value.display_name);\n\n                if (value.attributes != null) {\n                    cipher.login.username = value.attributes != null ?\n                        this.getValueOrDefault(value.attributes.username_value) : null;\n                    for (const attr in value.attributes) {\n                        if (!value.attributes.hasOwnProperty(attr) || attr === 'username_value' ||\n                            attr === 'xdg:schema') {\n                            continue;\n                        }\n                        this.processKvp(cipher, attr, value.attributes[attr]);\n                    }\n                }\n\n                this.convertToNoteIfNeeded(cipher);\n                this.cleanupCipher(cipher);\n                result.ciphers.push(cipher);\n            });\n        }\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nconst NotesHeader = 'Notes\\n\\n';\nconst ApplicationsHeader = 'Applications\\n\\n';\nconst WebsitesHeader = 'Websites\\n\\n';\nconst Delimiter = '\\n---\\n';\n\nexport class KasperskyTxtImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n\n        let notesData: string;\n        let applicationsData: string;\n        let websitesData: string;\n        let workingData = this.splitNewLine(data).join('\\n');\n\n        if (workingData.indexOf(NotesHeader) !== -1) {\n            const parts = workingData.split(NotesHeader);\n            if (parts.length > 1) {\n                workingData = parts[0];\n                notesData = parts[1];\n            }\n        }\n        if (workingData.indexOf(ApplicationsHeader) !== -1) {\n            const parts = workingData.split(ApplicationsHeader);\n            if (parts.length > 1) {\n                workingData = parts[0];\n                applicationsData = parts[1];\n            }\n        }\n        if (workingData.indexOf(WebsitesHeader) === 0) {\n            const parts = workingData.split(WebsitesHeader);\n            if (parts.length > 1) {\n                workingData = parts[0];\n                websitesData = parts[1];\n            }\n        }\n\n        const notes = this.parseDataCategory(notesData);\n        const applications = this.parseDataCategory(applicationsData);\n        const websites = this.parseDataCategory(websitesData);\n\n        notes.forEach(n => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(n.get('Name'));\n            cipher.notes = this.getValueOrDefault(n.get('Text'));\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        websites.concat(applications).forEach(w => {\n            const cipher = this.initLoginCipher();\n            const nameKey = w.has('Website name') ? 'Website name' : 'Application';\n            cipher.name = this.getValueOrDefault(w.get(nameKey), '');\n            if (!this.isNullOrWhitespace(w.get('Login name'))) {\n                if (!this.isNullOrWhitespace(cipher.name)) {\n                    cipher.name += ': ';\n                }\n                cipher.name += w.get('Login name');\n            }\n            cipher.notes = this.getValueOrDefault(w.get('Comment'));\n            if (w.has('Website URL')) {\n                cipher.login.uris = this.makeUriArray(w.get('Website URL'));\n            }\n            cipher.login.username = this.getValueOrDefault(w.get('Login'));\n            cipher.login.password = this.getValueOrDefault(w.get('Password'));\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private parseDataCategory(data: string): Map<string, string>[] {\n        if (this.isNullOrWhitespace(data) || data.indexOf(Delimiter) === -1) {\n            return [];\n        }\n        const items: Map<string, string>[] = [];\n        data.split(Delimiter).forEach(p => {\n            if (p.indexOf('\\n') === -1) {\n                return;\n            }\n            const item = new Map<string, string>();\n            let itemComment: string;\n            let itemCommentKey: string;\n            p.split('\\n').forEach(l => {\n                if (itemComment != null) {\n                    itemComment += ('\\n' + l);\n                    return;\n                }\n                const colonIndex = l.indexOf(':');\n                let key: string;\n                let val: string;\n                if (colonIndex === -1) {\n                    return;\n                } else {\n                    key = l.substring(0, colonIndex);\n                    if (l.length > colonIndex + 1) {\n                        val = l.substring(colonIndex + 2);\n                    }\n                }\n                if (key != null) {\n                    item.set(key, val);\n                }\n                if (key === 'Comment' || key === 'Text') {\n                    itemComment = val;\n                    itemCommentKey = key;\n                }\n            });\n            if (itemComment != null && itemCommentKey != null) {\n                item.set(itemCommentKey, itemComment);\n            }\n            if (item.size === 0) {\n                return;\n            }\n            items.push(item);\n        });\n        return items;\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { FieldType } from '../enums/fieldType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeePass2XmlImporter extends BaseImporter implements Importer {\n    result = new ImportResult();\n\n    parse(data: string): Promise<ImportResult> {\n        const doc = this.parseXml(data);\n        if (doc == null) {\n            this.result.success = false;\n            return Promise.resolve(this.result);\n        }\n\n        const rootGroup = doc.querySelector('KeePassFile > Root > Group');\n        if (rootGroup == null) {\n            this.result.errorMessage = 'Missing `KeePassFile > Root > Group` node.';\n            this.result.success = false;\n            return Promise.resolve(this.result);\n        }\n\n        this.traverse(rootGroup, true, '');\n\n        if (this.organization) {\n            this.moveFoldersToCollections(this.result);\n        }\n\n        this.result.success = true;\n        return Promise.resolve(this.result);\n    }\n\n    traverse(node: Element, isRootNode: boolean, groupPrefixName: string) {\n        const folderIndex = this.result.folders.length;\n        let groupName = groupPrefixName;\n\n        if (!isRootNode) {\n            if (groupName !== '') {\n                groupName += '/';\n            }\n            const nameEl = this.querySelectorDirectChild(node, 'Name');\n            groupName += nameEl == null ? '-' : nameEl.textContent;\n            const folder = new FolderView();\n            folder.name = groupName;\n            this.result.folders.push(folder);\n        }\n\n        this.querySelectorAllDirectChild(node, 'Entry').forEach(entry => {\n            const cipherIndex = this.result.ciphers.length;\n\n            const cipher = this.initLoginCipher();\n            this.querySelectorAllDirectChild(entry, 'String').forEach(entryString => {\n                const valueEl = this.querySelectorDirectChild(entryString, 'Value');\n                const value = valueEl != null ? valueEl.textContent : null;\n                if (this.isNullOrWhitespace(value)) {\n                    return;\n                }\n                const keyEl = this.querySelectorDirectChild(entryString, 'Key');\n                const key = keyEl != null ? keyEl.textContent : null;\n\n                if (key === 'URL') {\n                    cipher.login.uris = this.makeUriArray(value);\n                } else if (key === 'UserName') {\n                    cipher.login.username = value;\n                } else if (key === 'Password') {\n                    cipher.login.password = value;\n                }  else if (key === 'otp') {\n                    cipher.login.totp = value.replace('key=', '');\n                } else if (key === 'Title') {\n                    cipher.name = value;\n                } else if (key === 'Notes') {\n                    cipher.notes += (value + '\\n');\n                } else {\n                    let type = FieldType.Text;\n                    const attrs = (valueEl.attributes as any);\n                    if (attrs.length > 0 && attrs.ProtectInMemory != null &&\n                        attrs.ProtectInMemory.value === 'True') {\n                        type = FieldType.Hidden;\n                    }\n                    this.processKvp(cipher, key, value, type);\n                }\n            });\n\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n\n            if (!isRootNode) {\n                this.result.folderRelationships.push([cipherIndex, folderIndex]);\n            }\n        });\n\n        this.querySelectorAllDirectChild(node, 'Group').forEach(group => {\n            this.traverse(group, false, groupName);\n        });\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class KeePassXCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (this.isNullOrWhitespace(value.Title)) {\n                return;\n            }\n\n            value.Group = !this.isNullOrWhitespace(value.Group) && value.Group.startsWith('Root/') ?\n                value.Group.replace('Root/', '') : value.Group;\n            const groupName = !this.isNullOrWhitespace(value.Group) ? value.Group : null;\n            this.processFolder(result, groupName);\n\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValueOrDefault(value.Notes);\n            cipher.name = this.getValueOrDefault(value.Title, '--');\n            cipher.login.username = this.getValueOrDefault(value.Username);\n            cipher.login.password = this.getValueOrDefault(value.Password);\n            cipher.login.uris = this.makeUriArray(value.URL);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\n\nexport class KeeperCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.length < 6) {\n                return;\n            }\n\n            this.processFolder(result, value[0]);\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValueOrDefault(value[5]) + '\\n';\n            cipher.name = this.getValueOrDefault(value[1], '--');\n            cipher.login.username = this.getValueOrDefault(value[2]);\n            cipher.login.password = this.getValueOrDefault(value[3]);\n            cipher.login.uris = this.makeUriArray(value[4]);\n\n            if (value.length > 7) {\n                // we have some custom fields.\n                for (let i = 7; i < value.length; i = i + 2) {\n                    this.processKvp(cipher, value[i], value[i + 1]);\n                }\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { CipherView } from '../models/view/cipherView';\nimport { FolderView } from '../models/view/folderView';\nimport { IdentityView } from '../models/view/identityView';\nimport { LoginView } from '../models/view/loginView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nexport class LastPassCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach((value, index) => {\n            const cipherIndex = result.ciphers.length;\n            let folderIndex = result.folders.length;\n            let grouping = value.grouping;\n            if (grouping != null) {\n                grouping = grouping.replace(/\\\\/g, '/').replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '');\n            }\n            const hasFolder = this.getValueOrDefault(grouping, '(none)') !== '(none)';\n            let addFolder = hasFolder;\n\n            if (hasFolder) {\n                for (let i = 0; i < result.folders.length; i++) {\n                    if (result.folders[i].name === grouping) {\n                        addFolder = false;\n                        folderIndex = i;\n                        break;\n                    }\n                }\n            }\n\n            const cipher = this.buildBaseCipher(value);\n            if (cipher.type === CipherType.Login) {\n                cipher.notes = this.getValueOrDefault(value.extra);\n                cipher.login = new LoginView();\n                cipher.login.uris = this.makeUriArray(value.url);\n                cipher.login.username = this.getValueOrDefault(value.username);\n                cipher.login.password = this.getValueOrDefault(value.password);\n                cipher.login.totp = this.getValueOrDefault(value.totp);\n            } else if (cipher.type === CipherType.SecureNote) {\n                this.parseSecureNote(value, cipher);\n            } else if (cipher.type === CipherType.Card) {\n                cipher.card = this.parseCard(value);\n                cipher.notes = this.getValueOrDefault(value.notes);\n            } else if (cipher.type === CipherType.Identity) {\n                cipher.identity = this.parseIdentity(value);\n                cipher.notes = this.getValueOrDefault(value.notes);\n                if (!this.isNullOrWhitespace(value.ccnum)) {\n                    // there is a card on this identity too\n                    const cardCipher = this.buildBaseCipher(value);\n                    cardCipher.identity = null;\n                    cardCipher.type = CipherType.Card;\n                    cardCipher.card = this.parseCard(value);\n                    result.ciphers.push(cardCipher);\n                }\n            }\n\n            result.ciphers.push(cipher);\n\n            if (addFolder) {\n                const f = new FolderView();\n                f.name = grouping;\n                result.folders.push(f);\n            }\n            if (hasFolder) {\n                result.folderRelationships.push([cipherIndex, folderIndex]);\n            }\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private buildBaseCipher(value: any) {\n        const cipher = new CipherView();\n        if (value.hasOwnProperty('profilename') && value.hasOwnProperty('profilelanguage')) {\n            // form fill\n            cipher.favorite = false;\n            cipher.name = this.getValueOrDefault(value.profilename, '--');\n            cipher.type = CipherType.Card;\n\n            if (!this.isNullOrWhitespace(value.title) || !this.isNullOrWhitespace(value.firstname) ||\n                !this.isNullOrWhitespace(value.lastname) || !this.isNullOrWhitespace(value.address1) ||\n                !this.isNullOrWhitespace(value.phone) || !this.isNullOrWhitespace(value.username) ||\n                !this.isNullOrWhitespace(value.email)) {\n                cipher.type = CipherType.Identity;\n            }\n        } else {\n            // site or secure note\n            cipher.favorite = !this.organization && this.getValueOrDefault(value.fav, '0') === '1';\n            cipher.name = this.getValueOrDefault(value.name, '--');\n            cipher.type = value.url === 'http://sn' ? CipherType.SecureNote : CipherType.Login;\n        }\n        return cipher;\n    }\n\n    private parseCard(value: any): CardView {\n        const card = new CardView();\n        card.cardholderName = this.getValueOrDefault(value.ccname);\n        card.number = this.getValueOrDefault(value.ccnum);\n        card.code = this.getValueOrDefault(value.cccsc);\n        card.brand = this.getCardBrand(value.ccnum);\n\n        if (!this.isNullOrWhitespace(value.ccexp) && value.ccexp.indexOf('-') > -1) {\n            const ccexpParts = (value.ccexp as string).split('-');\n            if (ccexpParts.length > 1) {\n                card.expYear = ccexpParts[0];\n                card.expMonth = ccexpParts[1];\n                if (card.expMonth.length === 2 && card.expMonth[0] === '0') {\n                    card.expMonth = card.expMonth[1];\n                }\n            }\n        }\n\n        return card;\n    }\n\n    private parseIdentity(value: any): IdentityView {\n        const identity = new IdentityView();\n        identity.title = this.getValueOrDefault(value.title);\n        identity.firstName = this.getValueOrDefault(value.firstname);\n        identity.middleName = this.getValueOrDefault(value.middlename);\n        identity.lastName = this.getValueOrDefault(value.lastname);\n        identity.username = this.getValueOrDefault(value.username);\n        identity.company = this.getValueOrDefault(value.company);\n        identity.ssn = this.getValueOrDefault(value.ssn);\n        identity.address1 = this.getValueOrDefault(value.address1);\n        identity.address2 = this.getValueOrDefault(value.address2);\n        identity.address3 = this.getValueOrDefault(value.address3);\n        identity.city = this.getValueOrDefault(value.city);\n        identity.state = this.getValueOrDefault(value.state);\n        identity.postalCode = this.getValueOrDefault(value.zip);\n        identity.country = this.getValueOrDefault(value.country);\n        identity.email = this.getValueOrDefault(value.email);\n        identity.phone = this.getValueOrDefault(value.phone);\n\n        if (!this.isNullOrWhitespace(identity.title)) {\n            identity.title = identity.title.charAt(0).toUpperCase() + identity.title.slice(1);\n        }\n\n        return identity;\n    }\n\n    private parseSecureNote(value: any, cipher: CipherView) {\n        const extraParts = this.splitNewLine(value.extra);\n        let processedNote = false;\n\n        if (extraParts.length) {\n            const typeParts = extraParts[0].split(':');\n            if (typeParts.length > 1 && typeParts[0] === 'NoteType' &&\n                (typeParts[1] === 'Credit Card' || typeParts[1] === 'Address')) {\n                if (typeParts[1] === 'Credit Card') {\n                    const mappedData = this.parseSecureNoteMapping<CardView>(cipher, extraParts, {\n                        'Number': 'number',\n                        'Name on Card': 'cardholderName',\n                        'Security Code': 'code',\n                        // LP provides date in a format like 'June,2020'\n                        // Store in expMonth, then parse and modify\n                        'Expiration Date': 'expMonth',\n                    });\n\n                    if (this.isNullOrWhitespace(mappedData.expMonth) || mappedData.expMonth === ',') {\n                        // No expiration data\n                        mappedData.expMonth = undefined;\n                    } else {\n                        const [monthString, year] = mappedData.expMonth.split(',');\n                        // Parse month name into number\n                        if (!this.isNullOrWhitespace(monthString)) {\n                            const month = new Date(Date.parse(monthString.trim() + ' 1, 2012')).getMonth() + 1;\n                            if (isNaN(month)) {\n                                mappedData.expMonth = undefined;\n                            } else {\n                                mappedData.expMonth = month.toString();\n                            }\n                        } else {\n                            mappedData.expMonth = undefined;\n                        }\n                        if (!this.isNullOrWhitespace(year)) {\n                            mappedData.expYear = year;\n                        }\n                    }\n\n                    cipher.type = CipherType.Card;\n                    cipher.card = mappedData;\n                } else if (typeParts[1] === 'Address') {\n                    const mappedData = this.parseSecureNoteMapping<IdentityView>(cipher, extraParts, {\n                        'Title': 'title',\n                        'First Name': 'firstName',\n                        'Last Name': 'lastName',\n                        'Middle Name': 'middleName',\n                        'Company': 'company',\n                        'Address 1': 'address1',\n                        'Address 2': 'address2',\n                        'Address 3': 'address3',\n                        'City / Town': 'city',\n                        'State': 'state',\n                        'Zip / Postal Code': 'postalCode',\n                        'Country': 'country',\n                        'Email Address': 'email',\n                        'Username': 'username',\n                    });\n                    cipher.type = CipherType.Identity;\n                    cipher.identity = mappedData;\n                }\n                processedNote = true;\n            }\n        }\n\n        if (!processedNote) {\n            cipher.secureNote = new SecureNoteView();\n            cipher.secureNote.type = SecureNoteType.Generic;\n            cipher.notes = this.getValueOrDefault(value.extra);\n        }\n    }\n\n    private parseSecureNoteMapping<T>(cipher: CipherView, extraParts: string[], map: any): T {\n        const dataObj: any = {};\n\n        let processingNotes = false;\n        extraParts.forEach(extraPart => {\n            let key: string = null;\n            let val: string = null;\n            if (!processingNotes) {\n                if (this.isNullOrWhitespace(extraPart)) {\n                    return;\n                }\n                const colonIndex = extraPart.indexOf(':');\n                if (colonIndex === -1) {\n                    key = extraPart;\n                } else {\n                    key = extraPart.substring(0, colonIndex);\n                    if (extraPart.length > colonIndex) {\n                        val = extraPart.substring(colonIndex + 1);\n                    }\n                }\n                if (this.isNullOrWhitespace(key) || this.isNullOrWhitespace(val) || key === 'NoteType') {\n                    return;\n                }\n            }\n\n            if (processingNotes) {\n                cipher.notes += ('\\n' + extraPart);\n            } else if (key === 'Notes') {\n                if (!this.isNullOrWhitespace(cipher.notes)) {\n                    cipher.notes += ('\\n' + val);\n                } else {\n                    cipher.notes = val;\n                }\n                processingNotes = true;\n            } else if (map.hasOwnProperty(key)) {\n                dataObj[map[key]] = val;\n            } else {\n                this.processKvp(cipher, key, val);\n            }\n        });\n\n        return dataObj;\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class LogMeOnceCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.length < 4) {\n                return;\n            }\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value[0], '--');\n            cipher.login.username = this.getValueOrDefault(value[2]);\n            cipher.login.password = this.getValueOrDefault(value[3]);\n            cipher.login.uris = this.makeUriArray(value[1]);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MeldiumCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.DisplayName, '--');\n            cipher.notes = this.getValueOrDefault(value.Notes);\n            cipher.login.username = this.getValueOrDefault(value.UserName);\n            cipher.login.password = this.getValueOrDefault(value.Password);\n            cipher.login.uris = this.makeUriArray(value.Url);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nexport class MSecureCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.length < 3) {\n                return;\n            }\n\n            const folderName = this.getValueOrDefault(value[0], 'Unassigned') !== 'Unassigned' ? value[0] : null;\n            this.processFolder(result, folderName);\n\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value[2], '--');\n\n            if (value[1] === 'Web Logins' || value[1] === 'Login') {\n                cipher.login.uris = this.makeUriArray(value[4]);\n                cipher.login.username = this.getValueOrDefault(value[5]);\n                cipher.login.password = this.getValueOrDefault(value[6]);\n                cipher.notes = !this.isNullOrWhitespace(value[3]) ? value[3].split('\\\\n').join('\\n') : null;\n            } else if (value.length > 3) {\n                cipher.type = CipherType.SecureNote;\n                cipher.secureNote = new SecureNoteView();\n                cipher.secureNote.type = SecureNoteType.Generic;\n                for (let i = 3; i < value.length; i++) {\n                    if (!this.isNullOrWhitespace(value[i])) {\n                        cipher.notes += (value[i] + '\\n');\n                    }\n                }\n            }\n\n            if (!this.isNullOrWhitespace(value[1]) && cipher.type !== CipherType.Login) {\n                cipher.name = value[1] + ': ' + cipher.name;\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { CardView } from '../models/view/cardView';\nimport { IdentityView } from '../models/view/identityView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class MykiCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.nickname, '--');\n            cipher.notes = this.getValueOrDefault(value.additionalInfo);\n\n            if (value.url !== undefined) {\n                // Accounts\n                cipher.login.uris = this.makeUriArray(value.url);\n                cipher.login.username = this.getValueOrDefault(value.username);\n                cipher.login.password = this.getValueOrDefault(value.password);\n                cipher.login.totp = this.getValueOrDefault(value.twoFactAuthToken);\n            } else if (value.cardNumber !== undefined) {\n                // Cards\n                cipher.card = new CardView();\n                cipher.type = CipherType.Card;\n                cipher.card.cardholderName = this.getValueOrDefault(value.cardName);\n                cipher.card.number = this.getValueOrDefault(value.cardNumber);\n                cipher.card.brand = this.getCardBrand(cipher.card.number);\n                cipher.card.expMonth = this.getValueOrDefault(value.exp_month);\n                cipher.card.expYear = this.getValueOrDefault(value.exp_year);\n                cipher.card.code = this.getValueOrDefault(value.cvv);\n            } else if (value.firstName !== undefined) {\n                // Identities\n                cipher.identity = new IdentityView();\n                cipher.type = CipherType.Identity;\n                cipher.identity.title = this.getValueOrDefault(value.title);\n                cipher.identity.firstName = this.getValueOrDefault(value.firstName);\n                cipher.identity.middleName = this.getValueOrDefault(value.middleName);\n                cipher.identity.lastName = this.getValueOrDefault(value.lastName);\n                cipher.identity.phone = this.getValueOrDefault(value.number);\n                cipher.identity.email = this.getValueOrDefault(value.email);\n                cipher.identity.address1 = this.getValueOrDefault(value.firstAddressLine);\n                cipher.identity.address2 = this.getValueOrDefault(value.secondAddressLine);\n                cipher.identity.city = this.getValueOrDefault(value.city);\n                cipher.identity.country = this.getValueOrDefault(value.country);\n                cipher.identity.postalCode = this.getValueOrDefault(value.zipCode);\n            } else if (value.content !== undefined) {\n                // Notes\n                cipher.secureNote = new SecureNoteView();\n                cipher.type = CipherType.SecureNote;\n                cipher.secureNote.type = SecureNoteType.Generic;\n                cipher.name = this.getValueOrDefault(value.title, '--');\n                cipher.notes = this.getValueOrDefault(value.content);\n            } else {\n                return;\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CipherView } from '../models/view/cipherView';\nimport { LoginView } from '../models/view/loginView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\ntype nodePassCsvParsed = {\n    name: string;\n    url: string;\n    username: string;\n    password: string;\n    note: string;\n    cardholdername: string;\n    cardnumber: string;\n    cvc: string;\n    expirydate: string;\n    zipcode: string;\n    folder: string;\n    full_name: string;\n    phone_number: string;\n    email: string;\n    address1: string;\n    address2: string;\n    city: string;\n    country: string;\n    state: string;\n};\n\nexport class NordPassCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results: nodePassCsvParsed[] = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(record => {\n\n            const recordType = this.evaluateType(record);\n            if (recordType === undefined) {\n                return;\n            }\n\n            if (!this.organization) {\n                this.processFolder(result, record.folder);\n            }\n\n            const cipher = new CipherView();\n            cipher.name = this.getValueOrDefault(record.name, '--');\n            cipher.notes = this.getValueOrDefault(record.note);\n\n            switch (recordType) {\n                case CipherType.Login:\n                    cipher.type = CipherType.Login;\n                    cipher.login = new LoginView();\n                    cipher.login.username = this.getValueOrDefault(record.username);\n                    cipher.login.password = this.getValueOrDefault(record.password);\n                    cipher.login.uris = this.makeUriArray(record.url);\n                    break;\n                case CipherType.Card:\n                    cipher.type = CipherType.Card;\n                    cipher.card.cardholderName = this.getValueOrDefault(record.cardholdername);\n                    cipher.card.number = this.getValueOrDefault(record.cardnumber);\n                    cipher.card.code = this.getValueOrDefault(record.cvc);\n                    cipher.card.brand = this.getCardBrand(cipher.card.number);\n                    this.setCardExpiration(cipher, record.expirydate);\n                    break;\n\n                case CipherType.Identity:\n                    cipher.type = CipherType.Identity;\n\n                    this.processName(cipher, this.getValueOrDefault(record.full_name));\n                    cipher.identity.address1 = this.getValueOrDefault(record.address1);\n                    cipher.identity.address2 = this.getValueOrDefault(record.address2);\n                    cipher.identity.city = this.getValueOrDefault(record.city);\n                    cipher.identity.state = this.getValueOrDefault(record.state);\n                    cipher.identity.postalCode = this.getValueOrDefault(record.zipcode);\n                    cipher.identity.country = this.getValueOrDefault(record.country);\n                    if (cipher.identity.country != null) {\n                        cipher.identity.country = cipher.identity.country.toUpperCase();\n                    }\n                    cipher.identity.email = this.getValueOrDefault(record.email);\n                    cipher.identity.phone = this.getValueOrDefault(record.phone_number);\n                    break;\n                case CipherType.SecureNote:\n                    cipher.type = CipherType.SecureNote;\n                    cipher.secureNote.type = SecureNoteType.Generic;\n                    break;\n                default:\n                    break;\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private evaluateType(record: nodePassCsvParsed): CipherType {\n\n        if (!this.isNullOrWhitespace(record.username)) {\n            return CipherType.Login;\n        }\n\n        if (!this.isNullOrWhitespace(record.cardnumber)) {\n            return CipherType.Card;\n        }\n\n        if (!this.isNullOrWhitespace(record.full_name)) {\n            return CipherType.Identity;\n        }\n\n        if (!this.isNullOrWhitespace(record.note)) {\n            return CipherType.SecureNote;\n        }\n\n        return undefined;\n    }\n\n    private processName(cipher: CipherView, fullName: string) {\n\n        if (this.isNullOrWhitespace(fullName)) {\n            return;\n        }\n\n        const nameParts = fullName.split(' ');\n        if (nameParts.length > 0) {\n            cipher.identity.firstName = this.getValueOrDefault(nameParts[0]);\n        }\n        if (nameParts.length === 2) {\n            cipher.identity.lastName = this.getValueOrDefault(nameParts[1]);\n        } else if (nameParts.length >= 3) {\n            cipher.identity.middleName = this.getValueOrDefault(nameParts[1]);\n            cipher.identity.lastName = nameParts.slice(2, nameParts.length).join(' ');\n        }\n    }\n}\n","import { BaseImporter } from '../baseImporter';\nimport { Importer } from '../importer';\n\nimport { ImportResult } from '../../models/domain/importResult';\n\nimport { CardView } from '../../models/view/cardView';\nimport { CipherView } from '../../models/view/cipherView';\nimport { IdentityView } from '../../models/view/identityView';\nimport { PasswordHistoryView } from '../../models/view/passwordHistoryView';\nimport { SecureNoteView } from '../../models/view/secureNoteView';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { FieldType } from '../../enums/fieldType';\nimport { SecureNoteType } from '../../enums/secureNoteType';\n\nexport class OnePassword1PifImporter extends BaseImporter implements Importer {\n    result = new ImportResult();\n\n    parse(data: string): Promise<ImportResult> {\n        data.split(this.newLineRegex).forEach(line => {\n            if (this.isNullOrWhitespace(line) || line[0] !== '{') {\n                return;\n            }\n            const item = JSON.parse(line);\n            if (item.trashed === true) {\n                return;\n            }\n            const cipher = this.initLoginCipher();\n\n            if (this.isNullOrWhitespace(item.hmac)) {\n                this.processStandardItem(item, cipher);\n            } else {\n                this.processWinOpVaultItem(item, cipher);\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            this.result.ciphers.push(cipher);\n        });\n\n        this.result.success = true;\n        return Promise.resolve(this.result);\n    }\n\n    private processWinOpVaultItem(item: any, cipher: CipherView) {\n        if (item.overview != null) {\n            cipher.name = this.getValueOrDefault(item.overview.title);\n            if (item.overview.URLs != null) {\n                const urls: string[] = [];\n                item.overview.URLs.forEach((url: any) => {\n                    if (!this.isNullOrWhitespace(url.u)) {\n                        urls.push(url.u);\n                    }\n                });\n                cipher.login.uris = this.makeUriArray(urls);\n            }\n        }\n\n        if (item.details != null) {\n            if (item.details.passwordHistory != null) {\n                this.parsePasswordHistory(item.details.passwordHistory, cipher);\n            }\n            if (!this.isNullOrWhitespace(item.details.ccnum) || !this.isNullOrWhitespace(item.details.cvv)) {\n                cipher.type = CipherType.Card;\n                cipher.card = new CardView();\n            } else if (!this.isNullOrWhitespace(item.details.firstname) ||\n                !this.isNullOrWhitespace(item.details.address1)) {\n                cipher.type = CipherType.Identity;\n                cipher.identity = new IdentityView();\n            }\n            if (cipher.type === CipherType.Login && !this.isNullOrWhitespace(item.details.password)) {\n                cipher.login.password = item.details.password;\n            }\n            if (!this.isNullOrWhitespace(item.details.notesPlain)) {\n                cipher.notes = item.details.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n            }\n            if (item.details.fields != null) {\n                this.parseFields(item.details.fields, cipher, 'designation', 'value', 'name');\n            }\n            if (item.details.sections != null) {\n                item.details.sections.forEach((section: any) => {\n                    if (section.fields != null) {\n                        this.parseFields(section.fields, cipher, 'n', 'v', 't');\n                    }\n                });\n            }\n        }\n    }\n\n    private processStandardItem(item: any, cipher: CipherView) {\n        cipher.favorite = item.openContents && item.openContents.faveIndex ? true : false;\n        cipher.name = this.getValueOrDefault(item.title);\n\n        if (item.typeName === 'securenotes.SecureNote') {\n            cipher.type = CipherType.SecureNote;\n            cipher.secureNote = new SecureNoteView();\n            cipher.secureNote.type = SecureNoteType.Generic;\n        } else if (item.typeName === 'wallet.financial.CreditCard') {\n            cipher.type = CipherType.Card;\n            cipher.card = new CardView();\n        } else if (item.typeName === 'identities.Identity') {\n            cipher.type = CipherType.Identity;\n            cipher.identity = new IdentityView();\n        } else {\n            cipher.login.uris = this.makeUriArray(item.location);\n        }\n\n        if (item.secureContents != null) {\n            if (item.secureContents.passwordHistory != null) {\n                this.parsePasswordHistory(item.secureContents.passwordHistory, cipher);\n            }\n            if (!this.isNullOrWhitespace(item.secureContents.notesPlain)) {\n                cipher.notes = item.secureContents.notesPlain.split(this.newLineRegex).join('\\n') + '\\n';\n            }\n            if (cipher.type === CipherType.Login) {\n                if (!this.isNullOrWhitespace(item.secureContents.password)) {\n                    cipher.login.password = item.secureContents.password;\n                }\n                if (item.secureContents.URLs != null) {\n                    const urls: string[] = [];\n                    item.secureContents.URLs.forEach((u: any) => {\n                        if (!this.isNullOrWhitespace(u.url)) {\n                            urls.push(u.url);\n                        }\n                    });\n                    if (urls.length > 0) {\n                        cipher.login.uris = this.makeUriArray(urls);\n                    }\n                }\n            }\n            if (item.secureContents.fields != null) {\n                this.parseFields(item.secureContents.fields, cipher, 'designation', 'value', 'name');\n            }\n            if (item.secureContents.sections != null) {\n                item.secureContents.sections.forEach((section: any) => {\n                    if (section.fields != null) {\n                        this.parseFields(section.fields, cipher, 'n', 'v', 't');\n                    }\n                });\n            }\n        }\n    }\n\n    private parsePasswordHistory(items: any[], cipher: CipherView) {\n        const maxSize = items.length > 5 ? 5 : items.length;\n        cipher.passwordHistory = items\n            .filter((h: any) => !this.isNullOrWhitespace(h.value) && h.time != null)\n            .sort((a, b) => b.time - a.time)\n            .slice(0, maxSize)\n            .map((h: any) => {\n                const ph = new PasswordHistoryView();\n                ph.password = h.value;\n                ph.lastUsedDate = new Date(('' + h.time).length >= 13 ? h.time : h.time * 1000);\n                return ph;\n            });\n    }\n\n    private parseFields(fields: any[], cipher: CipherView, designationKey: string, valueKey: string, nameKey: string) {\n        fields.forEach((field: any) => {\n            if (field[valueKey] == null || field[valueKey].toString().trim() === '') {\n                return;\n            }\n\n            const fieldValue = field[valueKey].toString();\n            const fieldDesignation = field[designationKey] != null ? field[designationKey].toString() : null;\n\n            if (cipher.type === CipherType.Login) {\n                if (this.isNullOrWhitespace(cipher.login.username) && fieldDesignation === 'username') {\n                    cipher.login.username = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(cipher.login.password) && fieldDesignation === 'password') {\n                    cipher.login.password = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(cipher.login.totp) && fieldDesignation != null &&\n                    fieldDesignation.startsWith('TOTP_')) {\n                    cipher.login.totp = fieldValue;\n                    return;\n                }\n            } else if (cipher.type === CipherType.Card) {\n                if (this.isNullOrWhitespace(cipher.card.number) && fieldDesignation === 'ccnum') {\n                    cipher.card.number = fieldValue;\n                    cipher.card.brand = this.getCardBrand(fieldValue);\n                    return;\n                } else if (this.isNullOrWhitespace(cipher.card.code) && fieldDesignation === 'cvv') {\n                    cipher.card.code = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(cipher.card.cardholderName) && fieldDesignation === 'cardholder') {\n                    cipher.card.cardholderName = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(cipher.card.expiration) && fieldDesignation === 'expiry' &&\n                    fieldValue.length === 6) {\n                    cipher.card.expMonth = (fieldValue as string).substr(4, 2);\n                    if (cipher.card.expMonth[0] === '0') {\n                        cipher.card.expMonth = cipher.card.expMonth.substr(1, 1);\n                    }\n                    cipher.card.expYear = (fieldValue as string).substr(0, 4);\n                    return;\n                } else if (fieldDesignation === 'type') {\n                    // Skip since brand was determined from number above\n                    return;\n                }\n            } else if (cipher.type === CipherType.Identity) {\n                const identity = cipher.identity;\n                if (this.isNullOrWhitespace(identity.firstName) && fieldDesignation === 'firstname') {\n                    identity.firstName = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(identity.lastName) && fieldDesignation === 'lastname') {\n                    identity.lastName = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(identity.middleName) && fieldDesignation === 'initial') {\n                    identity.middleName = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(identity.phone) && fieldDesignation === 'defphone') {\n                    identity.phone = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(identity.company) && fieldDesignation === 'company') {\n                    identity.company = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(identity.email) && fieldDesignation === 'email') {\n                    identity.email = fieldValue;\n                    return;\n                } else if (this.isNullOrWhitespace(identity.username) && fieldDesignation === 'username') {\n                    identity.username = fieldValue;\n                    return;\n                } else if (fieldDesignation === 'address') {\n                    // fieldValue is an object casted into a string, so access the plain value instead\n                    const { street, city, country, zip } = field[valueKey];\n                    identity.address1 = this.getValueOrDefault(street);\n                    identity.city = this.getValueOrDefault(city);\n                    if (!this.isNullOrWhitespace(country)) {\n                        identity.country = country.toUpperCase();\n                    }\n                    identity.postalCode = this.getValueOrDefault(zip);\n                    return;\n                }\n            }\n\n            const fieldName = this.isNullOrWhitespace(field[nameKey]) ? 'no_name' : field[nameKey];\n            if (fieldName === 'password' && cipher.passwordHistory != null &&\n                cipher.passwordHistory.some(h => h.password === fieldValue)) {\n                return;\n            }\n\n            const fieldType = field.k === 'concealed' ? FieldType.Hidden : FieldType.Text;\n            this.processKvp(cipher, fieldName, fieldValue, fieldType);\n        });\n    }\n}\n","import { Importer } from '../importer';\nimport { IgnoredProperties, OnePasswordCsvImporter } from './onepasswordCsvImporter';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { CardView } from '../../models/view/cardView';\nimport { CipherView } from '../../models/view/cipherView';\nimport { IdentityView } from '../../models/view/identityView';\n\nexport class OnePasswordMacCsvImporter extends OnePasswordCsvImporter implements Importer {\n    setCipherType(value: any, cipher: CipherView) {\n        const onePassType = this.getValueOrDefault(this.getProp(value, 'type'), 'Login');\n        switch (onePassType) {\n            case 'Credit Card':\n                cipher.type = CipherType.Card;\n                cipher.card = new CardView();\n                IgnoredProperties.push('type');\n                break;\n            case 'Identity':\n                cipher.type = CipherType.Identity;\n                cipher.identity = new IdentityView();\n                IgnoredProperties.push('type');\n                break;\n            case 'Login':\n            case 'Secure Note':\n                IgnoredProperties.push('type');\n            default:\n                break;\n        }\n    }\n}\n","import { CipherView } from '../../models/view/cipherView';\n\nexport class CipherImportContext {\n    lowerProperty: string;\n    constructor(public importRecord: any, public property: string, public cipher: CipherView) {\n        this.lowerProperty = property.toLowerCase();\n    }\n}\n","import { Importer } from '../importer';\nimport { CipherImportContext } from './cipherImportContext';\nimport { OnePasswordCsvImporter } from './onepasswordCsvImporter';\n\nimport { CipherType } from '../../enums/cipherType';\nimport { CardView } from '../../models/view/cardView';\nimport { CipherView } from '../../models/view/cipherView';\nimport { IdentityView } from '../../models/view/identityView';\nimport { LoginView } from '../../models/view/loginView';\n\nexport class OnePasswordWinCsvImporter extends OnePasswordCsvImporter implements Importer {\n    constructor() {\n        super();\n        this.identityPropertyParsers.push(this.setIdentityAddress);\n    }\n\n    setCipherType(value: any, cipher: CipherView) {\n        cipher.type = CipherType.Login;\n        cipher.login = new LoginView();\n\n        if (!this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: number/i)) &&\n            !this.isNullOrWhitespace(this.getPropByRegexp(value, /\\d+: expiry date/i))) {\n            cipher.type = CipherType.Card;\n            cipher.card = new CardView();\n        }\n\n        if (!this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: first name/i)) ||\n            !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: initial/i)) ||\n            !this.isNullOrWhitespace(this.getPropByRegexp(value, /name \\d+: last name/i)) ||\n            !this.isNullOrWhitespace(this.getPropByRegexp(value, /internet \\d+: email/i))) {\n            cipher.type = CipherType.Identity;\n            cipher.identity = new IdentityView();\n        }\n    }\n\n    setIdentityAddress(context: CipherImportContext) {\n        if (context.lowerProperty.match(/address \\d+: address/i)) {\n            this.processKvp(context.cipher, 'address', context.importRecord[context.property]);\n            return true;\n        }\n        return false;\n    }\n\n    setCreditCardExpiry(context: CipherImportContext) {\n        if (this.isNullOrWhitespace(context.cipher.card.expiration) && context.lowerProperty.includes('expiry date')) {\n            const expSplit = (context.importRecord[context.property] as string).split('/');\n            context.cipher.card.expMonth = expSplit[0];\n            if (context.cipher.card.expMonth[0] === '0' && context.cipher.card.expMonth.length === 2) {\n                context.cipher.card.expMonth = context.cipher.card.expMonth.substr(1, 1);\n            }\n            context.cipher.card.expYear = expSplit[2].length > 4 ? expSplit[2].substr(0, 4) : expSplit[2];\n            return true;\n        }\n        return false;\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\nimport { FolderView } from '../models/view/folderView';\n\nexport class PadlockCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        let headers: string[] = null;\n        results.forEach(value => {\n            if (headers == null) {\n                headers = value.map((v: string) => v);\n                return;\n            }\n\n            if (value.length < 2 || value.length !== headers.length) {\n                return;\n            }\n\n            if (!this.isNullOrWhitespace(value[1])) {\n                if (this.organization) {\n                    const tags = (value[1] as string).split(',');\n                    tags.forEach(tag => {\n                        tag = tag.trim();\n                        let addCollection = true;\n                        let collectionIndex = result.collections.length;\n\n                        for (let i = 0; i < result.collections.length; i++) {\n                            if (result.collections[i].name === tag) {\n                                addCollection = false;\n                                collectionIndex = i;\n                                break;\n                            }\n                        }\n\n                        if (addCollection) {\n                            const collection = new CollectionView();\n                            collection.name = tag;\n                            result.collections.push(collection);\n                        }\n\n                        result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n                    });\n                } else {\n                    const tags = (value[1] as string).split(',');\n                    const tag = tags.length > 0 ? tags[0].trim() : null;\n                    this.processFolder(result, tag);\n                }\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value[0], '--');\n\n            for (let i = 2; i < value.length; i++) {\n                const header = headers[i].trim().toLowerCase();\n                if (this.isNullOrWhitespace(value[i]) || this.isNullOrWhitespace(header)) {\n                    continue;\n                }\n\n                if (this.usernameFieldNames.indexOf(header) > -1) {\n                    cipher.login.username = value[i];\n                } else if (this.passwordFieldNames.indexOf(header) > -1) {\n                    cipher.login.password = value[i];\n                } else if (this.uriFieldNames.indexOf(header) > -1) {\n                    cipher.login.uris = this.makeUriArray(value[i]);\n                } else {\n                    this.processKvp(cipher, headers[i], value[i]);\n                }\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassKeepCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            this.processFolder(result, this.getValue('category', value));\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValue('description', value);\n            cipher.name = this.getValueOrDefault(this.getValue('title', value), '--');\n            cipher.login.username = this.getValue('username', value);\n            cipher.login.password = this.getValue('password', value);\n            cipher.login.uris = this.makeUriArray(this.getValue('site', value));\n            this.processKvp(cipher, 'Password 2', this.getValue('password2', value));\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private getValue(key: string, value: any) {\n        return this.getValueOrDefault(value[key], this.getValueOrDefault(value[(' ' + key)]));\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PassmanJsonImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = JSON.parse(data);\n        if (results == null || results.length === 0) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach((credential: any) => {\n            if (credential.tags != null && credential.tags.length > 0) {\n                const folderName = credential.tags[0].text;\n                this.processFolder(result, folderName);\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.name = credential.label;\n\n            cipher.login.username = this.getValueOrDefault(credential.username);\n            if (this.isNullOrWhitespace(cipher.login.username)) {\n                cipher.login.username = this.getValueOrDefault(credential.email);\n            } else if (!this.isNullOrWhitespace(credential.email)) {\n                cipher.notes = ('Email: ' + credential.email + '\\n');\n            }\n\n            cipher.login.password = this.getValueOrDefault(credential.password);\n            cipher.login.uris = this.makeUriArray(credential.url);\n            cipher.notes += this.getValueOrDefault(credential.description, '');\n            if (credential.otp != null) {\n                cipher.login.totp = this.getValueOrDefault(credential.otp.secret);\n            }\n\n            if (credential.custom_fields != null) {\n                credential.custom_fields.forEach((customField: any) => {\n                    switch (customField.field_type) {\n                        case 'text':\n                        case 'password':\n                            this.processKvp(cipher, customField.label, customField.value);\n                            break;\n                    }\n                });\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CollectionView } from '../models/view/collectionView';\n\nexport class PasspackCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const tagsJson = !this.isNullOrWhitespace(value.Tags) ? JSON.parse(value.Tags) : null;\n            const tags: string[] = tagsJson != null && tagsJson.tags != null && tagsJson.tags.length > 0 ?\n                tagsJson.tags.map((tagJson: string) => {\n                    try {\n                        const t = JSON.parse(tagJson);\n                        return this.getValueOrDefault(t.tag);\n                    } catch {\n                        // Ignore error\n                    }\n                    return null;\n                }).filter((t: string) => !this.isNullOrWhitespace(t)) : null;\n\n            if (this.organization && tags != null && tags.length > 0) {\n                tags.forEach(tag => {\n                    let addCollection = true;\n                    let collectionIndex = result.collections.length;\n\n                    for (let i = 0; i < result.collections.length; i++) {\n                        if (result.collections[i].name === tag) {\n                            addCollection = false;\n                            collectionIndex = i;\n                            break;\n                        }\n                    }\n\n                    if (addCollection) {\n                        const collection = new CollectionView();\n                        collection.name = tag;\n                        result.collections.push(collection);\n                    }\n\n                    result.collectionRelationships.push([result.ciphers.length, collectionIndex]);\n                });\n            } else if (!this.organization && tags != null && tags.length > 0) {\n                this.processFolder(result, tags[0]);\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValueOrDefault(value.Notes, '');\n            cipher.notes += ('\\n\\n' + this.getValueOrDefault(value['Shared Notes'], '') + '\\n');\n            cipher.name = this.getValueOrDefault(value['Entry Name'], '--');\n            cipher.login.username = this.getValueOrDefault(value['User ID']);\n            cipher.login.password = this.getValueOrDefault(value.Password);\n            cipher.login.uris = this.makeUriArray(value.URL);\n\n            if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n                value.__parsed_extra.forEach((extra: string) => {\n                    if (!this.isNullOrWhitespace(extra)) {\n                        cipher.notes += ('\\n' + extra);\n                    }\n                });\n            }\n\n            const fieldsJson = !this.isNullOrWhitespace(value['Extra Fields']) ?\n                JSON.parse(value['Extra Fields']) : null;\n            const fields = fieldsJson != null && fieldsJson.extraFields != null &&\n                fieldsJson.extraFields.length > 0 ? fieldsJson.extraFields.map((fieldJson: string) => {\n                    try {\n                        return JSON.parse(fieldJson);\n                    } catch {\n                        // Ignore error\n                    }\n                    return null;\n                }) : null;\n            if (fields != null) {\n                fields.forEach((f: any) => {\n                    if (f != null) {\n                        this.processKvp(cipher, f.name, f.data);\n                    }\n                });\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordAgentCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        let newVersion = true;\n        results.forEach(value => {\n            if (value.length !== 5 && value.length < 9) {\n                return;\n            }\n            const altFormat = value.length === 10 && value[0] === '0';\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value[altFormat ? 1 : 0], '--');\n            cipher.login.username = this.getValueOrDefault(value[altFormat ? 2 : 1]);\n            cipher.login.password = this.getValueOrDefault(value[altFormat ? 3 : 2]);\n            if (value.length === 5) {\n                newVersion = false;\n                cipher.notes = this.getValueOrDefault(value[4]);\n                cipher.login.uris = this.makeUriArray(value[3]);\n            } else {\n                const folder = this.getValueOrDefault(value[altFormat ? 9 : 8], '(None)');\n                let folderName = folder !== '(None)' ? folder.split('\\\\').join('/') : null;\n                if (folderName != null) {\n                    folderName = folder.split(' > ').join('/');\n                    folderName = folder.split('>').join('/');\n                }\n                this.processFolder(result, folderName);\n                cipher.notes = this.getValueOrDefault(value[altFormat ? 5 : 3]);\n                cipher.login.uris = this.makeUriArray(value[4]);\n            }\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (newVersion && this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { FolderView } from '../models/view/folderView';\n\nimport { CipherType } from '../enums/cipherType';\n\nexport class PasswordBossJsonImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = JSON.parse(data);\n        if (results == null || results.items == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const foldersMap = new Map<string, string>();\n        results.folders.forEach((value: any) => {\n            foldersMap.set(value.id, value.name);\n        });\n        const foldersIndexMap = new Map<string, number>();\n        foldersMap.forEach((val, key) => {\n            foldersIndexMap.set(key, result.folders.length);\n            const f = new FolderView();\n            f.name = val;\n            result.folders.push(f);\n        });\n\n        results.items.forEach((value: any) => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.name, '--');\n            cipher.login.uris = this.makeUriArray(value.login_url);\n\n            if (value.folder != null && foldersIndexMap.has(value.folder)) {\n                result.folderRelationships.push([result.ciphers.length, foldersIndexMap.get(value.folder)]);\n            }\n\n            if (value.identifiers == null) {\n                return;\n            }\n\n            if (!this.isNullOrWhitespace(value.identifiers.notes)) {\n                cipher.notes = value.identifiers.notes.split('\\\\r\\\\n').join('\\n').split('\\\\n').join('\\n');\n            }\n\n            if (value.type === 'CreditCard') {\n                cipher.card = new CardView();\n                cipher.type = CipherType.Card;\n            }\n\n            for (const property in value.identifiers) {\n                if (!value.identifiers.hasOwnProperty(property)) {\n                    continue;\n                }\n                const valObj = value.identifiers[property];\n                const val = valObj != null ? valObj.toString() : null;\n                if (this.isNullOrWhitespace(val) || property === 'notes' || property === 'ignoreItemInSecurityScore') {\n                    continue;\n                }\n\n                if (property === 'custom_fields') {\n                    valObj.forEach((cf: any) => {\n                        this.processKvp(cipher, cf.name, cf.value);\n                    });\n                    continue;\n                }\n\n                if (cipher.type === CipherType.Card) {\n                    if (property === 'cardNumber') {\n                        cipher.card.number = val;\n                        cipher.card.brand = this.getCardBrand(val);\n                        continue;\n                    } else if (property === 'nameOnCard') {\n                        cipher.card.cardholderName = val;\n                        continue;\n                    } else if (property === 'security_code') {\n                        cipher.card.code = val;\n                        continue;\n                    } else if (property === 'expires') {\n                        try {\n                            const expDate = new Date(val);\n                            cipher.card.expYear = expDate.getFullYear().toString();\n                            cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n                        } catch {\n                            // Ignore error\n                        }\n                        continue;\n                    } else if (property === 'cardType') {\n                        continue;\n                    }\n                } else {\n                    if ((property === 'username' || property === 'email') &&\n                        this.isNullOrWhitespace(cipher.login.username)) {\n                        cipher.login.username = val;\n                        continue;\n                    } else if (property === 'password') {\n                        cipher.login.password = val;\n                        continue;\n                    } else if (property === 'totp') {\n                        cipher.login.totp = val;\n                        continue;\n                    } else if ((cipher.login.uris == null || cipher.login.uris.length === 0) &&\n                        this.uriFieldNames.indexOf(property) > -1) {\n                        cipher.login.uris = this.makeUriArray(val);\n                        continue;\n                    }\n                }\n\n                this.processKvp(cipher, property, val);\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordDragonXmlImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const doc = this.parseXml(data);\n        if (doc == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const records = doc.querySelectorAll('PasswordManager > record');\n        Array.from(records).forEach(record => {\n            const category = this.querySelectorDirectChild(record, 'Category');\n            const categoryText = category != null && !this.isNullOrWhitespace(category.textContent) &&\n                category.textContent !== 'Unfiled' ? category.textContent : null;\n            this.processFolder(result, categoryText);\n\n            const accountName = this.querySelectorDirectChild(record, 'Account-Name');\n            const userId = this.querySelectorDirectChild(record, 'User-Id');\n            const password = this.querySelectorDirectChild(record, 'Password');\n            const url = this.querySelectorDirectChild(record, 'URL');\n            const notes = this.querySelectorDirectChild(record, 'Notes');\n            const cipher = this.initLoginCipher();\n            cipher.name = accountName != null ? this.getValueOrDefault(accountName.textContent, '--') : '--';\n            cipher.notes = notes != null ? this.getValueOrDefault(notes.textContent) : '';\n            cipher.login.username = userId != null ? this.getValueOrDefault(userId.textContent) : null;\n            cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n            cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n            const attributes: string[] = [];\n            for (let i = 1; i <= 10; i++) {\n                attributes.push('Attribute-' + i);\n            }\n\n            this.querySelectorAllDirectChild(record, attributes.join(',')).forEach(attr => {\n                if (this.isNullOrWhitespace(attr.textContent) || attr.textContent === 'null') {\n                    return;\n                }\n                this.processKvp(cipher, attr.tagName, attr.textContent);\n            });\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordSafeXmlImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const doc = this.parseXml(data);\n        if (doc == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const passwordSafe = doc.querySelector('passwordsafe');\n        if (passwordSafe == null) {\n            result.errorMessage = 'Missing `passwordsafe` node.';\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const notesDelimiter = passwordSafe.getAttribute('delimiter');\n        const entries = doc.querySelectorAll('passwordsafe > entry');\n        Array.from(entries).forEach(entry => {\n            const group = this.querySelectorDirectChild(entry, 'group');\n            const groupText = group != null && !this.isNullOrWhitespace(group.textContent) ?\n                group.textContent.split('.').join('/') : null;\n            this.processFolder(result, groupText);\n\n            const title = this.querySelectorDirectChild(entry, 'title');\n            const username = this.querySelectorDirectChild(entry, 'username');\n            const email = this.querySelectorDirectChild(entry, 'email');\n            const password = this.querySelectorDirectChild(entry, 'password');\n            const url = this.querySelectorDirectChild(entry, 'url');\n            const notes = this.querySelectorDirectChild(entry, 'notes');\n            const cipher = this.initLoginCipher();\n            cipher.name = title != null ? this.getValueOrDefault(title.textContent, '--') : '--';\n            cipher.notes = notes != null ?\n                this.getValueOrDefault(notes.textContent, '').split(notesDelimiter).join('\\n') : null;\n            cipher.login.username = username != null ? this.getValueOrDefault(username.textContent) : null;\n            cipher.login.password = password != null ? this.getValueOrDefault(password.textContent) : null;\n            cipher.login.uris = url != null ? this.makeUriArray(url.textContent) : null;\n\n            if (this.isNullOrWhitespace(cipher.login.username) && email != null) {\n                cipher.login.username = this.getValueOrDefault(email.textContent);\n            } else if (email != null && !this.isNullOrWhitespace(email.textContent)) {\n                cipher.notes = this.isNullOrWhitespace(cipher.notes) ? 'Email: ' + email.textContent\n                    : (cipher.notes + '\\n' + 'Email: ' + email.textContent);\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class PasswordWalletTxtImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.length < 1) {\n                return;\n            }\n            if (value.length > 5) {\n                this.processFolder(result, value[5]);\n            }\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value[0], '--');\n            if (value.length > 4) {\n                cipher.notes = this.getValueOrDefault(value[4], '').split('¬').join('\\n');\n            }\n            if (value.length > 2) {\n                cipher.login.username = this.getValueOrDefault(value[2]);\n            }\n            if (value.length > 3) {\n                cipher.login.password = this.getValueOrDefault(value[3]);\n            }\n            if (value.length > 1) {\n                cipher.login.uris = this.makeUriArray(value[1]);\n            }\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { CipherType } from '../enums/cipherType';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\n\nexport class RememBearCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.trash === 'true') {\n                return;\n            }\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.name);\n            cipher.notes = this.getValueOrDefault(value.notes);\n            if (value.type === 'LoginItem') {\n                cipher.login.uris = this.makeUriArray(value.website);\n                cipher.login.password = this.getValueOrDefault(value.password);\n                cipher.login.username = this.getValueOrDefault(value.username);\n            } else if (value.type === 'CreditCardItem') {\n                cipher.type = CipherType.Card;\n                cipher.card = new CardView();\n                cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n                cipher.card.number = this.getValueOrDefault(value.number);\n                cipher.card.brand = this.getCardBrand(cipher.card.number);\n                cipher.card.code = this.getValueOrDefault(value.verification);\n\n                try {\n                    const expMonth = this.getValueOrDefault(value.expiryMonth);\n                    if (expMonth != null) {\n                        const expMonthNumber = parseInt(expMonth, null);\n                        if (expMonthNumber != null && expMonthNumber >= 1 && expMonthNumber <= 12) {\n                            cipher.card.expMonth = expMonthNumber.toString();\n                        }\n                    }\n                } catch {\n                    // Ignore error\n                }\n                try {\n                    const expYear = this.getValueOrDefault(value.expiryYear);\n                    if (expYear != null) {\n                        const expYearNumber = parseInt(expYear, null);\n                        if (expYearNumber != null) {\n                            cipher.card.expYear = expYearNumber.toString();\n                        }\n                    }\n                } catch {\n                    // Ignore error\n                }\n\n                const pin = this.getValueOrDefault(value.pin);\n                if (pin != null) {\n                    this.processKvp(cipher, 'PIN', pin);\n                }\n                const zip = this.getValueOrDefault(value.zipCode);\n                if (zip != null) {\n                    this.processKvp(cipher, 'Zip Code', zip);\n                }\n            }\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class RoboFormCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        let i = 1;\n        results.forEach(value => {\n            const folder = !this.isNullOrWhitespace(value.Folder) && value.Folder.startsWith('/') ?\n                value.Folder.replace('/', '') : value.Folder;\n            const folderName = !this.isNullOrWhitespace(folder) ? folder : null;\n            this.processFolder(result, folderName);\n\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValueOrDefault(value.Note);\n            cipher.name = this.getValueOrDefault(value.Name, '--');\n            cipher.login.username = this.getValueOrDefault(value.Login);\n            cipher.login.password = this.getValueOrDefault(value.Pwd);\n            cipher.login.uris = this.makeUriArray(value.Url);\n\n            if (!this.isNullOrWhitespace(value.Rf_fields)) {\n                let fields: string[] = [value.Rf_fields];\n                if (value.__parsed_extra != null && value.__parsed_extra.length > 0) {\n                    fields = fields.concat(value.__parsed_extra);\n                }\n                fields.forEach((field: string) => {\n                    const parts = field.split(':');\n                    if (parts.length < 3) {\n                        return;\n                    }\n                    const key = parts[0] === '-no-name-' ? null : parts[0];\n                    const val = parts.length === 4 && parts[2] === 'rck' ? parts[1] : parts[2];\n                    this.processKvp(cipher, key, val);\n                });\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n\n            if (i === results.length && cipher.name === '--' && this.isNullOrWhitespace(cipher.login.password)) {\n                return;\n            }\n\n            result.ciphers.push(cipher);\n            i++;\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SafariCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.Title, '--');\n            cipher.login.username = this.getValueOrDefault(value.Username);\n            cipher.login.password = this.getValueOrDefault(value.Password);\n            cipher.login.uris = this.makeUriArray(value.Url);\n            cipher.login.totp = this.getValueOrDefault(value.OTPAuth);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { FolderView } from '../models/view/folderView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nimport { FieldType } from '../enums/fieldType';\nimport { CipherView } from '../models/view/cipherView';\nimport { FieldView } from '../models/view/fieldView';\n\nexport class SafeInCloudXmlImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const doc = this.parseXml(data);\n        if (doc == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const db = doc.querySelector('database');\n        if (db == null) {\n            result.errorMessage = 'Missing `database` node.';\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const foldersMap = new Map<string, number>();\n\n        Array.from(doc.querySelectorAll('database > label')).forEach(labelEl => {\n            const name = labelEl.getAttribute('name');\n            const id = labelEl.getAttribute('id');\n            if (!this.isNullOrWhitespace(name) && !this.isNullOrWhitespace(id)) {\n                foldersMap.set(id, result.folders.length);\n                const folder = new FolderView();\n                folder.name = name;\n                result.folders.push(folder);\n            }\n        });\n\n        Array.from(doc.querySelectorAll('database > card')).forEach(cardEl => {\n            if (cardEl.getAttribute('template') === 'true' || cardEl.getAttribute('deleted') === 'true') {\n                return;\n            }\n\n            const labelIdEl = this.querySelectorDirectChild(cardEl, 'label_id');\n            if (labelIdEl != null) {\n                const labelId = labelIdEl.textContent;\n                if (!this.isNullOrWhitespace(labelId) && foldersMap.has(labelId)) {\n                    result.folderRelationships.push([result.ciphers.length, foldersMap.get(labelId)]);\n                }\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(cardEl.getAttribute('title'), '--');\n\n            if (cardEl.getAttribute('star') === 'true') {\n                cipher.favorite = true;\n            }\n\n            const cardType = cardEl.getAttribute('type');\n            if (cardType === 'note') {\n                cipher.type = CipherType.SecureNote;\n                cipher.secureNote = new SecureNoteView();\n                cipher.secureNote.type = SecureNoteType.Generic;\n            } else {\n                Array.from(this.querySelectorAllDirectChild(cardEl, 'field')).forEach(fieldEl => {\n                    const text = fieldEl.textContent;\n                    if (this.isNullOrWhitespace(text)) {\n                        return;\n                    }\n                    const name = fieldEl.getAttribute('name');\n                    const fieldType = this.getValueOrDefault(fieldEl.getAttribute('type'), '').toLowerCase();\n                    if (fieldType === 'login') {\n                        cipher.login.username = text;\n                    } else if (fieldType === 'password' || fieldType === 'secret') {\n                        // safeInCloud allows for more than one password. we just insert them here and find the one used as password later\n                        this.processKvp(cipher, name, text, FieldType.Hidden);\n                    } else if (fieldType === 'one_time_password') {\n                        cipher.login.totp = text;\n                    } else if (fieldType === 'notes') {\n                        cipher.notes += (text + '\\n');\n                    } else if (fieldType === 'weblogin' || fieldType === 'website') {\n                        cipher.login.uris = this.makeUriArray(text);\n                    }\n                    else {\n                        this.processKvp(cipher, name, text);\n                    }\n                });\n            }\n\n            Array.from(this.querySelectorAllDirectChild(cardEl, 'notes')).forEach(notesEl => {\n                cipher.notes += (notesEl.textContent + '\\n');\n            });\n\n            this.setPassword(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    // Choose a password from all passwords. Take one that has password in its name, or the first one if there is no such entry\n    // if its name is password, we can safely remove it form the fields. otherwise, it would maybe be best to keep it as a hidden field\n    setPassword(cipher: CipherView) {\n        const candidates = cipher.fields.filter(field => field.type === FieldType.Hidden);\n        if (!candidates.length) {\n            return;\n        }\n\n        let choice: FieldView;\n        for (const field of candidates) {\n            if (this.passwordFieldNames.includes(field.name.toLowerCase())) {\n                choice = field;\n                cipher.fields = cipher.fields.filter(f => f !== choice);\n                break;\n            }\n        }\n\n        if (!choice) {\n            choice = candidates[0];\n        }\n\n        cipher.login.password = choice.value;\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SaferPassCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(this.nameFromUrl(value.url), '--');\n            cipher.notes = this.getValueOrDefault(value.notes);\n            cipher.login.username = this.getValueOrDefault(value.username);\n            cipher.login.password = this.getValueOrDefault(value.password);\n            cipher.login.uris = this.makeUriArray(value.url);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class SecureSafeCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.Title);\n            cipher.notes = this.getValueOrDefault(value.Comment);\n            cipher.login.uris = this.makeUriArray(value.Url);\n            cipher.login.password = this.getValueOrDefault(value.Password);\n            cipher.login.username = this.getValueOrDefault(value.Username);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view/cipherView';\n\nexport class SplashIdCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.length < 3) {\n                return;\n            }\n\n            this.processFolder(result, this.getValueOrDefault(value[value.length - 1]));\n            const cipher = this.initLoginCipher();\n            cipher.notes = this.getValueOrDefault(value[value.length - 2], '');\n            cipher.name = this.getValueOrDefault(value[1], '--');\n\n            if (value[0] === 'Web Logins' || value[0] === 'Servers' || value[0] === 'Email Accounts') {\n                cipher.login.username = this.getValueOrDefault(value[2]);\n                cipher.login.password = this.getValueOrDefault(value[3]);\n                cipher.login.uris = this.makeUriArray(value[4]);\n                this.parseFieldsToNotes(cipher, 5, value);\n            } else {\n                this.parseFieldsToNotes(cipher, 2, value);\n            }\n\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private parseFieldsToNotes(cipher: CipherView, startIndex: number, value: any) {\n        // last 3 rows do not get parsed\n        for (let i = startIndex; i < value.length - 3; i++) {\n            if (this.isNullOrWhitespace(value[i])) {\n                continue;\n            }\n            cipher.notes += (value[i] + '\\n');\n        }\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class StickyPasswordXmlImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const doc = this.parseXml(data);\n        if (doc == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        const loginNodes = doc.querySelectorAll('root > Database > Logins > Login');\n        Array.from(loginNodes).forEach(loginNode => {\n            const accountId = loginNode.getAttribute('ID');\n            if (this.isNullOrWhitespace(accountId)) {\n                return;\n            }\n\n            const usernameText = loginNode.getAttribute('Name');\n            const passwordText = loginNode.getAttribute('Password');\n            let titleText: string = null;\n            let linkText: string = null;\n            let notesText: string = null;\n            let groupId: string = null;\n            let groupText: string = null;\n\n            const accountLogin = doc.querySelector('root > Database > Accounts > Account > ' +\n                'LoginLinks > Login[SourceLoginID=\"' + accountId + '\"]');\n            if (accountLogin != null) {\n                const account = accountLogin.parentElement.parentElement;\n                if (account != null) {\n                    titleText = account.getAttribute('Name');\n                    linkText = account.getAttribute('Link');\n                    groupId = account.getAttribute('ParentID');\n                    notesText = account.getAttribute('Comments');\n                    if (!this.isNullOrWhitespace(notesText)) {\n                        notesText = notesText.split('/n').join('\\n');\n                    }\n                }\n            }\n\n            if (!this.isNullOrWhitespace(groupId)) {\n                groupText = this.buildGroupText(doc, groupId, '');\n                this.processFolder(result, groupText);\n            }\n\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(titleText, '--');\n            cipher.notes = this.getValueOrDefault(notesText);\n            cipher.login.username = this.getValueOrDefault(usernameText);\n            cipher.login.password = this.getValueOrDefault(passwordText);\n            cipher.login.uris = this.makeUriArray(linkText);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    buildGroupText(doc: Document, groupId: string, groupText: string): string {\n        const group = doc.querySelector('root > Database > Groups > Group[ID=\"' + groupId + '\"]');\n        if (group == null) {\n            return groupText;\n        }\n        if (!this.isNullOrWhitespace(groupText)) {\n            groupText = '/' + groupText;\n        }\n        groupText = group.getAttribute('Name') + groupText;\n        return this.buildGroupText(doc, group.getAttribute('ParentID'), groupText);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nimport { CardView } from '../models/view/cardView';\nimport { SecureNoteView } from '../models/view/secureNoteView';\n\nimport { CipherType } from '../enums/cipherType';\nimport { SecureNoteType } from '../enums/secureNoteType';\n\nconst PropertiesToIgnore = ['kind', 'autologin', 'favorite', 'hexcolor', 'protectedwithpassword', 'subdomainonly',\n    'type', 'tk_export_version', 'note', 'title', 'document_content',\n];\n\nexport class TrueKeyCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.favorite = this.getValueOrDefault(value.favorite, '').toLowerCase() === 'true';\n            cipher.name = this.getValueOrDefault(value.name, '--');\n            cipher.notes = this.getValueOrDefault(value.memo, '');\n            cipher.login.username = this.getValueOrDefault(value.login);\n            cipher.login.password = this.getValueOrDefault(value.password);\n            cipher.login.uris = this.makeUriArray(value.url);\n\n            if (value.kind !== 'login') {\n                cipher.name = this.getValueOrDefault(value.title, '--');\n                cipher.notes = this.getValueOrDefault(value.note, '');\n            }\n\n            if (value.kind === 'cc') {\n                cipher.type = CipherType.Card;\n                cipher.card = new CardView();\n                cipher.card.cardholderName = this.getValueOrDefault(value.cardholder);\n                cipher.card.number = this.getValueOrDefault(value.number);\n                cipher.card.brand = this.getCardBrand(cipher.card.number);\n                if (!this.isNullOrWhitespace(value.expiryDate)) {\n                    try {\n                        const expDate = new Date(value.expiryDate);\n                        cipher.card.expYear = expDate.getFullYear().toString();\n                        cipher.card.expMonth = (expDate.getMonth() + 1).toString();\n                    } catch {\n                        // Ignore error\n                    }\n                }\n            } else if (value.kind !== 'login') {\n                cipher.type = CipherType.SecureNote;\n                cipher.secureNote = new SecureNoteView();\n                cipher.secureNote.type = SecureNoteType.Generic;\n                if (!this.isNullOrWhitespace(cipher.notes)) {\n                    cipher.notes = this.getValueOrDefault(value.document_content, '');\n                }\n                for (const property in value) {\n                    if (value.hasOwnProperty(property) && PropertiesToIgnore.indexOf(property.toLowerCase()) < 0 &&\n                        !this.isNullOrWhitespace(value[property])) {\n                        this.processKvp(cipher, property, value[property]);\n                    }\n                }\n            }\n\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class UpmCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, false);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (value.length !== 5) {\n                return;\n            }\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value[0], '--');\n            cipher.notes = this.getValueOrDefault(value[4]);\n            cipher.login.username = this.getValueOrDefault(value[1]);\n            cipher.login.password = this.getValueOrDefault(value[2]);\n            cipher.login.uris = this.makeUriArray(value[3]);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\n\nexport class YotiCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            const cipher = this.initLoginCipher();\n            cipher.name = this.getValueOrDefault(value.Name, '--');\n            cipher.login.username = this.getValueOrDefault(value['User name']);\n            cipher.login.password = this.getValueOrDefault(value.Password);\n            cipher.login.uris = this.makeUriArray(value.URL);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n}\n","import { BaseImporter } from './baseImporter';\nimport { Importer } from './importer';\n\nimport { ImportResult } from '../models/domain/importResult';\nimport { CipherView } from '../models/view/cipherView';\n\nexport class ZohoVaultCsvImporter extends BaseImporter implements Importer {\n    parse(data: string): Promise<ImportResult> {\n        const result = new ImportResult();\n        const results = this.parseCsv(data, true);\n        if (results == null) {\n            result.success = false;\n            return Promise.resolve(result);\n        }\n\n        results.forEach(value => {\n            if (this.isNullOrWhitespace(value['Password Name']) && this.isNullOrWhitespace(value['Secret Name'])) {\n                return;\n            }\n            this.processFolder(result, this.getValueOrDefault(value.ChamberName));\n            const cipher = this.initLoginCipher();\n            cipher.favorite = this.getValueOrDefault(value.Favorite, '0') === '1';\n            cipher.notes = this.getValueOrDefault(value.Notes);\n            cipher.name = this.getValueOrDefault(\n                value['Password Name'], this.getValueOrDefault(value['Secret Name'], '--'));\n            cipher.login.uris = this.makeUriArray(\n                this.getValueOrDefault(value['Password URL'], this.getValueOrDefault(value['Secret URL'])));\n            this.parseData(cipher, value.SecretData);\n            this.parseData(cipher, value.CustomData);\n            this.convertToNoteIfNeeded(cipher);\n            this.cleanupCipher(cipher);\n            result.ciphers.push(cipher);\n        });\n\n        if (this.organization) {\n            this.moveFoldersToCollections(result);\n        }\n\n        result.success = true;\n        return Promise.resolve(result);\n    }\n\n    private parseData(cipher: CipherView, data: string) {\n        if (this.isNullOrWhitespace(data)) {\n            return;\n        }\n        const dataLines = this.splitNewLine(data);\n        dataLines.forEach(line => {\n            const delimPosition = line.indexOf(':');\n            if (delimPosition < 0) {\n                return;\n            }\n            const field = line.substring(0, delimPosition);\n            const value = line.length > delimPosition ? line.substring(delimPosition + 1) : null;\n            if (this.isNullOrWhitespace(field) || this.isNullOrWhitespace(value) || field === 'SecretType') {\n                return;\n            }\n            const fieldLower = field.toLowerCase();\n            if (cipher.login.username == null && this.usernameFieldNames.indexOf(fieldLower) > -1) {\n                cipher.login.username = value;\n            } else if (cipher.login.password == null && this.passwordFieldNames.indexOf(fieldLower) > -1) {\n                cipher.login.password = value;\n            } else {\n                this.processKvp(cipher, field, value);\n            }\n        });\n    }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { KeyConnectorService as KeyConnectorServiceAbstraction } from '../abstractions/keyConnector.service';\nimport { LogService } from '../abstractions/log.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { OrganizationUserType } from '../enums/organizationUserType';\n\nimport { Utils } from '../misc/utils';\n\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { KeyConnectorUserKeyRequest } from '../models/request/keyConnectorUserKeyRequest';\n\nconst Keys = {\n    usesKeyConnector: 'usesKeyConnector',\n    convertAccountToKeyConnector: 'convertAccountToKeyConnector',\n};\n\nexport class KeyConnectorService implements KeyConnectorServiceAbstraction {\n    private usesKeyConnector?: boolean = null;\n\n    constructor(private storageService: StorageService, private userService: UserService,\n        private cryptoService: CryptoService, private apiService: ApiService,\n        private tokenService: TokenService, private logService: LogService) { }\n\n    setUsesKeyConnector(usesKeyConnector: boolean) {\n        this.usesKeyConnector = usesKeyConnector;\n        return this.storageService.save(Keys.usesKeyConnector, usesKeyConnector);\n    }\n\n    async getUsesKeyConnector(): Promise<boolean> {\n        return this.usesKeyConnector ??= await this.storageService.get<boolean>(Keys.usesKeyConnector);\n    }\n\n    async userNeedsMigration() {\n        const loggedInUsingSso = this.tokenService.getIsExternal();\n        const requiredByOrganization = await this.getManagingOrganization() != null;\n        const userIsNotUsingKeyConnector = !await this.getUsesKeyConnector();\n\n        return loggedInUsingSso && requiredByOrganization && userIsNotUsingKeyConnector;\n    }\n\n    async migrateUser() {\n        const organization = await this.getManagingOrganization();\n        const key = await this.cryptoService.getKey();\n\n        try {\n            const keyConnectorRequest = new KeyConnectorUserKeyRequest(key.encKeyB64);\n            await this.apiService.postUserKeyToKeyConnector(organization.keyConnectorUrl, keyConnectorRequest);\n        } catch (e) {\n            throw new Error('Unable to reach key connector');\n        }\n\n        await this.apiService.postConvertToKeyConnector();\n    }\n\n    async getAndSetKey(url: string) {\n        try {\n            const userKeyResponse = await this.apiService.getUserKeyFromKeyConnector(url);\n            const keyArr = Utils.fromB64ToArray(userKeyResponse.key);\n            const k = new SymmetricCryptoKey(keyArr);\n            await this.cryptoService.setKey(k);\n        } catch (e) {\n            this.logService.error(e);\n            throw new Error('Unable to reach key connector');\n        }\n    }\n\n    async getManagingOrganization() {\n        const orgs = await this.userService.getAllOrganizations();\n        return orgs.find(o =>\n            o.keyConnectorEnabled &&\n            o.type !== OrganizationUserType.Admin &&\n            o.type !== OrganizationUserType.Owner &&\n            !o.isProviderUser);\n    }\n\n    async setConvertAccountRequired(status: boolean) {\n        await this.storageService.save(Keys.convertAccountToKeyConnector, status);\n    }\n\n    async getConvertAccountRequired(): Promise<boolean> {\n        return await this.storageService.get(Keys.convertAccountToKeyConnector);\n    }\n\n    async removeConvertAccountRequired() {\n        await this.storageService.remove(Keys.convertAccountToKeyConnector);\n    }\n\n    async clear() {\n        await this.removeConvertAccountRequired();\n    }\n}\n","import * as signalR from '@microsoft/signalr';\nimport * as signalRMsgPack from '@microsoft/signalr-protocol-msgpack';\n\nimport { NotificationType } from '../enums/notificationType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { AppIdService } from '../abstractions/appId.service';\nimport { EnvironmentService } from '../abstractions/environment.service';\nimport { LogService } from '../abstractions/log.service';\nimport { NotificationsService as NotificationsServiceAbstraction } from '../abstractions/notifications.service';\nimport { SyncService } from '../abstractions/sync.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService } from '../abstractions/vaultTimeout.service';\n\nimport {\n    NotificationResponse,\n    SyncCipherNotification,\n    SyncFolderNotification,\n    SyncSendNotification,\n} from '../models/response/notificationResponse';\n\nexport class NotificationsService implements NotificationsServiceAbstraction {\n    private signalrConnection: signalR.HubConnection;\n    private url: string;\n    private connected = false;\n    private inited = false;\n    private inactive = false;\n    private reconnectTimer: any = null;\n\n    constructor(private userService: UserService, private syncService: SyncService,\n        private appIdService: AppIdService, private apiService: ApiService,\n        private vaultTimeoutService: VaultTimeoutService, private environmentService: EnvironmentService,\n        private logoutCallback: () => Promise<void>, private logService: LogService) {\n        this.environmentService.urls.subscribe(() => {\n            if (!this.inited) {\n                return;\n            }\n\n            this.init();\n        });\n    }\n\n    async init(): Promise<void> {\n        this.inited = false;\n        this.url = this.environmentService.getNotificationsUrl();\n\n        // Set notifications server URL to `https://-` to effectively disable communication\n        // with the notifications server from the client app\n        if (this.url === 'https://-') {\n            return;\n        }\n\n        if (this.signalrConnection != null) {\n            this.signalrConnection.off('ReceiveMessage');\n            this.signalrConnection.off('Heartbeat');\n            await this.signalrConnection.stop();\n            this.connected = false;\n            this.signalrConnection = null;\n        }\n\n        this.signalrConnection = new signalR.HubConnectionBuilder()\n            .withUrl(this.url + '/hub', {\n                accessTokenFactory: () => this.apiService.getActiveBearerToken(),\n                skipNegotiation: true,\n                transport: signalR.HttpTransportType.WebSockets,\n            })\n            .withHubProtocol(new signalRMsgPack.MessagePackHubProtocol() as signalR.IHubProtocol)\n            // .configureLogging(signalR.LogLevel.Trace)\n            .build();\n\n        this.signalrConnection.on('ReceiveMessage',\n            (data: any) => this.processNotification(new NotificationResponse(data)));\n        this.signalrConnection.on('Heartbeat',\n            (data: any) => { /*console.log('Heartbeat!');*/ });\n        this.signalrConnection.onclose(() => {\n            this.connected = false;\n            this.reconnect(true);\n        });\n        this.inited = true;\n        if (await this.isAuthedAndUnlocked()) {\n            await this.reconnect(false);\n        }\n    }\n\n    async updateConnection(sync = false): Promise<void> {\n        if (!this.inited) {\n            return;\n        }\n        try {\n            if (await this.isAuthedAndUnlocked()) {\n                await this.reconnect(sync);\n            } else {\n                await this.signalrConnection.stop();\n            }\n        } catch (e) {\n            this.logService.error(e.toString());\n        }\n    }\n\n    async reconnectFromActivity(): Promise<void> {\n        this.inactive = false;\n        if (this.inited && !this.connected) {\n            await this.reconnect(true);\n        }\n    }\n\n    async disconnectFromInactivity(): Promise<void> {\n        this.inactive = true;\n        if (this.inited && this.connected) {\n            await this.signalrConnection.stop();\n        }\n    }\n\n    private async processNotification(notification: NotificationResponse) {\n        const appId = await this.appIdService.getAppId();\n        if (notification == null || notification.contextId === appId) {\n            return;\n        }\n\n        const isAuthenticated = await this.userService.isAuthenticated();\n        const payloadUserId = notification.payload.userId || notification.payload.UserId;\n        const myUserId = await this.userService.getUserId();\n        if (isAuthenticated && payloadUserId != null && payloadUserId !== myUserId) {\n            return;\n        }\n\n        switch (notification.type) {\n            case NotificationType.SyncCipherCreate:\n            case NotificationType.SyncCipherUpdate:\n                await this.syncService.syncUpsertCipher(notification.payload as SyncCipherNotification,\n                    notification.type === NotificationType.SyncCipherUpdate);\n                break;\n            case NotificationType.SyncCipherDelete:\n            case NotificationType.SyncLoginDelete:\n                await this.syncService.syncDeleteCipher(notification.payload as SyncCipherNotification);\n                break;\n            case NotificationType.SyncFolderCreate:\n            case NotificationType.SyncFolderUpdate:\n                await this.syncService.syncUpsertFolder(notification.payload as SyncFolderNotification,\n                    notification.type === NotificationType.SyncFolderUpdate);\n                break;\n            case NotificationType.SyncFolderDelete:\n                await this.syncService.syncDeleteFolder(notification.payload as SyncFolderNotification);\n                break;\n            case NotificationType.SyncVault:\n            case NotificationType.SyncCiphers:\n            case NotificationType.SyncSettings:\n                if (isAuthenticated) {\n                    await this.syncService.fullSync(false);\n                }\n                break;\n            case NotificationType.SyncOrgKeys:\n                if (isAuthenticated) {\n                    await this.syncService.fullSync(true);\n                    // Stop so a reconnect can be made\n                    await this.signalrConnection.stop();\n                }\n                break;\n            case NotificationType.LogOut:\n                if (isAuthenticated) {\n                    this.logoutCallback();\n                }\n                break;\n            case NotificationType.SyncSendCreate:\n            case NotificationType.SyncSendUpdate:\n                await this.syncService.syncUpsertSend(notification.payload as SyncSendNotification,\n                    notification.type === NotificationType.SyncSendUpdate);\n                break;\n            case NotificationType.SyncSendDelete:\n                await this.syncService.syncDeleteSend(notification.payload as SyncSendNotification);\n            default:\n                break;\n        }\n    }\n\n    private async reconnect(sync: boolean) {\n        if (this.reconnectTimer != null) {\n            clearTimeout(this.reconnectTimer);\n            this.reconnectTimer = null;\n        }\n        if (this.connected || !this.inited || this.inactive) {\n            return;\n        }\n        const authedAndUnlocked = await this.isAuthedAndUnlocked();\n        if (!authedAndUnlocked) {\n            return;\n        }\n\n        try {\n            await this.signalrConnection.start();\n            this.connected = true;\n            if (sync) {\n                await this.syncService.fullSync(false);\n            }\n        } catch (e) {\n            this.logService.error(e);\n        }\n\n        if (!this.connected) {\n            this.reconnectTimer = setTimeout(() => this.reconnect(sync), this.random(120000, 300000));\n        }\n    }\n\n    private async isAuthedAndUnlocked() {\n        if (await this.userService.isAuthenticated()) {\n            const locked = await this.vaultTimeoutService.isLocked();\n            return !locked;\n        }\n        return false;\n    }\n\n    private random(min: number, max: number) {\n        min = Math.ceil(min);\n        max = Math.floor(max);\n        return Math.floor(Math.random() * (max - min + 1)) + min;\n    }\n}\n","import { BaseResponse } from './baseResponse';\n\nimport { NotificationType } from '../../enums/notificationType';\n\nexport class NotificationResponse extends BaseResponse {\n    contextId: string;\n    type: NotificationType;\n    payload: any;\n\n    constructor(response: any) {\n        super(response);\n        this.contextId = this.getResponseProperty('ContextId');\n        this.type = this.getResponseProperty('Type');\n\n        const payload = this.getResponseProperty('Payload');\n        switch (this.type) {\n            case NotificationType.SyncCipherCreate:\n            case NotificationType.SyncCipherDelete:\n            case NotificationType.SyncCipherUpdate:\n            case NotificationType.SyncLoginDelete:\n                this.payload = new SyncCipherNotification(payload);\n                break;\n            case NotificationType.SyncFolderCreate:\n            case NotificationType.SyncFolderDelete:\n            case NotificationType.SyncFolderUpdate:\n                this.payload = new SyncFolderNotification(payload);\n                break;\n            case NotificationType.SyncVault:\n            case NotificationType.SyncCiphers:\n            case NotificationType.SyncOrgKeys:\n            case NotificationType.SyncSettings:\n            case NotificationType.LogOut:\n                this.payload = new UserNotification(payload);\n                break;\n            case NotificationType.SyncSendCreate:\n            case NotificationType.SyncSendUpdate:\n            case NotificationType.SyncSendDelete:\n                this.payload = new SyncSendNotification(payload);\n            default:\n                break;\n        }\n    }\n}\n\nexport class SyncCipherNotification extends BaseResponse {\n    id: string;\n    userId: string;\n    organizationId: string;\n    collectionIds: string[];\n    revisionDate: Date;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.userId = this.getResponseProperty('UserId');\n        this.organizationId = this.getResponseProperty('OrganizationId');\n        this.collectionIds = this.getResponseProperty('CollectionIds');\n        this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n    }\n}\n\nexport class SyncFolderNotification extends BaseResponse {\n    id: string;\n    userId: string;\n    revisionDate: Date;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.userId = this.getResponseProperty('UserId');\n        this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n    }\n}\n\nexport class UserNotification extends BaseResponse {\n    userId: string;\n    date: Date;\n\n    constructor(response: any) {\n        super(response);\n        this.userId = this.getResponseProperty('UserId');\n        this.date = new Date(this.getResponseProperty('Date'));\n    }\n}\n\nexport class SyncSendNotification extends BaseResponse {\n    id: string;\n    userId: string;\n    revisionDate: Date;\n\n    constructor(response: any) {\n        super(response);\n        this.id = this.getResponseProperty('Id');\n        this.userId = this.getResponseProperty('UserId');\n        this.revisionDate = new Date(this.getResponseProperty('RevisionDate'));\n    }\n}\n","import * as zxcvbn from 'zxcvbn';\n\nimport { EncString } from '../models/domain/encString';\nimport { GeneratedPasswordHistory } from '../models/domain/generatedPasswordHistory';\nimport { PasswordGeneratorPolicyOptions } from '../models/domain/passwordGeneratorPolicyOptions';\nimport { Policy } from '../models/domain/policy';\n\nimport { CryptoService } from '../abstractions/crypto.service';\nimport {\n    PasswordGenerationService as PasswordGenerationServiceAbstraction,\n} from '../abstractions/passwordGeneration.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\n\nimport { EEFLongWordList } from '../misc/wordlist';\n\nimport { PolicyType } from '../enums/policyType';\n\nconst DefaultOptions = {\n    length: 14,\n    ambiguous: false,\n    number: true,\n    minNumber: 1,\n    uppercase: true,\n    minUppercase: 0,\n    lowercase: true,\n    minLowercase: 0,\n    special: false,\n    minSpecial: 1,\n    type: 'password',\n    numWords: 3,\n    wordSeparator: '-',\n    capitalize: false,\n    includeNumber: false,\n};\n\nconst Keys = {\n    options: 'passwordGenerationOptions',\n    history: 'generatedPasswordHistory',\n};\n\nconst MaxPasswordsInHistory = 100;\n\nexport class PasswordGenerationService implements PasswordGenerationServiceAbstraction {\n    private optionsCache: any;\n    private history: GeneratedPasswordHistory[];\n\n    constructor(private cryptoService: CryptoService, private storageService: StorageService,\n        private policyService: PolicyService) { }\n\n    async generatePassword(options: any): Promise<string> {\n        // overload defaults with given options\n        const o = Object.assign({}, DefaultOptions, options);\n\n        if (o.type === 'passphrase') {\n            return this.generatePassphrase(options);\n        }\n\n        // sanitize\n        this.sanitizePasswordLength(o, true);\n\n        const minLength: number = o.minUppercase + o.minLowercase + o.minNumber + o.minSpecial;\n        if (o.length < minLength) {\n            o.length = minLength;\n        }\n\n        const positions: string[] = [];\n        if (o.lowercase && o.minLowercase > 0) {\n            for (let i = 0; i < o.minLowercase; i++) {\n                positions.push('l');\n            }\n        }\n        if (o.uppercase && o.minUppercase > 0) {\n            for (let i = 0; i < o.minUppercase; i++) {\n                positions.push('u');\n            }\n        }\n        if (o.number && o.minNumber > 0) {\n            for (let i = 0; i < o.minNumber; i++) {\n                positions.push('n');\n            }\n        }\n        if (o.special && o.minSpecial > 0) {\n            for (let i = 0; i < o.minSpecial; i++) {\n                positions.push('s');\n            }\n        }\n        while (positions.length < o.length) {\n            positions.push('a');\n        }\n\n        // shuffle\n        await this.shuffleArray(positions);\n\n        // build out the char sets\n        let allCharSet = '';\n\n        let lowercaseCharSet = 'abcdefghijkmnopqrstuvwxyz';\n        if (o.ambiguous) {\n            lowercaseCharSet += 'l';\n        }\n        if (o.lowercase) {\n            allCharSet += lowercaseCharSet;\n        }\n\n        let uppercaseCharSet = 'ABCDEFGHJKLMNPQRSTUVWXYZ';\n        if (o.ambiguous) {\n            uppercaseCharSet += 'IO';\n        }\n        if (o.uppercase) {\n            allCharSet += uppercaseCharSet;\n        }\n\n        let numberCharSet = '23456789';\n        if (o.ambiguous) {\n            numberCharSet += '01';\n        }\n        if (o.number) {\n            allCharSet += numberCharSet;\n        }\n\n        const specialCharSet = '!@#$%^&*';\n        if (o.special) {\n            allCharSet += specialCharSet;\n        }\n\n        let password = '';\n        for (let i = 0; i < o.length; i++) {\n            let positionChars: string;\n            switch (positions[i]) {\n                case 'l':\n                    positionChars = lowercaseCharSet;\n                    break;\n                case 'u':\n                    positionChars = uppercaseCharSet;\n                    break;\n                case 'n':\n                    positionChars = numberCharSet;\n                    break;\n                case 's':\n                    positionChars = specialCharSet;\n                    break;\n                case 'a':\n                    positionChars = allCharSet;\n                    break;\n                default:\n                    break;\n            }\n\n            const randomCharIndex = await this.cryptoService.randomNumber(0, positionChars.length - 1);\n            password += positionChars.charAt(randomCharIndex);\n        }\n\n        return password;\n    }\n\n    async generatePassphrase(options: any): Promise<string> {\n        const o = Object.assign({}, DefaultOptions, options);\n\n        if (o.numWords == null || o.numWords <= 2) {\n            o.numWords = DefaultOptions.numWords;\n        }\n        if (o.wordSeparator == null || o.wordSeparator.length === 0 || o.wordSeparator.length > 1) {\n            o.wordSeparator = ' ';\n        }\n        if (o.capitalize == null) {\n            o.capitalize = false;\n        }\n        if (o.includeNumber == null) {\n            o.includeNumber = false;\n        }\n\n        const listLength = EEFLongWordList.length - 1;\n        const wordList = new Array(o.numWords);\n        for (let i = 0; i < o.numWords; i++) {\n            const wordIndex = await this.cryptoService.randomNumber(0, listLength);\n            if (o.capitalize) {\n                wordList[i] = this.capitalize(EEFLongWordList[wordIndex]);\n            } else {\n                wordList[i] = EEFLongWordList[wordIndex];\n            }\n        }\n\n        if (o.includeNumber) {\n            await this.appendRandomNumberToRandomWord(wordList);\n        }\n        return wordList.join(o.wordSeparator);\n    }\n\n    async getOptions(): Promise<[any, PasswordGeneratorPolicyOptions]> {\n        if (this.optionsCache == null) {\n            const options = await this.storageService.get(Keys.options);\n            if (options == null) {\n                this.optionsCache = DefaultOptions;\n            } else {\n                this.optionsCache = Object.assign({}, DefaultOptions, options);\n            }\n        }\n        const enforcedOptions = await this.enforcePasswordGeneratorPoliciesOnOptions(this.optionsCache);\n        this.optionsCache = enforcedOptions[0];\n        return [this.optionsCache, enforcedOptions[1]];\n    }\n\n    async enforcePasswordGeneratorPoliciesOnOptions(options: any): Promise<[any, PasswordGeneratorPolicyOptions]> {\n        let enforcedPolicyOptions = await this.getPasswordGeneratorPolicyOptions();\n        if (enforcedPolicyOptions != null) {\n            if (options.length < enforcedPolicyOptions.minLength) {\n                options.length = enforcedPolicyOptions.minLength;\n            }\n\n            if (enforcedPolicyOptions.useUppercase) {\n                options.uppercase = true;\n            }\n\n            if (enforcedPolicyOptions.useLowercase) {\n                options.lowercase = true;\n            }\n\n            if (enforcedPolicyOptions.useNumbers) {\n                options.number = true;\n            }\n\n            if (options.minNumber < enforcedPolicyOptions.numberCount) {\n                options.minNumber = enforcedPolicyOptions.numberCount;\n            }\n\n            if (enforcedPolicyOptions.useSpecial) {\n                options.special = true;\n            }\n\n            if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n                options.minSpecial = enforcedPolicyOptions.specialCount;\n            }\n\n            // Must normalize these fields because the receiving call expects all options to pass the current rules\n            if (options.minSpecial + options.minNumber > options.length) {\n                options.minSpecial = options.length - options.minNumber;\n            }\n\n            if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n                options.numWords = enforcedPolicyOptions.minNumberWords;\n            }\n\n            if (enforcedPolicyOptions.capitalize) {\n                options.capitalize = true;\n            }\n\n            if (enforcedPolicyOptions.includeNumber) {\n                options.includeNumber = true;\n            }\n\n            // Force default type if password/passphrase selected via policy\n            if (enforcedPolicyOptions.defaultType === 'password' ||\n                enforcedPolicyOptions.defaultType === 'passphrase') {\n                options.type = enforcedPolicyOptions.defaultType;\n            }\n        } else { // UI layer expects an instantiated object to prevent more explicit null checks\n            enforcedPolicyOptions = new PasswordGeneratorPolicyOptions();\n        }\n        return [options, enforcedPolicyOptions];\n    }\n\n    async getPasswordGeneratorPolicyOptions(): Promise<PasswordGeneratorPolicyOptions> {\n        const policies: Policy[] = this.policyService == null ? null :\n            await this.policyService.getAll(PolicyType.PasswordGenerator);\n        let enforcedOptions: PasswordGeneratorPolicyOptions = null;\n\n        if (policies == null || policies.length === 0) {\n            return enforcedOptions;\n        }\n\n        policies.forEach(currentPolicy => {\n            if (!currentPolicy.enabled || currentPolicy.data == null) {\n                return;\n            }\n\n            if (enforcedOptions == null) {\n                enforcedOptions = new PasswordGeneratorPolicyOptions();\n            }\n\n            // Password wins in multi-org collisions\n            if (currentPolicy.data.defaultType != null && enforcedOptions.defaultType !== 'password') {\n                enforcedOptions.defaultType = currentPolicy.data.defaultType;\n            }\n\n            if (currentPolicy.data.minLength != null\n                && currentPolicy.data.minLength > enforcedOptions.minLength) {\n                enforcedOptions.minLength = currentPolicy.data.minLength;\n            }\n\n            if (currentPolicy.data.useUpper) {\n                enforcedOptions.useUppercase = true;\n            }\n\n            if (currentPolicy.data.useLower) {\n                enforcedOptions.useLowercase = true;\n            }\n\n            if (currentPolicy.data.useNumbers) {\n                enforcedOptions.useNumbers = true;\n            }\n\n            if (currentPolicy.data.minNumbers != null\n                && currentPolicy.data.minNumbers > enforcedOptions.numberCount) {\n                enforcedOptions.numberCount = currentPolicy.data.minNumbers;\n            }\n\n            if (currentPolicy.data.useSpecial) {\n                enforcedOptions.useSpecial = true;\n            }\n\n            if (currentPolicy.data.minSpecial != null\n                && currentPolicy.data.minSpecial > enforcedOptions.specialCount) {\n                enforcedOptions.specialCount = currentPolicy.data.minSpecial;\n            }\n\n            if (currentPolicy.data.minNumberWords != null\n                && currentPolicy.data.minNumberWords > enforcedOptions.minNumberWords) {\n                enforcedOptions.minNumberWords = currentPolicy.data.minNumberWords;\n            }\n\n            if (currentPolicy.data.capitalize) {\n                enforcedOptions.capitalize = true;\n            }\n\n            if (currentPolicy.data.includeNumber) {\n                enforcedOptions.includeNumber = true;\n            }\n        });\n\n        return enforcedOptions;\n    }\n\n    async saveOptions(options: any) {\n        await this.storageService.save(Keys.options, options);\n        this.optionsCache = options;\n    }\n\n    async getHistory(): Promise<GeneratedPasswordHistory[]> {\n        const hasKey = await this.cryptoService.hasKey();\n        if (!hasKey) {\n            return new Array<GeneratedPasswordHistory>();\n        }\n\n        if (!this.history) {\n            const encrypted = await this.storageService.get<GeneratedPasswordHistory[]>(Keys.history);\n            this.history = await this.decryptHistory(encrypted);\n        }\n\n        return this.history || new Array<GeneratedPasswordHistory>();\n    }\n\n    async addHistory(password: string): Promise<any> {\n        // Cannot add new history if no key is available\n        const hasKey = await this.cryptoService.hasKey();\n        if (!hasKey) {\n            return;\n        }\n\n        const currentHistory = await this.getHistory();\n\n        // Prevent duplicates\n        if (this.matchesPrevious(password, currentHistory)) {\n            return;\n        }\n\n        currentHistory.unshift(new GeneratedPasswordHistory(password, Date.now()));\n\n        // Remove old items.\n        if (currentHistory.length > MaxPasswordsInHistory) {\n            currentHistory.pop();\n        }\n\n        const newHistory = await this.encryptHistory(currentHistory);\n        return await this.storageService.save(Keys.history, newHistory);\n    }\n\n    async clear(): Promise<any> {\n        this.history = [];\n        return await this.storageService.remove(Keys.history);\n    }\n\n    passwordStrength(password: string, userInputs: string[] = null): zxcvbn.ZXCVBNResult {\n        if (password == null || password.length === 0) {\n            return null;\n        }\n        let globalUserInputs = ['bitwarden', 'bit', 'warden'];\n        if (userInputs != null && userInputs.length > 0) {\n            globalUserInputs = globalUserInputs.concat(userInputs);\n        }\n        // Use a hash set to get rid of any duplicate user inputs\n        const finalUserInputs = Array.from(new Set(globalUserInputs));\n        const result = zxcvbn(password, finalUserInputs);\n        return result;\n    }\n\n    normalizeOptions(options: any, enforcedPolicyOptions: PasswordGeneratorPolicyOptions) {\n        options.minLowercase = 0;\n        options.minUppercase = 0;\n\n        if (!options.length || options.length < 5) {\n            options.length = 5;\n        } else if (options.length > 128) {\n            options.length = 128;\n        }\n\n        if (options.length < enforcedPolicyOptions.minLength) {\n            options.length = enforcedPolicyOptions.minLength;\n        }\n\n        if (!options.minNumber) {\n            options.minNumber = 0;\n        } else if (options.minNumber > options.length) {\n            options.minNumber = options.length;\n        } else if (options.minNumber > 9) {\n            options.minNumber = 9;\n        }\n\n        if (options.minNumber < enforcedPolicyOptions.numberCount) {\n            options.minNumber = enforcedPolicyOptions.numberCount;\n        }\n\n        if (!options.minSpecial) {\n            options.minSpecial = 0;\n        } else if (options.minSpecial > options.length) {\n            options.minSpecial = options.length;\n        } else if (options.minSpecial > 9) {\n            options.minSpecial = 9;\n        }\n\n        if (options.minSpecial < enforcedPolicyOptions.specialCount) {\n            options.minSpecial = enforcedPolicyOptions.specialCount;\n        }\n\n        if (options.minSpecial + options.minNumber > options.length) {\n            options.minSpecial = options.length - options.minNumber;\n        }\n\n        if (options.numWords == null || options.length < 3) {\n            options.numWords = 3;\n        } else if (options.numWords > 20) {\n            options.numWords = 20;\n        }\n\n        if (options.numWords < enforcedPolicyOptions.minNumberWords) {\n            options.numWords = enforcedPolicyOptions.minNumberWords;\n        }\n\n        if (options.wordSeparator != null && options.wordSeparator.length > 1) {\n            options.wordSeparator = options.wordSeparator[0];\n        }\n\n        this.sanitizePasswordLength(options, false);\n    }\n\n    private capitalize(str: string) {\n        return str.charAt(0).toUpperCase() + str.slice(1);\n    }\n\n    private async appendRandomNumberToRandomWord(wordList: string[]) {\n        if (wordList == null || wordList.length <= 0) {\n            return;\n        }\n        const index = await this.cryptoService.randomNumber(0, wordList.length - 1);\n        const num = await this.cryptoService.randomNumber(0, 9);\n        wordList[index] = wordList[index] + num;\n    }\n\n    private async encryptHistory(history: GeneratedPasswordHistory[]): Promise<GeneratedPasswordHistory[]> {\n        if (history == null || history.length === 0) {\n            return Promise.resolve([]);\n        }\n\n        const promises = history.map(async item => {\n            const encrypted = await this.cryptoService.encrypt(item.password);\n            return new GeneratedPasswordHistory(encrypted.encryptedString, item.date);\n        });\n\n        return await Promise.all(promises);\n    }\n\n    private async decryptHistory(history: GeneratedPasswordHistory[]): Promise<GeneratedPasswordHistory[]> {\n        if (history == null || history.length === 0) {\n            return Promise.resolve([]);\n        }\n\n        const promises = history.map(async item => {\n            const decrypted = await this.cryptoService.decryptToUtf8(new EncString(item.password));\n            return new GeneratedPasswordHistory(decrypted, item.date);\n        });\n\n        return await Promise.all(promises);\n    }\n\n    private matchesPrevious(password: string, history: GeneratedPasswordHistory[]): boolean {\n        if (history == null || history.length === 0) {\n            return false;\n        }\n\n        return history[history.length - 1].password === password;\n    }\n\n    // ref: https://stackoverflow.com/a/12646864/1090359\n    private async shuffleArray(array: string[]) {\n        for (let i = array.length - 1; i > 0; i--) {\n            const j = await this.cryptoService.randomNumber(0, i);\n            [array[i], array[j]] = [array[j], array[i]];\n        }\n    }\n\n    private sanitizePasswordLength(options: any, forGeneration: boolean) {\n        let minUppercaseCalc = 0;\n        let minLowercaseCalc = 0;\n        let minNumberCalc: number = options.minNumber;\n        let minSpecialCalc: number = options.minSpecial;\n\n        if (options.uppercase && options.minUppercase <= 0) {\n            minUppercaseCalc = 1;\n        } else if (!options.uppercase) {\n            minUppercaseCalc = 0;\n        }\n\n        if (options.lowercase && options.minLowercase <= 0) {\n            minLowercaseCalc = 1;\n        } else if (!options.lowercase) {\n            minLowercaseCalc = 0;\n        }\n\n        if (options.number && options.minNumber <= 0) {\n            minNumberCalc = 1;\n        } else if (!options.number) {\n            minNumberCalc = 0;\n        }\n\n        if (options.special && options.minSpecial <= 0) {\n            minSpecialCalc = 1;\n        } else if (!options.special) {\n            minSpecialCalc = 0;\n        }\n\n        // This should never happen but is a final safety net\n        if (!options.length || options.length < 1) {\n            options.length = 10;\n        }\n\n        const minLength: number = minUppercaseCalc + minLowercaseCalc + minNumberCalc + minSpecialCalc;\n        // Normalize and Generation both require this modification\n        if (options.length < minLength) {\n            options.length = minLength;\n        }\n\n        // Apply other changes if the options object passed in is for generation\n        if (forGeneration) {\n            options.minUppercase = minUppercaseCalc;\n            options.minLowercase = minLowercaseCalc;\n            options.minNumber = minNumberCalc;\n            options.minSpecial = minSpecialCalc;\n        }\n    }\n}\n","export class GeneratedPasswordHistory {\n    password: string;\n    date: number;\n\n    constructor(password: string, date: number) {\n        this.password = password;\n        this.date = date;\n    }\n}\n","import Domain from './domainBase';\n\nexport class PasswordGeneratorPolicyOptions extends Domain {\n    defaultType: string = '';\n    minLength: number = 0;\n    useUppercase: boolean = false;\n    useLowercase: boolean = false;\n    useNumbers: boolean = false;\n    numberCount: number = 0;\n    useSpecial: boolean = false;\n    specialCount: number = 0;\n    minNumberWords: number = 0;\n    capitalize: boolean = false;\n    includeNumber: boolean = false;\n\n    inEffect() {\n        return this.defaultType !== '' ||\n            this.minLength > 0 ||\n            this.numberCount > 0 ||\n            this.specialCount > 0 ||\n            this.useUppercase ||\n            this.useLowercase ||\n            this.useNumbers ||\n            this.useSpecial ||\n            this.minNumberWords > 0 ||\n            this.capitalize ||\n            this.includeNumber;\n    }\n}\n","import { PolicyService as PolicyServiceAbstraction } from '../abstractions/policy.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { PolicyData } from '../models/data/policyData';\n\nimport { MasterPasswordPolicyOptions } from '../models/domain/masterPasswordPolicyOptions';\nimport { Organization } from '../models/domain/organization';\nimport { Policy } from '../models/domain/policy';\nimport { ResetPasswordPolicyOptions } from '../models/domain/resetPasswordPolicyOptions';\n\nimport { OrganizationUserStatusType } from '../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../enums/organizationUserType';\nimport { PolicyType } from '../enums/policyType';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { ListResponse } from '../models/response/listResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\n\nconst Keys = {\n    policiesPrefix: 'policies_',\n};\n\nexport class PolicyService implements PolicyServiceAbstraction {\n    policyCache: Policy[];\n\n    constructor(private userService: UserService, private storageService: StorageService,\n        private apiService: ApiService) {\n    }\n\n    clearCache(): void {\n        this.policyCache = null;\n    }\n\n    async getAll(type?: PolicyType): Promise<Policy[]> {\n        if (this.policyCache == null) {\n            const userId = await this.userService.getUserId();\n            const policies = await this.storageService.get<{ [id: string]: PolicyData; }>(\n                Keys.policiesPrefix + userId);\n            const response: Policy[] = [];\n            for (const id in policies) {\n                if (policies.hasOwnProperty(id)) {\n                    response.push(new Policy(policies[id]));\n                }\n            }\n            this.policyCache = response;\n        }\n        if (type != null) {\n            return this.policyCache.filter(p => p.type === type);\n        } else {\n            return this.policyCache;\n        }\n    }\n\n    async getPolicyForOrganization(policyType: PolicyType, organizationId: string): Promise<Policy> {\n        const org = await this.userService.getOrganization(organizationId);\n        if (org?.isProviderUser) {\n            const orgPolicies = await this.apiService.getPolicies(organizationId);\n            const policy = orgPolicies.data.find(p => p.organizationId === organizationId);\n\n            if (policy == null) {\n                return null;\n            }\n\n            return new Policy(new PolicyData(policy));\n        }\n\n        const policies = await this.getAll(policyType);\n        return policies.find(p => p.organizationId === organizationId);\n    }\n\n    async replace(policies: { [id: string]: PolicyData; }): Promise<any> {\n        const userId = await this.userService.getUserId();\n        await this.storageService.save(Keys.policiesPrefix + userId, policies);\n        this.policyCache = null;\n    }\n\n    async clear(userId: string): Promise<any> {\n        await this.storageService.remove(Keys.policiesPrefix + userId);\n        this.policyCache = null;\n    }\n\n    async getMasterPasswordPolicyOptions(policies?: Policy[]): Promise<MasterPasswordPolicyOptions> {\n        let enforcedOptions: MasterPasswordPolicyOptions = null;\n\n        if (policies == null) {\n            policies = await this.getAll(PolicyType.MasterPassword);\n        } else {\n            policies = policies.filter(p => p.type === PolicyType.MasterPassword);\n        }\n\n        if (policies == null || policies.length === 0) {\n            return enforcedOptions;\n        }\n\n        policies.forEach(currentPolicy => {\n            if (!currentPolicy.enabled || currentPolicy.data == null) {\n                return;\n            }\n\n            if (enforcedOptions == null) {\n                enforcedOptions = new MasterPasswordPolicyOptions();\n            }\n\n            if (currentPolicy.data.minComplexity != null\n                && currentPolicy.data.minComplexity > enforcedOptions.minComplexity) {\n                enforcedOptions.minComplexity = currentPolicy.data.minComplexity;\n            }\n\n            if (currentPolicy.data.minLength != null\n                && currentPolicy.data.minLength > enforcedOptions.minLength) {\n                enforcedOptions.minLength = currentPolicy.data.minLength;\n            }\n\n            if (currentPolicy.data.requireUpper) {\n                enforcedOptions.requireUpper = true;\n            }\n\n            if (currentPolicy.data.requireLower) {\n                enforcedOptions.requireLower = true;\n            }\n\n            if (currentPolicy.data.requireNumbers) {\n                enforcedOptions.requireNumbers = true;\n            }\n\n            if (currentPolicy.data.requireSpecial) {\n                enforcedOptions.requireSpecial = true;\n            }\n        });\n\n        return enforcedOptions;\n    }\n\n    evaluateMasterPassword(passwordStrength: number, newPassword: string,\n        enforcedPolicyOptions: MasterPasswordPolicyOptions): boolean {\n        if (enforcedPolicyOptions == null) {\n            return true;\n        }\n\n        if (enforcedPolicyOptions.minComplexity > 0 && enforcedPolicyOptions.minComplexity > passwordStrength) {\n            return false;\n        }\n\n        if (enforcedPolicyOptions.minLength > 0 && enforcedPolicyOptions.minLength > newPassword.length) {\n            return false;\n        }\n\n        if (enforcedPolicyOptions.requireUpper && newPassword.toLocaleLowerCase() === newPassword) {\n            return false;\n        }\n\n        if (enforcedPolicyOptions.requireLower && newPassword.toLocaleUpperCase() === newPassword) {\n            return false;\n        }\n\n        if (enforcedPolicyOptions.requireNumbers && !(/[0-9]/.test(newPassword))) {\n            return false;\n        }\n\n        if (enforcedPolicyOptions.requireSpecial && !(/[!@#$%\\^&*]/g.test(newPassword))) {\n            return false;\n        }\n\n        return true;\n    }\n\n    getResetPasswordPolicyOptions(policies: Policy[], orgId: string): [ResetPasswordPolicyOptions, boolean] {\n        const resetPasswordPolicyOptions = new ResetPasswordPolicyOptions();\n\n        if (policies == null || orgId == null) {\n            return [resetPasswordPolicyOptions, false];\n        }\n\n        const policy = policies.find(p => p.organizationId === orgId && p.type === PolicyType.ResetPassword && p.enabled);\n        resetPasswordPolicyOptions.autoEnrollEnabled = policy?.data?.autoEnrollEnabled ?? false;\n\n        return [resetPasswordPolicyOptions, policy?.enabled ?? false];\n    }\n\n    mapPoliciesFromToken(policiesResponse: ListResponse<PolicyResponse>): Policy[] {\n        if (policiesResponse == null || policiesResponse.data == null) {\n            return null;\n        }\n\n        const policiesData = policiesResponse.data.map(p => new PolicyData(p));\n        return policiesData.map(p => new Policy(p));\n    }\n\n    async policyAppliesToUser(policyType: PolicyType, policyFilter?: (policy: Policy) => boolean) {\n        const policies = await this.getAll(policyType);\n        const organizations = await this.userService.getAllOrganizations();\n        let filteredPolicies;\n\n        if (policyFilter != null) {\n            filteredPolicies = policies.filter(p => p.enabled && policyFilter(p));\n        }\n        else {\n            filteredPolicies = policies.filter(p => p.enabled);\n        }\n\n        const policySet = new Set(filteredPolicies.map(p => p.organizationId));\n\n        return organizations.some(o =>\n            o.enabled &&\n            o.status >= OrganizationUserStatusType.Accepted &&\n            o.usePolicies &&\n            !this.isExcemptFromPolicies(o, policyType) &&\n            policySet.has(o.id));\n    }\n\n    private isExcemptFromPolicies(organization: Organization, policyType: PolicyType) {\n        if (policyType === PolicyType.MaximumVaultTimeout) {\n            return organization.type === OrganizationUserType.Owner;\n        }\n\n        return organization.isExemptFromPolicies;\n    }\n}\n","import Domain from './domainBase';\n\nexport class ResetPasswordPolicyOptions extends Domain {\n    autoEnrollEnabled: boolean = false;\n}\n","import * as lunr from 'lunr';\n\nimport { CipherView } from '../models/view/cipherView';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { LogService } from '../abstractions/log.service';\nimport { SearchService as SearchServiceAbstraction } from '../abstractions/search.service';\n\nimport { CipherType } from '../enums/cipherType';\nimport { FieldType } from '../enums/fieldType';\nimport { UriMatchType } from '../enums/uriMatchType';\nimport { SendView } from '../models/view/sendView';\n\nexport class SearchService implements SearchServiceAbstraction {\n    indexedEntityId?: string = null;\n    private indexing = false;\n    private index: lunr.Index = null;\n    private searchableMinLength = 2;\n\n    constructor(private cipherService: CipherService, private logService: LogService,\n        private i18nService: I18nService) {\n        if (['zh-CN', 'zh-TW'].indexOf(i18nService.locale) !== -1) {\n            this.searchableMinLength = 1;\n        }\n    }\n\n    clearIndex(): void {\n        this.indexedEntityId = null;\n        this.index = null;\n    }\n\n    isSearchable(query: string): boolean {\n        const notSearchable = query == null || (this.index == null && query.length < this.searchableMinLength) ||\n            (this.index != null && query.length < this.searchableMinLength && query.indexOf('>') !== 0);\n        return !notSearchable;\n    }\n\n    async indexCiphers(indexedEntityId?: string, ciphers?: CipherView[]): Promise<void> {\n        if (this.indexing) {\n            return;\n        }\n\n        this.logService.time('search indexing');\n        this.indexing = true;\n        this.indexedEntityId = indexedEntityId;\n        this.index = null;\n        const builder = new lunr.Builder();\n        builder.ref('id');\n        builder.field('shortid', { boost: 100, extractor: (c: CipherView) => c.id.substr(0, 8) });\n        builder.field('name', { boost: 10 });\n        builder.field('subtitle', {\n            boost: 5,\n            extractor: (c: CipherView) => {\n                if (c.subTitle != null && c.type === CipherType.Card) {\n                    return c.subTitle.replace(/\\*/g, '');\n                }\n                return c.subTitle;\n            },\n        });\n        builder.field('notes');\n        builder.field('login.username', {\n            extractor: (c: CipherView) => c.type === CipherType.Login && c.login != null ? c.login.username : null,\n        });\n        builder.field('login.uris', { boost: 2, extractor: (c: CipherView) => this.uriExtractor(c) });\n        builder.field('fields', { extractor: (c: CipherView) => this.fieldExtractor(c, false) });\n        builder.field('fields_joined', { extractor: (c: CipherView) => this.fieldExtractor(c, true) });\n        builder.field('attachments', { extractor: (c: CipherView) => this.attachmentExtractor(c, false) });\n        builder.field('attachments_joined',\n            { extractor: (c: CipherView) => this.attachmentExtractor(c, true) });\n        builder.field('organizationid', { extractor: (c: CipherView) => c.organizationId });\n        ciphers = ciphers || await this.cipherService.getAllDecrypted();\n        ciphers.forEach(c => builder.add(c));\n        this.index = builder.build();\n\n        this.indexing = false;\n\n        this.logService.timeEnd('search indexing');\n    }\n\n    async searchCiphers(query: string,\n        filter: (((cipher: CipherView) => boolean) | (((cipher: CipherView) => boolean)[])) = null,\n        ciphers: CipherView[] = null):\n        Promise<CipherView[]> {\n        const results: CipherView[] = [];\n        if (query != null) {\n            query = query.trim().toLowerCase();\n        }\n        if (query === '') {\n            query = null;\n        }\n\n        if (ciphers == null) {\n            ciphers = await this.cipherService.getAllDecrypted();\n        }\n\n        if (filter != null && Array.isArray(filter) && filter.length > 0) {\n            ciphers = ciphers.filter(c => filter.every(f => f == null || f(c)));\n        } else if (filter != null) {\n            ciphers = ciphers.filter(filter as (cipher: CipherView) => boolean);\n        }\n\n        if (!this.isSearchable(query)) {\n            return ciphers;\n        }\n\n        if (this.indexing) {\n            await new Promise(r => setTimeout(r, 250));\n            if (this.indexing) {\n                await new Promise(r => setTimeout(r, 500));\n            }\n        }\n\n        const index = this.getIndexForSearch();\n        if (index == null) {\n            // Fall back to basic search if index is not available\n            return this.searchCiphersBasic(ciphers, query);\n        }\n\n        const ciphersMap = new Map<string, CipherView>();\n        ciphers.forEach(c => ciphersMap.set(c.id, c));\n\n        let searchResults: lunr.Index.Result[] = null;\n        const isQueryString = query != null && query.length > 1 && query.indexOf('>') === 0;\n        if (isQueryString) {\n            try {\n                searchResults = index.search(query.substr(1).trim());\n            } catch (e) {\n                this.logService.error(e);\n            }\n        } else {\n            // tslint:disable-next-line\n            const soWild = lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING;\n            searchResults = index.query(q => {\n                lunr.tokenizer(query).forEach(token => {\n                    const t = token.toString();\n                    q.term(t, { fields: ['name'], wildcard: soWild });\n                    q.term(t, { fields: ['subtitle'], wildcard: soWild });\n                    q.term(t, { fields: ['login.uris'], wildcard: soWild });\n                    q.term(t, {});\n                });\n            });\n        }\n\n        if (searchResults != null) {\n            searchResults.forEach(r => {\n                if (ciphersMap.has(r.ref)) {\n                    results.push(ciphersMap.get(r.ref));\n                }\n            });\n        }\n        return results;\n    }\n\n    searchCiphersBasic(ciphers: CipherView[], query: string, deleted: boolean = false) {\n        query = query.trim().toLowerCase();\n        return ciphers.filter(c => {\n            if (deleted !== c.isDeleted) {\n                return false;\n            }\n            if (c.name != null && c.name.toLowerCase().indexOf(query) > -1) {\n                return true;\n            }\n            if (query.length >= 8 && c.id.startsWith(query)) {\n                return true;\n            }\n            if (c.subTitle != null && c.subTitle.toLowerCase().indexOf(query) > -1) {\n                return true;\n            }\n            if (c.login && c.login.uri != null && c.login.uri.toLowerCase().indexOf(query) > -1) {\n                return true;\n            }\n            return false;\n        });\n    }\n\n    searchSends(sends: SendView[], query: string) {\n        query = query.trim().toLocaleLowerCase();\n\n        return sends.filter(s => {\n            if (s.name != null && s.name.toLowerCase().indexOf(query) > -1) {\n                return true;\n            }\n            if (query.length >= 8 && (s.id.startsWith(query) || s.accessId.toLocaleLowerCase().startsWith(query) || (s.file?.id != null && s.file.id.startsWith(query)))) {\n                return true;\n            }\n            if (s.notes != null && s.notes.toLowerCase().indexOf(query) > -1) {\n                return true;\n            }\n            if (s.text?.text != null && s.text.text.toLowerCase().indexOf(query) > -1) {\n                return true;\n            }\n            if (s.file?.fileName != null && s.file.fileName.toLowerCase().indexOf(query) > -1) {\n                return true;\n            }\n        });\n    }\n\n    getIndexForSearch(): lunr.Index {\n        return this.index;\n    }\n\n    private fieldExtractor(c: CipherView, joined: boolean) {\n        if (!c.hasFields) {\n            return null;\n        }\n        let fields: string[] = [];\n        c.fields.forEach(f => {\n            if (f.name != null) {\n                fields.push(f.name);\n            }\n            if (f.type === FieldType.Text && f.value != null) {\n                fields.push(f.value);\n            }\n        });\n        fields = fields.filter(f => f.trim() !== '');\n        if (fields.length === 0) {\n            return null;\n        }\n        return joined ? fields.join(' ') : fields;\n    }\n\n    private attachmentExtractor(c: CipherView, joined: boolean) {\n        if (!c.hasAttachments) {\n            return null;\n        }\n        let attachments: string[] = [];\n        c.attachments.forEach(a => {\n            if (a != null && a.fileName != null) {\n                if (joined && a.fileName.indexOf('.') > -1) {\n                    attachments.push(a.fileName.substr(0, a.fileName.lastIndexOf('.')));\n                } else {\n                    attachments.push(a.fileName);\n                }\n            }\n        });\n        attachments = attachments.filter(f => f.trim() !== '');\n        if (attachments.length === 0) {\n            return null;\n        }\n        return joined ? attachments.join(' ') : attachments;\n    }\n\n    private uriExtractor(c: CipherView) {\n        if (c.type !== CipherType.Login || c.login == null || !c.login.hasUris) {\n            return null;\n        }\n        const uris: string[] = [];\n        c.login.uris.forEach(u => {\n            if (u.uri == null || u.uri === '') {\n                return;\n            }\n            if (u.hostname != null) {\n                uris.push(u.hostname);\n                return;\n            }\n            let uri = u.uri;\n            if (u.match !== UriMatchType.RegularExpression) {\n                const protocolIndex = uri.indexOf('://');\n                if (protocolIndex > -1) {\n                    uri = uri.substr(protocolIndex + 3);\n                }\n                const queryIndex = uri.search(/\\?|&|#/);\n                if (queryIndex > -1) {\n                    uri = uri.substring(0, queryIndex);\n                }\n            }\n            uris.push(uri);\n        });\n        return uris.length > 0 ? uris : null;\n    }\n}\n","import { SendData } from '../models/data/sendData';\n\nimport { SendRequest } from '../models/request/sendRequest';\n\nimport { ErrorResponse } from '../models/response/errorResponse';\nimport { SendResponse } from '../models/response/sendResponse';\n\nimport { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { Send } from '../models/domain/send';\nimport { SendFile } from '../models/domain/sendFile';\nimport { SendText } from '../models/domain/sendText';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nimport { FileUploadType } from '../enums/fileUploadType';\nimport { SendType } from '../enums/sendType';\n\nimport { SendView } from '../models/view/sendView';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { FileUploadService } from '../abstractions/fileUpload.service';\nimport { I18nService } from '../abstractions/i18n.service';\nimport { SendService as SendServiceAbstraction } from '../abstractions/send.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n    sendsPrefix: 'sends_',\n};\n\nexport class SendService implements SendServiceAbstraction {\n    decryptedSendCache: SendView[];\n\n    constructor(private cryptoService: CryptoService, private userService: UserService,\n        private apiService: ApiService, private fileUploadService: FileUploadService,\n        private storageService: StorageService, private i18nService: I18nService,\n        private cryptoFunctionService: CryptoFunctionService) { }\n\n    clearCache(): void {\n        this.decryptedSendCache = null;\n    }\n\n    async encrypt(model: SendView, file: File | ArrayBuffer, password: string,\n        key?: SymmetricCryptoKey): Promise<[Send, EncArrayBuffer]> {\n        let fileData: EncArrayBuffer = null;\n        const send = new Send();\n        send.id = model.id;\n        send.type = model.type;\n        send.disabled = model.disabled;\n        send.hideEmail = model.hideEmail;\n        send.maxAccessCount = model.maxAccessCount;\n        if (model.key == null) {\n            model.key = await this.cryptoFunctionService.randomBytes(16);\n            model.cryptoKey = await this.cryptoService.makeSendKey(model.key);\n        }\n        if (password != null) {\n            const passwordHash = await this.cryptoFunctionService.pbkdf2(password, model.key, 'sha256', 100000);\n            send.password = Utils.fromBufferToB64(passwordHash);\n        }\n        send.key = await this.cryptoService.encrypt(model.key, key);\n        send.name = await this.cryptoService.encrypt(model.name, model.cryptoKey);\n        send.notes = await this.cryptoService.encrypt(model.notes, model.cryptoKey);\n        if (send.type === SendType.Text) {\n            send.text = new SendText();\n            send.text.text = await this.cryptoService.encrypt(model.text.text, model.cryptoKey);\n            send.text.hidden = model.text.hidden;\n        } else if (send.type === SendType.File) {\n            send.file = new SendFile();\n            if (file != null) {\n                if (file instanceof ArrayBuffer) {\n                    const [name, data] = await this.encryptFileData(model.file.fileName, file, model.cryptoKey);\n                    send.file.fileName = name;\n                    fileData = data;\n                } else {\n                    fileData = await this.parseFile(send, file, model.cryptoKey);\n                }\n            }\n        }\n\n        return [send, fileData];\n    }\n\n    async get(id: string): Promise<Send> {\n        const userId = await this.userService.getUserId();\n        const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n            Keys.sendsPrefix + userId);\n        if (sends == null || !sends.hasOwnProperty(id)) {\n            return null;\n        }\n\n        return new Send(sends[id]);\n    }\n\n    async getAll(): Promise<Send[]> {\n        const userId = await this.userService.getUserId();\n        const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n            Keys.sendsPrefix + userId);\n        const response: Send[] = [];\n        for (const id in sends) {\n            if (sends.hasOwnProperty(id)) {\n                response.push(new Send(sends[id]));\n            }\n        }\n        return response;\n    }\n\n    async getAllDecrypted(): Promise<SendView[]> {\n        if (this.decryptedSendCache != null) {\n            return this.decryptedSendCache;\n        }\n\n        const hasKey = await this.cryptoService.hasKey();\n        if (!hasKey) {\n            throw new Error('No key.');\n        }\n\n        const decSends: SendView[] = [];\n        const promises: Promise<any>[] = [];\n        const sends = await this.getAll();\n        sends.forEach(send => {\n            promises.push(send.decrypt().then(f => decSends.push(f)));\n        });\n\n        await Promise.all(promises);\n        decSends.sort(Utils.getSortFunction(this.i18nService, 'name'));\n\n        this.decryptedSendCache = decSends;\n        return this.decryptedSendCache;\n    }\n\n    async saveWithServer(sendData: [Send, EncArrayBuffer]): Promise<any> {\n        const request = new SendRequest(sendData[0], sendData[1]?.buffer.byteLength);\n        let response: SendResponse;\n        if (sendData[0].id == null) {\n            if (sendData[0].type === SendType.Text) {\n                response = await this.apiService.postSend(request);\n            } else {\n                try {\n                    const uploadDataResponse = await this.apiService.postFileTypeSend(request);\n                    response = uploadDataResponse.sendResponse;\n\n                    await this.fileUploadService.uploadSendFile(uploadDataResponse, sendData[0].file.fileName, sendData[1]);\n                } catch (e) {\n                    if (e instanceof ErrorResponse && (e as ErrorResponse).statusCode === 404) {\n                        response = await this.legacyServerSendFileUpload(sendData, request);\n                    } else if (e instanceof ErrorResponse) {\n                        throw new Error((e as ErrorResponse).getSingleMessage());\n                    } else {\n                        throw e;\n                    }\n                }\n            }\n            sendData[0].id = response.id;\n            sendData[0].accessId = response.accessId;\n        } else {\n            response = await this.apiService.putSend(sendData[0].id, request);\n        }\n\n        const userId = await this.userService.getUserId();\n        const data = new SendData(response, userId);\n        await this.upsert(data);\n    }\n\n    /**\n     * @deprecated Mar 25 2021: This method has been deprecated in favor of direct uploads.\n     * This method still exists for backward compatibility with old server versions.\n     */\n    async legacyServerSendFileUpload(sendData: [Send, EncArrayBuffer], request: SendRequest): Promise<SendResponse>\n    {\n        const fd = new FormData();\n        try {\n            const blob = new Blob([sendData[1].buffer], { type: 'application/octet-stream' });\n            fd.append('model', JSON.stringify(request));\n            fd.append('data', blob, sendData[0].file.fileName.encryptedString);\n        } catch (e) {\n            if (Utils.isNode && !Utils.isBrowser) {\n                fd.append('model', JSON.stringify(request));\n                fd.append('data', Buffer.from(sendData[1].buffer) as any, {\n                    filepath: sendData[0].file.fileName.encryptedString,\n                    contentType: 'application/octet-stream',\n                } as any);\n            } else {\n                throw e;\n            }\n        }\n        return await this.apiService.postSendFileLegacy(fd);\n    }\n\n    async upsert(send: SendData | SendData[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        let sends = await this.storageService.get<{ [id: string]: SendData; }>(\n            Keys.sendsPrefix + userId);\n        if (sends == null) {\n            sends = {};\n        }\n\n        if (send instanceof SendData) {\n            const s = send as SendData;\n            sends[s.id] = s;\n        } else {\n            (send as SendData[]).forEach(s => {\n                sends[s.id] = s;\n            });\n        }\n\n        await this.storageService.save(Keys.sendsPrefix + userId, sends);\n        this.decryptedSendCache = null;\n    }\n\n    async replace(sends: { [id: string]: SendData; }): Promise<any> {\n        const userId = await this.userService.getUserId();\n        await this.storageService.save(Keys.sendsPrefix + userId, sends);\n        this.decryptedSendCache = null;\n    }\n\n    async clear(userId: string): Promise<any> {\n        await this.storageService.remove(Keys.sendsPrefix + userId);\n        this.decryptedSendCache = null;\n    }\n\n    async delete(id: string | string[]): Promise<any> {\n        const userId = await this.userService.getUserId();\n        const sends = await this.storageService.get<{ [id: string]: SendData; }>(\n            Keys.sendsPrefix + userId);\n        if (sends == null) {\n            return;\n        }\n\n        if (typeof id === 'string') {\n            if (sends[id] == null) {\n                return;\n            }\n            delete sends[id];\n        } else {\n            (id as string[]).forEach(i => {\n                delete sends[i];\n            });\n        }\n\n        await this.storageService.save(Keys.sendsPrefix + userId, sends);\n        this.decryptedSendCache = null;\n    }\n\n    async deleteWithServer(id: string): Promise<any> {\n        await this.apiService.deleteSend(id);\n        await this.delete(id);\n    }\n\n    async removePasswordWithServer(id: string): Promise<any> {\n        const response = await this.apiService.putSendRemovePassword(id);\n        const userId = await this.userService.getUserId();\n        const data = new SendData(response, userId);\n        await this.upsert(data);\n    }\n\n    private parseFile(send: Send, file: File, key: SymmetricCryptoKey): Promise<EncArrayBuffer> {\n        return new Promise((resolve, reject) => {\n            const reader = new FileReader();\n            reader.readAsArrayBuffer(file);\n            reader.onload = async evt => {\n                try {\n                    const [name, data] = await this.encryptFileData(file.name, evt.target.result as ArrayBuffer, key);\n                    send.file.fileName = name;\n                    resolve(data);\n                } catch (e) {\n                    reject(e);\n                }\n            };\n            reader.onerror = evt => {\n                reject('Error reading file.');\n            };\n        });\n    }\n\n    private async encryptFileData(fileName: string, data: ArrayBuffer,\n        key: SymmetricCryptoKey): Promise<[EncString, EncArrayBuffer]> {\n        const encFileName = await this.cryptoService.encrypt(fileName, key);\n        const encFileData = await this.cryptoService.encryptToBytes(data, key);\n        return [encFileName, encFileData];\n    }\n}\n","import { SendFileApi } from '../api/sendFileApi';\n\nexport class SendFileData {\n    id: string;\n    fileName: string;\n    key: string;\n    size: string;\n    sizeName: string;\n\n    constructor(data?: SendFileApi) {\n        if (data == null) {\n            return;\n        }\n\n        this.id = data.id;\n        this.fileName = data.fileName;\n        this.key = data.key;\n        this.size = data.size;\n        this.sizeName = data.sizeName;\n    }\n}\n","import { SendTextApi } from '../api/sendTextApi';\n\nexport class SendTextData {\n    text: string;\n    hidden: boolean;\n\n    constructor(data?: SendTextApi) {\n        if (data == null) {\n            return;\n        }\n\n        this.text = data.text;\n        this.hidden = data.hidden;\n    }\n}\n","import { CryptoService } from '../../abstractions/crypto.service';\n\nimport { SendType } from '../../enums/sendType';\n\nimport { Utils } from '../../misc/utils';\n\nimport { SendData } from '../data/sendData';\n\nimport { SendView } from '../view/sendView';\n\nimport Domain from './domainBase';\nimport { EncString } from './encString';\nimport { SendFile } from './sendFile';\nimport { SendText } from './sendText';\n\nexport class Send extends Domain {\n    id: string;\n    accessId: string;\n    userId: string;\n    type: SendType;\n    name: EncString;\n    notes: EncString;\n    file: SendFile;\n    text: SendText;\n    key: EncString;\n    maxAccessCount?: number;\n    accessCount: number;\n    revisionDate: Date;\n    expirationDate: Date;\n    deletionDate: Date;\n    password: string;\n    disabled: boolean;\n    hideEmail: boolean;\n\n    constructor(obj?: SendData, alreadyEncrypted: boolean = false) {\n        super();\n        if (obj == null) {\n            return;\n        }\n\n        this.buildDomainModel(this, obj, {\n            id: null,\n            accessId: null,\n            userId: null,\n            name: null,\n            notes: null,\n            key: null,\n        }, alreadyEncrypted, ['id', 'accessId', 'userId']);\n\n        this.type = obj.type;\n        this.maxAccessCount = obj.maxAccessCount;\n        this.accessCount = obj.accessCount;\n        this.password = obj.password;\n        this.disabled = obj.disabled;\n        this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;\n        this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;\n        this.expirationDate = obj.expirationDate != null ? new Date(obj.expirationDate) : null;\n        this.hideEmail = obj.hideEmail;\n\n        switch (this.type) {\n            case SendType.Text:\n                this.text = new SendText(obj.text, alreadyEncrypted);\n                break;\n            case SendType.File:\n                this.file = new SendFile(obj.file, alreadyEncrypted);\n                break;\n            default:\n                break;\n        }\n    }\n\n    async decrypt(): Promise<SendView> {\n        const model = new SendView(this);\n\n        let cryptoService: CryptoService;\n        const containerService = (Utils.global as any).bitwardenContainerService;\n        if (containerService) {\n            cryptoService = containerService.getCryptoService();\n        } else {\n            throw new Error('global bitwardenContainerService not initialized.');\n        }\n\n        try {\n            model.key = await cryptoService.decryptToBytes(this.key, null);\n            model.cryptoKey = await cryptoService.makeSendKey(model.key);\n        } catch (e) {\n            // TODO: error?\n        }\n\n        await this.decryptObj(model, {\n            name: null,\n            notes: null,\n        }, null, model.cryptoKey);\n\n        switch (this.type) {\n            case SendType.File:\n                model.file = await this.file.decrypt(model.cryptoKey);\n                break;\n            case SendType.Text:\n                model.text = await this.text.decrypt(model.cryptoKey);\n                break;\n            default:\n                break;\n        }\n\n        return model;\n    }\n}\n","import { SettingsService as SettingsServiceAbstraction } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { UserService } from '../abstractions/user.service';\n\nconst Keys = {\n    settingsPrefix: 'settings_',\n    equivalentDomains: 'equivalentDomains',\n};\n\nexport class SettingsService implements SettingsServiceAbstraction {\n    private settingsCache: any;\n\n    constructor(private userService: UserService, private storageService: StorageService) {\n    }\n\n    clearCache(): void {\n        this.settingsCache = null;\n    }\n\n    getEquivalentDomains(): Promise<any> {\n        return this.getSettingsKey(Keys.equivalentDomains);\n    }\n\n    async setEquivalentDomains(equivalentDomains: string[][]): Promise<void> {\n        await this.setSettingsKey(Keys.equivalentDomains, equivalentDomains);\n    }\n\n    async clear(userId: string): Promise<void> {\n        await this.storageService.remove(Keys.settingsPrefix + userId);\n        this.clearCache();\n    }\n\n    // Helpers\n\n    private async getSettings(): Promise<any> {\n        if (this.settingsCache == null) {\n            const userId = await this.userService.getUserId();\n            this.settingsCache = this.storageService.get(Keys.settingsPrefix + userId);\n        }\n        return this.settingsCache;\n    }\n\n    private async getSettingsKey(key: string): Promise<any> {\n        const settings = await this.getSettings();\n        if (settings != null && settings[key]) {\n            return settings[key];\n        }\n        return null;\n    }\n\n    private async setSettingsKey(key: string, value: any): Promise<void> {\n        const userId = await this.userService.getUserId();\n        let settings = await this.getSettings();\n        if (!settings) {\n            settings = {};\n        }\n\n        settings[key] = value;\n        await this.storageService.save(Keys.settingsPrefix + userId, settings);\n        this.settingsCache = settings;\n    }\n}\n","import { StateService as StateServiceAbstraction } from '../abstractions/state.service';\n\nexport class StateService implements StateServiceAbstraction {\n    private state: any = {};\n\n    get<T>(key: string): Promise<T> {\n        if (this.state.hasOwnProperty(key)) {\n            return Promise.resolve(this.state[key]);\n        }\n        return Promise.resolve(null);\n    }\n\n    save(key: string, obj: any): Promise<any> {\n        this.state[key] = obj;\n        return Promise.resolve();\n    }\n\n    remove(key: string): Promise<any> {\n        delete this.state[key];\n        return Promise.resolve();\n    }\n\n    purge(): Promise<any> {\n        this.state = {};\n        return Promise.resolve();\n    }\n}\n","import { ApiService } from '../abstractions/api.service';\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { KeyConnectorService } from '../abstractions/keyConnector.service';\nimport { LogService } from '../abstractions/log.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { SendService } from '../abstractions/send.service';\nimport { SettingsService } from '../abstractions/settings.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { SyncService as SyncServiceAbstraction } from '../abstractions/sync.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\n\nimport { CipherData } from '../models/data/cipherData';\nimport { CollectionData } from '../models/data/collectionData';\nimport { FolderData } from '../models/data/folderData';\nimport { OrganizationData } from '../models/data/organizationData';\nimport { PolicyData } from '../models/data/policyData';\nimport { ProviderData } from '../models/data/providerData';\nimport { SendData } from '../models/data/sendData';\n\nimport { CipherResponse } from '../models/response/cipherResponse';\nimport { CollectionDetailsResponse } from '../models/response/collectionResponse';\nimport { DomainsResponse } from '../models/response/domainsResponse';\nimport { FolderResponse } from '../models/response/folderResponse';\nimport {\n    SyncCipherNotification,\n    SyncFolderNotification,\n    SyncSendNotification,\n} from '../models/response/notificationResponse';\nimport { PolicyResponse } from '../models/response/policyResponse';\nimport { ProfileResponse } from '../models/response/profileResponse';\nimport { SendResponse } from '../models/response/sendResponse';\n\nconst Keys = {\n    lastSyncPrefix: 'lastSync_',\n};\n\nexport class SyncService implements SyncServiceAbstraction {\n    syncInProgress: boolean = false;\n\n    constructor(private userService: UserService, private apiService: ApiService,\n        private settingsService: SettingsService, private folderService: FolderService,\n        private cipherService: CipherService, private cryptoService: CryptoService,\n        private collectionService: CollectionService, private storageService: StorageService,\n        private messagingService: MessagingService, private policyService: PolicyService,\n        private sendService: SendService, private logService: LogService,\n        private tokenService: TokenService, private keyConnectorService: KeyConnectorService,\n        private logoutCallback: (expired: boolean) => Promise<void>) {\n    }\n\n    async getLastSync(): Promise<Date> {\n        const userId = await this.userService.getUserId();\n        if (userId == null) {\n            return null;\n        }\n\n        const lastSync = await this.storageService.get<any>(Keys.lastSyncPrefix + userId);\n        if (lastSync) {\n            return new Date(lastSync);\n        }\n\n        return null;\n    }\n\n    async setLastSync(date: Date): Promise<any> {\n        const userId = await this.userService.getUserId();\n        if (userId == null) {\n            return;\n        }\n\n        await this.storageService.save(Keys.lastSyncPrefix + userId, date.toJSON());\n    }\n\n    async fullSync(forceSync: boolean, allowThrowOnError = false): Promise<boolean> {\n        this.syncStarted();\n        const isAuthenticated = await this.userService.isAuthenticated();\n        if (!isAuthenticated) {\n            return this.syncCompleted(false);\n        }\n\n        const now = new Date();\n        let needsSync = false;\n        try {\n            needsSync = await this.needsSyncing(forceSync);\n        } catch (e) {\n            if (allowThrowOnError) {\n                throw e;\n            }\n        }\n\n        if (!needsSync) {\n            await this.setLastSync(now);\n            return this.syncCompleted(false);\n        }\n\n        const userId = await this.userService.getUserId();\n        try {\n            await this.apiService.refreshIdentityToken();\n            const response = await this.apiService.getSync();\n\n            await this.syncProfile(response.profile);\n            await this.syncFolders(userId, response.folders);\n            await this.syncCollections(response.collections);\n            await this.syncCiphers(userId, response.ciphers);\n            await this.syncSends(userId, response.sends);\n            await this.syncSettings(userId, response.domains);\n            await this.syncPolicies(response.policies);\n\n            await this.setLastSync(now);\n            return this.syncCompleted(true);\n        } catch (e) {\n            if (allowThrowOnError) {\n                throw e;\n            } else {\n                return this.syncCompleted(false);\n            }\n        }\n    }\n\n    async syncUpsertFolder(notification: SyncFolderNotification, isEdit: boolean): Promise<boolean> {\n        this.syncStarted();\n        if (await this.userService.isAuthenticated()) {\n            try {\n                const localFolder = await this.folderService.get(notification.id);\n                if ((!isEdit && localFolder == null) ||\n                    (isEdit && localFolder != null && localFolder.revisionDate < notification.revisionDate)) {\n                    const remoteFolder = await this.apiService.getFolder(notification.id);\n                    if (remoteFolder != null) {\n                        const userId = await this.userService.getUserId();\n                        await this.folderService.upsert(new FolderData(remoteFolder, userId));\n                        this.messagingService.send('syncedUpsertedFolder', { folderId: notification.id });\n                        return this.syncCompleted(true);\n                    }\n                }\n            } catch (e) {\n                this.logService.error(e);\n            }\n        }\n        return this.syncCompleted(false);\n    }\n\n    async syncDeleteFolder(notification: SyncFolderNotification): Promise<boolean> {\n        this.syncStarted();\n        if (await this.userService.isAuthenticated()) {\n            await this.folderService.delete(notification.id);\n            this.messagingService.send('syncedDeletedFolder', { folderId: notification.id });\n            this.syncCompleted(true);\n            return true;\n        }\n        return this.syncCompleted(false);\n    }\n\n    async syncUpsertCipher(notification: SyncCipherNotification, isEdit: boolean): Promise<boolean> {\n        this.syncStarted();\n        if (await this.userService.isAuthenticated()) {\n            try {\n                let shouldUpdate = true;\n                const localCipher = await this.cipherService.get(notification.id);\n                if (localCipher != null && localCipher.revisionDate >= notification.revisionDate) {\n                    shouldUpdate = false;\n                }\n\n                let checkCollections = false;\n                if (shouldUpdate) {\n                    if (isEdit) {\n                        shouldUpdate = localCipher != null;\n                        checkCollections = true;\n                    } else {\n                        if (notification.collectionIds == null || notification.organizationId == null) {\n                            shouldUpdate = localCipher == null;\n                        } else {\n                            shouldUpdate = false;\n                            checkCollections = true;\n                        }\n                    }\n                }\n\n                if (!shouldUpdate && checkCollections && notification.organizationId != null &&\n                    notification.collectionIds != null && notification.collectionIds.length > 0) {\n                    const collections = await this.collectionService.getAll();\n                    if (collections != null) {\n                        for (let i = 0; i < collections.length; i++) {\n                            if (notification.collectionIds.indexOf(collections[i].id) > -1) {\n                                shouldUpdate = true;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (shouldUpdate) {\n                    const remoteCipher = await this.apiService.getCipher(notification.id);\n                    if (remoteCipher != null) {\n                        const userId = await this.userService.getUserId();\n                        await this.cipherService.upsert(new CipherData(remoteCipher, userId));\n                        this.messagingService.send('syncedUpsertedCipher', { cipherId: notification.id });\n                        return this.syncCompleted(true);\n                    }\n                }\n            } catch (e) {\n                if (e != null && e.statusCode === 404 && isEdit) {\n                    await this.cipherService.delete(notification.id);\n                    this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n                    return this.syncCompleted(true);\n                }\n            }\n        }\n        return this.syncCompleted(false);\n    }\n\n    async syncDeleteCipher(notification: SyncCipherNotification): Promise<boolean> {\n        this.syncStarted();\n        if (await this.userService.isAuthenticated()) {\n            await this.cipherService.delete(notification.id);\n            this.messagingService.send('syncedDeletedCipher', { cipherId: notification.id });\n            return this.syncCompleted(true);\n        }\n        return this.syncCompleted(false);\n    }\n\n    async syncUpsertSend(notification: SyncSendNotification, isEdit: boolean): Promise<boolean> {\n        this.syncStarted();\n        if (await this.userService.isAuthenticated()) {\n            try {\n                const localSend = await this.sendService.get(notification.id);\n                if ((!isEdit && localSend == null) ||\n                    (isEdit && localSend != null && localSend.revisionDate < notification.revisionDate)) {\n                    const remoteSend = await this.apiService.getSend(notification.id);\n                    if (remoteSend != null) {\n                        const userId = await this.userService.getUserId();\n                        await this.sendService.upsert(new SendData(remoteSend, userId));\n                        this.messagingService.send('syncedUpsertedSend', { sendId: notification.id });\n                        return this.syncCompleted(true);\n                    }\n                }\n            } catch (e) {\n                this.logService.error(e);\n            }\n        }\n        return this.syncCompleted(false);\n    }\n\n    async syncDeleteSend(notification: SyncSendNotification): Promise<boolean> {\n        this.syncStarted();\n        if (await this.userService.isAuthenticated()) {\n            await this.sendService.delete(notification.id);\n            this.messagingService.send('syncedDeletedSend', { sendId: notification.id });\n            this.syncCompleted(true);\n            return true;\n        }\n        return this.syncCompleted(false);\n    }\n\n    // Helpers\n\n    private syncStarted() {\n        this.syncInProgress = true;\n        this.messagingService.send('syncStarted');\n    }\n\n    private syncCompleted(successfully: boolean): boolean {\n        this.syncInProgress = false;\n        this.messagingService.send('syncCompleted', { successfully: successfully });\n        return successfully;\n    }\n\n    private async needsSyncing(forceSync: boolean) {\n        if (forceSync) {\n            return true;\n        }\n\n        const lastSync = await this.getLastSync();\n        if (lastSync == null || lastSync.getTime() === 0) {\n            return true;\n        }\n\n        const response = await this.apiService.getAccountRevisionDate();\n        if (new Date(response) <= lastSync) {\n            return false;\n        }\n        return true;\n    }\n\n    private async syncProfile(response: ProfileResponse) {\n        const stamp = await this.userService.getSecurityStamp();\n        if (stamp != null && stamp !== response.securityStamp) {\n            if (this.logoutCallback != null) {\n                await this.logoutCallback(true);\n            }\n\n            throw new Error('Stamp has changed');\n        }\n\n        await this.cryptoService.setEncKey(response.key);\n        await this.cryptoService.setEncPrivateKey(response.privateKey);\n        await this.cryptoService.setProviderKeys(response.providers);\n        await this.cryptoService.setOrgKeys(response.organizations, response.providerOrganizations);\n        await this.userService.setSecurityStamp(response.securityStamp);\n        await this.userService.setEmailVerified(response.emailVerified);\n        await this.userService.setForcePasswordReset(response.forcePasswordReset);\n        await this.keyConnectorService.setUsesKeyConnector(response.usesKeyConnector);\n\n        const organizations: { [id: string]: OrganizationData; } = {};\n        response.organizations.forEach(o => {\n            organizations[o.id] = new OrganizationData(o);\n        });\n\n        const providers: { [id: string]: ProviderData; } = {};\n        response.providers.forEach(p => {\n            providers[p.id] = new ProviderData(p);\n        });\n\n        response.providerOrganizations.forEach(o => {\n            if (organizations[o.id] == null) {\n                organizations[o.id] = new OrganizationData(o);\n                organizations[o.id].isProviderUser = true;\n            }\n        });\n\n        await Promise.all([\n            this.userService.replaceOrganizations(organizations),\n            this.userService.replaceProviders(providers),\n        ]);\n\n        if (await this.keyConnectorService.userNeedsMigration()) {\n            this.messagingService.send('convertAccountToKeyConnector');\n        } else {\n            this.keyConnectorService.removeConvertAccountRequired();\n        }\n    }\n\n    private async syncFolders(userId: string, response: FolderResponse[]) {\n        const folders: { [id: string]: FolderData; } = {};\n        response.forEach(f => {\n            folders[f.id] = new FolderData(f, userId);\n        });\n        return await this.folderService.replace(folders);\n    }\n\n    private async syncCollections(response: CollectionDetailsResponse[]) {\n        const collections: { [id: string]: CollectionData; } = {};\n        response.forEach(c => {\n            collections[c.id] = new CollectionData(c);\n        });\n        return await this.collectionService.replace(collections);\n    }\n\n    private async syncCiphers(userId: string, response: CipherResponse[]) {\n        const ciphers: { [id: string]: CipherData; } = {};\n        response.forEach(c => {\n            ciphers[c.id] = new CipherData(c, userId);\n        });\n        return await this.cipherService.replace(ciphers);\n    }\n\n    private async syncSends(userId: string, response: SendResponse[]) {\n        const sends: { [id: string]: SendData; } = {};\n        response.forEach(s => {\n            sends[s.id] = new SendData(s, userId);\n        });\n        return await this.sendService.replace(sends);\n    }\n\n    private async syncSettings(userId: string, response: DomainsResponse) {\n        let eqDomains: string[][] = [];\n        if (response != null && response.equivalentDomains != null) {\n            eqDomains = eqDomains.concat(response.equivalentDomains);\n        }\n\n        if (response != null && response.globalEquivalentDomains != null) {\n            response.globalEquivalentDomains.forEach(global => {\n                if (global.domains.length > 0) {\n                    eqDomains.push(global.domains);\n                }\n            });\n        }\n\n        return this.settingsService.setEquivalentDomains(eqDomains);\n    }\n\n    private async syncPolicies(response: PolicyResponse[]) {\n        const policies: { [id: string]: PolicyData; } = {};\n        if (response != null) {\n            response.forEach(p => {\n                policies[p.id] = new PolicyData(p);\n            });\n        }\n        return await this.policyService.replace(policies);\n    }\n}\n","import { ProfileOrganizationResponse } from '../response/profileOrganizationResponse';\n\nimport { OrganizationUserStatusType } from '../../enums/organizationUserStatusType';\nimport { OrganizationUserType } from '../../enums/organizationUserType';\nimport { ProductType } from '../../enums/productType';\n\nimport { PermissionsApi } from '../api/permissionsApi';\n\nexport class OrganizationData {\n    id: string;\n    name: string;\n    status: OrganizationUserStatusType;\n    type: OrganizationUserType;\n    enabled: boolean;\n    usePolicies: boolean;\n    useGroups: boolean;\n    useDirectory: boolean;\n    useEvents: boolean;\n    useTotp: boolean;\n    use2fa: boolean;\n    useApi: boolean;\n    useSso: boolean;\n    useKeyConnector: boolean;\n    useResetPassword: boolean;\n    selfHost: boolean;\n    usersGetPremium: boolean;\n    seats: number;\n    maxCollections: number;\n    maxStorageGb?: number;\n    ssoBound: boolean;\n    identifier: string;\n    permissions: PermissionsApi;\n    resetPasswordEnrolled: boolean;\n    userId: string;\n    hasPublicAndPrivateKeys: boolean;\n    providerId: string;\n    providerName: string;\n    isProviderUser: boolean;\n    familySponsorshipFriendlyName: string;\n    familySponsorshipAvailable: boolean;\n    planProductType: ProductType;\n    keyConnectorEnabled: boolean;\n    keyConnectorUrl: string;\n\n    constructor(response: ProfileOrganizationResponse) {\n        this.id = response.id;\n        this.name = response.name;\n        this.status = response.status;\n        this.type = response.type;\n        this.enabled = response.enabled;\n        this.usePolicies = response.usePolicies;\n        this.useGroups = response.useGroups;\n        this.useDirectory = response.useDirectory;\n        this.useEvents = response.useEvents;\n        this.useTotp = response.useTotp;\n        this.use2fa = response.use2fa;\n        this.useApi = response.useApi;\n        this.useSso = response.useSso;\n        this.useKeyConnector = response.useKeyConnector;\n        this.useResetPassword = response.useResetPassword;\n        this.selfHost = response.selfHost;\n        this.usersGetPremium = response.usersGetPremium;\n        this.seats = response.seats;\n        this.maxCollections = response.maxCollections;\n        this.maxStorageGb = response.maxStorageGb;\n        this.ssoBound = response.ssoBound;\n        this.identifier = response.identifier;\n        this.permissions = response.permissions;\n        this.resetPasswordEnrolled = response.resetPasswordEnrolled;\n        this.userId = response.userId;\n        this.hasPublicAndPrivateKeys = response.hasPublicAndPrivateKeys;\n        this.providerId = response.providerId;\n        this.providerName = response.providerName;\n        this.familySponsorshipFriendlyName = response.familySponsorshipFriendlyName;\n        this.familySponsorshipAvailable = response.familySponsorshipAvailable;\n        this.planProductType = response.planProductType;\n        this.keyConnectorEnabled = response.keyConnectorEnabled;\n        this.keyConnectorUrl = response.keyConnectorUrl;\n    }\n}\n","import { ProfileProviderResponse } from '../response/profileProviderResponse';\n\nimport { ProviderUserStatusType } from '../../enums/providerUserStatusType';\nimport { ProviderUserType } from '../../enums/providerUserType';\n\nexport class ProviderData {\n    id: string;\n    name: string;\n    status: ProviderUserStatusType;\n    type: ProviderUserType;\n    enabled: boolean;\n    userId: string;\n    useEvents: boolean;\n\n    constructor(response: ProfileProviderResponse) {\n        this.id = response.id;\n        this.name = response.name;\n        this.status = response.status;\n        this.type = response.type;\n        this.enabled = response.enabled;\n        this.userId = response.userId;\n        this.useEvents = response.useEvents;\n    }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService as TokenServiceAbstraction } from '../abstractions/token.service';\n\nimport { Utils } from '../misc/utils';\n\nconst Keys = {\n    accessToken: 'accessToken',\n    refreshToken: 'refreshToken',\n    twoFactorTokenPrefix: 'twoFactorToken_',\n    clientId: 'apikey_clientId',\n    clientSecret: 'apikey_clientSecret',\n};\n\nexport class TokenService implements TokenServiceAbstraction {\n    token: string;\n    decodedToken: any;\n    refreshToken: string;\n    clientId: string;\n    clientSecret: string;\n\n    constructor(private storageService: StorageService) {\n    }\n\n    async setTokens(accessToken: string, refreshToken: string, clientIdClientSecret: [string, string]): Promise<any> {\n        await this.setToken(accessToken);\n        await this.setRefreshToken(refreshToken);\n        if (clientIdClientSecret != null) {\n            await this.setClientId(clientIdClientSecret[0]);\n            await this.setClientSecret(clientIdClientSecret[1]);\n        }\n    }\n\n    async setClientId(clientId: string): Promise<any> {\n        this.clientId = clientId;\n        return this.storeTokenValue(Keys.clientId, clientId);\n    }\n\n    async getClientId(): Promise<string> {\n        if (this.clientId != null) {\n            return this.clientId;\n        }\n\n        this.clientId = await this.storageService.get<string>(Keys.clientId);\n        return this.clientId;\n    }\n\n    async setClientSecret(clientSecret: string): Promise<any> {\n        this.clientSecret = clientSecret;\n        return this.storeTokenValue(Keys.clientSecret, clientSecret);\n    }\n\n    async getClientSecret(): Promise<string> {\n        if (this.clientSecret != null) {\n            return this.clientSecret;\n        }\n\n        this.clientSecret = await this.storageService.get<string>(Keys.clientSecret);\n        return this.clientSecret;\n    }\n\n    async setToken(token: string): Promise<any> {\n        this.token = token;\n        this.decodedToken = null;\n        return this.storeTokenValue(Keys.accessToken, token);\n    }\n\n    async getToken(): Promise<string> {\n        if (this.token != null) {\n            return this.token;\n        }\n\n        this.token = await this.storageService.get<string>(Keys.accessToken);\n        return this.token;\n    }\n\n    async setRefreshToken(refreshToken: string): Promise<any> {\n        this.refreshToken = refreshToken;\n        return this.storeTokenValue(Keys.refreshToken, refreshToken);\n    }\n\n    async getRefreshToken(): Promise<string> {\n        if (this.refreshToken != null) {\n            return this.refreshToken;\n        }\n\n        this.refreshToken = await this.storageService.get<string>(Keys.refreshToken);\n        return this.refreshToken;\n    }\n\n    async toggleTokens(): Promise<any> {\n        const token = await this.getToken();\n        const refreshToken = await this.getRefreshToken();\n        const clientId = await this.getClientId();\n        const clientSecret = await this.getClientSecret();\n        const timeout = await this.storageService.get(ConstantsService.vaultTimeoutKey);\n        const action = await this.storageService.get(ConstantsService.vaultTimeoutActionKey);\n        if ((timeout != null || timeout === 0) && action === 'logOut') {\n            // if we have a vault timeout and the action is log out, reset tokens\n            await this.clearToken();\n            this.token = token;\n            this.refreshToken = refreshToken;\n            this.clientId = clientId;\n            this.clientSecret = clientSecret;\n            return;\n        }\n\n        await this.setToken(token);\n        await this.setRefreshToken(refreshToken);\n        await this.setClientId(clientId);\n        await this.setClientSecret(clientSecret);\n    }\n\n    setTwoFactorToken(token: string, email: string): Promise<any> {\n        return this.storageService.save(Keys.twoFactorTokenPrefix + email, token);\n    }\n\n    getTwoFactorToken(email: string): Promise<string> {\n        return this.storageService.get<string>(Keys.twoFactorTokenPrefix + email);\n    }\n\n    clearTwoFactorToken(email: string): Promise<any> {\n        return this.storageService.remove(Keys.twoFactorTokenPrefix + email);\n    }\n\n    async clearToken(): Promise<any> {\n        this.token = null;\n        this.decodedToken = null;\n        this.refreshToken = null;\n        this.clientId = null;\n        this.clientSecret = null;\n\n        await this.storageService.remove(Keys.accessToken);\n        await this.storageService.remove(Keys.refreshToken);\n        await this.storageService.remove(Keys.clientId);\n        await this.storageService.remove(Keys.clientSecret);\n    }\n\n    // jwthelper methods\n    // ref https://github.com/auth0/angular-jwt/blob/master/src/angularJwt/services/jwt.js\n\n    decodeToken(): any {\n        if (this.decodedToken) {\n            return this.decodedToken;\n        }\n\n        if (this.token == null) {\n            throw new Error('Token not found.');\n        }\n\n        const parts = this.token.split('.');\n        if (parts.length !== 3) {\n            throw new Error('JWT must have 3 parts');\n        }\n\n        const decoded = Utils.fromUrlB64ToUtf8(parts[1]);\n        if (decoded == null) {\n            throw new Error('Cannot decode the token');\n        }\n\n        this.decodedToken = JSON.parse(decoded);\n        return this.decodedToken;\n    }\n\n    getTokenExpirationDate(): Date {\n        const decoded = this.decodeToken();\n        if (typeof decoded.exp === 'undefined') {\n            return null;\n        }\n\n        const d = new Date(0); // The 0 here is the key, which sets the date to the epoch\n        d.setUTCSeconds(decoded.exp);\n        return d;\n    }\n\n    tokenSecondsRemaining(offsetSeconds: number = 0): number {\n        const d = this.getTokenExpirationDate();\n        if (d == null) {\n            return 0;\n        }\n\n        const msRemaining = d.valueOf() - (new Date().valueOf() + (offsetSeconds * 1000));\n        return Math.round(msRemaining / 1000);\n    }\n\n    tokenNeedsRefresh(minutes: number = 5): boolean {\n        const sRemaining = this.tokenSecondsRemaining();\n        return sRemaining < (60 * minutes);\n    }\n\n    getUserId(): string {\n        const decoded = this.decodeToken();\n        if (typeof decoded.sub === 'undefined') {\n            throw new Error('No user id found');\n        }\n\n        return decoded.sub as string;\n    }\n\n    getEmail(): string {\n        const decoded = this.decodeToken();\n        if (typeof decoded.email === 'undefined') {\n            throw new Error('No email found');\n        }\n\n        return decoded.email as string;\n    }\n\n    getEmailVerified(): boolean {\n        const decoded = this.decodeToken();\n        if (typeof decoded.email_verified === 'undefined') {\n            throw new Error('No email verification found');\n        }\n\n        return decoded.email_verified as boolean;\n    }\n\n    getName(): string {\n        const decoded = this.decodeToken();\n        if (typeof decoded.name === 'undefined') {\n            return null;\n        }\n\n        return decoded.name as string;\n    }\n\n    getPremium(): boolean {\n        const decoded = this.decodeToken();\n        if (typeof decoded.premium === 'undefined') {\n            return false;\n        }\n\n        return decoded.premium as boolean;\n    }\n\n    getIssuer(): string {\n        const decoded = this.decodeToken();\n        if (typeof decoded.iss === 'undefined') {\n            throw new Error('No issuer found');\n        }\n\n        return decoded.iss as string;\n    }\n\n    getIsExternal(): boolean {\n        const decoded = this.decodeToken();\n        if (!Array.isArray(decoded.amr)) {\n            throw new Error('No amr found');\n        }\n\n        return decoded.amr.includes('external');\n    }\n\n    private async storeTokenValue(key: string, value: string) {\n        if (await this.skipTokenStorage()) {\n            // if we have a vault timeout and the action is log out, don't store token\n            return;\n        }\n\n        return this.storageService.save(key, value);\n    }\n\n    private async skipTokenStorage(): Promise<boolean> {\n        const timeout = await this.storageService.get<number>(ConstantsService.vaultTimeoutKey);\n        const action = await this.storageService.get<string>(ConstantsService.vaultTimeoutActionKey);\n        return timeout != null && action === 'logOut';\n    }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { LogService } from '../abstractions/log.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TotpService as TotpServiceAbstraction } from '../abstractions/totp.service';\n\nimport { Utils } from '../misc/utils';\n\nconst B32Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\nconst SteamChars = '23456789BCDFGHJKMNPQRTVWXY';\n\nexport class TotpService implements TotpServiceAbstraction {\n    constructor(private storageService: StorageService, private cryptoFunctionService: CryptoFunctionService,\n    private logService: LogService) { }\n\n    async getCode(key: string): Promise<string> {\n        if (key == null) {\n            return null;\n        }\n        let period = 30;\n        let alg: 'sha1' | 'sha256' | 'sha512' = 'sha1';\n        let digits = 6;\n        let keyB32 = key;\n        const isOtpAuth = key.toLowerCase().indexOf('otpauth://') === 0;\n        const isSteamAuth = !isOtpAuth && key.toLowerCase().indexOf('steam://') === 0;\n        if (isOtpAuth) {\n            const params = Utils.getQueryParams(key);\n            if (params.has('digits') && params.get('digits') != null) {\n                try {\n                    const digitParams = parseInt(params.get('digits').trim(), null);\n                    if (digitParams > 10) {\n                        digits = 10;\n                    } else if (digitParams > 0) {\n                        digits = digitParams;\n                    }\n                } catch {\n                    this.logService.error('Invalid digits param.');\n                }\n            }\n            if (params.has('period') && params.get('period') != null) {\n                try {\n                    const periodParam = parseInt(params.get('period').trim(), null);\n                    if (periodParam > 0) {\n                        period = periodParam;\n                    }\n                } catch {\n                    this.logService.error('Invalid period param.');\n                }\n            }\n            if (params.has('secret') && params.get('secret') != null) {\n                keyB32 = params.get('secret');\n            }\n            if (params.has('algorithm') && params.get('algorithm') != null) {\n                const algParam = params.get('algorithm').toLowerCase();\n                if (algParam === 'sha1' || algParam === 'sha256' || algParam === 'sha512') {\n                    alg = algParam;\n                }\n            }\n        } else if (isSteamAuth) {\n            keyB32 = key.substr('steam://'.length);\n            digits = 5;\n        }\n\n        const epoch = Math.round(new Date().getTime() / 1000.0);\n        const timeHex = this.leftPad(this.decToHex(Math.floor(epoch / period)), 16, '0');\n        const timeBytes = Utils.fromHexToArray(timeHex);\n        const keyBytes = this.b32ToBytes(keyB32);\n\n        if (!keyBytes.length || !timeBytes.length) {\n            return null;\n        }\n\n        const hash = await this.sign(keyBytes, timeBytes, alg);\n        if (hash.length === 0) {\n            return null;\n        }\n\n        /* tslint:disable */\n        const offset = (hash[hash.length - 1] & 0xf);\n        const binary = ((hash[offset] & 0x7f) << 24) | ((hash[offset + 1] & 0xff) << 16) |\n            ((hash[offset + 2] & 0xff) << 8) | (hash[offset + 3] & 0xff);\n        /* tslint:enable */\n\n        let otp = '';\n        if (isSteamAuth) {\n            // tslint:disable-next-line\n            let fullCode = binary & 0x7fffffff;\n            for (let i = 0; i < digits; i++) {\n                otp += SteamChars[fullCode % SteamChars.length];\n                fullCode = Math.trunc(fullCode / SteamChars.length);\n            }\n        } else {\n            otp = (binary % Math.pow(10, digits)).toString();\n            otp = this.leftPad(otp, digits, '0');\n        }\n\n        return otp;\n    }\n\n    getTimeInterval(key: string): number {\n        let period = 30;\n        if (key != null && key.toLowerCase().indexOf('otpauth://') === 0) {\n            const params = Utils.getQueryParams(key);\n            if (params.has('period') && params.get('period') != null) {\n                try {\n                    period = parseInt(params.get('period').trim(), null);\n                } catch {\n                    this.logService.error('Invalid period param.');\n                }\n            }\n        }\n        return period;\n    }\n\n    async isAutoCopyEnabled(): Promise<boolean> {\n        return !(await this.storageService.get<boolean>(ConstantsService.disableAutoTotpCopyKey));\n    }\n\n    // Helpers\n\n    private leftPad(s: string, l: number, p: string): string {\n        if (l + 1 >= s.length) {\n            s = Array(l + 1 - s.length).join(p) + s;\n        }\n        return s;\n    }\n\n    private decToHex(d: number): string {\n        return (d < 15.5 ? '0' : '') + Math.round(d).toString(16);\n    }\n\n    private b32ToHex(s: string): string {\n        s = s.toUpperCase();\n        let cleanedInput = '';\n\n        for (let i = 0; i < s.length; i++) {\n            if (B32Chars.indexOf(s[i]) < 0) {\n                continue;\n            }\n\n            cleanedInput += s[i];\n        }\n        s = cleanedInput;\n\n        let bits = '';\n        let hex = '';\n        for (let i = 0; i < s.length; i++) {\n            const byteIndex = B32Chars.indexOf(s.charAt(i));\n            if (byteIndex < 0) {\n                continue;\n            }\n            bits += this.leftPad(byteIndex.toString(2), 5, '0');\n        }\n        for (let i = 0; i + 4 <= bits.length; i += 4) {\n            const chunk = bits.substr(i, 4);\n            hex = hex + parseInt(chunk, 2).toString(16);\n        }\n        return hex;\n    }\n\n    private b32ToBytes(s: string): Uint8Array {\n        return Utils.fromHexToArray(this.b32ToHex(s));\n    }\n\n    private async sign(keyBytes: Uint8Array, timeBytes: Uint8Array, alg: 'sha1' | 'sha256' | 'sha512') {\n        const signature = await this.cryptoFunctionService.hmac(timeBytes.buffer, keyBytes.buffer, alg);\n        return new Uint8Array(signature);\n    }\n}\n","import { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService as UserServiceAbstraction } from '../abstractions/user.service';\n\nimport { OrganizationData } from '../models/data/organizationData';\nimport { Organization } from '../models/domain/organization';\n\nimport { KdfType } from '../enums/kdfType';\n\nimport { ProviderData } from '../models/data/providerData';\nimport { Provider } from '../models/domain/provider';\n\nconst Keys = {\n    userId: 'userId',\n    userEmail: 'userEmail',\n    stamp: 'securityStamp',\n    kdf: 'kdf',\n    kdfIterations: 'kdfIterations',\n    organizationsPrefix: 'organizations_',\n    providersPrefix: 'providers_',\n    emailVerified: 'emailVerified',\n    forcePasswordReset: 'forcePasswordReset',\n};\n\nexport class UserService implements UserServiceAbstraction {\n    private userId: string;\n    private email: string;\n    private stamp: string;\n    private kdf: KdfType;\n    private kdfIterations: number;\n    private emailVerified: boolean;\n    private forcePasswordReset: boolean;\n\n    constructor(private tokenService: TokenService, private storageService: StorageService) { }\n\n    async setInformation(userId: string, email: string, kdf: KdfType, kdfIterations: number): Promise<any> {\n        this.email = email;\n        this.userId = userId;\n        this.kdf = kdf;\n        this.kdfIterations = kdfIterations;\n\n        await this.storageService.save(Keys.userEmail, email);\n        await this.storageService.save(Keys.userId, userId);\n        await this.storageService.save(Keys.kdf, kdf);\n        await this.storageService.save(Keys.kdfIterations, kdfIterations);\n    }\n\n    setSecurityStamp(stamp: string): Promise<any> {\n        this.stamp = stamp;\n        return this.storageService.save(Keys.stamp, stamp);\n    }\n\n    setEmailVerified(emailVerified: boolean) {\n        this.emailVerified = emailVerified;\n        return this.storageService.save(Keys.emailVerified, emailVerified);\n    }\n\n    setForcePasswordReset(forcePasswordReset: boolean) {\n        this.forcePasswordReset = forcePasswordReset;\n        return this.storageService.save(Keys.forcePasswordReset, forcePasswordReset);\n    }\n\n    async getUserId(): Promise<string> {\n        if (this.userId == null) {\n            this.userId = await this.storageService.get<string>(Keys.userId);\n        }\n        return this.userId;\n    }\n\n    async getEmail(): Promise<string> {\n        if (this.email == null) {\n            this.email = await this.storageService.get<string>(Keys.userEmail);\n        }\n        return this.email;\n    }\n\n    async getSecurityStamp(): Promise<string> {\n        if (this.stamp == null) {\n            this.stamp = await this.storageService.get<string>(Keys.stamp);\n        }\n        return this.stamp;\n    }\n\n    async getKdf(): Promise<KdfType> {\n        if (this.kdf == null) {\n            this.kdf = await this.storageService.get<KdfType>(Keys.kdf);\n        }\n        return this.kdf;\n    }\n\n    async getKdfIterations(): Promise<number> {\n        if (this.kdfIterations == null) {\n            this.kdfIterations = await this.storageService.get<number>(Keys.kdfIterations);\n        }\n        return this.kdfIterations;\n    }\n\n    async getEmailVerified(): Promise<boolean> {\n        if (this.emailVerified == null) {\n            this.emailVerified = await this.storageService.get<boolean>(Keys.emailVerified);\n        }\n        return this.emailVerified;\n    }\n\n    async getForcePasswordReset(): Promise<boolean> {\n        if (this.forcePasswordReset == null) {\n            this.forcePasswordReset = await this.storageService.get<boolean>(Keys.forcePasswordReset);\n        }\n        return this.forcePasswordReset;\n    }\n\n    async clear(): Promise<any> {\n        const userId = await this.getUserId();\n\n        await this.storageService.remove(Keys.userId);\n        await this.storageService.remove(Keys.userEmail);\n        await this.storageService.remove(Keys.stamp);\n        await this.storageService.remove(Keys.kdf);\n        await this.storageService.remove(Keys.kdfIterations);\n        await this.storageService.remove(Keys.forcePasswordReset);\n        await this.clearOrganizations(userId);\n        await this.clearProviders(userId);\n\n        this.userId = this.email = this.stamp = null;\n        this.kdf = null;\n        this.kdfIterations = null;\n    }\n\n    async isAuthenticated(): Promise<boolean> {\n        const token = await this.tokenService.getToken();\n        if (token == null) {\n            return false;\n        }\n\n        const userId = await this.getUserId();\n        return userId != null;\n    }\n\n    async canAccessPremium(): Promise<boolean> {\n        const authed = await this.isAuthenticated();\n        if (!authed) {\n            return false;\n        }\n\n        const tokenPremium = this.tokenService.getPremium();\n        if (tokenPremium) {\n            return true;\n        }\n\n        const orgs = await this.getAllOrganizations();\n        for (let i = 0; i < orgs.length; i++) {\n            if (orgs[i].usersGetPremium && orgs[i].enabled) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    async canManageSponsorships(): Promise<boolean> {\n        const orgs = await this.getAllOrganizations();\n        return orgs.some(o => o.familySponsorshipAvailable || o.familySponsorshipFriendlyName !== null);\n    }\n\n    async getOrganization(id: string): Promise<Organization> {\n        const userId = await this.getUserId();\n        const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n            Keys.organizationsPrefix + userId);\n        if (organizations == null || !organizations.hasOwnProperty(id)) {\n            return null;\n        }\n\n        return new Organization(organizations[id]);\n    }\n\n    async getOrganizationByIdentifier(identifier: string): Promise<Organization> {\n        const organizations = await this.getAllOrganizations();\n        if (organizations == null || organizations.length === 0) {\n            return null;\n        }\n\n        return organizations.find(o => o.identifier === identifier);\n    }\n\n    async getAllOrganizations(): Promise<Organization[]> {\n        const userId = await this.getUserId();\n        const organizations = await this.storageService.get<{ [id: string]: OrganizationData; }>(\n            Keys.organizationsPrefix + userId);\n        const response: Organization[] = [];\n        for (const id in organizations) {\n            if (organizations.hasOwnProperty(id) && !organizations[id].isProviderUser) {\n                response.push(new Organization(organizations[id]));\n            }\n        }\n        return response;\n    }\n\n    async replaceOrganizations(organizations: { [id: string]: OrganizationData; }): Promise<any> {\n        const userId = await this.getUserId();\n        await this.storageService.save(Keys.organizationsPrefix + userId, organizations);\n    }\n\n    async clearOrganizations(userId: string): Promise<any> {\n        await this.storageService.remove(Keys.organizationsPrefix + userId);\n    }\n\n    async getProvider(id: string): Promise<Provider> {\n        const userId = await this.getUserId();\n        const providers = await this.storageService.get<{ [id: string]: ProviderData; }>(\n            Keys.providersPrefix + userId);\n        if (providers == null || !providers.hasOwnProperty(id)) {\n            return null;\n        }\n\n        return new Provider(providers[id]);\n    }\n\n    async getAllProviders(): Promise<Provider[]> {\n        const userId = await this.getUserId();\n        const providers = await this.storageService.get<{ [id: string]: ProviderData; }>(\n            Keys.providersPrefix + userId);\n        const response: Provider[] = [];\n        for (const id in providers) {\n            if (providers.hasOwnProperty(id)) {\n                response.push(new Provider(providers[id]));\n            }\n        }\n        return response;\n    }\n\n    async replaceProviders(providers: { [id: string]: ProviderData; }): Promise<any> {\n        const userId = await this.getUserId();\n        await this.storageService.save(Keys.providersPrefix + userId, providers);\n    }\n\n    async clearProviders(userId: string): Promise<any> {\n        await this.storageService.remove(Keys.providersPrefix + userId);\n    }\n}\n","import { ProviderUserStatusType } from '../../enums/providerUserStatusType';\nimport { ProviderUserType } from '../../enums/providerUserType';\nimport { ProviderData } from '../data/providerData';\n\nexport class Provider {\n    id: string;\n    name: string;\n    status: ProviderUserStatusType;\n    type: ProviderUserType;\n    enabled: boolean;\n    userId: string;\n    useEvents: boolean;\n\n    constructor(obj?: ProviderData) {\n        if (obj == null) {\n            return;\n        }\n\n        this.id = obj.id;\n        this.name = obj.name;\n        this.status = obj.status;\n        this.type = obj.type;\n        this.enabled = obj.enabled;\n        this.userId = obj.userId;\n        this.useEvents = obj.useEvents;\n    }\n\n    get canAccess() {\n        if (this.isProviderAdmin) {\n            return true;\n        }\n        return this.enabled && this.status === ProviderUserStatusType.Confirmed;\n    }\n\n    get canCreateOrganizations() {\n        return this.enabled && this.isProviderAdmin;\n    }\n\n    get canManageUsers() {\n        return this.isProviderAdmin;\n    }\n\n    get canAccessEventLogs() {\n        return this.isProviderAdmin;\n    }\n\n    get isProviderAdmin() {\n        return this.type === ProviderUserType.ProviderAdmin;\n    }\n}\n","export enum ProviderUserStatusType {\n    Invited = 0,\n    Accepted = 1,\n    Confirmed = 2,\n}\n","export enum ProviderUserType {\n    ProviderAdmin = 0,\n    ServiceUser = 1,\n}\n","import { UserVerificationService as UserVerificationServiceAbstraction } from '../abstractions/userVerification.service';\n\nimport { ApiService } from '../abstractions/api.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { I18nService } from '../abstractions/i18n.service';\n\nimport { VerificationType } from '../enums/verificationType';\n\nimport { VerifyOTPRequest } from '../models/request/account/verifyOTPRequest';\nimport { SecretVerificationRequest } from '../models/request/secretVerificationRequest';\n\nimport { Verification } from '../types/verification';\n\nexport class UserVerificationService implements UserVerificationServiceAbstraction {\n    constructor(private cryptoService: CryptoService, private i18nService: I18nService,\n        private apiService: ApiService) { }\n\n    async buildRequest<T extends SecretVerificationRequest>(verification: Verification,\n        requestClass?: new () => T, alreadyHashed?: boolean) {\n        this.validateInput(verification);\n\n        const request = requestClass != null\n            ? new requestClass()\n            : new SecretVerificationRequest() as T;\n\n        if (verification.type === VerificationType.OTP) {\n            request.otp = verification.secret;\n        } else {\n            request.masterPasswordHash = alreadyHashed\n                ? verification.secret\n                : await this.cryptoService.hashPassword(verification.secret, null);\n        }\n\n        return request;\n    }\n\n    async verifyUser(verification: Verification): Promise<boolean> {\n        this.validateInput(verification);\n\n        if (verification.type === VerificationType.OTP) {\n            const request = new VerifyOTPRequest(verification.secret);\n            try {\n                await this.apiService.postAccountVerifyOTP(request);\n            } catch (e) {\n                throw new Error(this.i18nService.t('invalidVerificationCode'));\n            }\n        } else {\n            const passwordValid = await this.cryptoService.compareAndUpdateKeyHash(verification.secret, null);\n            if (!passwordValid) {\n                throw new Error(this.i18nService.t('invalidMasterPassword'));\n            }\n        }\n        return true;\n    }\n\n    async requestOTP() {\n        await this.apiService.postAccountRequestOTP();\n    }\n\n    private validateInput(verification: Verification) {\n        if (verification?.secret == null || verification.secret === '') {\n            if (verification.type === VerificationType.OTP) {\n                throw new Error(this.i18nService.t('verificationCodeRequired'));\n            } else {\n                throw new Error(this.i18nService.t('masterPassRequired'));\n            }\n        }\n    }\n}\n","export class VerifyOTPRequest {\n    OTP: string;\n\n    constructor(OTP: string) {\n        this.OTP = OTP;\n    }\n}\n","import { ConstantsService } from './constants.service';\n\nimport { CipherService } from '../abstractions/cipher.service';\nimport { CollectionService } from '../abstractions/collection.service';\nimport { CryptoService } from '../abstractions/crypto.service';\nimport { FolderService } from '../abstractions/folder.service';\nimport { KeyConnectorService } from '../abstractions/keyConnector.service';\nimport { MessagingService } from '../abstractions/messaging.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\nimport { PolicyService } from '../abstractions/policy.service';\nimport { SearchService } from '../abstractions/search.service';\nimport { StorageService } from '../abstractions/storage.service';\nimport { TokenService } from '../abstractions/token.service';\nimport { UserService } from '../abstractions/user.service';\nimport { VaultTimeoutService as VaultTimeoutServiceAbstraction } from '../abstractions/vaultTimeout.service';\n\nimport { PolicyType } from '../enums/policyType';\nimport { EncString } from '../models/domain/encString';\n\nexport class VaultTimeoutService implements VaultTimeoutServiceAbstraction {\n    pinProtectedKey: EncString = null;\n    biometricLocked: boolean = true;\n    everBeenUnlocked: boolean = false;\n\n    private inited = false;\n\n    constructor(private cipherService: CipherService, private folderService: FolderService,\n        private collectionService: CollectionService, private cryptoService: CryptoService,\n        protected platformUtilsService: PlatformUtilsService, private storageService: StorageService,\n        private messagingService: MessagingService, private searchService: SearchService,\n        private userService: UserService, private tokenService: TokenService, private policyService: PolicyService,\n        private keyConnectorService: KeyConnectorService,\n        private lockedCallback: () => Promise<void> = null, private loggedOutCallback: () => Promise<void> = null) {\n    }\n\n    init(checkOnInterval: boolean) {\n        if (this.inited) {\n            return;\n        }\n\n        this.inited = true;\n        if (checkOnInterval) {\n            this.startCheck();\n        }\n    }\n\n    startCheck() {\n        this.checkVaultTimeout();\n        setInterval(() => this.checkVaultTimeout(), 10 * 1000); // check every 10 seconds\n    }\n\n    // Keys aren't stored for a device that is locked or logged out.\n    async isLocked(): Promise<boolean> {\n        // Handle never lock startup situation\n        if (await this.cryptoService.hasKeyStored('auto') && !this.everBeenUnlocked) {\n            await this.cryptoService.getKey('auto');\n        }\n\n        return !this.cryptoService.hasKeyInMemory();\n    }\n\n    async checkVaultTimeout(): Promise<void> {\n        if (await this.platformUtilsService.isViewOpen()) {\n            // Do not lock\n            return;\n        }\n\n        // \"is logged out check\" - similar to isLocked, below\n        const authed = await this.userService.isAuthenticated();\n        if (!authed) {\n            return;\n        }\n\n        if (await this.isLocked()) {\n            return;\n        }\n\n        const vaultTimeout = await this.getVaultTimeout();\n        if (vaultTimeout == null || vaultTimeout < 0) {\n            return;\n        }\n\n        const lastActive = await this.storageService.get<number>(ConstantsService.lastActiveKey);\n        if (lastActive == null) {\n            return;\n        }\n\n        const vaultTimeoutSeconds = vaultTimeout * 60;\n        const diffSeconds = ((new Date()).getTime() - lastActive) / 1000;\n        if (diffSeconds >= vaultTimeoutSeconds) {\n            // Pivot based on the saved vault timeout action\n            const timeoutAction = await this.storageService.get<string>(ConstantsService.vaultTimeoutActionKey);\n            timeoutAction === 'logOut' ? await this.logOut() : await this.lock(true);\n        }\n    }\n\n    async lock(allowSoftLock = false): Promise<void> {\n        const authed = await this.userService.isAuthenticated();\n        if (!authed) {\n            return;\n        }\n\n        if (await this.keyConnectorService.getUsesKeyConnector()) {\n            const pinSet = await this.isPinLockSet();\n            const pinLock = (pinSet[0] && this.pinProtectedKey != null) || pinSet[1];\n\n            if (!pinLock && !await this.isBiometricLockSet()) {\n                await this.logOut();\n            }\n        }\n\n        this.biometricLocked = true;\n        this.everBeenUnlocked = true;\n        await this.cryptoService.clearKey(false);\n        await this.cryptoService.clearOrgKeys(true);\n        await this.cryptoService.clearKeyPair(true);\n        await this.cryptoService.clearEncKey(true);\n\n        this.folderService.clearCache();\n        this.cipherService.clearCache();\n        this.collectionService.clearCache();\n        this.searchService.clearIndex();\n        this.messagingService.send('locked');\n        if (this.lockedCallback != null) {\n            await this.lockedCallback();\n        }\n    }\n\n    async logOut(): Promise<void> {\n        if (this.loggedOutCallback != null) {\n            await this.loggedOutCallback();\n        }\n    }\n\n    async setVaultTimeoutOptions(timeout: number, action: string): Promise<void> {\n        await this.storageService.save(ConstantsService.vaultTimeoutKey, timeout);\n        await this.storageService.save(ConstantsService.vaultTimeoutActionKey, action);\n        await this.cryptoService.toggleKey();\n        await this.tokenService.toggleTokens();\n    }\n\n    async isPinLockSet(): Promise<[boolean, boolean]> {\n        const protectedPin = await this.storageService.get<string>(ConstantsService.protectedPin);\n        const pinProtectedKey = await this.storageService.get<string>(ConstantsService.pinProtectedKey);\n        return [protectedPin != null, pinProtectedKey != null];\n    }\n\n    async isBiometricLockSet(): Promise<boolean> {\n        return await this.storageService.get<boolean>(ConstantsService.biometricUnlockKey);\n    }\n\n    async getVaultTimeout(): Promise<number> {\n        const vaultTimeout = await this.storageService.get<number>(ConstantsService.vaultTimeoutKey);\n\n        if (await this.policyService.policyAppliesToUser(PolicyType.MaximumVaultTimeout)) {\n            const policy = await this.policyService.getAll(PolicyType.MaximumVaultTimeout);\n            // Remove negative values, and ensure it's smaller than maximum allowed value according to policy\n            let timeout = Math.min(vaultTimeout, policy[0].data.minutes);\n\n            if (vaultTimeout == null || timeout < 0) {\n                timeout = policy[0].data.minutes;\n            }\n\n            // We really shouldn't need to set the value here, but multiple services relies on this value being correct.\n            if (vaultTimeout !== timeout) {\n                await this.storageService.save(ConstantsService.vaultTimeoutKey, timeout);\n            }\n\n            return timeout;\n        }\n\n        return vaultTimeout;\n    }\n\n    clear(): Promise<any> {\n        this.everBeenUnlocked = false;\n        this.pinProtectedKey = null;\n        return this.storageService.remove(ConstantsService.protectedPin);\n    }\n}\n","import * as forge from 'node-forge';\n\nimport { CryptoFunctionService } from '../abstractions/cryptoFunction.service';\nimport { PlatformUtilsService } from '../abstractions/platformUtils.service';\n\nimport { Utils } from '../misc/utils';\n\nimport { DecryptParameters } from '../models/domain/decryptParameters';\nimport { SymmetricCryptoKey } from '../models/domain/symmetricCryptoKey';\n\nexport class WebCryptoFunctionService implements CryptoFunctionService {\n    private crypto: Crypto;\n    private subtle: SubtleCrypto;\n    private isIE: boolean;\n    private isOldSafari: boolean;\n\n    constructor(private win: Window, private platformUtilsService: PlatformUtilsService) {\n        this.crypto = typeof win.crypto !== 'undefined' ? win.crypto : null;\n        this.subtle = (!!this.crypto && typeof win.crypto.subtle !== 'undefined') ? win.crypto.subtle : null;\n        this.isIE = platformUtilsService.isIE();\n        const ua = win.navigator.userAgent;\n        this.isOldSafari = platformUtilsService.isSafari() &&\n            (ua.indexOf(' Version/10.') > -1 || ua.indexOf(' Version/9.') > -1);\n    }\n\n    async pbkdf2(password: string | ArrayBuffer, salt: string | ArrayBuffer, algorithm: 'sha256' | 'sha512',\n        iterations: number): Promise<ArrayBuffer> {\n        if (this.isIE || this.isOldSafari) {\n            const forgeLen = algorithm === 'sha256' ? 32 : 64;\n            const passwordBytes = this.toByteString(password);\n            const saltBytes = this.toByteString(salt);\n            const derivedKeyBytes = (forge as any).pbkdf2(passwordBytes, saltBytes, iterations, forgeLen, algorithm);\n            return Utils.fromByteStringToArray(derivedKeyBytes).buffer;\n        }\n\n        const wcLen = algorithm === 'sha256' ? 256 : 512;\n        const passwordBuf = this.toBuf(password);\n        const saltBuf = this.toBuf(salt);\n\n        const pbkdf2Params: Pbkdf2Params = {\n            name: 'PBKDF2',\n            salt: saltBuf,\n            iterations: iterations,\n            hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n        };\n\n        const impKey = await this.subtle.importKey('raw', passwordBuf, { name: 'PBKDF2' } as any,\n            false, ['deriveBits']);\n        return await this.subtle.deriveBits(pbkdf2Params, impKey, wcLen);\n    }\n\n    async hkdf(ikm: ArrayBuffer, salt: string | ArrayBuffer, info: string | ArrayBuffer,\n        outputByteSize: number, algorithm: 'sha256' | 'sha512'): Promise<ArrayBuffer> {\n        const saltBuf = this.toBuf(salt);\n        const infoBuf = this.toBuf(info);\n\n        const hkdfParams: HkdfParams = {\n            name: 'HKDF',\n            salt: saltBuf,\n            info: infoBuf,\n            hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n        };\n\n        const impKey = await this.subtle.importKey('raw', ikm, { name: 'HKDF' } as any,\n            false, ['deriveBits']);\n        return await this.subtle.deriveBits(hkdfParams as any, impKey, outputByteSize * 8);\n    }\n\n    // ref: https://tools.ietf.org/html/rfc5869\n    async hkdfExpand(prk: ArrayBuffer, info: string | ArrayBuffer, outputByteSize: number,\n        algorithm: 'sha256' | 'sha512'): Promise<ArrayBuffer> {\n        const hashLen = algorithm === 'sha256' ? 32 : 64;\n        if (outputByteSize > 255 * hashLen) {\n            throw new Error('outputByteSize is too large.');\n        }\n        const prkArr = new Uint8Array(prk);\n        if (prkArr.length < hashLen) {\n            throw new Error('prk is too small.');\n        }\n        const infoBuf = this.toBuf(info);\n        const infoArr = new Uint8Array(infoBuf);\n        let runningOkmLength = 0;\n        let previousT = new Uint8Array(0);\n        const n = Math.ceil(outputByteSize / hashLen);\n        const okm = new Uint8Array(n * hashLen);\n        for (let i = 0; i < n; i++) {\n            const t = new Uint8Array(previousT.length + infoArr.length + 1);\n            t.set(previousT);\n            t.set(infoArr, previousT.length);\n            t.set([i + 1], t.length - 1);\n            previousT = new Uint8Array(await this.hmac(t.buffer, prk, algorithm));\n            okm.set(previousT, runningOkmLength);\n            runningOkmLength += previousT.length;\n            if (runningOkmLength >= outputByteSize) {\n                break;\n            }\n        }\n        return okm.slice(0, outputByteSize).buffer;\n    }\n\n    async hash(value: string | ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5'): Promise<ArrayBuffer> {\n        if ((this.isIE && algorithm === 'sha1') || algorithm === 'md5') {\n            const md = algorithm === 'md5' ? forge.md.md5.create() : forge.md.sha1.create();\n            const valueBytes = this.toByteString(value);\n            md.update(valueBytes, 'raw');\n            return Utils.fromByteStringToArray(md.digest().data).buffer;\n        }\n\n        const valueBuf = this.toBuf(value);\n        return await this.subtle.digest({ name: this.toWebCryptoAlgorithm(algorithm) }, valueBuf);\n    }\n\n    async hmac(value: ArrayBuffer, key: ArrayBuffer, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise<ArrayBuffer> {\n        if (this.isIE && algorithm === 'sha512') {\n            const hmac = (forge as any).hmac.create();\n            const keyBytes = this.toByteString(key);\n            const valueBytes = this.toByteString(value);\n            hmac.start(algorithm, keyBytes);\n            hmac.update(valueBytes, 'raw');\n            return Utils.fromByteStringToArray(hmac.digest().data).buffer;\n        }\n\n        const signingAlgorithm = {\n            name: 'HMAC',\n            hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n        };\n\n        const impKey = await this.subtle.importKey('raw', key, signingAlgorithm, false, ['sign']);\n        return await this.subtle.sign(signingAlgorithm, impKey, value);\n    }\n\n    // Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).\n    // ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/\n    // ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy\n    async compare(a: ArrayBuffer, b: ArrayBuffer): Promise<boolean> {\n        const macKey = await this.randomBytes(32);\n        const signingAlgorithm = {\n            name: 'HMAC',\n            hash: { name: 'SHA-256' },\n        };\n        const impKey = await this.subtle.importKey('raw', macKey, signingAlgorithm, false, ['sign']);\n        const mac1 = await this.subtle.sign(signingAlgorithm, impKey, a);\n        const mac2 = await this.subtle.sign(signingAlgorithm, impKey, b);\n\n        if (mac1.byteLength !== mac2.byteLength) {\n            return false;\n        }\n\n        const arr1 = new Uint8Array(mac1);\n        const arr2 = new Uint8Array(mac2);\n        for (let i = 0; i < arr2.length; i++) {\n            if (arr1[i] !== arr2[i]) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    hmacFast(value: string, key: string, algorithm: 'sha1' | 'sha256' | 'sha512'): Promise<string> {\n        const hmac = (forge as any).hmac.create();\n        hmac.start(algorithm, key);\n        hmac.update(value);\n        const bytes = hmac.digest().getBytes();\n        return Promise.resolve(bytes);\n    }\n\n    async compareFast(a: string, b: string): Promise<boolean> {\n        const rand = await this.randomBytes(32);\n        const bytes = new Uint32Array(rand);\n        const buffer = forge.util.createBuffer();\n        for (let i = 0; i < bytes.length; i++) {\n            buffer.putInt32(bytes[i]);\n        }\n        const macKey = buffer.getBytes();\n\n        const hmac = (forge as any).hmac.create();\n        hmac.start('sha256', macKey);\n        hmac.update(a);\n        const mac1 = hmac.digest().getBytes();\n\n        hmac.start(null, null);\n        hmac.update(b);\n        const mac2 = hmac.digest().getBytes();\n\n        const equals = mac1 === mac2;\n        return equals;\n    }\n\n    async aesEncrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise<ArrayBuffer> {\n        const impKey = await this.subtle.importKey('raw', key, { name: 'AES-CBC' } as any, false, ['encrypt']);\n        return await this.subtle.encrypt({ name: 'AES-CBC', iv: iv }, impKey, data);\n    }\n\n    aesDecryptFastParameters(data: string, iv: string, mac: string, key: SymmetricCryptoKey):\n        DecryptParameters<string> {\n        const p = new DecryptParameters<string>();\n        if (key.meta != null) {\n            p.encKey = key.meta.encKeyByteString;\n            p.macKey = key.meta.macKeyByteString;\n        }\n\n        if (p.encKey == null) {\n            p.encKey = forge.util.decode64(key.encKeyB64);\n        }\n        p.data = forge.util.decode64(data);\n        p.iv = forge.util.decode64(iv);\n        p.macData = p.iv + p.data;\n        if (p.macKey == null && key.macKeyB64 != null) {\n            p.macKey = forge.util.decode64(key.macKeyB64);\n        }\n        if (mac != null) {\n            p.mac = forge.util.decode64(mac);\n        }\n\n        // cache byte string keys for later\n        if (key.meta == null) {\n            key.meta = {};\n        }\n        if (key.meta.encKeyByteString == null) {\n            key.meta.encKeyByteString = p.encKey;\n        }\n        if (p.macKey != null && key.meta.macKeyByteString == null) {\n            key.meta.macKeyByteString = p.macKey;\n        }\n\n        return p;\n    }\n\n    aesDecryptFast(parameters: DecryptParameters<string>): Promise<string> {\n        const dataBuffer = (forge as any).util.createBuffer(parameters.data);\n        const decipher = (forge as any).cipher.createDecipher('AES-CBC', parameters.encKey);\n        decipher.start({ iv: parameters.iv });\n        decipher.update(dataBuffer);\n        decipher.finish();\n        const val = decipher.output.toString('utf8');\n        return Promise.resolve(val);\n    }\n\n    async aesDecrypt(data: ArrayBuffer, iv: ArrayBuffer, key: ArrayBuffer): Promise<ArrayBuffer> {\n        const impKey = await this.subtle.importKey('raw', key, { name: 'AES-CBC' } as any, false, ['decrypt']);\n        return await this.subtle.decrypt({ name: 'AES-CBC', iv: iv }, impKey, data);\n    }\n\n    async rsaEncrypt(data: ArrayBuffer, publicKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise<ArrayBuffer> {\n        // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n        // We cannot use the proper types here.\n        const rsaParams = {\n            name: 'RSA-OAEP',\n            hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n        };\n        const impKey = await this.subtle.importKey('spki', publicKey, rsaParams, false, ['encrypt']);\n        return await this.subtle.encrypt(rsaParams, impKey, data);\n    }\n\n    async rsaDecrypt(data: ArrayBuffer, privateKey: ArrayBuffer, algorithm: 'sha1' | 'sha256'): Promise<ArrayBuffer> {\n        // Note: Edge browser requires that we specify name and hash for both key import and decrypt.\n        // We cannot use the proper types here.\n        const rsaParams = {\n            name: 'RSA-OAEP',\n            hash: { name: this.toWebCryptoAlgorithm(algorithm) },\n        };\n        const impKey = await this.subtle.importKey('pkcs8', privateKey, rsaParams, false, ['decrypt']);\n        return await this.subtle.decrypt(rsaParams, impKey, data);\n    }\n\n    async rsaExtractPublicKey(privateKey: ArrayBuffer): Promise<ArrayBuffer> {\n        const rsaParams = {\n            name: 'RSA-OAEP',\n            // Have to specify some algorithm\n            hash: { name: this.toWebCryptoAlgorithm('sha1') },\n        };\n        const impPrivateKey = await this.subtle.importKey('pkcs8', privateKey, rsaParams, true, ['decrypt']);\n        const jwkPrivateKey = await this.subtle.exportKey('jwk', impPrivateKey);\n        const jwkPublicKeyParams = {\n            kty: 'RSA',\n            e: jwkPrivateKey.e,\n            n: jwkPrivateKey.n,\n            alg: 'RSA-OAEP',\n            ext: true,\n        };\n        const impPublicKey = await this.subtle.importKey('jwk', jwkPublicKeyParams, rsaParams, true, ['encrypt']);\n        return await this.subtle.exportKey('spki', impPublicKey);\n    }\n\n    async rsaGenerateKeyPair(length: 1024 | 2048 | 4096): Promise<[ArrayBuffer, ArrayBuffer]> {\n        const rsaParams = {\n            name: 'RSA-OAEP',\n            modulusLength: length,\n            publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537\n            // Have to specify some algorithm\n            hash: { name: this.toWebCryptoAlgorithm('sha1') },\n        };\n        const keyPair = (await this.subtle.generateKey(rsaParams, true, ['encrypt', 'decrypt'])) as CryptoKeyPair;\n        const publicKey = await this.subtle.exportKey('spki', keyPair.publicKey);\n        const privateKey = await this.subtle.exportKey('pkcs8', keyPair.privateKey);\n        return [publicKey, privateKey];\n    }\n\n    randomBytes(length: number): Promise<ArrayBuffer> {\n        const arr = new Uint8Array(length);\n        this.crypto.getRandomValues(arr);\n        return Promise.resolve(arr.buffer);\n    }\n\n    private toBuf(value: string | ArrayBuffer): ArrayBuffer {\n        let buf: ArrayBuffer;\n        if (typeof (value) === 'string') {\n            buf = Utils.fromUtf8ToArray(value).buffer;\n        } else {\n            buf = value;\n        }\n        return buf;\n    }\n\n    private toByteString(value: string | ArrayBuffer): string {\n        let bytes: string;\n        if (typeof (value) === 'string') {\n            bytes = forge.util.encodeUtf8(value);\n        } else {\n            bytes = Utils.fromBufferToByteString(value);\n        }\n        return bytes;\n    }\n\n    private toWebCryptoAlgorithm(algorithm: 'sha1' | 'sha256' | 'sha512' | 'md5'): string {\n        if (algorithm === 'md5') {\n            throw new Error('MD5 is not supported in WebCrypto.');\n        }\n        return algorithm === 'sha1' ? 'SHA-1' : algorithm === 'sha256' ? 'SHA-256' : 'SHA-512';\n    }\n}\n","export class DecryptParameters<T> {\n    encKey: T;\n    data: T;\n    iv: T;\n    macKey: T;\n    mac: T;\n    macData: T;\n}\n","import { EncArrayBuffer } from '../models/domain/encArrayBuffer';\nimport { EncString } from '../models/domain/encString';\nimport { AttachmentUploadDataResponse } from '../models/response/attachmentUploadDataResponse';\nimport { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';\n\nexport abstract class FileUploadService {\n    uploadSendFile: (uploadData: SendFileUploadDataResponse, fileName: EncString,\n        encryptedFileData: EncArrayBuffer) => Promise<any>;\n    uploadCipherAttachment: (admin: boolean, uploadData: AttachmentUploadDataResponse, fileName: EncString,\n        encryptedFileData: EncArrayBuffer) => Promise<any>;\n}\n","import {\n    ApplicationRef,\n    ComponentFactoryResolver,\n    Injectable,\n    Injector,\n} from '@angular/core';\nimport * as jq from 'jquery';\nimport { first } from 'rxjs/operators';\n\nimport { MessagingService } from 'jslib-common/abstractions/messaging.service';\n\nimport { ModalRef } from 'jslib-angular/components/modal/modal.ref';\nimport { ModalService as BaseModalService } from 'jslib-angular/services/modal.service';\n\nimport { Utils } from 'jslib-common/misc/utils';\n\n@Injectable()\nexport class ModalService extends BaseModalService {\n    el: any = null;\n    modalOpen: boolean = false;\n\n    constructor(componentFactoryResolver: ComponentFactoryResolver, applicationRef: ApplicationRef,\n        injector: Injector, private messagingService: MessagingService) {\n        super(componentFactoryResolver, applicationRef, injector);\n    }\n\n    protected setupHandlers(modalRef: ModalRef) {\n        modalRef.onCreated.pipe(first()).subscribe(() => {\n            const modals = Array.from(document.querySelectorAll('.modal'));\n            if (modals.length > 0) {\n                this.el = jq(modals[0]);\n                this.el.modal('show');\n\n                this.el.on('show.bs.modal', () => {\n                    modalRef.show();\n                    this.messagingService.send('modalShow');\n                });\n                this.el.on('shown.bs.modal', () => {\n                    modalRef.shown();\n                    this.messagingService.send('modalShown');\n                    if (!Utils.isMobileBrowser) {\n                        this.el.find('*[appAutoFocus]').focus();\n                    }\n                });\n                this.el.on('hide.bs.modal', () => {\n                    this.messagingService.send('modalClose');\n                });\n                this.el.on('hidden.bs.modal', () => {\n                    modalRef.closed();\n                    this.messagingService.send('modalClosed');\n                });\n            }\n        });\n\n        modalRef.onClose.pipe(first()).subscribe(() => {\n            if (this.el != null) {\n                this.el.modal('hide');\n            }\n        });\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n    { path: '**', redirectTo: '' },\n];\n\n@NgModule({\n    imports: [RouterModule.forChild(routes)],\n    exports: [RouterModule],\n})\nexport class WildcardRoutingModule { }\n"],"sourceRoot":""}