@acorex/modules 20.1.0 → 20.2.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/auth/index.d.ts +4 -57
  2. package/conversation/index.d.ts +69 -9
  3. package/dashboard-management/index.d.ts +2 -0
  4. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-5TIjp5UG.mjs → acorex-modules-auth-acorex-modules-auth-y6rICHrT.mjs} +84 -201
  5. package/fesm2022/acorex-modules-auth-acorex-modules-auth-y6rICHrT.mjs.map +1 -0
  6. package/fesm2022/{acorex-modules-auth-app-chooser.component-B0w1Xzx7.mjs → acorex-modules-auth-app-chooser.component-Cpy0VN6n.mjs} +4 -4
  7. package/fesm2022/{acorex-modules-auth-app-chooser.component-B0w1Xzx7.mjs.map → acorex-modules-auth-app-chooser.component-Cpy0VN6n.mjs.map} +1 -1
  8. package/fesm2022/{acorex-modules-auth-login.module-B8sVVZHV.mjs → acorex-modules-auth-login.module-ZEX4NMuJ.mjs} +4 -4
  9. package/fesm2022/{acorex-modules-auth-login.module-B8sVVZHV.mjs.map → acorex-modules-auth-login.module-ZEX4NMuJ.mjs.map} +1 -1
  10. package/fesm2022/{acorex-modules-auth-master.layout-CMKxj1Qo.mjs → acorex-modules-auth-master.layout-D-lIn4Pl.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-auth-master.layout-CMKxj1Qo.mjs.map → acorex-modules-auth-master.layout-D-lIn4Pl.mjs.map} +1 -1
  12. package/fesm2022/{acorex-modules-auth-password.component-DH0qKunk.mjs → acorex-modules-auth-password.component-CafZfqKe.mjs} +7 -7
  13. package/fesm2022/{acorex-modules-auth-password.component-DH0qKunk.mjs.map → acorex-modules-auth-password.component-CafZfqKe.mjs.map} +1 -1
  14. package/fesm2022/acorex-modules-auth-password.component-DLCb0_6e.mjs +134 -0
  15. package/fesm2022/acorex-modules-auth-password.component-DLCb0_6e.mjs.map +1 -0
  16. package/fesm2022/{acorex-modules-auth-routes-Q9zaIiBS.mjs → acorex-modules-auth-routes-D9-qfC3V.mjs} +2 -2
  17. package/fesm2022/{acorex-modules-auth-routes-Q9zaIiBS.mjs.map → acorex-modules-auth-routes-D9-qfC3V.mjs.map} +1 -1
  18. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-wp7OOLsH.mjs → acorex-modules-auth-tenant-chooser.component-B1aE-TOD.mjs} +10 -13
  19. package/fesm2022/acorex-modules-auth-tenant-chooser.component-B1aE-TOD.mjs.map +1 -0
  20. package/fesm2022/{acorex-modules-auth-two-factor-code.component-DSWd06bn.mjs → acorex-modules-auth-two-factor-code.component-BglerlU-.mjs} +6 -6
  21. package/fesm2022/{acorex-modules-auth-two-factor-code.component-DSWd06bn.mjs.map → acorex-modules-auth-two-factor-code.component-BglerlU-.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-auth-two-factor.module-oRixkeAn.mjs → acorex-modules-auth-two-factor.module-D3N2XyOH.mjs} +3 -3
  23. package/fesm2022/{acorex-modules-auth-two-factor.module-oRixkeAn.mjs.map → acorex-modules-auth-two-factor.module-D3N2XyOH.mjs.map} +1 -1
  24. package/fesm2022/acorex-modules-auth.mjs +1 -1
  25. package/fesm2022/acorex-modules-conversation.mjs +487 -57
  26. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  27. package/fesm2022/acorex-modules-notification-management.mjs +109 -3
  28. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  29. package/fesm2022/acorex-modules-security-management.mjs +301 -837
  30. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  31. package/notification-management/index.d.ts +125 -29
  32. package/package.json +5 -5
  33. package/report-management/index.d.ts +2 -0
  34. package/security-management/index.d.ts +4 -13
  35. package/fesm2022/acorex-modules-auth-acorex-modules-auth-5TIjp5UG.mjs.map +0 -1
  36. package/fesm2022/acorex-modules-auth-oauth-callback.component-C95YLpI_.mjs +0 -101
  37. package/fesm2022/acorex-modules-auth-oauth-callback.component-C95YLpI_.mjs.map +0 -1
  38. package/fesm2022/acorex-modules-auth-password.component-Du0EBIiw.mjs +0 -239
  39. package/fesm2022/acorex-modules-auth-password.component-Du0EBIiw.mjs.map +0 -1
  40. package/fesm2022/acorex-modules-auth-tenant-chooser.component-wp7OOLsH.mjs.map +0 -1
  41. package/fesm2022/acorex-modules-auth-user-sessions.component-8wwWI0cQ.mjs +0 -135
  42. package/fesm2022/acorex-modules-auth-user-sessions.component-8wwWI0cQ.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-auth-oauth-callback.component-C95YLpI_.mjs","sources":["../tmp-esm2022/auth/lib/pages/callback/oauth-callback.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService, AXPAuthStrategyRegistryService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\nimport { AXM_AUTH_CONFIG_TOKEN } from '../../auth.config';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/loading\";\nimport * as i4 from \"@acorex/core/translation\";\nexport class AXPOAuthCallbackComponent {\n constructor() {\n //#region ---- Services & Dependencies ----\n this.sessionService = inject(AXPSessionService);\n this.router = inject(Router);\n this.route = inject(ActivatedRoute);\n this.homePageService = inject(AXPHomePageService);\n this.configs = inject(AXM_AUTH_CONFIG_TOKEN);\n this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n this.oidcStrategy = this.authStrategyRegistry.get('oidc');\n //#endregion\n //#region ---- Properties ----\n this.isLoading$ = new BehaviorSubject(true);\n this.error$ = new BehaviorSubject(null);\n this.status$ = new BehaviorSubject('Processing authorization...');\n }\n // Removed: @Input() flow\n //#endregion\n //#region ---- Lifecycle Methods ----\n async ngOnInit() {\n try {\n const queryParams = this.route.snapshot.queryParams;\n const code = queryParams['code'];\n const error = queryParams['error'];\n // Removed: flowParam and its assignment\n if (error) {\n throw new Error(`OAuth error: ${error} - ${queryParams['error_description'] || 'Unknown error'}`);\n }\n if (!code) {\n throw new Error('No authorization code received from OAuth provider');\n }\n this.status$.next('Exchanging authorization code for tokens...');\n // Use redirect URI from injected auth configs\n const redirectUri = this.configs.authConfig?.redirectUri || '/auth/axp-oauth-callback';\n if (this.oidcStrategy && typeof this.oidcStrategy.completeAuthorizationCodeFlow === 'function') {\n await this.oidcStrategy.completeAuthorizationCodeFlow({\n code,\n redirectUri: redirectUri,\n });\n }\n this.status$.next('Authentication successful! Redirecting...');\n await this.navigateAfterSuccess();\n }\n catch (error) {\n console.error('OAuth callback error:', error);\n this.error$.next('Authentication failed. Please try again.');\n this.isLoading$.next(false);\n }\n finally {\n this.isLoading$.next(false);\n }\n }\n //#endregion\n //#region ---- Navigation ----\n async navigateAfterSuccess() {\n // Use await with router.navigate to ensure navigation completes\n if (this.sessionService.tenant?.id == null) {\n await this.router.navigate(['/auth/account/tenant-chooser']);\n return;\n }\n if (this.sessionService.application?.id == null) {\n await this.router.navigate(['/auth/account/app-chooser']);\n return;\n }\n // Navigate to home page\n await this.homePageService.navigateTo();\n }\n //#endregion\n //#region ---- UI Handlers ----\n handleRetry() {\n this.router.navigate(['/auth/login']);\n }\n handleGoHome() {\n this.router.navigate(['/']);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXPOAuthCallbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.3\", type: AXPOAuthCallbackComponent, isStandalone: true, selector: \"axp-oauth-callback\", ngImport: i0, template: \"<ng-container *translate=\\\"let t\\\">\\n <div class=\\\"ax-h-full ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8\\\">\\n <div class=\\\"ax-w-96 ax-text-center\\\">\\n <!-- Loading State -->\\n <div *ngIf=\\\"isLoading$ | async\\\" class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-4\\\">\\n <ax-loading class=\\\"ax-text-4xl\\\"></ax-loading>\\n <h2 class=\\\"ax-font-semibold ax-text-lg ax-text-neutral-700 dark:ax-text-neutral-300\\\">\\n {{ status$ | async }}\\n </h2>\\n <p class=\\\"ax-text-sm ax-text-neutral-500 dark:ax-text-neutral-400\\\">\\n Please wait while we complete your authentication...\\n </p>\\n </div>\\n\\n <!-- Error State -->\\n <div *ngIf=\\\"(error$ | async) && !(isLoading$ | async)\\\" class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-4\\\">\\n <div class=\\\"ax-w-16 ax-h-16 ax-bg-danger-100 dark:ax-bg-danger-900 ax-rounded-full ax-flex ax-items-center ax-justify-center\\\">\\n <i class=\\\"fa-solid fa-exclamation-triangle ax-text-2xl ax-text-danger-600 dark:ax-text-danger-400\\\"></i>\\n </div>\\n <h2 class=\\\"ax-font-semibold ax-text-lg ax-text-neutral-700 dark:ax-text-neutral-300\\\">\\n Authentication Failed\\n </h2>\\n <p class=\\\"ax-text-sm ax-text-neutral-500 dark:ax-text-neutral-400 ax-mb-6\\\">\\n {{ error$ | async }}\\n </p>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 sm:ax-flex-row sm:ax-justify-center\\\">\\n <ax-button \\n color=\\\"primary\\\" \\n text=\\\"Try Again\\\" \\n (onClick)=\\\"handleRetry()\\\"\\n class=\\\"ax-w-full sm:ax-w-auto\\\"\\n >\\n </ax-button>\\n <ax-button \\n color=\\\"default\\\" \\n text=\\\"Go Home\\\" \\n (onClick)=\\\"handleGoHome()\\\"\\n class=\\\"ax-w-full sm:ax-w-auto\\\"\\n >\\n </ax-button>\\n </div>\\n </div>\\n\\n <!-- Success State (briefly shown before redirect) -->\\n <div *ngIf=\\\"!(isLoading$ | async) && !(error$ | async)\\\" class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-4\\\">\\n <div class=\\\"ax-w-16 ax-h-16 ax-bg-success-100 dark:ax-bg-success-900 ax-rounded-full ax-flex ax-items-center ax-justify-center\\\">\\n <i class=\\\"fa-solid fa-check ax-text-2xl ax-text-success-600 dark:ax-text-success-400\\\"></i>\\n </div>\\n <h2 class=\\\"ax-font-semibold ax-text-lg ax-text-neutral-700 dark:ax-text-neutral-300\\\">\\n Authentication Successful!\\n </h2>\\n <p class=\\\"ax-text-sm ax-text-neutral-500 dark:ax-text-neutral-400\\\">\\n Redirecting you to your dashboard...\\n </p>\\n </div>\\n </div>\\n </div>\\n</ng-container> \", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i3.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i4.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXPOAuthCallbackComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-oauth-callback', imports: [CommonModule, AXButtonModule, AXLoadingModule, AXTranslationModule], standalone: true, template: \"<ng-container *translate=\\\"let t\\\">\\n <div class=\\\"ax-h-full ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8\\\">\\n <div class=\\\"ax-w-96 ax-text-center\\\">\\n <!-- Loading State -->\\n <div *ngIf=\\\"isLoading$ | async\\\" class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-4\\\">\\n <ax-loading class=\\\"ax-text-4xl\\\"></ax-loading>\\n <h2 class=\\\"ax-font-semibold ax-text-lg ax-text-neutral-700 dark:ax-text-neutral-300\\\">\\n {{ status$ | async }}\\n </h2>\\n <p class=\\\"ax-text-sm ax-text-neutral-500 dark:ax-text-neutral-400\\\">\\n Please wait while we complete your authentication...\\n </p>\\n </div>\\n\\n <!-- Error State -->\\n <div *ngIf=\\\"(error$ | async) && !(isLoading$ | async)\\\" class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-4\\\">\\n <div class=\\\"ax-w-16 ax-h-16 ax-bg-danger-100 dark:ax-bg-danger-900 ax-rounded-full ax-flex ax-items-center ax-justify-center\\\">\\n <i class=\\\"fa-solid fa-exclamation-triangle ax-text-2xl ax-text-danger-600 dark:ax-text-danger-400\\\"></i>\\n </div>\\n <h2 class=\\\"ax-font-semibold ax-text-lg ax-text-neutral-700 dark:ax-text-neutral-300\\\">\\n Authentication Failed\\n </h2>\\n <p class=\\\"ax-text-sm ax-text-neutral-500 dark:ax-text-neutral-400 ax-mb-6\\\">\\n {{ error$ | async }}\\n </p>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 sm:ax-flex-row sm:ax-justify-center\\\">\\n <ax-button \\n color=\\\"primary\\\" \\n text=\\\"Try Again\\\" \\n (onClick)=\\\"handleRetry()\\\"\\n class=\\\"ax-w-full sm:ax-w-auto\\\"\\n >\\n </ax-button>\\n <ax-button \\n color=\\\"default\\\" \\n text=\\\"Go Home\\\" \\n (onClick)=\\\"handleGoHome()\\\"\\n class=\\\"ax-w-full sm:ax-w-auto\\\"\\n >\\n </ax-button>\\n </div>\\n </div>\\n\\n <!-- Success State (briefly shown before redirect) -->\\n <div *ngIf=\\\"!(isLoading$ | async) && !(error$ | async)\\\" class=\\\"ax-flex ax-flex-col ax-items-center ax-gap-4\\\">\\n <div class=\\\"ax-w-16 ax-h-16 ax-bg-success-100 dark:ax-bg-success-900 ax-rounded-full ax-flex ax-items-center ax-justify-center\\\">\\n <i class=\\\"fa-solid fa-check ax-text-2xl ax-text-success-600 dark:ax-text-success-400\\\"></i>\\n </div>\\n <h2 class=\\\"ax-font-semibold ax-text-lg ax-text-neutral-700 dark:ax-text-neutral-300\\\">\\n Authentication Successful!\\n </h2>\\n <p class=\\\"ax-text-sm ax-text-neutral-500 dark:ax-text-neutral-400\\\">\\n Redirecting you to your dashboard...\\n </p>\\n </div>\\n </div>\\n </div>\\n</ng-container> \" }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgtY2FsbGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2F1dGgvc3JjL2xpYi9wYWdlcy9jYWxsYmFjay9vYXV0aC1jYWxsYmFjay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXV0aC9zcmMvbGliL3BhZ2VzL2NhbGxiYWNrL29hdXRoLWNhbGxiYWNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFzQixpQkFBaUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFrQixxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7QUFRMUUsTUFBTSxPQUFPLHlCQUF5QjtJQU50QztRQU9FLCtDQUErQztRQUV2QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsVUFB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RSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztZQUMxRCxPQUFPO1FBQ1QsQ0FBQztRQUNELHdCQUF3QjtRQUN4QixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELFlBQVk7SUFFWixtQ0FBbUM7SUFFekIsV0FBVztRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVTLFlBQVk7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBdEZVLHlCQUF5QjtrR0FBekIseUJBQXlCLDhFQ2pCdEMsK29GQXlEZ0IsMkNEM0NKLFlBQVksa0lBQUUsY0FBYyw2WEFBRSxlQUFlLDhLQUFFLG1CQUFtQjs7MkZBR2pFLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSxvQkFBb0IsV0FFckIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyxjQUNqRSxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYTG9hZGluZ01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sb2FkaW5nJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQQmFzZUNyZWRlbnRpYWxzLCBBWFBTZXNzaW9uU2VydmljZSwgQVhQQXV0aFN0cmF0ZWd5UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUEhvbWVQYWdlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYTUF1dGhDb25maWdzLCBBWE1fQVVUSF9DT05GSUdfVE9LRU4gfSBmcm9tICcuLi8uLi9hdXRoLmNvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1vYXV0aC1jYWxsYmFjaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9vYXV0aC1jYWxsYmFjay5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYQnV0dG9uTW9kdWxlLCBBWExvYWRpbmdNb2R1bGUsIEFYVHJhbnNsYXRpb25Nb2R1bGVdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBPQXV0aENhbGxiYWNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgaG9tZVBhZ2VTZXJ2aWNlID0gaW5qZWN0KEFYUEhvbWVQYWdlU2VydmljZSk7XG4gIHByb3RlY3RlZCBjb25maWdzOiBBWE1BdXRoQ29uZmlncyA9IGluamVjdDxBWE1BdXRoQ29uZmlncz4oQVhNX0FVVEhfQ09ORklHX1RPS0VOKTtcbiAgcHJpdmF0ZSBhdXRoU3RyYXRlZ3lSZWdpc3RyeSA9IGluamVjdChBWFBBdXRoU3RyYXRlZ3lSZWdpc3RyeVNlcnZpY2UpO1xuICBwcml2YXRlIG9pZGNTdHJhdGVneSA9IHRoaXMuYXV0aFN0cmF0ZWd5UmVnaXN0cnkuZ2V0KCdvaWRjJyk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQcm9wZXJ0aWVzICAgLS0tLVxuXG4gIHByb3RlY3RlZCBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHJvdGVjdGVkIGVycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCBzdGF0dXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdQcm9jZXNzaW5nIGF1dGhvcml6YXRpb24uLi4nKTtcbiAgLy8gUmVtb3ZlZDogQElucHV0KCkgZmxvd1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgTGlmZWN5Y2xlIE1ldGhvZHMgICAtLS0tXG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICAgIGNvbnN0IGNvZGUgPSBxdWVyeVBhcmFtc1snY29kZSddO1xuICAgICAgY29uc3QgZXJyb3IgPSBxdWVyeVBhcmFtc1snZXJyb3InXTtcbiAgICAgIC8vIFJlbW92ZWQ6IGZsb3dQYXJhbSBhbmQgaXRzIGFzc2lnbm1lbnRcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BdXRoIGVycm9yOiAke2Vycm9yfSAtICR7cXVlcnlQYXJhbXNbJ2Vycm9yX2Rlc2NyaXB0aW9uJ10gfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgfVxuICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aG9yaXphdGlvbiBjb2RlIHJlY2VpdmVkIGZyb20gT0F1dGggcHJvdmlkZXInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdHVzJC5uZXh0KCdFeGNoYW5naW5nIGF1dGhvcml6YXRpb24gY29kZSBmb3IgdG9rZW5zLi4uJyk7XG4gICAgICBcbiAgICAgIC8vIFVzZSByZWRpcmVjdCBVUkkgZnJvbSBpbmplY3RlZCBhdXRoIGNvbmZpZ3NcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gdGhpcy5jb25maWdzLmF1dGhDb25maWc/LnJlZGlyZWN0VXJpIHx8ICcvYXV0aC9heHAtb2F1dGgtY2FsbGJhY2snO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5vaWRjU3RyYXRlZ3kgJiYgdHlwZW9mIHRoaXMub2lkY1N0cmF0ZWd5LmNvbXBsZXRlQXV0aG9yaXphdGlvbkNvZGVGbG93ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub2lkY1N0cmF0ZWd5LmNvbXBsZXRlQXV0aG9yaXphdGlvbkNvZGVGbG93KHtcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIHJlZGlyZWN0VXJpOiByZWRpcmVjdFVyaSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyQubmV4dCgnQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bCEgUmVkaXJlY3RpbmcuLi4nKTtcbiAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGVBZnRlclN1Y2Nlc3MoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignT0F1dGggY2FsbGJhY2sgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgdGhpcy5lcnJvciQubmV4dCgnQXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBOYXZpZ2F0aW9uICAgLS0tLVxuXG4gIHByaXZhdGUgYXN5bmMgbmF2aWdhdGVBZnRlclN1Y2Nlc3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVXNlIGF3YWl0IHdpdGggcm91dGVyLm5hdmlnYXRlIHRvIGVuc3VyZSBuYXZpZ2F0aW9uIGNvbXBsZXRlc1xuICAgIGlmICh0aGlzLnNlc3Npb25TZXJ2aWNlLnRlbmFudD8uaWQgPT0gbnVsbCkge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXV0aC9hY2NvdW50L3RlbmFudC1jaG9vc2VyJ10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZXNzaW9uU2VydmljZS5hcHBsaWNhdGlvbj8uaWQgPT0gbnVsbCkge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXV0aC9hY2NvdW50L2FwcC1jaG9vc2VyJ10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBOYXZpZ2F0ZSB0byBob21lIHBhZ2VcbiAgICBhd2FpdCB0aGlzLmhvbWVQYWdlU2VydmljZS5uYXZpZ2F0ZVRvKCk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFVJIEhhbmRsZXJzICAgLS0tLVxuXG4gIHByb3RlY3RlZCBoYW5kbGVSZXRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hdXRoL2xvZ2luJ10pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUdvSG9tZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cbiIsIjxuZy1jb250YWluZXIgKnRyYW5zbGF0ZT1cImxldCB0XCI+XG4gIDxkaXYgY2xhc3M9XCJheC1oLWZ1bGwgYXgtZmxleCBheC1mbGV4LWNvbCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1jZW50ZXIgYXgtcC04XCI+XG4gICAgPGRpdiBjbGFzcz1cImF4LXctOTYgYXgtdGV4dC1jZW50ZXJcIj5cbiAgICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtaXRlbXMtY2VudGVyIGF4LWdhcC00XCI+XG4gICAgICAgIDxheC1sb2FkaW5nIGNsYXNzPVwiYXgtdGV4dC00eGxcIj48L2F4LWxvYWRpbmc+XG4gICAgICAgIDxoMiBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1sZyBheC10ZXh0LW5ldXRyYWwtNzAwIGRhcms6YXgtdGV4dC1uZXV0cmFsLTMwMFwiPlxuICAgICAgICAgIHt7IHN0YXR1cyQgfCBhc3luYyB9fVxuICAgICAgICA8L2gyPlxuICAgICAgICA8cCBjbGFzcz1cImF4LXRleHQtc20gYXgtdGV4dC1uZXV0cmFsLTUwMCBkYXJrOmF4LXRleHQtbmV1dHJhbC00MDBcIj5cbiAgICAgICAgICBQbGVhc2Ugd2FpdCB3aGlsZSB3ZSBjb21wbGV0ZSB5b3VyIGF1dGhlbnRpY2F0aW9uLi4uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEVycm9yIFN0YXRlIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIihlcnJvciQgfCBhc3luYykgJiYgIShpc0xvYWRpbmckIHwgYXN5bmMpXCIgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdy0xNiBheC1oLTE2IGF4LWJnLWRhbmdlci0xMDAgZGFyazpheC1iZy1kYW5nZXItOTAwIGF4LXJvdW5kZWQtZnVsbCBheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgYXgtdGV4dC0yeGwgYXgtdGV4dC1kYW5nZXItNjAwIGRhcms6YXgtdGV4dC1kYW5nZXItNDAwXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGgyIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZCBheC10ZXh0LWxnIGF4LXRleHQtbmV1dHJhbC03MDAgZGFyazpheC10ZXh0LW5ldXRyYWwtMzAwXCI+XG4gICAgICAgICAgQXV0aGVudGljYXRpb24gRmFpbGVkXG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxwIGNsYXNzPVwiYXgtdGV4dC1zbSBheC10ZXh0LW5ldXRyYWwtNTAwIGRhcms6YXgtdGV4dC1uZXV0cmFsLTQwMCBheC1tYi02XCI+XG4gICAgICAgICAge3sgZXJyb3IkIHwgYXN5bmMgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMiBzbTpheC1mbGV4LXJvdyBzbTpheC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxheC1idXR0b24gXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgICAgIHRleHQ9XCJUcnkgQWdhaW5cIiBcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZVJldHJ5KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC13LWZ1bGwgc206YXgtdy1hdXRvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgPGF4LWJ1dHRvbiBcbiAgICAgICAgICAgIGNvbG9yPVwiZGVmYXVsdFwiIFxuICAgICAgICAgICAgdGV4dD1cIkdvIEhvbWVcIiBcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUdvSG9tZSgpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdy1mdWxsIHNtOmF4LXctYXV0b1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFN1Y2Nlc3MgU3RhdGUgKGJyaWVmbHkgc2hvd24gYmVmb3JlIHJlZGlyZWN0KSAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCIhKGlzTG9hZGluZyQgfCBhc3luYykgJiYgIShlcnJvciQgfCBhc3luYylcIiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtaXRlbXMtY2VudGVyIGF4LWdhcC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC13LTE2IGF4LWgtMTYgYXgtYmctc3VjY2Vzcy0xMDAgZGFyazpheC1iZy1zdWNjZXNzLTkwMCBheC1yb3VuZGVkLWZ1bGwgYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZWNrIGF4LXRleHQtMnhsIGF4LXRleHQtc3VjY2Vzcy02MDAgZGFyazpheC10ZXh0LXN1Y2Nlc3MtNDAwXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGgyIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZCBheC10ZXh0LWxnIGF4LXRleHQtbmV1dHJhbC03MDAgZGFyazpheC10ZXh0LW5ldXRyYWwtMzAwXCI+XG4gICAgICAgICAgQXV0aGVudGljYXRpb24gU3VjY2Vzc2Z1bCFcbiAgICAgICAgPC9oMj5cbiAgICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LXNtIGF4LXRleHQtbmV1dHJhbC01MDAgZGFyazpheC10ZXh0LW5ldXRyYWwtNDAwXCI+XG4gICAgICAgICAgUmVkaXJlY3RpbmcgeW91IHRvIHlvdXIgZGFzaGJvYXJkLi4uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPiAiXX0="],"names":["i3","i4"],"mappings":"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"}
@@ -1,239 +0,0 @@
1
- import * as i2$1 from '@acorex/components/button';
2
- import { AXButtonModule } from '@acorex/components/button';
3
- import * as i9 from '@acorex/components/check-box';
4
- import { AXCheckBoxModule } from '@acorex/components/check-box';
5
- import * as i1$2 from '@acorex/components/decorators';
6
- import { AXDecoratorModule } from '@acorex/components/decorators';
7
- import { AXDialogService } from '@acorex/components/dialog';
8
- import * as i1$1 from '@acorex/components/form';
9
- import { AXFormModule, AXFormComponent } from '@acorex/components/form';
10
- import * as i7 from '@acorex/components/label';
11
- import { AXLabelModule } from '@acorex/components/label';
12
- import * as i2$2 from '@acorex/components/loading';
13
- import { AXLoadingModule } from '@acorex/components/loading';
14
- import * as i5 from '@acorex/components/password-box';
15
- import { AXPasswordBoxModule } from '@acorex/components/password-box';
16
- import * as i4 from '@acorex/components/text-box';
17
- import { AXTextBoxModule } from '@acorex/components/text-box';
18
- import * as i6 from '@acorex/core/translation';
19
- import { AXTranslationModule } from '@acorex/core/translation';
20
- import * as i1 from '@angular/common';
21
- import { CommonModule } from '@angular/common';
22
- import * as i0 from '@angular/core';
23
- import { inject, ViewChild, Component } from '@angular/core';
24
- import { RouterModule, ActivatedRoute, Router } from '@angular/router';
25
- import { AXToastService } from '@acorex/components/toast';
26
- import { AXValidationModule } from '@acorex/core/validation';
27
- import { AXPSessionService } from '@acorex/platform/auth';
28
- import { AXPHomePageService } from '@acorex/platform/common';
29
- import * as i2 from '@angular/forms';
30
- import { FormsModule } from '@angular/forms';
31
- import { BehaviorSubject, firstValueFrom } from 'rxjs';
32
- import { A as AXM_AUTH_CONFIG_TOKEN, a as AXMAuthenticationTypes } from './acorex-modules-auth-acorex-modules-auth-5TIjp5UG.mjs';
33
-
34
- const MODULES = [
35
- CommonModule,
36
- FormsModule,
37
- AXFormModule,
38
- AXTextBoxModule,
39
- AXPasswordBoxModule,
40
- AXButtonModule,
41
- AXLabelModule,
42
- AXDecoratorModule,
43
- AXCheckBoxModule,
44
- AXTranslationModule,
45
- AXTranslationModule,
46
- AXLoadingModule,
47
- RouterModule,
48
- AXValidationModule,
49
- ];
50
- class AXPLoginPasswordComponent {
51
- constructor() {
52
- this.configs = inject(AXM_AUTH_CONFIG_TOKEN);
53
- this.v1 = '';
54
- this.v2 = '';
55
- this.isLoading$ = new BehaviorSubject(false);
56
- this.isExternalLoading$ = new BehaviorSubject(false);
57
- this.submitText = 'signin.submit';
58
- this.dialogService = inject(AXDialogService);
59
- this.sessionService = inject(AXPSessionService);
60
- this.activateRoute = inject(ActivatedRoute);
61
- this.homePageService = inject(AXPHomePageService);
62
- this.toastService = inject(AXToastService);
63
- this.router = inject(Router);
64
- this.isKeepLogin = false;
65
- }
66
- // Computed property to check if external providers exist
67
- get hasExternalProviders() {
68
- return !!(this.configs?.externalProviders && Object.keys(this.configs.externalProviders).length > 0);
69
- }
70
- ngOnInit() {
71
- this.l2 = 'password';
72
- switch (this.configs.type) {
73
- case AXMAuthenticationTypes.EmailPassword:
74
- this.l1 = 'email';
75
- break;
76
- case AXMAuthenticationTypes.MobilePassword:
77
- this.l1 = 'mobile';
78
- break;
79
- case AXMAuthenticationTypes.UsernameEmailPassword:
80
- this.l1 = 'username-email';
81
- break;
82
- case AXMAuthenticationTypes.UsernamePassword:
83
- default:
84
- this.l1 = 'username';
85
- }
86
- }
87
- handleForgotOnClick() {
88
- this.router.navigate(['/auth/forgot']);
89
- }
90
- handleRegisterOnClick() {
91
- this.router.navigate([this.configs.signup?.url || '/auth/register']);
92
- }
93
- handleLoginClick() {
94
- const redirectUrl = this.activateRoute.snapshot.queryParams['redirectUrl'];
95
- this.form.validate().then(async (form) => {
96
- if (form.result) {
97
- this.isLoading$.next(true);
98
- this.submitText = 'processing';
99
- this.submitText = 'redirecting';
100
- try {
101
- await this.sessionService.signin({
102
- strategy: 'oidc',
103
- username: this.v1,
104
- password: this.v2,
105
- });
106
- await this.sessionService.signInComplete();
107
- // Check authentication status before navigation
108
- const isAuthenticated = await firstValueFrom(this.sessionService.isAuthenticated$);
109
- if (!isAuthenticated) {
110
- throw new Error('Authentication failed after signin');
111
- }
112
- const currentApplication = await firstValueFrom(this.sessionService.application$);
113
- if (!currentApplication) {
114
- if (this.sessionService.tenant?.id == null) {
115
- this.router.navigate(['/auth/account/tenant-chooser']);
116
- }
117
- else if (this.sessionService.application?.id == null) {
118
- this.router.navigate(['/auth/account/app-chooser']);
119
- }
120
- }
121
- else if (redirectUrl) {
122
- this.router.navigate([redirectUrl]);
123
- }
124
- else {
125
- await this.homePageService.navigateTo();
126
- }
127
- }
128
- catch (error) {
129
- let errorMsg = error?.error?.error_description ||
130
- error?.error?.error ||
131
- error?.message ||
132
- 'An error occurred during sign in.';
133
- if (typeof errorMsg === 'object') {
134
- // اگر شیء بود، سعی کن یک فیلد message یا description را نمایش بدهی
135
- errorMsg = errorMsg.message || errorMsg.error_description || JSON.stringify(errorMsg);
136
- }
137
- this.toastService.show({
138
- color: 'danger',
139
- content: errorMsg,
140
- timeOut: 5000,
141
- });
142
- console.log({ error });
143
- this.submitText = 'signin.submit';
144
- this.v2 = null;
145
- this.isLoading$.next(false);
146
- }
147
- }
148
- });
149
- }
150
- async handleExternalSignIn(provider) {
151
- try {
152
- this.isExternalLoading$.next(true);
153
- // Get provider configuration (optional, for validation)
154
- const providerConfig = this.configs?.externalProviders?.[provider];
155
- if (!providerConfig) {
156
- throw new Error(`Provider '${provider}' is not configured`);
157
- }
158
- // Get application configuration for OIDC
159
- const clientId = this.configs?.authConfig?.clientId || 'spa-client';
160
- const redirectUri = encodeURIComponent(`${window.location.origin}/auth/axp-oauth-callback`);
161
- const authorizeUrl = `${this.configs?.authConfig?.issuer}/connect/authorize`;
162
- // Centralized PKCE code verifier logic
163
- const codeVerifier = this.generateRandomString(128);
164
- localStorage.setItem('pkce_code_verifier', codeVerifier);
165
- const codeChallenge = await this.generateCodeChallenge(codeVerifier);
166
- // Store provider for callback handling
167
- localStorage.setItem('oauth_provider', provider);
168
- // Build the authorization URL according to the required format
169
- const authUrl = `${authorizeUrl}` +
170
- `?response_type=code` +
171
- `&client_id=${clientId}` +
172
- `&redirect_uri=${redirectUri}` +
173
- `&scope=openid profile email` +
174
- `&code_challenge=${codeChallenge}` +
175
- `&code_challenge_method=S256` +
176
- `&prompt=login` +
177
- `&acr_values=${provider}`;
178
- console.log('Redirecting to:', authUrl);
179
- // Use window.location.assign to redirect
180
- window.location.assign(authUrl);
181
- }
182
- catch (error) {
183
- console.error(`${provider} sign-in error:`, error);
184
- this.isExternalLoading$.next(false);
185
- // Optionally show an error message to the user here
186
- }
187
- }
188
- /**
189
- * Generates a code challenge for PKCE (Proof Key for Code Exchange)
190
- */
191
- async generateCodeChallenge(codeVerifier) {
192
- // Create SHA256 hash of the code verifier
193
- const hash = await this.sha256(codeVerifier);
194
- // Base64url encode the hash
195
- return this.base64UrlEncode(hash);
196
- }
197
- /**
198
- * Generates a random string for code verifier
199
- */
200
- generateRandomString(length) {
201
- const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
202
- let text = '';
203
- for (let i = 0; i < length; i++) {
204
- text += possible.charAt(Math.floor(Math.random() * possible.length));
205
- }
206
- return text;
207
- }
208
- /**
209
- * Creates SHA256 hash of the input string using Web Crypto API
210
- */
211
- async sha256(str) {
212
- const encoder = new TextEncoder();
213
- const data = encoder.encode(str);
214
- return await crypto.subtle.digest('SHA-256', data);
215
- }
216
- /**
217
- * Base64url encodes an ArrayBuffer
218
- */
219
- base64UrlEncode(buffer) {
220
- const bytes = new Uint8Array(buffer);
221
- let binary = '';
222
- for (let i = 0; i < bytes.byteLength; i++) {
223
- binary += String.fromCharCode(bytes[i]);
224
- }
225
- return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
226
- }
227
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPLoginPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
228
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.3", type: AXPLoginPasswordComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: AXFormComponent, descendants: true }], ngImport: i0, template: "<ng-container *translate=\"let t\">\n <div class=\"ax-text-center ax-mb-4\">\n <h1 class=\"ax-font-bold ax-text-xl ax-mb-2\">\n {{ t('signin.title', { scope: 'auth' }) | async }}\n </h1>\n <p class=\"ax-text-base ax-text-neutral-600\">\n {{ t('signin.hint', { scope: 'auth' }) | async }}\n </p>\n </div>\n <div class=\"ax-w-80 lg:ax-w-96\">\n <ax-form>\n <div class=\"ax-flex ax-flex-col ax-gap-6\">\n <ax-form-field>\n <ax-label>{{ t(l1, { scope: 'auth' }) | async }}</ax-label>\n <ax-text-box [name]=\"'username'\" [autoComplete]=\"'username'\" [(value)]=\"v1\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-text-box>\n </ax-form-field>\n <ax-form-field>\n <ax-label>{{ t(l2, { scope: 'auth' }) | async }}</ax-label>\n <ax-password-box [name]=\"'password'\" [autoComplete]=\"'current-password'\" [(value)]=\"v2\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-password-box>\n </ax-form-field>\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <ax-check-box [(ngModel)]=\"isKeepLogin\">\n <ax-label class=\"ax-mb-0\">{{ t('signin.remember', { scope: 'auth' }) | async }}</ax-label>\n </ax-check-box>\n <ax-button\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"t('forgot.password', { scope: 'auth' }) | async\"\n look=\"blank\"\n (onClick)=\"handleForgotOnClick()\"\n >\n </ax-button>\n </div>\n </div>\n <ax-button\n color=\"primary\"\n class=\"ax-mt-6 ax-w-full\"\n [text]=\"t(submitText, { scope: 'auth' }) | async\"\n (onClick)=\"handleLoginClick()\"\n [disabled]=\"isLoading$ | async\"\n [type]=\"'submit'\"\n >\n @if (isLoading$ | async) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n @if (hasExternalProviders || configs.signup?.enable) {\n <div class=\"ax-heading ax-heading-center !ax-my-8\">\n <span>{{ t('signin.or', { scope: 'auth' }) | async }}</span>\n </div>\n }\n <div class=\"ax-flex ax-flex-col ax-gap-2 lg:ax-flex-row ax-justify-between ax-mt-6\">\n @if (configs.externalProviders?.['google']) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n text=\"{{ 'authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n (onClick)=\"handleExternalSignIn('google')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-google fa-lg ax-text-danger-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['apple']) {\n <ax-button\n text=\"{{ 'authentication.with-apple' | translate | async }}\"\n [color]=\"'default'\"\n (onClick)=\"handleExternalSignIn('apple')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-apple fa-xl\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['microsoft']) {\n <ax-button\n text=\"{{ 'authentication.with-microsoft' | translate | async }}\"\n [color]=\"'default'\"\n (onClick)=\"handleExternalSignIn('microsoft')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-microsoft fa-lg text-blue-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n </div>\n </ax-form>\n @if (configs.signup?.enable) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n (onClick)=\"handleRegisterOnClick()\"\n text=\"{{ t('register', { scope: 'auth' }) | async }}\"\n [color]=\"'default'\"\n >\n </ax-button>\n }\n </div>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i1$1.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i1$1.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "look", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "directive", type: i1$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i4.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXPasswordBoxModule }, { kind: "component", type: i5.AXPasswordBoxComponent, selector: "ax-password-box", inputs: ["readonly", "disabled", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "autoComplete", "showToggleButton", "class"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i7.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i9.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "checked", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i6.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i2$2.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }] }); }
229
- }
230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.3", ngImport: i0, type: AXPLoginPasswordComponent, decorators: [{
231
- type: Component,
232
- args: [{ imports: [...MODULES], template: "<ng-container *translate=\"let t\">\n <div class=\"ax-text-center ax-mb-4\">\n <h1 class=\"ax-font-bold ax-text-xl ax-mb-2\">\n {{ t('signin.title', { scope: 'auth' }) | async }}\n </h1>\n <p class=\"ax-text-base ax-text-neutral-600\">\n {{ t('signin.hint', { scope: 'auth' }) | async }}\n </p>\n </div>\n <div class=\"ax-w-80 lg:ax-w-96\">\n <ax-form>\n <div class=\"ax-flex ax-flex-col ax-gap-6\">\n <ax-form-field>\n <ax-label>{{ t(l1, { scope: 'auth' }) | async }}</ax-label>\n <ax-text-box [name]=\"'username'\" [autoComplete]=\"'username'\" [(value)]=\"v1\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-text-box>\n </ax-form-field>\n <ax-form-field>\n <ax-label>{{ t(l2, { scope: 'auth' }) | async }}</ax-label>\n <ax-password-box [name]=\"'password'\" [autoComplete]=\"'current-password'\" [(value)]=\"v2\">\n <ax-validation-rule rule=\"required\"></ax-validation-rule>\n </ax-password-box>\n </ax-form-field>\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <ax-check-box [(ngModel)]=\"isKeepLogin\">\n <ax-label class=\"ax-mb-0\">{{ t('signin.remember', { scope: 'auth' }) | async }}</ax-label>\n </ax-check-box>\n <ax-button\n color=\"primary\"\n class=\"ax-sm\"\n [text]=\"t('forgot.password', { scope: 'auth' }) | async\"\n look=\"blank\"\n (onClick)=\"handleForgotOnClick()\"\n >\n </ax-button>\n </div>\n </div>\n <ax-button\n color=\"primary\"\n class=\"ax-mt-6 ax-w-full\"\n [text]=\"t(submitText, { scope: 'auth' }) | async\"\n (onClick)=\"handleLoginClick()\"\n [disabled]=\"isLoading$ | async\"\n [type]=\"'submit'\"\n >\n @if (isLoading$ | async) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n @if (hasExternalProviders || configs.signup?.enable) {\n <div class=\"ax-heading ax-heading-center !ax-my-8\">\n <span>{{ t('signin.or', { scope: 'auth' }) | async }}</span>\n </div>\n }\n <div class=\"ax-flex ax-flex-col ax-gap-2 lg:ax-flex-row ax-justify-between ax-mt-6\">\n @if (configs.externalProviders?.['google']) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n text=\"{{ 'authentication.with-google' | translate | async }}\"\n [color]=\"'default'\"\n (onClick)=\"handleExternalSignIn('google')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-google fa-lg ax-text-danger-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['apple']) {\n <ax-button\n text=\"{{ 'authentication.with-apple' | translate | async }}\"\n [color]=\"'default'\"\n (onClick)=\"handleExternalSignIn('apple')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-apple fa-xl\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n @if (configs.externalProviders?.['microsoft']) {\n <ax-button\n text=\"{{ 'authentication.with-microsoft' | translate | async }}\"\n [color]=\"'default'\"\n (onClick)=\"handleExternalSignIn('microsoft')\"\n [disabled]=\"isExternalLoading$ | async\"\n >\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-brands fa-microsoft fa-lg text-blue-500\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-loading *ngIf=\"isExternalLoading$ | async\"></ax-loading>\n </ax-button>\n }\n </div>\n </ax-form>\n @if (configs.signup?.enable) {\n <ax-button\n class=\"ax-w-full ax-mt-2\"\n (onClick)=\"handleRegisterOnClick()\"\n text=\"{{ t('register', { scope: 'auth' }) | async }}\"\n [color]=\"'default'\"\n >\n </ax-button>\n }\n </div>\n</ng-container>\n" }]
233
- }], propDecorators: { form: [{
234
- type: ViewChild,
235
- args: [AXFormComponent]
236
- }] } });
237
-
238
- export { AXPLoginPasswordComponent };
239
- //# sourceMappingURL=acorex-modules-auth-password.component-Du0EBIiw.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-auth-password.component-Du0EBIiw.mjs","sources":["../tmp-esm2022/auth/lib/pages/login/password/password.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPasswordBoxModule } from '@acorex/components/password-box';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { Component, ViewChild, inject } from '@angular/core';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXValidationModule } from '@acorex/core/validation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPHomePageService } from '@acorex/platform/common';\nimport { FormsModule } from '@angular/forms';\nimport { BehaviorSubject, firstValueFrom } from 'rxjs';\nimport { AXMAuthenticationTypes, AXM_AUTH_CONFIG_TOKEN } from '../../../auth.config';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"@acorex/components/form\";\nimport * as i4 from \"@acorex/components/text-box\";\nimport * as i5 from \"@acorex/components/password-box\";\nimport * as i6 from \"@acorex/components/button\";\nimport * as i7 from \"@acorex/components/label\";\nimport * as i8 from \"@acorex/components/decorators\";\nimport * as i9 from \"@acorex/components/check-box\";\nimport * as i10 from \"@acorex/core/translation\";\nimport * as i11 from \"@acorex/components/loading\";\nconst MODULES = [\n CommonModule,\n FormsModule,\n AXFormModule,\n AXTextBoxModule,\n AXPasswordBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXDecoratorModule,\n AXCheckBoxModule,\n AXTranslationModule,\n AXTranslationModule,\n AXLoadingModule,\n RouterModule,\n AXValidationModule,\n];\nexport class AXPLoginPasswordComponent {\n constructor() {\n this.configs = inject(AXM_AUTH_CONFIG_TOKEN);\n this.v1 = '';\n this.v2 = '';\n this.isLoading$ = new BehaviorSubject(false);\n this.isExternalLoading$ = new BehaviorSubject(false);\n this.submitText = 'signin.submit';\n this.dialogService = inject(AXDialogService);\n this.sessionService = inject(AXPSessionService);\n this.activateRoute = inject(ActivatedRoute);\n this.homePageService = inject(AXPHomePageService);\n this.toastService = inject(AXToastService);\n this.router = inject(Router);\n this.isKeepLogin = false;\n }\n // Computed property to check if external providers exist\n get hasExternalProviders() {\n return !!(this.configs?.externalProviders && Object.keys(this.configs.externalProviders).length > 0);\n }\n ngOnInit() {\n this.l2 = 'password';\n switch (this.configs.type) {\n case AXMAuthenticationTypes.EmailPassword:\n this.l1 = 'email';\n break;\n case AXMAuthenticationTypes.MobilePassword:\n this.l1 = 'mobile';\n break;\n case AXMAuthenticationTypes.UsernameEmailPassword:\n this.l1 = 'username-email';\n break;\n case AXMAuthenticationTypes.UsernamePassword:\n default:\n this.l1 = 'username';\n }\n }\n handleForgotOnClick() {\n this.router.navigate(['/auth/forgot']);\n }\n handleRegisterOnClick() {\n this.router.navigate([this.configs.signup?.url || '/auth/register']);\n }\n handleLoginClick() {\n const redirectUrl = this.activateRoute.snapshot.queryParams['redirectUrl'];\n this.form.validate().then(async (form) => {\n if (form.result) {\n this.isLoading$.next(true);\n this.submitText = 'processing';\n this.submitText = 'redirecting';\n try {\n await this.sessionService.signin({\n strategy: 'oidc',\n username: this.v1,\n password: this.v2,\n });\n await this.sessionService.signInComplete();\n // Check authentication status before navigation\n const isAuthenticated = await firstValueFrom(this.sessionService.isAuthenticated$);\n if (!isAuthenticated) {\n throw new Error('Authentication failed after signin');\n }\n const currentApplication = await firstValueFrom(this.sessionService.application$);\n if (!currentApplication) {\n if (this.sessionService.tenant?.id == null) {\n this.router.navigate(['/auth/account/tenant-chooser']);\n }\n else if (this.sessionService.application?.id == null) {\n this.router.navigate(['/auth/account/app-chooser']);\n }\n }\n else if (redirectUrl) {\n this.router.navigate([redirectUrl]);\n }\n else {\n await this.homePageService.navigateTo();\n }\n }\n catch (error) {\n let errorMsg = error?.error?.error_description ||\n error?.error?.error ||\n error?.message ||\n 'An error occurred during sign in.';\n if (typeof errorMsg === 'object') {\n // اگر شیء بود، سعی کن یک فیلد message یا description را نمایش بدهی\n errorMsg = errorMsg.message || errorMsg.error_description || JSON.stringify(errorMsg);\n }\n this.toastService.show({\n color: 'danger',\n content: errorMsg,\n timeOut: 5000,\n });\n console.log({ error });\n this.submitText = 'signin.submit';\n this.v2 = null;\n this.isLoading$.next(false);\n }\n }\n });\n }\n async handleExternalSignIn(provider) {\n try {\n this.isExternalLoading$.next(true);\n // Get provider configuration (optional, for validation)\n const providerConfig = this.configs?.externalProviders?.[provider];\n if (!providerConfig) {\n throw new Error(`Provider '${provider}' is not configured`);\n }\n // Get application configuration for OIDC\n const clientId = this.configs?.authConfig?.clientId || 'spa-client';\n const redirectUri = encodeURIComponent(`${window.location.origin}/auth/axp-oauth-callback`);\n const authorizeUrl = `${this.configs?.authConfig?.issuer}/connect/authorize`;\n // Centralized PKCE code verifier logic\n const codeVerifier = this.generateRandomString(128);\n localStorage.setItem('pkce_code_verifier', codeVerifier);\n const codeChallenge = await this.generateCodeChallenge(codeVerifier);\n // Store provider for callback handling\n localStorage.setItem('oauth_provider', provider);\n // Build the authorization URL according to the required format\n const authUrl = `${authorizeUrl}` +\n `?response_type=code` +\n `&client_id=${clientId}` +\n `&redirect_uri=${redirectUri}` +\n `&scope=openid profile email` +\n `&code_challenge=${codeChallenge}` +\n `&code_challenge_method=S256` +\n `&prompt=login` +\n `&acr_values=${provider}`;\n console.log('Redirecting to:', authUrl);\n // Use window.location.assign to redirect\n window.location.assign(authUrl);\n }\n catch (error) {\n console.error(`${provider} sign-in error:`, error);\n this.isExternalLoading$.next(false);\n // Optionally show an error message to the user here\n }\n }\n /**\n * Generates a code challenge for PKCE (Proof Key for Code Exchange)\n */\n async generateCodeChallenge(codeVerifier) {\n // Create SHA256 hash of the code verifier\n const hash = await this.sha256(codeVerifier);\n // Base64url encode the hash\n return this.base64UrlEncode(hash);\n }\n /**\n * Generates a random string for code verifier\n */\n generateRandomString(length) {\n const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n let text = '';\n for (let i = 0; i < length; i++) {\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n }\n return text;\n }\n /**\n * Creates SHA256 hash of the input string using Web Crypto API\n */\n async sha256(str) {\n const encoder = new TextEncoder();\n const data = encoder.encode(str);\n return await crypto.subtle.digest('SHA-256', data);\n }\n /**\n * Base64url encodes an ArrayBuffer\n */\n base64UrlEncode(buffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXPLoginPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", type: AXPLoginPasswordComponent, isStandalone: true, selector: \"ng-component\", viewQueries: [{ propertyName: \"form\", first: true, predicate: AXFormComponent, descendants: true }], ngImport: i0, template: \"<ng-container *translate=\\\"let t\\\">\\n <div class=\\\"ax-text-center ax-mb-4\\\">\\n <h1 class=\\\"ax-font-bold ax-text-xl ax-mb-2\\\">\\n {{ t('signin.title', { scope: 'auth' }) | async }}\\n </h1>\\n <p class=\\\"ax-text-base ax-text-neutral-600\\\">\\n {{ t('signin.hint', { scope: 'auth' }) | async }}\\n </p>\\n </div>\\n <div class=\\\"ax-w-80 lg:ax-w-96\\\">\\n <ax-form>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-6\\\">\\n <ax-form-field>\\n <ax-label>{{ t(l1, { scope: 'auth' }) | async }}</ax-label>\\n <ax-text-box [name]=\\\"'username'\\\" [autoComplete]=\\\"'username'\\\" [(value)]=\\\"v1\\\">\\n <ax-validation-rule rule=\\\"required\\\"></ax-validation-rule>\\n </ax-text-box>\\n </ax-form-field>\\n <ax-form-field>\\n <ax-label>{{ t(l2, { scope: 'auth' }) | async }}</ax-label>\\n <ax-password-box [name]=\\\"'password'\\\" [autoComplete]=\\\"'current-password'\\\" [(value)]=\\\"v2\\\">\\n <ax-validation-rule rule=\\\"required\\\"></ax-validation-rule>\\n </ax-password-box>\\n </ax-form-field>\\n <div class=\\\"ax-flex ax-justify-between ax-items-center\\\">\\n <ax-check-box [(ngModel)]=\\\"isKeepLogin\\\">\\n <ax-label class=\\\"ax-mb-0\\\">{{ t('signin.remember', { scope: 'auth' }) | async }}</ax-label>\\n </ax-check-box>\\n <ax-button\\n color=\\\"primary\\\"\\n class=\\\"ax-sm\\\"\\n [text]=\\\"t('forgot.password', { scope: 'auth' }) | async\\\"\\n look=\\\"blank\\\"\\n (onClick)=\\\"handleForgotOnClick()\\\"\\n >\\n </ax-button>\\n </div>\\n </div>\\n <ax-button\\n color=\\\"primary\\\"\\n class=\\\"ax-mt-6 ax-w-full\\\"\\n [text]=\\\"t(submitText, { scope: 'auth' }) | async\\\"\\n (onClick)=\\\"handleLoginClick()\\\"\\n [disabled]=\\\"isLoading$ | async\\\"\\n [type]=\\\"'submit'\\\"\\n >\\n @if (isLoading$ | async) {\\n <ax-loading></ax-loading>\\n }\\n </ax-button>\\n @if (hasExternalProviders || configs.signup?.enable) {\\n <div class=\\\"ax-heading ax-heading-center !ax-my-8\\\">\\n <span>{{ t('signin.or', { scope: 'auth' }) | async }}</span>\\n </div>\\n }\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 lg:ax-flex-row ax-justify-between ax-mt-6\\\">\\n @if (configs.externalProviders?.['google']) {\\n <ax-button\\n class=\\\"ax-w-full ax-mt-2\\\"\\n text=\\\"{{ 'authentication.with-google' | translate | async }}\\\"\\n [color]=\\\"'default'\\\"\\n (onClick)=\\\"handleExternalSignIn('google')\\\"\\n [disabled]=\\\"isExternalLoading$ | async\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-brands fa-google fa-lg ax-text-danger-500\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n <ax-loading *ngIf=\\\"isExternalLoading$ | async\\\"></ax-loading>\\n </ax-button>\\n }\\n @if (configs.externalProviders?.['apple']) {\\n <ax-button\\n text=\\\"{{ 'authentication.with-apple' | translate | async }}\\\"\\n [color]=\\\"'default'\\\"\\n (onClick)=\\\"handleExternalSignIn('apple')\\\"\\n [disabled]=\\\"isExternalLoading$ | async\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-brands fa-apple fa-xl\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n <ax-loading *ngIf=\\\"isExternalLoading$ | async\\\"></ax-loading>\\n </ax-button>\\n }\\n @if (configs.externalProviders?.['microsoft']) {\\n <ax-button\\n text=\\\"{{ 'authentication.with-microsoft' | translate | async }}\\\"\\n [color]=\\\"'default'\\\"\\n (onClick)=\\\"handleExternalSignIn('microsoft')\\\"\\n [disabled]=\\\"isExternalLoading$ | async\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-brands fa-microsoft fa-lg text-blue-500\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n <ax-loading *ngIf=\\\"isExternalLoading$ | async\\\"></ax-loading>\\n </ax-button>\\n }\\n </div>\\n </ax-form>\\n @if (configs.signup?.enable) {\\n <ax-button\\n class=\\\"ax-w-full ax-mt-2\\\"\\n (onClick)=\\\"handleRegisterOnClick()\\\"\\n text=\\\"{{ t('register', { scope: 'auth' }) | async }}\\\"\\n [color]=\\\"'default'\\\"\\n >\\n </ax-button>\\n }\\n </div>\\n</ng-container>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"component\", type: i3.AXFormFieldComponent, selector: \"ax-form-field\", inputs: [\"labelMode\"] }, { kind: \"component\", type: i3.AXFormComponent, selector: \"ax-form\", inputs: [\"labelMode\", \"look\", \"messageStyle\", \"updateOn\"], outputs: [\"onValidate\", \"updateOnChange\"] }, { kind: \"directive\", type: i3.AXValidationRuleDirective, selector: \"ax-validation-rule\", inputs: [\"rule\", \"options\", \"message\", \"disabled\"] }, { kind: \"ngmodule\", type: AXTextBoxModule }, { kind: \"component\", type: i4.AXTextBoxComponent, selector: \"ax-text-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"value\", \"state\", \"name\", \"id\", \"placeholder\", \"maxLength\", \"allowNull\", \"type\", \"autoComplete\", \"look\", \"mask-options\", \"class\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"stateChange\", \"onValueChanged\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXPasswordBoxModule }, { kind: \"component\", type: i5.AXPasswordBoxComponent, selector: \"ax-password-box\", inputs: [\"readonly\", \"disabled\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"autoComplete\", \"showToggleButton\", \"class\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i6.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXLabelModule }, { kind: \"component\", type: i7.AXLabelComponent, selector: \"ax-label\", inputs: [\"required\", \"for\"], outputs: [\"requiredChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i8.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i8.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXCheckBoxModule }, { kind: \"component\", type: i9.AXCheckBoxComponent, selector: \"ax-check-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"color\", \"value\", \"name\", \"id\", \"checked\", \"isLoading\", \"indeterminate\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"onValueChanged\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i10.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i11.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: AXValidationModule }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i10.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXPLoginPasswordComponent, decorators: [{\n type: Component,\n args: [{ imports: [...MODULES], template: \"<ng-container *translate=\\\"let t\\\">\\n <div class=\\\"ax-text-center ax-mb-4\\\">\\n <h1 class=\\\"ax-font-bold ax-text-xl ax-mb-2\\\">\\n {{ t('signin.title', { scope: 'auth' }) | async }}\\n </h1>\\n <p class=\\\"ax-text-base ax-text-neutral-600\\\">\\n {{ t('signin.hint', { scope: 'auth' }) | async }}\\n </p>\\n </div>\\n <div class=\\\"ax-w-80 lg:ax-w-96\\\">\\n <ax-form>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-6\\\">\\n <ax-form-field>\\n <ax-label>{{ t(l1, { scope: 'auth' }) | async }}</ax-label>\\n <ax-text-box [name]=\\\"'username'\\\" [autoComplete]=\\\"'username'\\\" [(value)]=\\\"v1\\\">\\n <ax-validation-rule rule=\\\"required\\\"></ax-validation-rule>\\n </ax-text-box>\\n </ax-form-field>\\n <ax-form-field>\\n <ax-label>{{ t(l2, { scope: 'auth' }) | async }}</ax-label>\\n <ax-password-box [name]=\\\"'password'\\\" [autoComplete]=\\\"'current-password'\\\" [(value)]=\\\"v2\\\">\\n <ax-validation-rule rule=\\\"required\\\"></ax-validation-rule>\\n </ax-password-box>\\n </ax-form-field>\\n <div class=\\\"ax-flex ax-justify-between ax-items-center\\\">\\n <ax-check-box [(ngModel)]=\\\"isKeepLogin\\\">\\n <ax-label class=\\\"ax-mb-0\\\">{{ t('signin.remember', { scope: 'auth' }) | async }}</ax-label>\\n </ax-check-box>\\n <ax-button\\n color=\\\"primary\\\"\\n class=\\\"ax-sm\\\"\\n [text]=\\\"t('forgot.password', { scope: 'auth' }) | async\\\"\\n look=\\\"blank\\\"\\n (onClick)=\\\"handleForgotOnClick()\\\"\\n >\\n </ax-button>\\n </div>\\n </div>\\n <ax-button\\n color=\\\"primary\\\"\\n class=\\\"ax-mt-6 ax-w-full\\\"\\n [text]=\\\"t(submitText, { scope: 'auth' }) | async\\\"\\n (onClick)=\\\"handleLoginClick()\\\"\\n [disabled]=\\\"isLoading$ | async\\\"\\n [type]=\\\"'submit'\\\"\\n >\\n @if (isLoading$ | async) {\\n <ax-loading></ax-loading>\\n }\\n </ax-button>\\n @if (hasExternalProviders || configs.signup?.enable) {\\n <div class=\\\"ax-heading ax-heading-center !ax-my-8\\\">\\n <span>{{ t('signin.or', { scope: 'auth' }) | async }}</span>\\n </div>\\n }\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 lg:ax-flex-row ax-justify-between ax-mt-6\\\">\\n @if (configs.externalProviders?.['google']) {\\n <ax-button\\n class=\\\"ax-w-full ax-mt-2\\\"\\n text=\\\"{{ 'authentication.with-google' | translate | async }}\\\"\\n [color]=\\\"'default'\\\"\\n (onClick)=\\\"handleExternalSignIn('google')\\\"\\n [disabled]=\\\"isExternalLoading$ | async\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-brands fa-google fa-lg ax-text-danger-500\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n <ax-loading *ngIf=\\\"isExternalLoading$ | async\\\"></ax-loading>\\n </ax-button>\\n }\\n @if (configs.externalProviders?.['apple']) {\\n <ax-button\\n text=\\\"{{ 'authentication.with-apple' | translate | async }}\\\"\\n [color]=\\\"'default'\\\"\\n (onClick)=\\\"handleExternalSignIn('apple')\\\"\\n [disabled]=\\\"isExternalLoading$ | async\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-brands fa-apple fa-xl\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n <ax-loading *ngIf=\\\"isExternalLoading$ | async\\\"></ax-loading>\\n </ax-button>\\n }\\n @if (configs.externalProviders?.['microsoft']) {\\n <ax-button\\n text=\\\"{{ 'authentication.with-microsoft' | translate | async }}\\\"\\n [color]=\\\"'default'\\\"\\n (onClick)=\\\"handleExternalSignIn('microsoft')\\\"\\n [disabled]=\\\"isExternalLoading$ | async\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-brands fa-microsoft fa-lg text-blue-500\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n <ax-loading *ngIf=\\\"isExternalLoading$ | async\\\"></ax-loading>\\n </ax-button>\\n }\\n </div>\\n </ax-form>\\n @if (configs.signup?.enable) {\\n <ax-button\\n class=\\\"ax-w-full ax-mt-2\\\"\\n (onClick)=\\\"handleRegisterOnClick()\\\"\\n text=\\\"{{ t('register', { scope: 'auth' }) | async }}\\\"\\n [color]=\\\"'default'\\\"\\n >\\n </ax-button>\\n }\\n </div>\\n</ng-container>\\n\" }]\n }], propDecorators: { form: [{\n type: ViewChild,\n args: [AXFormComponent]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2F1dGgvc3JjL2xpYi9wYWdlcy9sb2dpbi9wYXNzd29yZC9wYXNzd29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXV0aC9zcmMvbGliL3BhZ2VzL2xvZ2luL3Bhc3N3b3JkL3Bhc3N3b3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFrQixzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBQ3JHLE1BQU0sT0FBTyxHQUFHO0lBQ2QsWUFBWTtJQUNaLFdBQVc7SUFDWCxZQUFZO0lBQ1osZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixjQUFjO0lBQ2QsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsWUFBWTtJQUNaLGtCQUFrQjtDQUNuQixDQUFDO0FBTUYsTUFBTSxPQUFPLHlCQUF5QjtJQUp0QztRQUtZLFlBQU8sR0FBbUIsTUFBTSxDQUFpQixxQkFBcUIsQ0FBQyxDQUFDO1FBSXhFLE9BQUUsR0FBRyxFQUFFLENBQUM7UUFDUixPQUFFLEdBQWtCLEVBQUUsQ0FBQztRQUV2QixlQUFVLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLHVCQUFrQixHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRSxlQUFVLEdBQUcsZUFBZSxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsb0JBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUt0QyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRCLGdCQUFXLEdBQVksS0FBSyxDQUFDO0tBb0x4QztJQWxMQyx5REFBeUQ7SUFDekQsSUFBYyxvQkFBb0I7UUFDaEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQ3JCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixLQUFLLHNCQUFzQixDQUFDLGFBQWE7Z0JBQ3ZDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDO2dCQUNsQixNQUFNO1lBQ1IsS0FBSyxzQkFBc0IsQ0FBQyxjQUFjO2dCQUN4QyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQztnQkFDbkIsTUFBTTtZQUNSLEtBQUssc0JBQXNCLENBQUMscUJBQXFCO2dCQUMvQyxJQUFJLENBQUMsRUFBRSxHQUFHLGdCQUFnQixDQUFDO2dCQUMzQixNQUFNO1lBQ1IsS0FBSyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM3QztnQkFDRSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVTLG1CQUFtQjtRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVTLGdCQUFnQjtRQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO2dCQUNoQyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQzt3QkFDL0IsUUFBUSxFQUFFLE1BQU07d0JBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRTt3QkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFHO3FCQUNuQixDQUFDLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUUzQyxnREFBZ0Q7b0JBQ2hELE1BQU0sZUFBZSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFFbkYsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7b0JBQ3hELENBQUM7b0JBQ0QsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNsRixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7NEJBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO3dCQUN6RCxDQUFDOzZCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDOzRCQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQzt3QkFDdEQsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDdEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDMUMsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7b0JBQ3BCLElBQUksUUFBUSxHQUNWLEtBQUssRUFBRSxLQUFLLEVBQUUsaUJBQWlCO3dCQUMvQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7d0JBQ25CLEtBQUssRUFBRSxPQUFPO3dCQUNkLG1DQUFtQyxDQUFDO29CQUV0QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUNqQyxtRUFBbUU7d0JBQ25FLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4RixDQUFDO29CQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsUUFBUTt3QkFDZixPQUFPLEVBQUUsUUFBUTt3QkFDakIsT0FBTyxFQUFFLElBQUk7cUJBQ2QsQ0FBQyxDQUFDO29CQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7b0JBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQWdCO1FBQ25ELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkMsd0RBQXdEO1lBQ3hELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxRQUFRLHFCQUFxQixDQUFDLENBQUM7WUFDOUQsQ0FBQztZQUVELHlDQUF5QztZQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLElBQUksWUFBWSxDQUFDO1lBQ3BFLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLDBCQUEwQixDQUFDLENBQUM7WUFDNUYsTUFBTSxZQUFZLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO1lBRTdFLHVDQUF1QztZQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN6RCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVyRSx1Q0FBdUM7WUFDdkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUVqRCwrREFBK0Q7WUFDL0QsTUFBTSxPQUFPLEdBQ1gsR0FBRyxZQUFZLEVBQUU7Z0JBQ2pCLHFCQUFxQjtnQkFDckIsY0FBYyxRQUFRLEVBQUU7Z0JBQ3hCLGlCQUFpQixXQUFXLEVBQUU7Z0JBQzlCLDZCQUE2QjtnQkFDN0IsbUJBQW1CLGFBQWEsRUFBRTtnQkFDbEMsNkJBQTZCO2dCQUM3QixlQUFlO2dCQUNmLGVBQWUsUUFBUSxFQUFFLENBQUM7WUFFNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUV4Qyx5Q0FBeUM7WUFDekMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLG9EQUFvRDtRQUN0RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLHFCQUFxQixDQUFDLFlBQW9CO1FBQ3RELDBDQUEwQztRQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsNEJBQTRCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FBQyxNQUFjO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLG9FQUFvRSxDQUFDO1FBQ3RGLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLE1BQW1CO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDOzhHQTFNVSx5QkFBeUI7a0dBQXpCLHlCQUF5Qiw4R0FrQnpCLGVBQWUsZ0RDNUQ1QixxNUlBbUhBLDJDRDdGRSxZQUFZLGtJQUNaLFdBQVcsOFZBQ1gsWUFBWSxpY0FDWixlQUFlLHFiQUNmLG1CQUFtQiwrWkFDbkIsY0FBYyw2WEFDZCxhQUFhLGdLQUNiLGlCQUFpQixzVkFDakIsZ0JBQWdCLHFTQUNoQixtQkFBbUIsK0dBRW5CLGVBQWUsK0tBQ2YsWUFBWSw4QkFDWixrQkFBa0I7OzJGQU9QLHlCQUF5QjtrQkFKckMsU0FBUzs4QkFFQyxDQUFDLEdBQUcsT0FBTyxDQUFDOzhCQXFCYixJQUFJO3NCQURYLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWENoZWNrQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NoZWNrLWJveCc7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kaWFsb2cnO1xuaW1wb3J0IHsgQVhGb3JtQ29tcG9uZW50LCBBWEZvcm1Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyBBWExhYmVsTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xhYmVsJztcbmltcG9ydCB7IEFYTG9hZGluZ01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sb2FkaW5nJztcbmltcG9ydCB7IEFYUGFzc3dvcmRCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFzc3dvcmQtYm94JztcbmltcG9ydCB7IEFYVGV4dEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90ZXh0LWJveCc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFYVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RvYXN0JztcbmltcG9ydCB7IEFYVmFsaWRhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS92YWxpZGF0aW9uJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUEhvbWVQYWdlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhNQXV0aENvbmZpZ3MsIEFYTUF1dGhlbnRpY2F0aW9uVHlwZXMsIEFYTV9BVVRIX0NPTkZJR19UT0tFTiB9IGZyb20gJy4uLy4uLy4uL2F1dGguY29uZmlnJztcbmNvbnN0IE1PRFVMRVMgPSBbXG4gIENvbW1vbk1vZHVsZSxcbiAgRm9ybXNNb2R1bGUsXG4gIEFYRm9ybU1vZHVsZSxcbiAgQVhUZXh0Qm94TW9kdWxlLFxuICBBWFBhc3N3b3JkQm94TW9kdWxlLFxuICBBWEJ1dHRvbk1vZHVsZSxcbiAgQVhMYWJlbE1vZHVsZSxcbiAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gIEFYQ2hlY2tCb3hNb2R1bGUsXG4gIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gIEFYTG9hZGluZ01vZHVsZSxcbiAgUm91dGVyTW9kdWxlLFxuICBBWFZhbGlkYXRpb25Nb2R1bGUsXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3Bhc3N3b3JkLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogWy4uLk1PRFVMRVNdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBMb2dpblBhc3N3b3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJvdGVjdGVkIGNvbmZpZ3M6IEFYTUF1dGhDb25maWdzID0gaW5qZWN0PEFYTUF1dGhDb25maWdzPihBWE1fQVVUSF9DT05GSUdfVE9LRU4pO1xuICBwcm90ZWN0ZWQgbDEhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBsMiE6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgdjEgPSAnJztcbiAgcHJvdGVjdGVkIHYyOiBzdHJpbmcgfCBudWxsID0gJyc7XG5cbiAgcHJvdGVjdGVkIGlzTG9hZGluZyQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNFeHRlcm5hbExvYWRpbmckOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgc3VibWl0VGV4dCA9ICdzaWduaW4uc3VibWl0JztcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuICBwcml2YXRlIGFjdGl2YXRlUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIGhvbWVQYWdlU2VydmljZSA9IGluamVjdChBWFBIb21lUGFnZVNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG5cbiAgQFZpZXdDaGlsZChBWEZvcm1Db21wb25lbnQpXG4gIHByaXZhdGUgZm9ybSE6IEFYRm9ybUNvbXBvbmVudDtcblxuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHByb3RlY3RlZCBpc0tlZXBMb2dpbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIENvbXB1dGVkIHByb3BlcnR5IHRvIGNoZWNrIGlmIGV4dGVybmFsIHByb3ZpZGVycyBleGlzdFxuICBwcm90ZWN0ZWQgZ2V0IGhhc0V4dGVybmFsUHJvdmlkZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmNvbmZpZ3M/LmV4dGVybmFsUHJvdmlkZXJzICYmIE9iamVjdC5rZXlzKHRoaXMuY29uZmlncy5leHRlcm5hbFByb3ZpZGVycykubGVuZ3RoID4gMCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmwyID0gJ3Bhc3N3b3JkJztcbiAgICBzd2l0Y2ggKHRoaXMuY29uZmlncy50eXBlKSB7XG4gICAgICBjYXNlIEFYTUF1dGhlbnRpY2F0aW9uVHlwZXMuRW1haWxQYXNzd29yZDpcbiAgICAgICAgdGhpcy5sMSA9ICdlbWFpbCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBWE1BdXRoZW50aWNhdGlvblR5cGVzLk1vYmlsZVBhc3N3b3JkOlxuICAgICAgICB0aGlzLmwxID0gJ21vYmlsZSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBWE1BdXRoZW50aWNhdGlvblR5cGVzLlVzZXJuYW1lRW1haWxQYXNzd29yZDpcbiAgICAgICAgdGhpcy5sMSA9ICd1c2VybmFtZS1lbWFpbCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBWE1BdXRoZW50aWNhdGlvblR5cGVzLlVzZXJuYW1lUGFzc3dvcmQ6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmwxID0gJ3VzZXJuYW1lJztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRm9yZ290T25DbGljaygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hdXRoL2ZvcmdvdCddKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVSZWdpc3Rlck9uQ2xpY2soKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuY29uZmlncy5zaWdudXA/LnVybCB8fCAnL2F1dGgvcmVnaXN0ZXInXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlTG9naW5DbGljaygpIHtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IHRoaXMuYWN0aXZhdGVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sncmVkaXJlY3RVcmwnXTtcbiAgICB0aGlzLmZvcm0udmFsaWRhdGUoKS50aGVuKGFzeW5jIChmb3JtKSA9PiB7XG4gICAgICBpZiAoZm9ybS5yZXN1bHQpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuc3VibWl0VGV4dCA9ICdwcm9jZXNzaW5nJztcbiAgICAgICAgdGhpcy5zdWJtaXRUZXh0ID0gJ3JlZGlyZWN0aW5nJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNlc3Npb25TZXJ2aWNlLnNpZ25pbih7XG4gICAgICAgICAgICBzdHJhdGVneTogJ29pZGMnLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMudjEsXG4gICAgICAgICAgICBwYXNzd29yZDogdGhpcy52MiEsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXNzaW9uU2VydmljZS5zaWduSW5Db21wbGV0ZSgpO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgYXV0aGVudGljYXRpb24gc3RhdHVzIGJlZm9yZSBuYXZpZ2F0aW9uXG4gICAgICAgICAgY29uc3QgaXNBdXRoZW50aWNhdGVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZXNzaW9uU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQkKTtcblxuICAgICAgICAgIGlmICghaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCBhZnRlciBzaWduaW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY3VycmVudEFwcGxpY2F0aW9uID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zZXNzaW9uU2VydmljZS5hcHBsaWNhdGlvbiQpO1xuICAgICAgICAgIGlmICghY3VycmVudEFwcGxpY2F0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uU2VydmljZS50ZW5hbnQ/LmlkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXV0aC9hY2NvdW50L3RlbmFudC1jaG9vc2VyJ10pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb25TZXJ2aWNlLmFwcGxpY2F0aW9uPy5pZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2F1dGgvYWNjb3VudC9hcHAtY2hvb3NlciddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcmVkaXJlY3RVcmxdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ob21lUGFnZVNlcnZpY2UubmF2aWdhdGVUbygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGxldCBlcnJvck1zZyA9XG4gICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmVycm9yX2Rlc2NyaXB0aW9uIHx8XG4gICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmVycm9yIHx8XG4gICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fFxuICAgICAgICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyBzaWduIGluLic7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGVycm9yTXNnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8g2Kfar9ixINi024zYoSDYqNmI2K/YjCDYs9i524wg2qnZhiDbjNqpINmB24zZhNivIG1lc3NhZ2Ug24zYpyBkZXNjcmlwdGlvbiDYsdinINmG2YXYp9uM2LQg2KjYr9mH24xcbiAgICAgICAgICAgIGVycm9yTXNnID0gZXJyb3JNc2cubWVzc2FnZSB8fCBlcnJvck1zZy5lcnJvcl9kZXNjcmlwdGlvbiB8fCBKU09OLnN0cmluZ2lmeShlcnJvck1zZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgICAgICBjb250ZW50OiBlcnJvck1zZyxcbiAgICAgICAgICAgIHRpbWVPdXQ6IDUwMDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBlcnJvciB9KTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdFRleHQgPSAnc2lnbmluLnN1Ym1pdCc7XG4gICAgICAgICAgdGhpcy52MiA9IG51bGw7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlRXh0ZXJuYWxTaWduSW4ocHJvdmlkZXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzRXh0ZXJuYWxMb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgICAvLyBHZXQgcHJvdmlkZXIgY29uZmlndXJhdGlvbiAob3B0aW9uYWwsIGZvciB2YWxpZGF0aW9uKVxuICAgICAgY29uc3QgcHJvdmlkZXJDb25maWcgPSB0aGlzLmNvbmZpZ3M/LmV4dGVybmFsUHJvdmlkZXJzPy5bcHJvdmlkZXJdO1xuICAgICAgaWYgKCFwcm92aWRlckNvbmZpZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyICcke3Byb3ZpZGVyfScgaXMgbm90IGNvbmZpZ3VyZWRgKTtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIE9JRENcbiAgICAgIGNvbnN0IGNsaWVudElkID0gdGhpcy5jb25maWdzPy5hdXRoQ29uZmlnPy5jbGllbnRJZCB8fCAnc3BhLWNsaWVudCc7XG4gICAgICBjb25zdCByZWRpcmVjdFVyaSA9IGVuY29kZVVSSUNvbXBvbmVudChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hdXRoL2F4cC1vYXV0aC1jYWxsYmFja2ApO1xuICAgICAgY29uc3QgYXV0aG9yaXplVXJsID0gYCR7dGhpcy5jb25maWdzPy5hdXRoQ29uZmlnPy5pc3N1ZXJ9L2Nvbm5lY3QvYXV0aG9yaXplYDtcblxuICAgICAgLy8gQ2VudHJhbGl6ZWQgUEtDRSBjb2RlIHZlcmlmaWVyIGxvZ2ljXG4gICAgICBjb25zdCBjb2RlVmVyaWZpZXIgPSB0aGlzLmdlbmVyYXRlUmFuZG9tU3RyaW5nKDEyOCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGtjZV9jb2RlX3ZlcmlmaWVyJywgY29kZVZlcmlmaWVyKTtcbiAgICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBhd2FpdCB0aGlzLmdlbmVyYXRlQ29kZUNoYWxsZW5nZShjb2RlVmVyaWZpZXIpO1xuXG4gICAgICAvLyBTdG9yZSBwcm92aWRlciBmb3IgY2FsbGJhY2sgaGFuZGxpbmdcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvYXV0aF9wcm92aWRlcicsIHByb3ZpZGVyKTtcblxuICAgICAgLy8gQnVpbGQgdGhlIGF1dGhvcml6YXRpb24gVVJMIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZWQgZm9ybWF0XG4gICAgICBjb25zdCBhdXRoVXJsID1cbiAgICAgICAgYCR7YXV0aG9yaXplVXJsfWAgK1xuICAgICAgICBgP3Jlc3BvbnNlX3R5cGU9Y29kZWAgK1xuICAgICAgICBgJmNsaWVudF9pZD0ke2NsaWVudElkfWAgK1xuICAgICAgICBgJnJlZGlyZWN0X3VyaT0ke3JlZGlyZWN0VXJpfWAgK1xuICAgICAgICBgJnNjb3BlPW9wZW5pZCBwcm9maWxlIGVtYWlsYCArXG4gICAgICAgIGAmY29kZV9jaGFsbGVuZ2U9JHtjb2RlQ2hhbGxlbmdlfWAgK1xuICAgICAgICBgJmNvZGVfY2hhbGxlbmdlX21ldGhvZD1TMjU2YCArXG4gICAgICAgIGAmcHJvbXB0PWxvZ2luYCArXG4gICAgICAgIGAmYWNyX3ZhbHVlcz0ke3Byb3ZpZGVyfWA7XG5cbiAgICAgIGNvbnNvbGUubG9nKCdSZWRpcmVjdGluZyB0bzonLCBhdXRoVXJsKTtcblxuICAgICAgLy8gVXNlIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24gdG8gcmVkaXJlY3RcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oYXV0aFVybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7cHJvdmlkZXJ9IHNpZ24taW4gZXJyb3I6YCwgZXJyb3IpO1xuICAgICAgdGhpcy5pc0V4dGVybmFsTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAvLyBPcHRpb25hbGx5IHNob3cgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgdXNlciBoZXJlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIGNvZGUgY2hhbGxlbmdlIGZvciBQS0NFIChQcm9vZiBLZXkgZm9yIENvZGUgRXhjaGFuZ2UpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlQ29kZUNoYWxsZW5nZShjb2RlVmVyaWZpZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gQ3JlYXRlIFNIQTI1NiBoYXNoIG9mIHRoZSBjb2RlIHZlcmlmaWVyXG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IHRoaXMuc2hhMjU2KGNvZGVWZXJpZmllcik7XG4gICAgLy8gQmFzZTY0dXJsIGVuY29kZSB0aGUgaGFzaFxuICAgIHJldHVybiB0aGlzLmJhc2U2NFVybEVuY29kZShoYXNoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSByYW5kb20gc3RyaW5nIGZvciBjb2RlIHZlcmlmaWVyXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlUmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBwb3NzaWJsZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS0uX34nO1xuICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdGV4dCArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgU0hBMjU2IGhhc2ggb2YgdGhlIGlucHV0IHN0cmluZyB1c2luZyBXZWIgQ3J5cHRvIEFQSVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaGEyNTYoc3RyOiBzdHJpbmcpOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShzdHIpO1xuICAgIHJldHVybiBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2U2NHVybCBlbmNvZGVzIGFuIEFycmF5QnVmZmVyXG4gICAqL1xuICBwcml2YXRlIGJhc2U2NFVybEVuY29kZShidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgbGV0IGJpbmFyeSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBidG9hKGJpbmFyeSkucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPS9nLCAnJyk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnRyYW5zbGF0ZT1cImxldCB0XCI+XG4gIDxkaXYgY2xhc3M9XCJheC10ZXh0LWNlbnRlciBheC1tYi00XCI+XG4gICAgPGgxIGNsYXNzPVwiYXgtZm9udC1ib2xkIGF4LXRleHQteGwgYXgtbWItMlwiPlxuICAgICAge3sgdCgnc2lnbmluLnRpdGxlJywgeyBzY29wZTogJ2F1dGgnIH0pIHwgYXN5bmMgfX1cbiAgICA8L2gxPlxuICAgIDxwIGNsYXNzPVwiYXgtdGV4dC1iYXNlIGF4LXRleHQtbmV1dHJhbC02MDBcIj5cbiAgICAgIHt7IHQoJ3NpZ25pbi5oaW50JywgeyBzY29wZTogJ2F1dGgnIH0pIHwgYXN5bmMgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYXgtdy04MCBsZzpheC13LTk2XCI+XG4gICAgPGF4LWZvcm0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtNlwiPlxuICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICA8YXgtbGFiZWw+e3sgdChsMSwgeyBzY29wZTogJ2F1dGgnIH0pIHwgYXN5bmMgfX08L2F4LWxhYmVsPlxuICAgICAgICAgIDxheC10ZXh0LWJveCBbbmFtZV09XCIndXNlcm5hbWUnXCIgW2F1dG9Db21wbGV0ZV09XCIndXNlcm5hbWUnXCIgWyh2YWx1ZSldPVwidjFcIj5cbiAgICAgICAgICAgIDxheC12YWxpZGF0aW9uLXJ1bGUgcnVsZT1cInJlcXVpcmVkXCI+PC9heC12YWxpZGF0aW9uLXJ1bGU+XG4gICAgICAgICAgPC9heC10ZXh0LWJveD5cbiAgICAgICAgPC9heC1mb3JtLWZpZWxkPlxuICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICA8YXgtbGFiZWw+e3sgdChsMiwgeyBzY29wZTogJ2F1dGgnIH0pIHwgYXN5bmMgfX08L2F4LWxhYmVsPlxuICAgICAgICAgIDxheC1wYXNzd29yZC1ib3ggW25hbWVdPVwiJ3Bhc3N3b3JkJ1wiIFthdXRvQ29tcGxldGVdPVwiJ2N1cnJlbnQtcGFzc3dvcmQnXCIgWyh2YWx1ZSldPVwidjJcIj5cbiAgICAgICAgICAgIDxheC12YWxpZGF0aW9uLXJ1bGUgcnVsZT1cInJlcXVpcmVkXCI+PC9heC12YWxpZGF0aW9uLXJ1bGU+XG4gICAgICAgICAgPC9heC1wYXNzd29yZC1ib3g+XG4gICAgICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxheC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJpc0tlZXBMb2dpblwiPlxuICAgICAgICAgICAgPGF4LWxhYmVsIGNsYXNzPVwiYXgtbWItMFwiPnt7IHQoJ3NpZ25pbi5yZW1lbWJlcicsIHsgc2NvcGU6ICdhdXRoJyB9KSB8IGFzeW5jIH19PC9heC1sYWJlbD5cbiAgICAgICAgICA8L2F4LWNoZWNrLWJveD5cbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgY2xhc3M9XCJheC1zbVwiXG4gICAgICAgICAgICBbdGV4dF09XCJ0KCdmb3Jnb3QucGFzc3dvcmQnLCB7IHNjb3BlOiAnYXV0aCcgfSkgfCBhc3luY1wiXG4gICAgICAgICAgICBsb29rPVwiYmxhbmtcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlRm9yZ290T25DbGljaygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxheC1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgY2xhc3M9XCJheC1tdC02IGF4LXctZnVsbFwiXG4gICAgICAgIFt0ZXh0XT1cInQoc3VibWl0VGV4dCwgeyBzY29wZTogJ2F1dGgnIH0pIHwgYXN5bmNcIlxuICAgICAgICAob25DbGljayk9XCJoYW5kbGVMb2dpbkNsaWNrKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgW3R5cGVdPVwiJ3N1Ym1pdCdcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAoaXNMb2FkaW5nJCB8IGFzeW5jKSB7XG4gICAgICAgICAgPGF4LWxvYWRpbmc+PC9heC1sb2FkaW5nPlxuICAgICAgICB9XG4gICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIEBpZiAoaGFzRXh0ZXJuYWxQcm92aWRlcnMgfHwgY29uZmlncy5zaWdudXA/LmVuYWJsZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtaGVhZGluZyBheC1oZWFkaW5nLWNlbnRlciAhYXgtbXktOFwiPlxuICAgICAgICAgIDxzcGFuPnt7IHQoJ3NpZ25pbi5vcicsIHsgc2NvcGU6ICdhdXRoJyB9KSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGxnOmF4LWZsZXgtcm93IGF4LWp1c3RpZnktYmV0d2VlbiBheC1tdC02XCI+XG4gICAgICAgIEBpZiAoY29uZmlncy5leHRlcm5hbFByb3ZpZGVycz8uWydnb29nbGUnXSkge1xuICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdy1mdWxsIGF4LW10LTJcIlxuICAgICAgICAgICAgdGV4dD1cInt7ICdhdXRoZW50aWNhdGlvbi53aXRoLWdvb2dsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUV4dGVybmFsU2lnbkluKCdnb29nbGUnKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNFeHRlcm5hbExvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtYnJhbmRzIGZhLWdvb2dsZSBmYS1sZyBheC10ZXh0LWRhbmdlci01MDBcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LWxvYWRpbmcgKm5nSWY9XCJpc0V4dGVybmFsTG9hZGluZyQgfCBhc3luY1wiPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGNvbmZpZ3MuZXh0ZXJuYWxQcm92aWRlcnM/LlsnYXBwbGUnXSkge1xuICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgIHRleHQ9XCJ7eyAnYXV0aGVudGljYXRpb24ud2l0aC1hcHBsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUV4dGVybmFsU2lnbkluKCdhcHBsZScpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0V4dGVybmFsTG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1icmFuZHMgZmEtYXBwbGUgZmEteGxcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LWxvYWRpbmcgKm5nSWY9XCJpc0V4dGVybmFsTG9hZGluZyQgfCBhc3luY1wiPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGNvbmZpZ3MuZXh0ZXJuYWxQcm92aWRlcnM/LlsnbWljcm9zb2Z0J10pIHtcbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICB0ZXh0PVwie3sgJ2F1dGhlbnRpY2F0aW9uLndpdGgtbWljcm9zb2Z0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XCJcbiAgICAgICAgICAgIFtjb2xvcl09XCInZGVmYXVsdCdcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlRXh0ZXJuYWxTaWduSW4oJ21pY3Jvc29mdCcpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0V4dGVybmFsTG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1icmFuZHMgZmEtbWljcm9zb2Z0IGZhLWxnIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LWxvYWRpbmcgKm5nSWY9XCJpc0V4dGVybmFsTG9hZGluZyQgfCBhc3luY1wiPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9heC1mb3JtPlxuICAgIEBpZiAoY29uZmlncy5zaWdudXA/LmVuYWJsZSkge1xuICAgICAgPGF4LWJ1dHRvblxuICAgICAgICBjbGFzcz1cImF4LXctZnVsbCBheC1tdC0yXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlUmVnaXN0ZXJPbkNsaWNrKClcIlxuICAgICAgICB0ZXh0PVwie3sgdCgncmVnaXN0ZXInLCB7IHNjb3BlOiAnYXV0aCcgfSkgfCBhc3luYyB9fVwiXG4gICAgICAgIFtjb2xvcl09XCInZGVmYXVsdCdcIlxuICAgICAgPlxuICAgICAgPC9heC1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19"],"names":["i3","i6","i8","i10","i11"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-modules-auth-tenant-chooser.component-wp7OOLsH.mjs","sources":["../tmp-esm2022/auth/lib/pages/account/tenant-chooser/tenant-chooser.component.js"],"sourcesContent":["import { Component, ViewEncapsulation, inject } from '@angular/core';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService, AXPAuthStrategyRegistryService } from '@acorex/platform/auth';\nimport { AXPLogoComponent, AXP_PLATFORM_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { AXPUserAvatarComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { Subscription, first } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/avatar\";\nimport * as i4 from \"@acorex/components/decorators\";\nimport * as i5 from \"@acorex/components/loading\";\nimport * as i6 from \"@acorex/core/translation\";\nimport * as i7 from \"@acorex/components/search-box\";\nimport * as i8 from \"@angular/common\";\nexport class AXPAuthTenantChooserComponent {\n constructor() {\n this.router = inject(Router);\n this.platformConfig = inject(AXP_PLATFORM_CONFIG_TOKEN);\n this.sessionService = inject(AXPSessionService);\n this.authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n this.oidcStrategy = this.authStrategyRegistry.get('oidc');\n this.subscription = new Subscription();\n this.user = this.sessionService.user;\n this.searchValue = '';\n this.showAll = false;\n this.selectedTenant = null;\n this.displayedTenants = [];\n }\n async handleChooseTenant(item) {\n this.selectedTenant = item;\n if (this.oidcStrategy && typeof this.oidcStrategy.startAuthorizationFlow === 'function') {\n this.oidcStrategy.startAuthorizationFlow(item.id, '');\n }\n }\n ngOnInit() {\n this.sessionService.tenants$.pipe(first()).subscribe((tenants) => {\n this.displayedTenants = tenants.slice(0, 4);\n this.allTenants = tenants;\n });\n }\n filterTenants(tenants) {\n return tenants.filter((tenant) => tenant.title.toLowerCase().includes(this.searchValue.toLowerCase()));\n }\n handleSearch(event) {\n if (event != undefined) {\n this.searchValue = event;\n this.displayedTenants = this.filterTenants(this.allTenants);\n }\n }\n showAllTenants() {\n this.showAll = !this.showAll;\n this.displayedTenants = this.filterTenants(this.showAll ? this.allTenants : this.allTenants.slice(0, 4));\n }\n async handleSignout() {\n await this.sessionService.signout();\n this.router.navigate(['/auth/login']);\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXPAuthTenantChooserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.3\", type: AXPAuthTenantChooserComponent, isStandalone: true, selector: \"axp-auth-tenant-chooser\", ngImport: i0, template: \"<main\\n *translate=\\\"let t\\\"\\n class=\\\"ax-w-full ax-space-y-10 ax-h-[100vh] ax-flex ax-flex-col ax-items-center ax-justify-center ax-bg-lightest md:ax-bg-default\\\"\\n>\\n <section>\\n <axp-logo\\n [source]=\\\"platformConfig.logo?.full\\\"\\n [attr.alt]=\\\"platformConfig.title\\\"\\n class=\\\"ax-w-36 ax-mx-auto ax-text-2xl ax-font-bold\\\"\\n ></axp-logo>\\n </section>\\n <section class=\\\"ax-flex ax-justify-center\\\">\\n <div\\n class=\\\"ax-flex ax-gap-2 ax-justify-center ax-text-center ax-flex-col ax-items-center ax-border ax-rounded-lg ax-shadow-lg ax-p-6 md:ax-w-96 ax-w-80\\\"\\n >\\n <ax-avatar class=\\\"ax-rounded-full\\\" [size]=\\\"72\\\">\\n @if(user?.avatar){\\n <!-- <ax-image [src]=\\\"user?.avatar\\\"></ax-image> -->\\n <axp-user-avatar [size]=\\\"72\\\" [userId]=\\\"user?.id!\\\"></axp-user-avatar>\\n }\\n </ax-avatar>\\n <h2 class=\\\"md:ax-text-lg ax-font-medium\\\">{{ t('welcome') | async }}, {{ user?.title }}</h2>\\n <p class=\\\"ax-text-neutral-500 ax-text-sm md:ax-text-base ax-font-medium\\\">\\n {{ t('tenant-chooser.description', { scope: 'auth' }) | async }}\\n </p>\\n <div class=\\\"ax-mt-3 ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\\\">\\n @if(allTenants && allTenants.length > 4){\\n <ax-search-box\\n [placeholder]=\\\"'search' | translate | async\\\"\\n [ngModel]=\\\"searchValue\\\"\\n (ngModelChange)=\\\"handleSearch($event)\\\"\\n ><ax-clear-button></ax-clear-button\\n ></ax-search-box>\\n } @for(tenant of displayedTenants; track $index){\\n <div\\n class=\\\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-3 ax-items-center ax-cursor-pointer\\\"\\n (click)=\\\"handleChooseTenant(tenant)\\\"\\n >\\n <div class=\\\"ax-flex ax-gap-2 ax-items-center ax-font-medium\\\">\\n <div\\n class=\\\"ax-size-12 ax-min-w-12 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-m-auto\\\"\\n >\\n <ax-icon class=\\\"fa-solid fa-building ax-text-neutral-500 ax-text-lg\\\"> </ax-icon>\\n </div>\\n <span class=\\\"md:ax-text-base ax-text-sm ax-text-start\\\">{{ tenant.title }} </span>\\n </div>\\n @if(tenant.name===selectedTenant?.name){\\n <ax-loading></ax-loading>\\n }@else {\\n <ax-icon class=\\\"fa-solid fa-chevron-right ax-text-neutral-400\\\"> </ax-icon>\\n }\\n </div>\\n }\\n </div>\\n @if(allTenants && allTenants.length>4){\\n <div class=\\\"ax-mt-6 ax-w-full ax-flex ax-justify-center\\\">\\n <ax-button\\n (onClick)=\\\"showAllTenants()\\\"\\n class=\\\"ax-w-full\\\"\\n look=\\\"outline\\\"\\n [text]=\\\"showAll ? (t('viewLess') | async) : (t('viewAll') | async)\\\"\\n ></ax-button>\\n </div>\\n }\\n </div>\\n </section>\\n <section>\\n <p class=\\\"ax-text-neutral-400 ax-text-sm\\\">\\n {{ t('tenant-chooser.footer', { scope: 'auth' }) | async }}\\n <a (click)=\\\"handleSignout()\\\" class=\\\"ax-text-primary ax-cursor-pointer hover:ax-underline ax-font-medium\\\">\\n {{ t('backLogin', { scope: 'auth' }) | async }}\\n </a>\\n </p>\\n </section>\\n</main>\\n\", styles: [\":host{display:contents}.gradient{background:-webkit-linear-gradient(var(--ax-current-v1),var(--ax-current-v2));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXTextBoxModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXLabelModule }, { kind: \"ngmodule\", type: AXCheckBoxModule }, { kind: \"ngmodule\", type: AXAvatarModule }, { kind: \"component\", type: i3.AXAvatarComponent, selector: \"ax-avatar\", inputs: [\"color\", \"size\", \"shape\", \"look\"], outputs: [\"sizeChange\"] }, { kind: \"ngmodule\", type: AXImageModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i4.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i4.AXDecoratorClearButtonComponent, selector: \"ax-clear-button\", inputs: [\"icon\"] }, { kind: \"component\", type: AXPLogoComponent, selector: \"axp-logo\", inputs: [\"source\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i5.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i6.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"component\", type: i7.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"component\", type: AXPUserAvatarComponent, selector: \"axp-user-avatar\", inputs: [\"size\", \"userId\"] }, { kind: \"pipe\", type: i8.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.3\", ngImport: i0, type: AXPAuthTenantChooserComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-auth-tenant-chooser', imports: [\n CommonModule,\n FormsModule,\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXAvatarModule,\n AXImageModule,\n AXDecoratorModule,\n AXPLogoComponent,\n AXLoadingModule,\n AXTranslationModule,\n AXSearchBoxModule,\n AXPUserAvatarComponent,\n ], encapsulation: ViewEncapsulation.None, template: \"<main\\n *translate=\\\"let t\\\"\\n class=\\\"ax-w-full ax-space-y-10 ax-h-[100vh] ax-flex ax-flex-col ax-items-center ax-justify-center ax-bg-lightest md:ax-bg-default\\\"\\n>\\n <section>\\n <axp-logo\\n [source]=\\\"platformConfig.logo?.full\\\"\\n [attr.alt]=\\\"platformConfig.title\\\"\\n class=\\\"ax-w-36 ax-mx-auto ax-text-2xl ax-font-bold\\\"\\n ></axp-logo>\\n </section>\\n <section class=\\\"ax-flex ax-justify-center\\\">\\n <div\\n class=\\\"ax-flex ax-gap-2 ax-justify-center ax-text-center ax-flex-col ax-items-center ax-border ax-rounded-lg ax-shadow-lg ax-p-6 md:ax-w-96 ax-w-80\\\"\\n >\\n <ax-avatar class=\\\"ax-rounded-full\\\" [size]=\\\"72\\\">\\n @if(user?.avatar){\\n <!-- <ax-image [src]=\\\"user?.avatar\\\"></ax-image> -->\\n <axp-user-avatar [size]=\\\"72\\\" [userId]=\\\"user?.id!\\\"></axp-user-avatar>\\n }\\n </ax-avatar>\\n <h2 class=\\\"md:ax-text-lg ax-font-medium\\\">{{ t('welcome') | async }}, {{ user?.title }}</h2>\\n <p class=\\\"ax-text-neutral-500 ax-text-sm md:ax-text-base ax-font-medium\\\">\\n {{ t('tenant-chooser.description', { scope: 'auth' }) | async }}\\n </p>\\n <div class=\\\"ax-mt-3 ax-w-full ax-overflow-auto ax-max-h-[300px] ax-pe-2\\\">\\n @if(allTenants && allTenants.length > 4){\\n <ax-search-box\\n [placeholder]=\\\"'search' | translate | async\\\"\\n [ngModel]=\\\"searchValue\\\"\\n (ngModelChange)=\\\"handleSearch($event)\\\"\\n ><ax-clear-button></ax-clear-button\\n ></ax-search-box>\\n } @for(tenant of displayedTenants; track $index){\\n <div\\n class=\\\"ax-flex ax-gap-2 ax-justify-between ax-border-b last:ax-border-b-0 ax-py-3 ax-items-center ax-cursor-pointer\\\"\\n (click)=\\\"handleChooseTenant(tenant)\\\"\\n >\\n <div class=\\\"ax-flex ax-gap-2 ax-items-center ax-font-medium\\\">\\n <div\\n class=\\\"ax-size-12 ax-min-w-12 ax-flex ax-justify-center ax-items-center ax-rounded-full ax-bg-neutral-100 ax-m-auto\\\"\\n >\\n <ax-icon class=\\\"fa-solid fa-building ax-text-neutral-500 ax-text-lg\\\"> </ax-icon>\\n </div>\\n <span class=\\\"md:ax-text-base ax-text-sm ax-text-start\\\">{{ tenant.title }} </span>\\n </div>\\n @if(tenant.name===selectedTenant?.name){\\n <ax-loading></ax-loading>\\n }@else {\\n <ax-icon class=\\\"fa-solid fa-chevron-right ax-text-neutral-400\\\"> </ax-icon>\\n }\\n </div>\\n }\\n </div>\\n @if(allTenants && allTenants.length>4){\\n <div class=\\\"ax-mt-6 ax-w-full ax-flex ax-justify-center\\\">\\n <ax-button\\n (onClick)=\\\"showAllTenants()\\\"\\n class=\\\"ax-w-full\\\"\\n look=\\\"outline\\\"\\n [text]=\\\"showAll ? (t('viewLess') | async) : (t('viewAll') | async)\\\"\\n ></ax-button>\\n </div>\\n }\\n </div>\\n </section>\\n <section>\\n <p class=\\\"ax-text-neutral-400 ax-text-sm\\\">\\n {{ t('tenant-chooser.footer', { scope: 'auth' }) | async }}\\n <a (click)=\\\"handleSignout()\\\" class=\\\"ax-text-primary ax-cursor-pointer hover:ax-underline ax-font-medium\\\">\\n {{ t('backLogin', { scope: 'auth' }) | async }}\\n </a>\\n </p>\\n </section>\\n</main>\\n\", styles: [\":host{display:contents}.gradient{background:-webkit-linear-gradient(var(--ax-current-v1),var(--ax-current-v2));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWNob29zZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2F1dGgvc3JjL2xpYi9wYWdlcy9hY2NvdW50L3RlbmFudC1jaG9vc2VyL3RlbmFudC1jaG9vc2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hdXRoL3NyYy9saWIvcGFnZXMvYWNjb3VudC90ZW5hbnQtY2hvb3Nlci90ZW5hbnQtY2hvb3Nlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBYSw4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LENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQzs4R0F0RFUsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsbUZDNUMxQyw2cUdBMkVBLGdRRGpESSxZQUFZLDhCQUNaLFdBQVcsOFZBQ1gsWUFBWSw4QkFDWixlQUFlLDhCQUNmLGNBQWMsNlhBQ2QsYUFBYSw4QkFDYixnQkFBZ0IsOEJBQ2hCLGNBQWMsNktBQ2QsYUFBYSw4QkFDYixpQkFBaUIsZ1BBQ2pCLGdCQUFnQix3RUFDaEIsZUFBZSw4S0FDZixtQkFBbUIsOEdBQ25CLGlCQUFpQiw2WUFDakIsc0JBQXNCOzsyRkFJYiw2QkFBNkI7a0JBdkJ6QyxTQUFTOytCQUNFLHlCQUF5QixXQUcxQjt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsc0JBQXNCO3FCQUN2QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBWEF2YXRhck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hdmF0YXInO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ2hlY2tCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY2hlY2stYm94JztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhGb3JtTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IHsgQVhJbWFnZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9pbWFnZSc7XG5pbXBvcnQgeyBBWExhYmVsTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xhYmVsJztcbmltcG9ydCB7IEFYTG9hZGluZ01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sb2FkaW5nJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhUZXh0Qm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RleHQtYm94JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UsIEFYUFRlbmFudCwgQVhQQXV0aFN0cmF0ZWd5UmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUExvZ29Db21wb25lbnQsIEFYUF9QTEFURk9STV9DT05GSUdfVE9LRU4gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBVc2VyQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaXJzdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheHAtYXV0aC10ZW5hbnQtY2hvb3NlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW5hbnQtY2hvb3Nlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RlbmFudC1jaG9vc2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhGb3JtTW9kdWxlLFxuICAgIEFYVGV4dEJveE1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWExhYmVsTW9kdWxlLFxuICAgIEFYQ2hlY2tCb3hNb2R1bGUsXG4gICAgQVhBdmF0YXJNb2R1bGUsXG4gICAgQVhJbWFnZU1vZHVsZSxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWFBMb2dvQ29tcG9uZW50LFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYU2VhcmNoQm94TW9kdWxlLFxuICAgIEFYUFVzZXJBdmF0YXJDb21wb25lbnQsXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEFYUEF1dGhUZW5hbnRDaG9vc2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcm90ZWN0ZWQgcGxhdGZvcm1Db25maWcgPSBpbmplY3QoQVhQX1BMQVRGT1JNX0NPTkZJR19UT0tFTik7XG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuICBwcml2YXRlIGF1dGhTdHJhdGVneVJlZ2lzdHJ5ID0gaW5qZWN0KEFYUEF1dGhTdHJhdGVneVJlZ2lzdHJ5U2VydmljZSk7XG4gIHByaXZhdGUgb2lkY1N0cmF0ZWd5ID0gdGhpcy5hdXRoU3RyYXRlZ3lSZWdpc3RyeS5nZXQoJ29pZGMnKTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcm90ZWN0ZWQgdXNlciA9IHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcjtcblxuICBwcm90ZWN0ZWQgc2VhcmNoVmFsdWUgPSAnJztcbiAgcHJvdGVjdGVkIHNob3dBbGwgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkVGVuYW50OiBBWFBUZW5hbnQgfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIGRpc3BsYXllZFRlbmFudHM6IEFYUFRlbmFudFtdID0gW107XG4gIHByb3RlY3RlZCBhbGxUZW5hbnRzITogQVhQVGVuYW50W107XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZUNob29zZVRlbmFudChpdGVtOiBBWFBUZW5hbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGVuYW50ID0gaXRlbTtcbiAgICBpZiAodGhpcy5vaWRjU3RyYXRlZ3kgJiYgdHlwZW9mIHRoaXMub2lkY1N0cmF0ZWd5LnN0YXJ0QXV0aG9yaXphdGlvbkZsb3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMub2lkY1N0cmF0ZWd5LnN0YXJ0QXV0aG9yaXphdGlvbkZsb3coaXRlbS5pZCwgJycpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UudGVuYW50cyQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKHRlbmFudHMpID0+IHtcbiAgICAgIHRoaXMuZGlzcGxheWVkVGVuYW50cyA9IHRlbmFudHMuc2xpY2UoMCwgNCk7XG4gICAgICB0aGlzLmFsbFRlbmFudHMgPSB0ZW5hbnRzO1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyVGVuYW50cyh0ZW5hbnRzOiBBWFBUZW5hbnRbXSk6IEFYUFRlbmFudFtdIHtcbiAgICByZXR1cm4gdGVuYW50cy5maWx0ZXIoKHRlbmFudCkgPT4gdGVuYW50LnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHN0cmluZykge1xuICAgIGlmIChldmVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBldmVudDtcbiAgICAgIHRoaXMuZGlzcGxheWVkVGVuYW50cyA9IHRoaXMuZmlsdGVyVGVuYW50cyh0aGlzLmFsbFRlbmFudHMpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBbGxUZW5hbnRzKCkge1xuICAgIHRoaXMuc2hvd0FsbCA9ICF0aGlzLnNob3dBbGw7XG4gICAgdGhpcy5kaXNwbGF5ZWRUZW5hbnRzID0gdGhpcy5maWx0ZXJUZW5hbnRzKHRoaXMuc2hvd0FsbCA/IHRoaXMuYWxsVGVuYW50cyA6IHRoaXMuYWxsVGVuYW50cy5zbGljZSgwLCA0KSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVTaWdub3V0KCkge1xuICAgIGF3YWl0IHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2lnbm91dCgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2F1dGgvbG9naW4nXSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8bWFpblxuICAqdHJhbnNsYXRlPVwibGV0IHRcIlxuICBjbGFzcz1cImF4LXctZnVsbCBheC1zcGFjZS15LTEwIGF4LWgtWzEwMHZoXSBheC1mbGV4IGF4LWZsZXgtY29sIGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlciBheC1iZy1saWdodGVzdCBtZDpheC1iZy1kZWZhdWx0XCJcbj5cbiAgPHNlY3Rpb24+XG4gICAgPGF4cC1sb2dvXG4gICAgICBbc291cmNlXT1cInBsYXRmb3JtQ29uZmlnLmxvZ28/LmZ1bGxcIlxuICAgICAgW2F0dHIuYWx0XT1cInBsYXRmb3JtQ29uZmlnLnRpdGxlXCJcbiAgICAgIGNsYXNzPVwiYXgtdy0zNiBheC1teC1hdXRvIGF4LXRleHQtMnhsIGF4LWZvbnQtYm9sZFwiXG4gICAgPjwvYXhwLWxvZ28+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJheC1mbGV4IGF4LWp1c3RpZnktY2VudGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0yIGF4LWp1c3RpZnktY2VudGVyIGF4LXRleHQtY2VudGVyIGF4LWZsZXgtY29sIGF4LWl0ZW1zLWNlbnRlciBheC1ib3JkZXIgYXgtcm91bmRlZC1sZyBheC1zaGFkb3ctbGcgYXgtcC02IG1kOmF4LXctOTYgYXgtdy04MFwiXG4gICAgPlxuICAgICAgPGF4LWF2YXRhciBjbGFzcz1cImF4LXJvdW5kZWQtZnVsbFwiIFtzaXplXT1cIjcyXCI+XG4gICAgICAgIEBpZih1c2VyPy5hdmF0YXIpe1xuICAgICAgICA8IS0tIDxheC1pbWFnZSBbc3JjXT1cInVzZXI/LmF2YXRhclwiPjwvYXgtaW1hZ2U+IC0tPlxuICAgICAgICA8YXhwLXVzZXItYXZhdGFyIFtzaXplXT1cIjcyXCIgW3VzZXJJZF09XCJ1c2VyPy5pZCFcIj48L2F4cC11c2VyLWF2YXRhcj5cbiAgICAgICAgfVxuICAgICAgPC9heC1hdmF0YXI+XG4gICAgICA8aDIgY2xhc3M9XCJtZDpheC10ZXh0LWxnIGF4LWZvbnQtbWVkaXVtXCI+e3sgdCgnd2VsY29tZScpIHwgYXN5bmMgfX0sIHt7IHVzZXI/LnRpdGxlIH19PC9oMj5cbiAgICAgIDxwIGNsYXNzPVwiYXgtdGV4dC1uZXV0cmFsLTUwMCBheC10ZXh0LXNtIG1kOmF4LXRleHQtYmFzZSBheC1mb250LW1lZGl1bVwiPlxuICAgICAgICB7eyB0KCd0ZW5hbnQtY2hvb3Nlci5kZXNjcmlwdGlvbicsIHsgc2NvcGU6ICdhdXRoJyB9KSB8IGFzeW5jIH19XG4gICAgICA8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtbXQtMyBheC13LWZ1bGwgYXgtb3ZlcmZsb3ctYXV0byBheC1tYXgtaC1bMzAwcHhdIGF4LXBlLTJcIj5cbiAgICAgICAgQGlmKGFsbFRlbmFudHMgJiYgYWxsVGVuYW50cy5sZW5ndGggPiA0KXtcbiAgICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlYXJjaCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICA+PGF4LWNsZWFyLWJ1dHRvbj48L2F4LWNsZWFyLWJ1dHRvblxuICAgICAgICA+PC9heC1zZWFyY2gtYm94PlxuICAgICAgICB9IEBmb3IodGVuYW50IG9mIGRpc3BsYXllZFRlbmFudHM7IHRyYWNrICRpbmRleCl7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTIgYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWJvcmRlci1iIGxhc3Q6YXgtYm9yZGVyLWItMCBheC1weS0zIGF4LWl0ZW1zLWNlbnRlciBheC1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNob29zZVRlbmFudCh0ZW5hbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0yIGF4LWl0ZW1zLWNlbnRlciBheC1mb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXNpemUtMTIgYXgtbWluLXctMTIgYXgtZmxleCBheC1qdXN0aWZ5LWNlbnRlciBheC1pdGVtcy1jZW50ZXIgYXgtcm91bmRlZC1mdWxsIGF4LWJnLW5ldXRyYWwtMTAwIGF4LW0tYXV0b1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtYnVpbGRpbmcgYXgtdGV4dC1uZXV0cmFsLTUwMCBheC10ZXh0LWxnXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZDpheC10ZXh0LWJhc2UgYXgtdGV4dC1zbSBheC10ZXh0LXN0YXJ0XCI+e3sgdGVuYW50LnRpdGxlIH19IDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYodGVuYW50Lm5hbWU9PT1zZWxlY3RlZFRlbmFudD8ubmFtZSl7XG4gICAgICAgICAgPGF4LWxvYWRpbmc+PC9heC1sb2FkaW5nPlxuICAgICAgICAgIH1AZWxzZSB7XG4gICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0IGF4LXRleHQtbmV1dHJhbC00MDBcIj4gPC9heC1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmKGFsbFRlbmFudHMgJiYgYWxsVGVuYW50cy5sZW5ndGg+NCl7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtbXQtNiBheC13LWZ1bGwgYXgtZmxleCBheC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgKG9uQ2xpY2spPVwic2hvd0FsbFRlbmFudHMoKVwiXG4gICAgICAgICAgY2xhc3M9XCJheC13LWZ1bGxcIlxuICAgICAgICAgIGxvb2s9XCJvdXRsaW5lXCJcbiAgICAgICAgICBbdGV4dF09XCJzaG93QWxsID8gKHQoJ3ZpZXdMZXNzJykgfCBhc3luYykgOiAodCgndmlld0FsbCcpIHwgYXN5bmMpXCJcbiAgICAgICAgPjwvYXgtYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cbiAgPHNlY3Rpb24+XG4gICAgPHAgY2xhc3M9XCJheC10ZXh0LW5ldXRyYWwtNDAwIGF4LXRleHQtc21cIj5cbiAgICAgIHt7IHQoJ3RlbmFudC1jaG9vc2VyLmZvb3RlcicsIHsgc2NvcGU6ICdhdXRoJyB9KSB8IGFzeW5jIH19XG4gICAgICA8YSAoY2xpY2spPVwiaGFuZGxlU2lnbm91dCgpXCIgY2xhc3M9XCJheC10ZXh0LXByaW1hcnkgYXgtY3Vyc29yLXBvaW50ZXIgaG92ZXI6YXgtdW5kZXJsaW5lIGF4LWZvbnQtbWVkaXVtXCI+XG4gICAgICAgIHt7IHQoJ2JhY2tMb2dpbicsIHsgc2NvcGU6ICdhdXRoJyB9KSB8IGFzeW5jIH19XG4gICAgICA8L2E+XG4gICAgPC9wPlxuICA8L3NlY3Rpb24+XG48L21haW4+XG4iXX0="],"names":["i1","i2","i4","i5","i8"],"mappings":"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"}