@masterteam/system-settings 0.0.15 → 0.0.17
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.
- package/assets/i18n/ar.json +54 -14
- package/assets/i18n/en.json +54 -14
- package/assets/system-settings.css +1 -1
- package/fesm2022/{masterteam-system-settings-email-delivery-shell-DowMjl4L.mjs → masterteam-system-settings-email-delivery-shell-C_AhRF1f.mjs} +654 -219
- package/fesm2022/masterteam-system-settings-email-delivery-shell-C_AhRF1f.mjs.map +1 -0
- package/fesm2022/masterteam-system-settings.mjs +13 -2
- package/fesm2022/masterteam-system-settings.mjs.map +1 -1
- package/package.json +2 -2
- package/types/masterteam-system-settings.d.ts +10 -1
- package/fesm2022/masterteam-system-settings-email-delivery-shell-DowMjl4L.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-system-settings-email-delivery-shell-DowMjl4L.mjs","sources":["../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery.api.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery.http-api.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery.facade.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/components/email-delivery-status/email-delivery-status.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/operator-reason/email-operator-reason-dialog.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/operator-reason/email-operator-reason-dialog.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/attempt-details/email-attempt-details.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/attempt-details/email-attempt-details.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/attempts/email-delivery-attempts.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/attempts/email-delivery-attempts.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/host-evidence/email-delivery-host-evidence.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/host-evidence/email-delivery-host-evidence.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/quarantine/email-delivery-quarantine.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/quarantine/email-delivery-quarantine.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/activity/email-delivery-activity.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/activity/email-delivery-activity.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/controlled-test/email-controlled-test-dialog.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/dialogs/controlled-test/email-controlled-test-dialog.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/email-delivery-descriptor.utils.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-editor/email-connection-editor.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-editor/email-connection-editor.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-details/email-connection-details.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connection-details/email-connection-details.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connections/email-delivery-connections.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/pages/connections/email-delivery-connections.html","../../../../packages/masterteam/system-settings/src/lib/email-delivery/shell/email-delivery-shell.ts","../../../../packages/masterteam/system-settings/src/lib/email-delivery/shell/email-delivery-shell.html"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport type { Observable } from 'rxjs';\r\nimport type {\r\n EmailAttemptPage,\r\n EmailAttemptReplayRequest,\r\n EmailAttemptReplayResult,\r\n EmailAuthorizationStartResult,\r\n EmailConnectionCreateRequest,\r\n EmailConnectionDetails,\r\n EmailConnectionSummary,\r\n EmailConnectionTestRequest,\r\n EmailConnectionTestResult,\r\n EmailConnectionUpdateRequest,\r\n EmailConnectionValidationResult,\r\n EmailDeliveryStatus,\r\n EmailErrorCatalogEntry,\r\n EmailEvidenceDecisionRequest,\r\n EmailEvidenceDownload,\r\n EmailEvidenceRebuildResult,\r\n EmailFinalizationQuarantineItem,\r\n EmailFinalizationQuarantinePage,\r\n EmailHostEvidenceItem,\r\n EmailHostEvidencePage,\r\n EmailProviderDescriptor,\r\n EmailSendResult,\r\n EmailUserTestDispatchResult,\r\n} from './email-delivery.model';\r\n\r\n@Injectable()\r\nexport abstract class EmailDeliveryApi {\r\n abstract getStatus(): Observable<EmailDeliveryStatus>;\r\n abstract getProviders(): Observable<EmailProviderDescriptor[]>;\r\n abstract getErrorCatalog(): Observable<EmailErrorCatalogEntry[]>;\r\n abstract getConnections(): Observable<EmailConnectionSummary[]>;\r\n abstract getConnection(id: string): Observable<EmailConnectionDetails>;\r\n abstract createConnection(\r\n request: EmailConnectionCreateRequest,\r\n ): Observable<EmailConnectionDetails>;\r\n abstract updateConnection(\r\n id: string,\r\n request: EmailConnectionUpdateRequest,\r\n ): Observable<EmailConnectionDetails>;\r\n abstract deleteConnection(\r\n id: string,\r\n concurrencyToken: string,\r\n ): Observable<void>;\r\n abstract bindConnection(\r\n purpose: string,\r\n connectionId: string,\r\n ): Observable<void>;\r\n abstract unbindConnection(purpose: string): Observable<void>;\r\n abstract validateConnection(\r\n id: string,\r\n ): Observable<EmailConnectionValidationResult>;\r\n abstract sendConnectionTest(\r\n id: string,\r\n request: EmailConnectionTestRequest,\r\n ): Observable<EmailSendResult>;\r\n abstract getConnectionTest(\r\n connectionId: string,\r\n testRequestId: string,\r\n ): Observable<EmailConnectionTestResult>;\r\n abstract startDelegatedAuthorization(\r\n id: string,\r\n ): Observable<EmailAuthorizationStartResult>;\r\n abstract startAdminConsent(\r\n id: string,\r\n ): Observable<EmailAuthorizationStartResult>;\r\n abstract revokeAuthorization(id: string): Observable<void>;\r\n abstract getAttempts(\r\n status: string | null,\r\n cursor: string | null,\r\n take: number,\r\n ): Observable<EmailAttemptPage>;\r\n abstract replayAttempt(\r\n id: string,\r\n request: EmailAttemptReplayRequest,\r\n ): Observable<EmailAttemptReplayResult>;\r\n abstract getTestRequest(\r\n testRequestId: string,\r\n ): Observable<EmailUserTestDispatchResult>;\r\n abstract sendTemplateTest(\r\n eventId: number,\r\n templateId: number,\r\n request: {\r\n testRequestId: string;\r\n emails: string[];\r\n metadata: Record<string, string>;\r\n },\r\n ): Observable<EmailUserTestDispatchResult>;\r\n abstract sendAlertTest(\r\n alertId: number,\r\n request: {\r\n testRequestId: string;\r\n emails: string[];\r\n metadata: Record<string, string>;\r\n },\r\n ): Observable<EmailUserTestDispatchResult>;\r\n abstract getFinalizationQuarantine(\r\n cursor: string | null,\r\n take: number,\r\n ): Observable<EmailFinalizationQuarantinePage>;\r\n abstract retryFinalizationQuarantine(\r\n itemId: string,\r\n reason: string,\r\n ): Observable<EmailFinalizationQuarantineItem>;\r\n abstract acknowledgeFinalizationQuarantine(\r\n itemId: string,\r\n reason: string,\r\n ): Observable<EmailFinalizationQuarantineItem>;\r\n abstract getHostEvidence(\r\n cursor: string | null,\r\n take: number,\r\n ): Observable<EmailHostEvidencePage>;\r\n abstract exportHostEvidence(\r\n evidenceOccurrenceId: string,\r\n ): Observable<EmailEvidenceDownload>;\r\n abstract repairHostEvidence(\r\n evidenceOccurrenceId: string,\r\n request: EmailEvidenceDecisionRequest,\r\n ): Observable<EmailHostEvidenceItem>;\r\n abstract acknowledgeHostEvidence(\r\n evidenceOccurrenceId: string,\r\n request: EmailEvidenceDecisionRequest,\r\n ): Observable<EmailHostEvidenceItem>;\r\n abstract rebuildEvidenceIndex(\r\n take: number,\r\n ): Observable<EmailEvidenceRebuildResult>;\r\n}\r\n","import {\r\n HttpClient,\r\n HttpErrorResponse,\r\n type HttpResponse,\r\n} from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { catchError, map, mergeMap, of, throwError } from 'rxjs';\r\nimport { EMAIL_DELIVERY_OPTIONS } from './email-delivery.config';\r\nimport { EmailDeliveryApi } from './email-delivery.api';\r\nimport type {\r\n AppResponse,\r\n EmailAttemptPage,\r\n EmailAttemptReplayRequest,\r\n EmailAttemptReplayResult,\r\n EmailAuthorizationStartResult,\r\n EmailConnectionCreateRequest,\r\n EmailConnectionDetails,\r\n EmailConnectionSummary,\r\n EmailConnectionTestRequest,\r\n EmailConnectionTestResult,\r\n EmailConnectionUpdateRequest,\r\n EmailConnectionValidationResult,\r\n EmailDeliveryStatus,\r\n EmailDeliveryProblem,\r\n EmailErrorCatalogEntry,\r\n EmailEvidenceDecisionRequest,\r\n EmailEvidenceDownload,\r\n EmailEvidenceRebuildResult,\r\n EmailFinalizationQuarantineItem,\r\n EmailFinalizationQuarantinePage,\r\n EmailHostEvidenceItem,\r\n EmailHostEvidencePage,\r\n EmailProviderDescriptor,\r\n EmailSendResult,\r\n EmailUserTestDispatchResult,\r\n} from './email-delivery.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EmailDeliveryHttpApi extends EmailDeliveryApi {\r\n private readonly http = inject(HttpClient);\r\n private readonly options = inject(EMAIL_DELIVERY_OPTIONS);\r\n\r\n getStatus() {\r\n return this.http.get<EmailDeliveryStatus>(this.url('status'));\r\n }\r\n\r\n getProviders() {\r\n return this.http.get<EmailProviderDescriptor[]>(this.url('providers'));\r\n }\r\n\r\n getErrorCatalog() {\r\n return this.http.get<EmailErrorCatalogEntry[]>(this.url('error-catalog'));\r\n }\r\n\r\n getConnections() {\r\n return this.http.get<EmailConnectionSummary[]>(this.url('connections'));\r\n }\r\n\r\n getConnection(id: string) {\r\n return this.http.get<EmailConnectionDetails>(\r\n this.url(`connections/${encodeURIComponent(id)}`),\r\n );\r\n }\r\n\r\n createConnection(request: EmailConnectionCreateRequest) {\r\n return this.http.post<EmailConnectionDetails>(\r\n this.url('connections'),\r\n request,\r\n );\r\n }\r\n\r\n updateConnection(id: string, request: EmailConnectionUpdateRequest) {\r\n return this.http.put<EmailConnectionDetails>(\r\n this.url(`connections/${encodeURIComponent(id)}`),\r\n request,\r\n );\r\n }\r\n\r\n deleteConnection(id: string, concurrencyToken: string) {\r\n return this.http.delete<void>(\r\n this.url(`connections/${encodeURIComponent(id)}`),\r\n { params: { concurrencyToken } },\r\n );\r\n }\r\n\r\n bindConnection(purpose: string, connectionId: string) {\r\n return this.http.put<void>(\r\n this.url(`bindings/${encodeURIComponent(purpose)}`),\r\n { connectionId },\r\n );\r\n }\r\n\r\n unbindConnection(purpose: string) {\r\n return this.http.delete<void>(\r\n this.url(`bindings/${encodeURIComponent(purpose)}`),\r\n );\r\n }\r\n\r\n validateConnection(id: string) {\r\n return this.http.post<EmailConnectionValidationResult>(\r\n this.url(`connections/${encodeURIComponent(id)}/validate`),\r\n null,\r\n );\r\n }\r\n\r\n sendConnectionTest(id: string, request: EmailConnectionTestRequest) {\r\n return this.http\r\n .post<\r\n EmailSendResult | EmailDeliveryProblem\r\n >(this.url(`connections/${encodeURIComponent(id)}/test`), request)\r\n .pipe(\r\n mergeMap((response) =>\r\n isEmailSendResult(response)\r\n ? of(response)\r\n : throwError(() => response),\r\n ),\r\n catchError((error: unknown) => {\r\n const body = error instanceof HttpErrorResponse ? error.error : error;\r\n return isEmailSendResult(body) ? of(body) : throwError(() => error);\r\n }),\r\n );\r\n }\r\n\r\n getConnectionTest(connectionId: string, testRequestId: string) {\r\n return this.http.get<EmailConnectionTestResult>(\r\n this.url(\r\n `connections/${encodeURIComponent(connectionId)}/test-requests/${encodeURIComponent(testRequestId)}`,\r\n ),\r\n );\r\n }\r\n\r\n startDelegatedAuthorization(id: string) {\r\n return this.http.post<EmailAuthorizationStartResult>(\r\n this.url(\r\n `connections/${encodeURIComponent(id)}/authorization/delegated/start`,\r\n ),\r\n null,\r\n );\r\n }\r\n\r\n startAdminConsent(id: string) {\r\n return this.http.post<EmailAuthorizationStartResult>(\r\n this.url(\r\n `connections/${encodeURIComponent(id)}/authorization/admin-consent/start`,\r\n ),\r\n null,\r\n );\r\n }\r\n\r\n revokeAuthorization(id: string) {\r\n return this.http.post<void>(\r\n this.url(`connections/${encodeURIComponent(id)}/authorization/revoke`),\r\n null,\r\n );\r\n }\r\n\r\n getAttempts(status: string | null, cursor: string | null, take: number) {\r\n return this.http.get<EmailAttemptPage>(this.url('attempts'), {\r\n params: withoutNulls({ status, cursor, take }),\r\n });\r\n }\r\n\r\n replayAttempt(id: string, request: EmailAttemptReplayRequest) {\r\n return this.http.post<EmailAttemptReplayResult>(\r\n this.url(`attempts/${encodeURIComponent(id)}/replay`),\r\n request,\r\n );\r\n }\r\n\r\n getTestRequest(testRequestId: string) {\r\n return this.http.get<EmailUserTestDispatchResult>(\r\n this.url(`test-requests/${encodeURIComponent(testRequestId)}`),\r\n );\r\n }\r\n\r\n sendTemplateTest(\r\n eventId: number,\r\n templateId: number,\r\n request: {\r\n testRequestId: string;\r\n emails: string[];\r\n metadata: Record<string, string>;\r\n },\r\n ) {\r\n return this.http\r\n .post<\r\n AppResponse<EmailUserTestDispatchResult>\r\n >(this.notificationUrl(`events/${eventId}/templates/${templateId}/test-email`), request)\r\n .pipe(map((response) => response.data));\r\n }\r\n\r\n sendAlertTest(\r\n alertId: number,\r\n request: {\r\n testRequestId: string;\r\n emails: string[];\r\n metadata: Record<string, string>;\r\n },\r\n ) {\r\n return this.http\r\n .post<\r\n AppResponse<EmailUserTestDispatchResult>\r\n >(this.notificationUrl(`alerts/${alertId}/test`), request)\r\n .pipe(map((response) => response.data));\r\n }\r\n\r\n getFinalizationQuarantine(cursor: string | null, take: number) {\r\n return this.http.get<EmailFinalizationQuarantinePage>(\r\n this.url('finalization-quarantine'),\r\n { params: withoutNulls({ cursor, take }) },\r\n );\r\n }\r\n\r\n retryFinalizationQuarantine(itemId: string, reason: string) {\r\n return this.http.post<EmailFinalizationQuarantineItem>(\r\n this.url(`finalization-quarantine/${encodeURIComponent(itemId)}/retry`),\r\n { reason },\r\n );\r\n }\r\n\r\n acknowledgeFinalizationQuarantine(itemId: string, reason: string) {\r\n return this.http.post<EmailFinalizationQuarantineItem>(\r\n this.url(\r\n `finalization-quarantine/${encodeURIComponent(itemId)}/acknowledge`,\r\n ),\r\n { reason },\r\n );\r\n }\r\n\r\n getHostEvidence(cursor: string | null, take: number) {\r\n return this.http.get<EmailHostEvidencePage>(this.url('orphan-evidence'), {\r\n params: withoutNulls({ cursor, take }),\r\n });\r\n }\r\n\r\n exportHostEvidence(evidenceOccurrenceId: string) {\r\n return this.http\r\n .get(\r\n this.url(\r\n `orphan-evidence/${encodeURIComponent(evidenceOccurrenceId)}/export`,\r\n ),\r\n {\r\n observe: 'response',\r\n responseType: 'blob',\r\n },\r\n )\r\n .pipe(map((response) => toEvidenceDownload(response)));\r\n }\r\n\r\n repairHostEvidence(\r\n evidenceOccurrenceId: string,\r\n request: EmailEvidenceDecisionRequest,\r\n ) {\r\n return this.http.post<EmailHostEvidenceItem>(\r\n this.url(\r\n `orphan-evidence/${encodeURIComponent(evidenceOccurrenceId)}/repair`,\r\n ),\r\n request,\r\n );\r\n }\r\n\r\n acknowledgeHostEvidence(\r\n evidenceOccurrenceId: string,\r\n request: EmailEvidenceDecisionRequest,\r\n ) {\r\n return this.http.post<EmailHostEvidenceItem>(\r\n this.url(\r\n `orphan-evidence/${encodeURIComponent(evidenceOccurrenceId)}/acknowledge`,\r\n ),\r\n request,\r\n );\r\n }\r\n\r\n rebuildEvidenceIndex(take: number) {\r\n return this.http.post<EmailEvidenceRebuildResult>(\r\n this.url('orphan-evidence/rebuild-index'),\r\n null,\r\n { params: { take } },\r\n );\r\n }\r\n\r\n private url(path: string): string {\r\n return joinPath(this.options.apiBasePath, path);\r\n }\r\n\r\n private notificationUrl(path: string): string {\r\n return joinPath(this.options.notificationApiBasePath, path);\r\n }\r\n}\r\n\r\nfunction isEmailSendResult(value: unknown): value is EmailSendResult {\r\n return (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n typeof (value as EmailSendResult).outcome === 'string' &&\r\n typeof (value as EmailSendResult).code === 'string'\r\n );\r\n}\r\n\r\nfunction withoutNulls(\r\n values: Record<string, string | number | null>,\r\n): Record<string, string | number> {\r\n return Object.fromEntries(\r\n Object.entries(values).filter(\r\n (entry): entry is [string, string | number] => entry[1] !== null,\r\n ),\r\n );\r\n}\r\n\r\nfunction joinPath(base: string, path: string): string {\r\n return `${base.replace(/\\/$/, '')}/${path.replace(/^\\//, '')}`;\r\n}\r\n\r\nfunction toEvidenceDownload(\r\n response: HttpResponse<Blob>,\r\n): EmailEvidenceDownload {\r\n const contentDisposition = response.headers.get('content-disposition') ?? '';\r\n const fileNameMatch = /filename\\*?=(?:UTF-8''|\\\")?([^\\\";]+)/i.exec(\r\n contentDisposition,\r\n );\r\n\r\n return {\r\n blob: response.body ?? new Blob(),\r\n fileName: fileNameMatch\r\n ? decodeURIComponent(fileNameMatch[1].replace(/\\\"$/, ''))\r\n : 'email-delivery-evidence.json',\r\n contentType:\r\n response.headers.get('content-type') ?? 'application/octet-stream',\r\n };\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { computed, inject, Injectable, signal } from '@angular/core';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport {\r\n finalize,\r\n forkJoin,\r\n map,\r\n Observable,\r\n switchMap,\r\n tap,\r\n throwError,\r\n} from 'rxjs';\r\nimport { EMAIL_DELIVERY_OPTIONS } from './email-delivery.config';\r\nimport { EmailDeliveryHttpApi } from './email-delivery.http-api';\r\nimport type {\r\n EmailAttemptReplayRequest,\r\n EmailAttemptReplayResult,\r\n EmailAuthorizationStartResult,\r\n EmailConnectionCreateRequest,\r\n EmailConnectionDetails,\r\n EmailConnectionSummary,\r\n EmailConnectionTestRequest,\r\n EmailConnectionTestResult,\r\n EmailConnectionUpdateRequest,\r\n EmailConnectionValidationResult,\r\n EmailDeliveryAttempt,\r\n EmailDeliveryPermission,\r\n EmailDeliveryProblem,\r\n EmailDeliveryStatus,\r\n EmailErrorCatalogEntry,\r\n EmailEvidenceDecisionRequest,\r\n EmailEvidenceDownload,\r\n EmailEvidenceRebuildResult,\r\n EmailFinalizationQuarantineItem,\r\n EmailHostEvidenceItem,\r\n EmailProviderDescriptor,\r\n EmailSendResult,\r\n} from './email-delivery.model';\r\n\r\nconst PENDING_AUTHORIZATION_STORAGE_KEY =\r\n 'mt.email-delivery.pending-authorization-connection';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EmailDeliveryFacade {\r\n private readonly options = inject(EMAIL_DELIVERY_OPTIONS);\r\n private readonly api = inject(EmailDeliveryHttpApi);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly toast = inject(ToastService);\r\n private initialized = false;\r\n\r\n readonly status = signal<EmailDeliveryStatus | null>(null);\r\n readonly providers = signal<EmailProviderDescriptor[]>([]);\r\n readonly errorCatalog = signal<EmailErrorCatalogEntry[]>([]);\r\n readonly connections = signal<EmailConnectionSummary[]>([]);\r\n readonly selectedConnection = signal<EmailConnectionDetails | null>(null);\r\n readonly attempts = signal<EmailDeliveryAttempt[]>([]);\r\n readonly attemptsNextCursor = signal<string | null>(null);\r\n readonly attemptStatusFilter = signal<string | null>(null);\r\n readonly quarantine = signal<EmailFinalizationQuarantineItem[]>([]);\r\n readonly quarantineNextCursor = signal<string | null>(null);\r\n readonly hostEvidence = signal<EmailHostEvidenceItem[]>([]);\r\n readonly hostEvidenceNextCursor = signal<string | null>(null);\r\n readonly hostEvidenceScanBudgetExhausted = signal(false);\r\n\r\n readonly statusLoading = signal(false);\r\n readonly catalogLoading = signal(false);\r\n readonly connectionsLoading = signal(false);\r\n readonly detailsLoading = signal(false);\r\n readonly attemptsLoading = signal(false);\r\n readonly quarantineLoading = signal(false);\r\n readonly hostEvidenceLoading = signal(false);\r\n readonly mutationLoading = signal<string | null>(null);\r\n readonly lastConnectionTest = signal<EmailSendResult | null>(null);\r\n readonly lastConnectionTestRequestId = signal<string | null>(null);\r\n\r\n readonly activeConnection = computed(() =>\r\n this.connections().find((connection) =>\r\n connection.bindings.includes('notifications'),\r\n ),\r\n );\r\n readonly managementAvailable = computed(\r\n () => this.status()?.managementEnabled === true,\r\n );\r\n\r\n initialize(): void {\r\n if (this.initialized) return;\r\n this.initialized = true;\r\n this.loadStatus()\r\n .pipe(\r\n switchMap(() =>\r\n forkJoin({\r\n catalog: this.loadCatalog(),\r\n connections: this.loadConnections(),\r\n }),\r\n ),\r\n )\r\n .subscribe({ error: (error) => this.showError(error) });\r\n }\r\n\r\n hasPermission(permission: EmailDeliveryPermission): boolean {\r\n return this.options.permissionKeys.includes(permission);\r\n }\r\n\r\n loadStatus(): Observable<EmailDeliveryStatus> {\r\n this.statusLoading.set(true);\r\n return this.api.getStatus().pipe(\r\n tap((status) => this.status.set(status)),\r\n finalize(() => this.statusLoading.set(false)),\r\n );\r\n }\r\n\r\n loadCatalog(): Observable<{\r\n providers: EmailProviderDescriptor[];\r\n errors: EmailErrorCatalogEntry[];\r\n }> {\r\n this.catalogLoading.set(true);\r\n return forkJoin({\r\n providers: this.api.getProviders(),\r\n errors: this.api.getErrorCatalog(),\r\n }).pipe(\r\n tap(({ providers, errors }) => {\r\n this.providers.set(providers);\r\n this.errorCatalog.set(errors);\r\n }),\r\n finalize(() => this.catalogLoading.set(false)),\r\n );\r\n }\r\n\r\n loadConnections(): Observable<EmailConnectionSummary[]> {\r\n this.connectionsLoading.set(true);\r\n return this.api.getConnections().pipe(\r\n tap((connections) => this.connections.set(connections)),\r\n finalize(() => this.connectionsLoading.set(false)),\r\n );\r\n }\r\n\r\n loadConnection(id: string): Observable<EmailConnectionDetails> {\r\n this.detailsLoading.set(true);\r\n return this.api.getConnection(id).pipe(\r\n tap((details) => this.selectedConnection.set(details)),\r\n finalize(() => this.detailsLoading.set(false)),\r\n );\r\n }\r\n\r\n createConnection(\r\n request: EmailConnectionCreateRequest,\r\n ): Observable<EmailConnectionDetails> {\r\n this.mutationLoading.set('create');\r\n return this.api.createConnection(request).pipe(\r\n switchMap((details) => this.refreshConnection(details.connection.id)),\r\n tap(() => this.showSuccess('connection-created')),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n updateConnection(\r\n id: string,\r\n request: EmailConnectionUpdateRequest,\r\n ): Observable<EmailConnectionDetails> {\r\n this.mutationLoading.set('update');\r\n return this.api.updateConnection(id, request).pipe(\r\n switchMap(() => this.refreshConnection(id)),\r\n tap(() => this.showSuccess('connection-updated')),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n deleteConnection(id: string, concurrencyToken: string): Observable<void> {\r\n this.mutationLoading.set('delete');\r\n return this.api.deleteConnection(id, concurrencyToken).pipe(\r\n switchMap(() =>\r\n forkJoin({\r\n connections: this.loadConnections(),\r\n status: this.loadStatus(),\r\n }),\r\n ),\r\n tap(() => {\r\n this.selectedConnection.set(null);\r\n this.showSuccess('connection-deleted');\r\n }),\r\n map(() => undefined),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n validateConnection(id: string): Observable<EmailConnectionValidationResult> {\r\n this.mutationLoading.set('validate');\r\n return this.api.validateConnection(id).pipe(\r\n switchMap((result) => this.refreshConnection(id).pipe(map(() => result))),\r\n tap((result) =>\r\n result.isValid\r\n ? this.toast.success(this.describeCode(result.code))\r\n : this.toast.warn(this.describeCode(result.code)),\r\n ),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n sendConnectionTest(\r\n id: string,\r\n request: EmailConnectionTestRequest,\r\n ): Observable<EmailSendResult> {\r\n this.mutationLoading.set('test');\r\n this.lastConnectionTestRequestId.set(request.testRequestId);\r\n return this.api.sendConnectionTest(id, request).pipe(\r\n tap((result) => this.lastConnectionTest.set(result)),\r\n switchMap((result) => this.refreshConnection(id).pipe(map(() => result))),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n retrieveConnectionTest(\r\n connectionId: string,\r\n testRequestId: string,\r\n ): Observable<EmailConnectionTestResult> {\r\n this.mutationLoading.set('retrieve-test');\r\n return this.api.getConnectionTest(connectionId, testRequestId).pipe(\r\n tap((stored) => this.lastConnectionTest.set(stored.result)),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n bindConnection(id: string, purpose = 'notifications'): Observable<void> {\r\n this.mutationLoading.set('bind');\r\n return this.api.bindConnection(purpose, id).pipe(\r\n switchMap(() => this.refreshConnection(id)),\r\n tap(() => this.showSuccess('connection-bound')),\r\n map(() => undefined),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n unbindConnection(id: string, purpose = 'notifications'): Observable<void> {\r\n this.mutationLoading.set('unbind');\r\n return this.api.unbindConnection(purpose).pipe(\r\n switchMap(() => this.refreshConnection(id)),\r\n tap(() => this.showSuccess('connection-unbound')),\r\n map(() => undefined),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n startAuthorization(\r\n id: string,\r\n kind: 'delegated' | 'admin-consent',\r\n ): Observable<EmailAuthorizationStartResult> {\r\n this.mutationLoading.set(kind);\r\n const request =\r\n kind === 'delegated'\r\n ? this.api.startDelegatedAuthorization(id)\r\n : this.api.startAdminConsent(id);\r\n return request.pipe(\r\n tap(() => this.rememberAuthorizationConnection(id)),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n revokeAuthorization(id: string): Observable<void> {\r\n this.mutationLoading.set('revoke');\r\n return this.api.revokeAuthorization(id).pipe(\r\n switchMap(() => this.refreshConnection(id)),\r\n tap(() => this.showSuccess('authorization-revoked')),\r\n map(() => undefined),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n loadAttempts(reset = true, status = this.attemptStatusFilter()) {\r\n this.attemptsLoading.set(true);\r\n const cursor = reset ? null : this.attemptsNextCursor();\r\n if (reset) this.attemptStatusFilter.set(status);\r\n return this.api.getAttempts(status, cursor, 50).pipe(\r\n tap((page) => {\r\n this.attempts.set(\r\n reset ? page.items : mergeById(this.attempts(), page.items, 'id'),\r\n );\r\n this.attemptsNextCursor.set(page.nextCursor);\r\n }),\r\n finalize(() => this.attemptsLoading.set(false)),\r\n );\r\n }\r\n\r\n replayAttempt(\r\n attempt: EmailDeliveryAttempt,\r\n request: EmailAttemptReplayRequest,\r\n ): Observable<EmailAttemptReplayResult> {\r\n this.mutationLoading.set(`replay-${attempt.id}`);\r\n return this.api.replayAttempt(attempt.id, request).pipe(\r\n tap((result) => {\r\n this.attempts.update((items) =>\r\n replaceById(items, result.attempt, 'id'),\r\n );\r\n this.showSuccess('attempt-replay-scheduled');\r\n }),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n loadQuarantine(reset = true) {\r\n this.quarantineLoading.set(true);\r\n const cursor = reset ? null : this.quarantineNextCursor();\r\n return this.api.getFinalizationQuarantine(cursor, 100).pipe(\r\n tap((page) => {\r\n this.quarantine.set(\r\n reset\r\n ? page.items\r\n : mergeById(this.quarantine(), page.items, 'itemId'),\r\n );\r\n this.quarantineNextCursor.set(page.nextCursor);\r\n }),\r\n finalize(() => this.quarantineLoading.set(false)),\r\n );\r\n }\r\n\r\n decideQuarantine(\r\n item: EmailFinalizationQuarantineItem,\r\n action: 'retry' | 'acknowledge',\r\n reason: string,\r\n ): Observable<EmailFinalizationQuarantineItem> {\r\n this.mutationLoading.set(`${action}-${item.itemId}`);\r\n const request =\r\n action === 'retry'\r\n ? this.api.retryFinalizationQuarantine(item.itemId, reason)\r\n : this.api.acknowledgeFinalizationQuarantine(item.itemId, reason);\r\n return request.pipe(\r\n switchMap((updated) =>\r\n this.loadQuarantine(true).pipe(map(() => updated)),\r\n ),\r\n tap(() => {\r\n this.showSuccess(\r\n action === 'retry'\r\n ? 'quarantine-retry-submitted'\r\n : 'quarantine-acknowledged',\r\n );\r\n }),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n loadHostEvidence(reset = true) {\r\n this.hostEvidenceLoading.set(true);\r\n const cursor = reset ? null : this.hostEvidenceNextCursor();\r\n return this.api.getHostEvidence(cursor, 100).pipe(\r\n tap((page) => {\r\n this.hostEvidence.set(\r\n reset\r\n ? page.items\r\n : mergeHostEvidence(this.hostEvidence(), page.items),\r\n );\r\n this.hostEvidenceNextCursor.set(page.nextCursor);\r\n this.hostEvidenceScanBudgetExhausted.set(page.scanBudgetExhausted);\r\n }),\r\n finalize(() => this.hostEvidenceLoading.set(false)),\r\n );\r\n }\r\n\r\n exportHostEvidence(\r\n evidenceOccurrenceId: string,\r\n ): Observable<EmailEvidenceDownload> {\r\n this.mutationLoading.set(`export-${evidenceOccurrenceId}`);\r\n return this.api\r\n .exportHostEvidence(evidenceOccurrenceId)\r\n .pipe(finalize(() => this.mutationLoading.set(null)));\r\n }\r\n\r\n decideHostEvidence(\r\n item: EmailHostEvidenceItem,\r\n action: 'repair' | 'acknowledge',\r\n reason: string,\r\n ): Observable<EmailHostEvidenceItem> {\r\n if (!item.evidenceOccurrenceId || !item.decisionToken) {\r\n return throwError(() => new Error('Incomplete evidence identity'));\r\n }\r\n this.mutationLoading.set(`${action}-${item.evidenceOccurrenceId}`);\r\n const request: EmailEvidenceDecisionRequest = {\r\n reason,\r\n decisionToken: item.decisionToken,\r\n };\r\n const operation =\r\n action === 'repair'\r\n ? this.api.repairHostEvidence(item.evidenceOccurrenceId, request)\r\n : this.api.acknowledgeHostEvidence(item.evidenceOccurrenceId, request);\r\n return operation.pipe(\r\n switchMap((updated) =>\r\n this.loadHostEvidence(true).pipe(map(() => updated)),\r\n ),\r\n tap(() => {\r\n this.showSuccess(\r\n action === 'repair' ? 'evidence-repaired' : 'evidence-acknowledged',\r\n );\r\n }),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n rebuildEvidenceIndex(take: number): Observable<EmailEvidenceRebuildResult> {\r\n this.mutationLoading.set('rebuild-evidence');\r\n return this.api.rebuildEvidenceIndex(take).pipe(\r\n switchMap((result) =>\r\n this.loadHostEvidence(true).pipe(map(() => result)),\r\n ),\r\n tap(() => this.showSuccess('evidence-index-rebuilt')),\r\n finalize(() => this.mutationLoading.set(null)),\r\n );\r\n }\r\n\r\n providerByKey(\r\n key: string | null | undefined,\r\n ): EmailProviderDescriptor | null {\r\n return this.providers().find((provider) => provider.key === key) ?? null;\r\n }\r\n\r\n describeCode(code: string | null | undefined): string {\r\n if (!code) return this.transloco.translate('email-delivery.unknown-code');\r\n const key = `email-delivery.codes.${code}`;\r\n const translated = this.transloco.translate(key);\r\n if (translated !== key) return translated;\r\n\r\n const contract = this.errorCatalog().find((entry) => entry.code === code);\r\n if (!contract || contract.frontendAction === 'none') return code;\r\n\r\n const actionKey = `email-delivery.error-actions.${contract.frontendAction}`;\r\n const action = this.transloco.translate(actionKey);\r\n return action === actionKey ? code : `${action} (${code})`;\r\n }\r\n\r\n describeError(error: unknown): string {\r\n const problem = extractProblem(error);\r\n const base = this.describeCode(problem?.code);\r\n return problem?.correlationId\r\n ? `${base} (${this.transloco.translate('email-delivery.correlation-id')}: ${problem.correlationId})`\r\n : base;\r\n }\r\n\r\n errorAction(error: unknown): string | null {\r\n const problem = extractProblem(error);\r\n if (!problem) return null;\r\n return (\r\n problem.action ||\r\n this.errorCatalog().find((entry) => entry.code === problem.code)\r\n ?.frontendAction ||\r\n null\r\n );\r\n }\r\n\r\n showError(error: unknown): void {\r\n this.toast.error(this.describeError(error));\r\n }\r\n\r\n takePendingAuthorizationConnection(): string | null {\r\n if (typeof sessionStorage === 'undefined') return null;\r\n const id = sessionStorage.getItem(PENDING_AUTHORIZATION_STORAGE_KEY);\r\n sessionStorage.removeItem(PENDING_AUTHORIZATION_STORAGE_KEY);\r\n return id;\r\n }\r\n\r\n private refreshConnection(id: string): Observable<EmailConnectionDetails> {\r\n return forkJoin({\r\n details: this.api.getConnection(id),\r\n connections: this.api.getConnections(),\r\n status: this.api.getStatus(),\r\n }).pipe(\r\n tap(({ details, connections, status }) => {\r\n this.selectedConnection.set(details);\r\n this.connections.set(connections);\r\n this.status.set(status);\r\n }),\r\n map(({ details }) => details),\r\n );\r\n }\r\n\r\n private rememberAuthorizationConnection(id: string): void {\r\n if (typeof sessionStorage === 'undefined') return;\r\n sessionStorage.setItem(PENDING_AUTHORIZATION_STORAGE_KEY, id);\r\n }\r\n\r\n private showSuccess(key: string): void {\r\n this.toast.success(this.transloco.translate(`email-delivery.${key}`));\r\n }\r\n}\r\n\r\nfunction extractProblem(error: unknown): EmailDeliveryProblem | null {\r\n if (error instanceof HttpErrorResponse) {\r\n const value = error.error as Partial<EmailDeliveryProblem> | null;\r\n return value && typeof value.code === 'string'\r\n ? (value as EmailDeliveryProblem)\r\n : null;\r\n }\r\n if (\r\n typeof error === 'object' &&\r\n error !== null &&\r\n typeof (error as Partial<EmailDeliveryProblem>).code === 'string'\r\n ) {\r\n return error as EmailDeliveryProblem;\r\n }\r\n return null;\r\n}\r\n\r\nfunction mergeById<T extends Record<K, string>, K extends keyof T>(\r\n current: T[],\r\n incoming: T[],\r\n key: K,\r\n): T[] {\r\n const values = new Map(current.map((item) => [item[key], item]));\r\n incoming.forEach((item) => values.set(item[key], item));\r\n return Array.from(values.values());\r\n}\r\n\r\nfunction replaceById<T extends Record<K, string>, K extends keyof T>(\r\n current: T[],\r\n replacement: T,\r\n key: K,\r\n): T[] {\r\n return current.map((item) =>\r\n item[key] === replacement[key] ? replacement : item,\r\n );\r\n}\r\n\r\nfunction mergeHostEvidence(\r\n current: EmailHostEvidenceItem[],\r\n incoming: EmailHostEvidenceItem[],\r\n): EmailHostEvidenceItem[] {\r\n const identity = (item: EmailHostEvidenceItem) =>\r\n item.evidenceOccurrenceId ?? item.itemId;\r\n const values = new Map(current.map((item) => [identity(item), item]));\r\n incoming.forEach((item) => values.set(identity(item), item));\r\n return Array.from(values.values());\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n EntityStatus,\r\n type EntityData,\r\n type EntityStatusValue,\r\n} from '@masterteam/components/entities';\r\nimport type { ColumnDef } from '@masterteam/components/table';\r\n\r\nexport type EmailDeliveryStatusKind = 'connection' | 'attempt' | 'support';\r\n\r\ninterface EmailDeliveryStatusDefinition {\r\n color: string;\r\n translationKey: string;\r\n}\r\n\r\ntype EmailDeliveryStatusMap = NonNullable<ColumnDef['statusMap']>;\r\n\r\nconst STATUS_DEFINITIONS: Record<\r\n EmailDeliveryStatusKind,\r\n Record<string, EmailDeliveryStatusDefinition>\r\n> = {\r\n connection: {\r\n Draft: status('#64748B', 'connection.draft'),\r\n PendingAuthorization: status('#D97706', 'connection.pending-authorization'),\r\n PendingValidation: status('#0284C7', 'connection.pending-validation'),\r\n Ready: status('#059669', 'connection.ready'),\r\n ReauthorizationRequired: status(\r\n '#EA580C',\r\n 'connection.reauthorization-required',\r\n ),\r\n ConditionalAccessRequired: status(\r\n '#EA580C',\r\n 'connection.conditional-access-required',\r\n ),\r\n Disabled: status('#64748B', 'connection.disabled'),\r\n Invalid: status('#DC2626', 'connection.invalid'),\r\n },\r\n attempt: {\r\n Reserved: status('#64748B', 'attempt.reserved'),\r\n ProviderInvocationStarted: status(\r\n '#0284C7',\r\n 'attempt.provider-invocation-started',\r\n ),\r\n ProviderInvocationDefinitivelyNotAccepted: status(\r\n '#DC2626',\r\n 'attempt.provider-not-accepted',\r\n ),\r\n ProviderResultReconciliation: status('#7C3AED', 'attempt.reconciling'),\r\n ProviderResultPending: status('#0284C7', 'attempt.pending'),\r\n Blocked: status('#DC2626', 'attempt.blocked'),\r\n RetryScheduled: status('#D97706', 'attempt.retry-scheduled'),\r\n Accepted: status('#059669', 'attempt.accepted'),\r\n OutcomeUnknown: status('#EA580C', 'attempt.outcome-unknown'),\r\n FailedPermanent: status('#DC2626', 'attempt.failed-permanent'),\r\n DeadLettered: status('#BE123C', 'attempt.dead-lettered'),\r\n },\r\n support: {\r\n active: status('#D97706', 'support.active'),\r\n 'repair-pending': status('#0284C7', 'support.repair-pending'),\r\n repaired: status('#059669', 'support.repaired'),\r\n 'acknowledgement-pending': status(\r\n '#0284C7',\r\n 'support.acknowledgement-pending',\r\n ),\r\n acknowledged: status('#64748B', 'support.acknowledged'),\r\n Owned: status('#059669', 'support.owned'),\r\n owned: status('#059669', 'support.owned'),\r\n Missing: status('#D97706', 'support.missing'),\r\n missing: status('#D97706', 'support.missing'),\r\n Conflict: status('#DC2626', 'support.conflict'),\r\n conflict: status('#DC2626', 'support.conflict'),\r\n IdentityIncomplete: status('#EA580C', 'support.identity-incomplete'),\r\n identityincomplete: status('#EA580C', 'support.identity-incomplete'),\r\n 'retryable-after-upgrade': status(\r\n '#0284C7',\r\n 'support.retryable-after-upgrade',\r\n ),\r\n 'repair-required': status('#EA580C', 'support.repair-required'),\r\n 'acknowledge-only': status('#64748B', 'support.acknowledge-only'),\r\n configured: status('#059669', 'support.configured'),\r\n 'not-configured': status('#64748B', 'support.not-configured'),\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-status',\r\n imports: [EntityStatus],\r\n template: `<mt-entity-status [data]=\"statusData()\" />`,\r\n host: { class: 'inline-flex' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryStatus {\r\n readonly value = input.required<string>();\r\n readonly kind = input<EmailDeliveryStatusKind>('support');\r\n\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n protected readonly statusData = computed<EntityData>(() => {\r\n this.activeLanguage();\r\n return {\r\n name: '',\r\n viewType: 'Status',\r\n value: getEmailDeliveryStatusValue(this.kind(), this.value(), (key) =>\r\n this.transloco.translate(key),\r\n ),\r\n configuration: { hideName: true },\r\n };\r\n });\r\n}\r\n\r\nexport function getEmailDeliveryStatusMap(\r\n kind: EmailDeliveryStatusKind,\r\n translate: (key: string) => string,\r\n): EmailDeliveryStatusMap {\r\n return Object.fromEntries(\r\n Object.entries(STATUS_DEFINITIONS[kind]).map(([key, definition]) => [\r\n key,\r\n {\r\n color: definition.color,\r\n display: translate(\r\n `email-delivery.status.${definition.translationKey}`,\r\n ),\r\n },\r\n ]),\r\n );\r\n}\r\n\r\nfunction getEmailDeliveryStatusValue(\r\n kind: EmailDeliveryStatusKind,\r\n value: string,\r\n translate: (key: string) => string,\r\n): EntityStatusValue {\r\n const definition = STATUS_DEFINITIONS[kind][value];\r\n return {\r\n key: value,\r\n display: definition\r\n ? translate(`email-delivery.status.${definition.translationKey}`)\r\n : value,\r\n color: definition?.color ?? '#64748B',\r\n };\r\n}\r\n\r\nfunction status(\r\n color: string,\r\n translationKey: string,\r\n): EmailDeliveryStatusDefinition {\r\n return { color, translationKey };\r\n}\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TextareaField } from '@masterteam/components/textarea-field';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { inject } from '@angular/core';\r\n\r\nexport interface EmailOperatorDecision {\r\n reason: string;\r\n exceptionalOverride: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-email-operator-reason-dialog',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Button,\r\n TextareaField,\r\n ToggleField,\r\n ],\r\n templateUrl: './email-operator-reason-dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailOperatorReasonDialog {\r\n readonly itemName = input.required<string>();\r\n readonly consequence = input.required<string>();\r\n readonly showExceptionalOverride = input(false);\r\n readonly confirmLabel = input<string | null>(null);\r\n\r\n private readonly ref = inject(ModalRef);\r\n protected readonly modal = inject(ModalService);\r\n protected readonly reason = new FormControl('', {\r\n nonNullable: true,\r\n validators: [Validators.required, Validators.maxLength(500)],\r\n });\r\n protected readonly exceptionalOverride = new FormControl(false, {\r\n nonNullable: true,\r\n });\r\n\r\n protected cancel(): void {\r\n this.ref.close();\r\n }\r\n\r\n protected confirm(): void {\r\n this.reason.markAsTouched();\r\n this.exceptionalOverride.markAsTouched();\r\n if (!this.canConfirm()) return;\r\n this.ref.close({\r\n reason: this.reason.getRawValue().trim(),\r\n exceptionalOverride: this.exceptionalOverride.getRawValue(),\r\n } satisfies EmailOperatorDecision);\r\n }\r\n\r\n protected canConfirm(): boolean {\r\n return (\r\n this.reason.valid &&\r\n (!this.showExceptionalOverride() ||\r\n this.exceptionalOverride.getRawValue())\r\n );\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <form\r\n [class]=\"'space-y-5 p-4 sm:p-5 ' + modal.contentClass\"\r\n (ngSubmit)=\"confirm()\"\r\n >\r\n <div\r\n class=\"rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-950\"\r\n role=\"note\"\r\n >\r\n <p class=\"m-0 break-words font-semibold\">{{ itemName() }}</p>\r\n <p class=\"mb-0 mt-1\">{{ consequence() }}</p>\r\n </div>\r\n\r\n <mt-textarea-field\r\n [formControl]=\"reason\"\r\n [label]=\"t('operator-reason')\"\r\n [hint]=\"t('operator-reason-hint')\"\r\n [required]=\"true\"\r\n [maxLength]=\"500\"\r\n rows=\"4\"\r\n />\r\n\r\n @if (showExceptionalOverride()) {\r\n <mt-toggle-field\r\n [formControl]=\"exceptionalOverride\"\r\n [label]=\"t('exceptional-override')\"\r\n [hint]=\"t('exceptional-override-hint')\"\r\n />\r\n }\r\n </form>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n type=\"button\"\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"cancel()\"\r\n />\r\n <mt-button\r\n type=\"button\"\r\n severity=\"warn\"\r\n [label]=\"confirmLabel() || t('confirm-action')\"\r\n [disabled]=\"!canConfirm()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"confirm()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { DatePipe } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { take } from 'rxjs';\r\nimport { EmailDeliveryStatus } from '../../components/email-delivery-status/email-delivery-status';\r\nimport {\r\n EmailOperatorReasonDialog,\r\n type EmailOperatorDecision,\r\n} from '../operator-reason/email-operator-reason-dialog';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport type { EmailDeliveryAttempt } from '../../email-delivery.model';\r\n\r\n@Component({\r\n selector: 'mt-email-attempt-details',\r\n imports: [DatePipe, TranslocoDirective, Button, Card, EmailDeliveryStatus],\r\n templateUrl: './email-attempt-details.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailAttemptDetails {\r\n readonly attempt = input.required<EmailDeliveryAttempt>();\r\n\r\n private readonly ref = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modal = inject(ModalService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n\r\n protected canReplay(): boolean {\r\n return [\r\n 'Blocked',\r\n 'RetryScheduled',\r\n 'Accepted',\r\n 'FailedPermanent',\r\n 'DeadLettered',\r\n 'OutcomeUnknown',\r\n ].includes(this.attempt().status);\r\n }\r\n\r\n protected providerLabel(providerKey: string | null | undefined): string {\r\n return (\r\n this.facade.providerByKey(providerKey)?.displayName ?? providerKey ?? '—'\r\n );\r\n }\r\n\r\n protected replay(): void {\r\n const attempt = this.attempt();\r\n const dialog = this.modal.openModal(EmailOperatorReasonDialog, 'dialog', {\r\n header: this.t('replay-attempt'),\r\n styleClass: '!w-[36rem] max-w-[96vw]',\r\n dismissible: true,\r\n inputValues: {\r\n itemName: attempt.id,\r\n consequence: isExceptionalReplay(attempt.status)\r\n ? this.t('replay-exceptional-warning')\r\n : this.t('replay-warning'),\r\n showExceptionalOverride: isExceptionalReplay(attempt.status),\r\n confirmLabel: this.t('replay-attempt'),\r\n },\r\n });\r\n dialog.onClose\r\n .pipe(take(1))\r\n .subscribe((decision: EmailOperatorDecision) => {\r\n if (!decision) return;\r\n this.facade\r\n .replayAttempt(attempt, {\r\n concurrencyToken: attempt.concurrencyToken,\r\n exceptionalOverride: decision.exceptionalOverride,\r\n reason: decision.reason,\r\n })\r\n .subscribe({\r\n next: (result) => this.ref.close(result.attempt),\r\n error: (error) => this.facade.showError(error),\r\n });\r\n });\r\n }\r\n\r\n protected close(): void {\r\n this.ref.close();\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n\r\nfunction isExceptionalReplay(status: string): boolean {\r\n return status === 'Accepted' || status === 'OutcomeUnknown';\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n @if (attempt(); as item) {\r\n <div [class]=\"'min-h-0 overflow-y-auto p-4 sm:p-5 ' + modal.contentClass\">\r\n <div class=\"grid w-full gap-5\">\r\n <div\r\n class=\"rounded-lg border px-4 py-3 text-sm\"\r\n [class.border-amber-200]=\"item.status === 'OutcomeUnknown'\"\r\n [class.bg-amber-50]=\"item.status === 'OutcomeUnknown'\"\r\n [class.border-blue-200]=\"item.status !== 'OutcomeUnknown'\"\r\n [class.bg-blue-50]=\"item.status !== 'OutcomeUnknown'\"\r\n role=\"status\"\r\n >\r\n @if (item.status === \"OutcomeUnknown\") {\r\n {{ t(\"outcome-unknown-copy\") }}\r\n } @else if (item.outcome === \"Accepted\") {\r\n {{ t(\"accepted-copy\") }}\r\n } @else {\r\n {{ facade.describeCode(item.resultCode) }}\r\n }\r\n </div>\r\n\r\n <mt-card class=\"block\">\r\n <h3 class=\"mb-4 text-base font-semibold text-color\">\r\n {{ t(\"delivery-summary\") }}\r\n </h3>\r\n <dl class=\"grid gap-3 sm:grid-cols-2\">\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"attempt.status\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-2\">\r\n <mt-email-delivery-status\r\n kind=\"attempt\"\r\n [value]=\"item.status\"\r\n />\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"attempt.outcome\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-2\">\r\n @if (item.outcome) {\r\n <mt-email-delivery-status\r\n kind=\"attempt\"\r\n [value]=\"item.outcome\"\r\n />\r\n } @else {\r\n <span class=\"font-medium text-color\">—</span>\r\n }\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"attempt.provider\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\r\n {{ providerLabel(item.providerKey) }}\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"attempt.created\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 font-medium text-color\">\r\n <time [attr.datetime]=\"item.createdAtUtc\">{{\r\n item.createdAtUtc | date: \"medium\"\r\n }}</time>\r\n </dd>\r\n </div>\r\n </dl>\r\n </mt-card>\r\n\r\n <mt-card class=\"block\">\r\n <h3 class=\"mb-4 text-base font-semibold text-color\">\r\n {{ t(\"technical-identifiers\") }}\r\n </h3>\r\n <dl class=\"grid gap-3 sm:grid-cols-2\">\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"recipient-fingerprint\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\r\n {{ item.recipientFingerprint }}\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">{{ t(\"attempt.id\") }}</dt>\r\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\r\n {{ item.id }}\r\n </dd>\r\n </div>\r\n @if (item.correlationId) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\"\r\n >\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"correlation-id\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\r\n {{ item.correlationId }}\r\n </dd>\r\n </div>\r\n }\r\n @if (item.providerRequestId) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\"\r\n >\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"provider-request-id\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-all font-mono text-sm text-color\">\r\n {{ item.providerRequestId }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n </mt-card>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('close')\"\r\n variant=\"outlined\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"close()\"\r\n />\r\n @if (canReplay()) {\r\n <mt-button\r\n severity=\"warn\"\r\n icon=\"arrow.refresh-cw-01\"\r\n [label]=\"t('replay-attempt')\"\r\n [disabled]=\"!facade.managementAvailable()\"\r\n [loading]=\"facade.mutationLoading() === 'replay-' + item.id\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"replay()\"\r\n />\r\n }\r\n </div>\r\n }\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { EmptyState } from '@masterteam/components/empty-state';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport {\r\n Table,\r\n type ColumnDef,\r\n type TableAction,\r\n} from '@masterteam/components/table';\r\nimport { take } from 'rxjs';\r\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\r\nimport { EmailAttemptDetails } from '../../dialogs/attempt-details/email-attempt-details';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport {\r\n EMAIL_DELIVERY_ATTEMPT_STATUSES,\r\n type EmailDeliveryAttempt,\r\n} from '../../email-delivery.model';\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-attempts',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n Button,\r\n EmptyState,\r\n SelectField,\r\n Table,\r\n ],\r\n templateUrl: './email-delivery-attempts.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryAttempts implements OnInit {\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n protected readonly status = new FormControl<string | null>(null);\r\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n protected readonly statusOptions = computed(() => {\r\n this.activeLanguage();\r\n const statusMap = getEmailDeliveryStatusMap(\r\n 'attempt',\r\n this.transloco.translate.bind(this.transloco),\r\n );\r\n return [\r\n { label: this.t('all-statuses'), value: null },\r\n ...EMAIL_DELIVERY_ATTEMPT_STATUSES.map((value) => ({\r\n label: statusMap[value]?.display ?? value,\r\n value,\r\n })),\r\n ];\r\n });\r\n protected readonly columns = computed<ColumnDef[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n {\r\n key: 'status',\r\n label: this.t('attempt.status'),\r\n type: 'status',\r\n statusMap: getEmailDeliveryStatusMap(\r\n 'attempt',\r\n this.transloco.translate.bind(this.transloco),\r\n ),\r\n },\r\n { key: 'providerKey', label: this.t('attempt.provider') },\r\n { key: 'recipientFingerprint', label: this.t('recipient-fingerprint') },\r\n {\r\n key: 'createdAtUtc',\r\n label: this.t('attempt.created'),\r\n type: 'dateTime',\r\n },\r\n { key: 'attemptCount', label: this.t('attempt.count'), type: 'number' },\r\n ];\r\n });\r\n protected readonly actions = computed<TableAction[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n {\r\n icon: 'general.eye',\r\n label: this.t('view-details'),\r\n action: (row) => this.openDetails(row as EmailDeliveryAttempt),\r\n },\r\n ];\r\n });\r\n\r\n ngOnInit(): void {\r\n this.load(true);\r\n }\r\n\r\n protected applyFilter(): void {\r\n this.load(true);\r\n }\r\n\r\n protected loadMore(): void {\r\n this.load(false);\r\n }\r\n\r\n protected openDetails(attempt: EmailDeliveryAttempt): void {\r\n const ref = this.modal.openModal(EmailAttemptDetails, 'drawer', {\r\n header: this.t('attempt-details'),\r\n styleClass: '!absolute !shadow-none !w-full !max-w-full',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: { attempt },\r\n });\r\n ref.onClose.pipe(take(1)).subscribe((updated: EmailDeliveryAttempt) => {\r\n if (updated) this.load(true);\r\n });\r\n }\r\n\r\n private load(reset: boolean): void {\r\n this.facade.loadAttempts(reset, this.status.getRawValue()).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <section class=\"space-y-4\" aria-labelledby=\"attempts-heading\">\r\n <div>\r\n <h2 id=\"attempts-heading\" class=\"text-lg font-semibold text-color\">\r\n {{ t(\"activity-title\") }}\r\n </h2>\r\n <p class=\"mt-1 text-sm text-muted-color\">\r\n {{ t(\"activity-description\") }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 sm:flex-row sm:items-end\">\r\n <mt-select-field\r\n class=\"w-full sm:w-72\"\r\n [formControl]=\"status\"\r\n [label]=\"t('attempt.status-filter')\"\r\n [options]=\"statusOptions()\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n />\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"t('apply-filter')\"\r\n (onClick)=\"applyFilter()\"\r\n />\r\n </div>\r\n\r\n @if (!facade.attemptsLoading() && facade.attempts().length === 0) {\r\n <mt-empty-state\r\n illustration=\"none\"\r\n [title]=\"t('no-attempts-title')\"\r\n [description]=\"t('no-attempts-description')\"\r\n />\r\n } @else {\r\n <mt-table\r\n [data]=\"facade.attempts()\"\r\n [columns]=\"columns()\"\r\n [rowActions]=\"actions()\"\r\n [loading]=\"facade.attemptsLoading()\"\r\n [generalSearch]=\"true\"\r\n dataKey=\"id\"\r\n actionShape=\"popover\"\r\n [clickableRows]=\"true\"\r\n (rowClick)=\"openDetails($event)\"\r\n />\r\n }\r\n\r\n @if (facade.attemptsNextCursor()) {\r\n <div class=\"flex justify-center\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"t('load-more')\"\r\n [loading]=\"facade.attemptsLoading()\"\r\n (onClick)=\"loadMore()\"\r\n />\r\n </div>\r\n }\r\n </section>\r\n</ng-container>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { EmptyState } from '@masterteam/components/empty-state';\r\nimport type { EntityData } from '@masterteam/components/entities';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport {\r\n Table,\r\n type ColumnDef,\r\n type TableAction,\r\n} from '@masterteam/components/table';\r\nimport { take } from 'rxjs';\r\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\r\nimport {\r\n EmailOperatorReasonDialog,\r\n type EmailOperatorDecision,\r\n} from '../../dialogs/operator-reason/email-operator-reason-dialog';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport type { EmailHostEvidenceItem } from '../../email-delivery.model';\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-host-evidence',\r\n imports: [TranslocoDirective, Button, EmptyState, Table],\r\n templateUrl: './email-delivery-host-evidence.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryHostEvidence implements OnInit {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly modal = inject(ModalService);\r\n private readonly confirmation = inject(ConfirmationService);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n protected readonly rows = computed(() =>\r\n this.facade.hostEvidence().map((item) => ({\r\n ...item,\r\n evidenceRowId: item.evidenceOccurrenceId ?? item.itemId,\r\n evidenceKindLabel: humanizeIdentifier(item.evidenceKind),\r\n evidenceOccurrenceIdentity: identifierEntity(item.evidenceOccurrenceId),\r\n errorLabel: this.facade.describeCode(item.errorCode),\r\n })),\r\n );\r\n protected readonly columns = computed<ColumnDef[]>(() => {\r\n this.activeLanguage();\r\n const statusMap = getEmailDeliveryStatusMap(\r\n 'support',\r\n this.transloco.translate.bind(this.transloco),\r\n );\r\n return [\r\n { key: 'evidenceKindLabel', label: this.t('evidence-kind') },\r\n {\r\n key: 'resolutionState',\r\n label: this.t('resolution-state'),\r\n type: 'status',\r\n statusMap,\r\n },\r\n {\r\n key: 'ownershipState',\r\n label: this.t('ownership-state'),\r\n type: 'status',\r\n statusMap,\r\n },\r\n {\r\n key: 'detectedAtUtc',\r\n label: this.t('detected'),\r\n type: 'dateTime',\r\n },\r\n { key: 'errorLabel', label: this.t('issue') },\r\n {\r\n key: 'evidenceOccurrenceIdentity',\r\n label: this.t('evidence-occurrence-id'),\r\n type: 'entity',\r\n width: '20rem',\r\n shrink: true,\r\n },\r\n ];\r\n });\r\n protected readonly actions = computed<TableAction[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n {\r\n icon: 'general.download-01',\r\n label: this.t('export'),\r\n hidden: (row) => {\r\n const item = row as EmailHostEvidenceItem;\r\n return !item.canExport || !item.evidenceOccurrenceId;\r\n },\r\n action: (row) => this.export(row as EmailHostEvidenceItem),\r\n },\r\n {\r\n icon: 'general.tool-02',\r\n label: this.t('repair'),\r\n hidden: (row) =>\r\n !this.facade.managementAvailable() ||\r\n !(row as EmailHostEvidenceItem).canRepair ||\r\n !(row as EmailHostEvidenceItem).evidenceOccurrenceId ||\r\n !(row as EmailHostEvidenceItem).decisionToken,\r\n action: (row) => this.decide(row as EmailHostEvidenceItem, 'repair'),\r\n },\r\n {\r\n icon: 'general.check-circle',\r\n label: this.t('acknowledge'),\r\n color: 'danger',\r\n hidden: (row) =>\r\n !this.facade.managementAvailable() ||\r\n !(row as EmailHostEvidenceItem).evidenceOccurrenceId ||\r\n !(row as EmailHostEvidenceItem).decisionToken,\r\n action: (row) =>\r\n this.decide(row as EmailHostEvidenceItem, 'acknowledge'),\r\n },\r\n ];\r\n });\r\n\r\n ngOnInit(): void {\r\n if (this.facade.hostEvidence().length === 0) this.load(true);\r\n }\r\n\r\n protected export(item: EmailHostEvidenceItem): void {\r\n if (!item.evidenceOccurrenceId) return;\r\n this.facade.exportHostEvidence(item.evidenceOccurrenceId).subscribe({\r\n next: (download) => {\r\n const url = URL.createObjectURL(download.blob);\r\n const anchor = this.document.createElement('a');\r\n anchor.href = url;\r\n anchor.download = download.fileName;\r\n anchor.rel = 'noopener';\r\n anchor.click();\r\n URL.revokeObjectURL(url);\r\n },\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n protected decide(\r\n item: EmailHostEvidenceItem,\r\n action: 'repair' | 'acknowledge',\r\n ): void {\r\n if (!item.evidenceOccurrenceId || !item.decisionToken) return;\r\n const dialog = this.modal.openModal(EmailOperatorReasonDialog, 'dialog', {\r\n header: this.t(\r\n action === 'repair' ? 'repair-evidence' : 'acknowledge-evidence',\r\n ),\r\n styleClass: '!w-[36rem] max-w-[96vw]',\r\n dismissible: true,\r\n inputValues: {\r\n itemName: item.evidenceOccurrenceId,\r\n consequence: this.t(\r\n action === 'repair'\r\n ? 'evidence-repair-warning'\r\n : 'evidence-acknowledge-warning',\r\n ),\r\n confirmLabel: this.t(action),\r\n },\r\n });\r\n dialog.onClose\r\n .pipe(take(1))\r\n .subscribe((decision: EmailOperatorDecision) => {\r\n if (!decision) return;\r\n this.facade\r\n .decideHostEvidence(item, action, decision.reason)\r\n .subscribe({\r\n error: (error) => {\r\n this.facade.showError(error);\r\n this.load(true);\r\n },\r\n });\r\n });\r\n }\r\n\r\n protected confirmRebuild(): void {\r\n this.confirmation.confirm({\r\n type: 'dialog',\r\n header: this.t('rebuild-evidence-index'),\r\n message: this.t('rebuild-evidence-warning'),\r\n accept: () =>\r\n this.facade.rebuildEvidenceIndex(200).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n }),\r\n });\r\n }\r\n\r\n protected loadMore(): void {\r\n this.load(false);\r\n }\r\n\r\n private load(reset: boolean): void {\r\n this.facade.loadHostEvidence(reset).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n\r\nfunction identifierEntity(value: string | null): EntityData {\r\n return {\r\n name: '',\r\n viewType: 'Text',\r\n value: value ?? '—',\r\n configuration: { hideName: true },\r\n };\r\n}\r\n\r\nfunction humanizeIdentifier(value: string): string {\r\n return value\r\n .replace(/[._-]+/g, ' ')\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/\\s+/g, ' ')\r\n .trim()\r\n .replace(/^./, (character) => character.toUpperCase())\r\n .replace(/\\bSmtp\\b/g, 'SMTP')\r\n .replace(/\\bTls\\b/g, 'TLS')\r\n .replace(/\\bOauth2?\\b/gi, 'OAuth2')\r\n .replace(/\\bHttp\\b/g, 'HTTP')\r\n .replace(/\\bApi\\b/g, 'API');\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <section\r\n class=\"space-y-4 rounded-xl border border-surface-200 bg-surface-0 p-4 shadow-xs sm:p-5\"\r\n aria-labelledby=\"host-evidence-heading\"\r\n >\r\n <div\r\n class=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\"\r\n >\r\n <div>\r\n <h3 id=\"host-evidence-heading\" class=\"font-semibold text-color\">\r\n {{ t(\"host-evidence-title\") }}\r\n </h3>\r\n <p class=\"mt-1 text-sm text-muted-color\">\r\n {{ t(\"host-evidence-description\") }}\r\n </p>\r\n </div>\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n icon=\"arrow.refresh-cw-01\"\r\n [label]=\"t('rebuild-evidence-index')\"\r\n [disabled]=\"!facade.managementAvailable()\"\r\n [loading]=\"facade.mutationLoading() === 'rebuild-evidence'\"\r\n (onClick)=\"confirmRebuild()\"\r\n />\r\n </div>\r\n\r\n @if (facade.hostEvidenceScanBudgetExhausted()) {\r\n <div\r\n class=\"rounded-lg border border-amber-200 bg-amber-50 p-3 text-sm text-amber-950\"\r\n role=\"status\"\r\n >\r\n {{ t(\"scan-budget-exhausted\") }}\r\n </div>\r\n }\r\n\r\n @if (!facade.hostEvidenceLoading() && facade.hostEvidence().length === 0) {\r\n <mt-empty-state\r\n illustration=\"none\"\r\n [title]=\"t('no-evidence-title')\"\r\n [description]=\"t('no-evidence-description')\"\r\n />\r\n } @else {\r\n <mt-table\r\n [data]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [rowActions]=\"actions()\"\r\n [loading]=\"facade.hostEvidenceLoading()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n actionShape=\"popover\"\r\n dataKey=\"evidenceRowId\"\r\n storageKey=\"email-delivery-host-evidence\"\r\n />\r\n }\r\n\r\n @if (facade.hostEvidenceNextCursor()) {\r\n <div class=\"flex justify-center\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"t('load-more')\"\r\n [loading]=\"facade.hostEvidenceLoading()\"\r\n (onClick)=\"loadMore()\"\r\n />\r\n </div>\r\n }\r\n </section>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { EmptyState } from '@masterteam/components/empty-state';\r\nimport type { EntityData } from '@masterteam/components/entities';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport {\r\n Table,\r\n type ColumnDef,\r\n type TableAction,\r\n} from '@masterteam/components/table';\r\nimport { take } from 'rxjs';\r\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\r\nimport {\r\n EmailOperatorReasonDialog,\r\n type EmailOperatorDecision,\r\n} from '../../dialogs/operator-reason/email-operator-reason-dialog';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport type { EmailFinalizationQuarantineItem } from '../../email-delivery.model';\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-quarantine',\r\n imports: [TranslocoDirective, Button, EmptyState, Table],\r\n templateUrl: './email-delivery-quarantine.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryQuarantine implements OnInit {\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n protected readonly rows = computed(() =>\r\n this.facade.quarantine().map((item) => ({\r\n ...item,\r\n attemptIdentity: identifierEntity(item.attemptId),\r\n errorLabel: this.facade.describeCode(item.errorCode),\r\n })),\r\n );\r\n protected readonly columns = computed<ColumnDef[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n {\r\n key: 'attemptIdentity',\r\n label: this.t('attempt.id'),\r\n type: 'entity',\r\n width: '19rem',\r\n shrink: true,\r\n },\r\n {\r\n key: 'recoveryClassification',\r\n label: this.t('recovery-classification'),\r\n type: 'status',\r\n statusMap: getEmailDeliveryStatusMap(\r\n 'support',\r\n this.transloco.translate.bind(this.transloco),\r\n ),\r\n },\r\n { key: 'errorLabel', label: this.t('issue') },\r\n {\r\n key: 'quarantinedAtUtc',\r\n label: this.t('detected'),\r\n type: 'dateTime',\r\n },\r\n ];\r\n });\r\n protected readonly actions = computed<TableAction[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n {\r\n icon: 'arrow.refresh-cw-01',\r\n label: this.t('retry'),\r\n hidden: (row) =>\r\n !this.facade.managementAvailable() ||\r\n (row as EmailFinalizationQuarantineItem).recoveryClassification !==\r\n 'retryable-after-upgrade',\r\n action: (row) =>\r\n this.decide(row as EmailFinalizationQuarantineItem, 'retry'),\r\n },\r\n {\r\n icon: 'general.check-circle',\r\n label: this.t('acknowledge'),\r\n color: 'danger',\r\n hidden: () => !this.facade.managementAvailable(),\r\n action: (row) =>\r\n this.decide(row as EmailFinalizationQuarantineItem, 'acknowledge'),\r\n },\r\n ];\r\n });\r\n\r\n ngOnInit(): void {\r\n if (this.facade.quarantine().length === 0) this.load(true);\r\n }\r\n\r\n protected decide(\r\n item: EmailFinalizationQuarantineItem,\r\n action: 'retry' | 'acknowledge',\r\n ): void {\r\n const dialog = this.modal.openModal(EmailOperatorReasonDialog, 'dialog', {\r\n header: this.t(\r\n action === 'retry' ? 'retry-quarantine' : 'acknowledge-quarantine',\r\n ),\r\n styleClass: '!w-[36rem] max-w-[96vw]',\r\n dismissible: true,\r\n inputValues: {\r\n itemName: item.itemId,\r\n consequence: this.t(\r\n action === 'retry'\r\n ? 'quarantine-retry-warning'\r\n : 'quarantine-acknowledge-warning',\r\n ),\r\n confirmLabel: this.t(action),\r\n },\r\n });\r\n dialog.onClose\r\n .pipe(take(1))\r\n .subscribe((decision: EmailOperatorDecision) => {\r\n if (!decision) return;\r\n this.facade.decideQuarantine(item, action, decision.reason).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n });\r\n }\r\n\r\n protected loadMore(): void {\r\n this.load(false);\r\n }\r\n\r\n private load(reset: boolean): void {\r\n this.facade.loadQuarantine(reset).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n\r\nfunction identifierEntity(value: string | null): EntityData {\r\n return {\r\n name: '',\r\n viewType: 'Text',\r\n value: value ?? '—',\r\n configuration: { hideName: true },\r\n };\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <section\r\n class=\"space-y-4 rounded-xl border border-surface-200 bg-surface-0 p-4 shadow-xs sm:p-5\"\r\n aria-labelledby=\"quarantine-heading\"\r\n >\r\n <div>\r\n <h3 id=\"quarantine-heading\" class=\"font-semibold text-color\">\r\n {{ t(\"quarantine-title\") }}\r\n </h3>\r\n <p class=\"mt-1 text-sm text-muted-color\">\r\n {{ t(\"quarantine-description\") }}\r\n </p>\r\n </div>\r\n\r\n @if (!facade.quarantineLoading() && facade.quarantine().length === 0) {\r\n <mt-empty-state\r\n illustration=\"none\"\r\n [title]=\"t('no-quarantine-title')\"\r\n [description]=\"t('no-quarantine-description')\"\r\n />\r\n } @else {\r\n <mt-table\r\n [data]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [rowActions]=\"actions()\"\r\n [loading]=\"facade.quarantineLoading()\"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n actionShape=\"popover\"\r\n dataKey=\"itemId\"\r\n storageKey=\"email-delivery-quarantine\"\r\n />\r\n }\r\n\r\n @if (facade.quarantineNextCursor()) {\r\n <div class=\"flex justify-center\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"t('load-more')\"\r\n [loading]=\"facade.quarantineLoading()\"\r\n (onClick)=\"loadMore()\"\r\n />\r\n </div>\r\n }\r\n </section>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { EmailDeliveryAttempts } from '../attempts/email-delivery-attempts';\r\nimport { EmailDeliveryHostEvidence } from '../host-evidence/email-delivery-host-evidence';\r\nimport { EmailDeliveryQuarantine } from '../quarantine/email-delivery-quarantine';\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-activity',\r\n imports: [\r\n TranslocoDirective,\r\n Icon,\r\n EmailDeliveryAttempts,\r\n EmailDeliveryQuarantine,\r\n EmailDeliveryHostEvidence,\r\n ],\r\n templateUrl: './email-delivery-activity.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryActivity {\r\n protected readonly advancedExpanded = signal(false);\r\n\r\n protected onAdvancedToggle(event: Event): void {\r\n this.advancedExpanded.set((event.currentTarget as HTMLDetailsElement).open);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <div class=\"grid gap-6\">\r\n <mt-email-delivery-attempts class=\"block min-w-0\" />\r\n\r\n <details\r\n class=\"group overflow-hidden rounded-xl border border-surface-200 bg-surface-0\"\r\n (toggle)=\"onAdvancedToggle($event)\"\r\n >\r\n <summary\r\n class=\"cursor-pointer list-none p-5 font-semibold text-color focus-visible:outline-2 focus-visible:outline-offset-2\"\r\n >\r\n <span class=\"flex items-center justify-between gap-3\">\r\n <span>\r\n {{ t(\"advanced-support\") }}\r\n <span class=\"mt-1 block text-sm font-normal text-muted-color\">{{\r\n t(\"advanced-support-description\")\r\n }}</span>\r\n </span>\r\n <mt-icon\r\n icon=\"arrow.chevron-down\"\r\n aria-hidden=\"true\"\r\n class=\"text-base transition-transform group-open:rotate-180\"\r\n />\r\n </span>\r\n </summary>\r\n @if (advancedExpanded()) {\r\n <div\r\n class=\"grid gap-6 border-t border-surface-200 bg-surface-50/60 p-4 sm:p-5\"\r\n >\r\n <mt-email-delivery-quarantine class=\"block min-w-0\" />\r\n <mt-email-delivery-host-evidence class=\"block min-w-0\" />\r\n </div>\r\n }\r\n </details>\r\n </div>\r\n</ng-container>\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n DynamicFormConfig,\r\n TextareaFieldConfig,\r\n TextFieldConfig,\r\n ToggleFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { timer } from 'rxjs';\r\nimport { EmailDeliveryStatus } from '../../components/email-delivery-status/email-delivery-status';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport type { EmailSendResult } from '../../email-delivery.model';\r\n\r\ninterface ControlledTestFormValue {\r\n recipients: string | null;\r\n subject: string | null;\r\n body: string | null;\r\n isHtml: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-email-controlled-test-dialog',\r\n imports: [\r\n ReactiveFormsModule,\r\n TranslocoDirective,\r\n DynamicForm,\r\n Button,\r\n EmailDeliveryStatus,\r\n ],\r\n templateUrl: './email-controlled-test-dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailControlledTestDialog {\r\n readonly connectionId = input.required<string>();\r\n readonly connectionName = input.required<string>();\r\n\r\n protected readonly modal = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n protected readonly testRequestId = signal(createId());\r\n protected readonly timedOut = signal(false);\r\n protected readonly polling = signal(false);\r\n protected readonly result = signal<EmailSendResult | null>(null);\r\n private pollIndex = 0;\r\n\r\n protected readonly form = new FormControl<ControlledTestFormValue>(\r\n {\r\n recipients: null,\r\n subject: 'Pplus email delivery test',\r\n body: 'This is a controlled Pplus email delivery test.',\r\n isHtml: false,\r\n },\r\n { nonNullable: true },\r\n );\r\n private readonly formStatus = toSignal(this.form.statusChanges, {\r\n initialValue: this.form.status,\r\n });\r\n protected readonly canSubmit = computed(\r\n () =>\r\n this.formStatus() === 'VALID' &&\r\n !this.facade.mutationLoading() &&\r\n !this.result(),\r\n );\r\n\r\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'controlled-test',\r\n type: 'none',\r\n columns: 12,\r\n fields: [\r\n new TextareaFieldConfig({\r\n key: 'recipients',\r\n label: this.t('test.recipients'),\r\n placeholder: this.t('test.recipients-placeholder'),\r\n hint: this.t('test.recipients-hint'),\r\n colSpan: 12,\r\n rows: 3,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.custom(\r\n (value) => validRecipients(value),\r\n this.t('test.recipients-invalid'),\r\n ),\r\n ],\r\n }),\r\n new TextFieldConfig({\r\n key: 'subject',\r\n label: this.t('test.subject'),\r\n colSpan: 12,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.maxLength(998),\r\n ValidatorConfig.pattern('^[^\\\\r\\\\n]*$'),\r\n ],\r\n }),\r\n new TextareaFieldConfig({\r\n key: 'body',\r\n label: this.t('test.body'),\r\n colSpan: 12,\r\n rows: 8,\r\n validators: [ValidatorConfig.maxLength(2_000_000)],\r\n }),\r\n new ToggleFieldConfig({\r\n key: 'isHtml',\r\n label: this.t('test.html'),\r\n colSpan: 12,\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n protected submit(): void {\r\n if (!this.canSubmit()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const value = this.form.getRawValue();\r\n this.facade\r\n .sendConnectionTest(this.connectionId(), {\r\n testRequestId: this.testRequestId(),\r\n recipients: parseRecipients(value.recipients),\r\n subject: value.subject?.trim() ?? '',\r\n body: value.body ?? '',\r\n isHtml: value.isHtml,\r\n })\r\n .subscribe({\r\n next: (result) => {\r\n this.result.set(result);\r\n this.timedOut.set(false);\r\n },\r\n error: (error) => {\r\n if (\r\n isAmbiguousTimeout(error) ||\r\n this.facade.errorAction(error) === 'poll_status'\r\n ) {\r\n this.startPolling();\r\n return;\r\n }\r\n this.facade.showError(error);\r\n },\r\n });\r\n }\r\n\r\n protected retrieve(): void {\r\n if (this.polling()) return;\r\n this.retrieveStoredResult(false);\r\n }\r\n\r\n private retrieveStoredResult(fromPoll: boolean): void {\r\n this.facade\r\n .retrieveConnectionTest(this.connectionId(), this.testRequestId())\r\n .subscribe({\r\n next: (stored) => {\r\n if (stored.result) {\r\n this.result.set(stored.result);\r\n this.timedOut.set(false);\r\n this.polling.set(false);\r\n return;\r\n }\r\n\r\n if (fromPoll && isPendingRequestState(stored.requestState)) {\r\n this.schedulePoll();\r\n } else {\r\n this.polling.set(false);\r\n this.timedOut.set(true);\r\n }\r\n },\r\n error: (error) => {\r\n if (fromPoll && this.facade.errorAction(error) === 'poll_status') {\r\n this.schedulePoll();\r\n return;\r\n }\r\n this.polling.set(false);\r\n this.timedOut.set(true);\r\n this.facade.showError(error);\r\n },\r\n });\r\n }\r\n\r\n private startPolling(): void {\r\n if (this.polling()) return;\r\n this.timedOut.set(true);\r\n this.polling.set(true);\r\n this.pollIndex = 0;\r\n this.schedulePoll();\r\n }\r\n\r\n private schedulePoll(): void {\r\n const delay = POLL_DELAYS_MS[this.pollIndex++];\r\n if (delay === undefined) {\r\n this.polling.set(false);\r\n return;\r\n }\r\n\r\n timer(delay)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.retrieveStoredResult(true));\r\n }\r\n\r\n protected close(): void {\r\n this.ref.close(this.result());\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n\r\nconst POLL_DELAYS_MS = [1_000, 2_000, 4_000, 5_000, 5_000, 5_000] as const;\r\n\r\nfunction isPendingRequestState(value: string): boolean {\r\n return !['Completed', 'Failed', 'Cancelled', 'Canceled'].includes(value);\r\n}\r\n\r\nfunction parseRecipients(value: string | null): string[] {\r\n return Array.from(\r\n new Set(\r\n (value ?? '')\r\n .split(/[\\s,;]+/)\r\n .map((item) => item.trim())\r\n .filter(Boolean),\r\n ),\r\n );\r\n}\r\n\r\nfunction validRecipients(value: unknown): boolean {\r\n const recipients = parseRecipients(String(value ?? ''));\r\n return (\r\n recipients.length >= 1 &&\r\n recipients.length <= 100 &&\r\n recipients.every(\r\n (recipient) =>\r\n recipient.length <= 320 && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(recipient),\r\n )\r\n );\r\n}\r\n\r\nfunction isAmbiguousTimeout(error: unknown): boolean {\r\n return (\r\n error instanceof HttpErrorResponse &&\r\n (error.status === 0 || error.status === 408 || error.status === 504)\r\n );\r\n}\r\n\r\nfunction createId(): string {\r\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\r\n return crypto.randomUUID();\r\n }\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(\r\n /[xy]/g,\r\n (character) => {\r\n const random = Math.floor(Math.random() * 16);\r\n const value = character === 'x' ? random : (random & 0x3) | 0x8;\r\n return value.toString(16);\r\n },\r\n );\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <div [class]=\"modal.contentClass + ' p-4 sm:p-5'\">\r\n <div\r\n class=\"mb-4 rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-950\"\r\n role=\"note\"\r\n >\r\n <strong>{{ t(\"test.real-email-warning-title\") }}</strong>\r\n {{ t(\"test.real-email-warning\") }}\r\n </div>\r\n\r\n @if (!result()) {\r\n <mt-dynamic-form [formConfig]=\"formConfig()\" [formControl]=\"form\" />\r\n }\r\n\r\n @if (timedOut()) {\r\n <div\r\n class=\"mt-4 rounded-lg border border-orange-200 bg-orange-50 px-4 py-3\"\r\n role=\"alert\"\r\n >\r\n <p class=\"font-semibold text-orange-950\">\r\n {{ t(\"test.timeout-title\") }}\r\n </p>\r\n <p class=\"mt-1 text-sm text-orange-900\">\r\n {{ t(\"test.timeout-description\") }}\r\n </p>\r\n </div>\r\n }\r\n\r\n @if (result(); as testResult) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-50 px-4 py-4\"\r\n aria-live=\"polite\"\r\n >\r\n <mt-email-delivery-status kind=\"attempt\" [value]=\"testResult.outcome\" />\r\n <p class=\"mt-1 text-sm text-muted-color\">\r\n {{ facade.describeCode(testResult.code) }}\r\n </p>\r\n @if (testResult.outcome === \"Accepted\") {\r\n <p class=\"mt-3 text-sm font-medium text-amber-800\">\r\n {{ t(\"accepted-unconfirmed\") }}\r\n </p>\r\n }\r\n @if (testResult.outcome === \"OutcomeUnknown\") {\r\n <p class=\"mt-3 text-sm font-medium text-red-700\">\r\n {{ t(\"outcome-unknown-warning\") }}\r\n </p>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"t('close')\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"close()\"\r\n />\r\n @if (timedOut()) {\r\n <mt-button\r\n [label]=\"t('test.retrieve')\"\r\n icon=\"arrow.refresh-cw-01\"\r\n [disabled]=\"polling()\"\r\n [loading]=\"polling() || facade.mutationLoading() === 'retrieve-test'\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"retrieve()\"\r\n />\r\n } @else if (!result()) {\r\n <mt-button\r\n [label]=\"t('test.send')\"\r\n icon=\"communication.send-01\"\r\n [disabled]=\"!canSubmit()\"\r\n [loading]=\"facade.mutationLoading() === 'test'\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"submit()\"\r\n />\r\n }\r\n </div>\r\n</ng-container>\r\n","import {\r\n type EmailConnectionCreateRequest,\r\n type EmailConnectionUpdateRequest,\r\n type EmailCredentialMutation,\r\n type EmailCredentialOperation,\r\n type EmailCredentialStorageKind,\r\n type EmailProviderActionDescriptor,\r\n type EmailProviderDescriptor,\r\n type EmailProviderFieldDescriptor,\r\n} from './email-delivery.model';\r\n\r\nexport interface EmailConnectionEditorValue extends Record<string, unknown> {\r\n name: string | null;\r\n providerKey: string | null;\r\n authenticationMode: string | null;\r\n senderAddress: string | null;\r\n senderDisplayName: string | null;\r\n}\r\n\r\nexport function getApplicableProviderFields(\r\n provider: EmailProviderDescriptor | null | undefined,\r\n authenticationMode: string | null | undefined,\r\n): EmailProviderFieldDescriptor[] {\r\n if (!provider || !authenticationMode) {\r\n return [];\r\n }\r\n\r\n return provider.fields.filter(\r\n (field) =>\r\n field.authenticationModes.length === 0 ||\r\n field.authenticationModes.includes(authenticationMode),\r\n );\r\n}\r\n\r\nexport function getApplicableProviderActions(\r\n provider: EmailProviderDescriptor | null | undefined,\r\n authenticationMode: string | null | undefined,\r\n authorizationModel?: string | null,\r\n): EmailProviderActionDescriptor[] {\r\n if (!provider || !authenticationMode) {\r\n return [];\r\n }\r\n\r\n return (provider.actions ?? []).filter((action) => {\r\n if (!action.isExecutable) {\r\n return false;\r\n }\r\n\r\n if (\r\n action.authenticationModes.length > 0 &&\r\n !action.authenticationModes.includes(authenticationMode)\r\n ) {\r\n return false;\r\n }\r\n\r\n return (\r\n !action.authorizationModels?.length ||\r\n (!!authorizationModel &&\r\n action.authorizationModels.includes(authorizationModel))\r\n );\r\n });\r\n}\r\n\r\nexport function parseProviderCapabilities(value: string): string[] {\r\n return value\r\n .split(',')\r\n .map((item) => item.trim())\r\n .filter(Boolean);\r\n}\r\n\r\nexport function providerFieldControlKey(index: number): string {\r\n return `providerField${index}`;\r\n}\r\n\r\nexport function credentialOperationControlKey(index: number): string {\r\n return `credentialOperation${index}`;\r\n}\r\n\r\nexport function credentialStorageControlKey(index: number): string {\r\n return `credentialStorage${index}`;\r\n}\r\n\r\nexport function credentialValueControlKey(index: number): string {\r\n return `credentialValue${index}`;\r\n}\r\n\r\nexport function credentialReferenceControlKey(index: number): string {\r\n return `credentialReference${index}`;\r\n}\r\n\r\nexport function buildConnectionRequest(\r\n value: EmailConnectionEditorValue,\r\n provider: EmailProviderDescriptor,\r\n existingConcurrencyToken?: string,\r\n): EmailConnectionCreateRequest | EmailConnectionUpdateRequest {\r\n const mode = requiredTrimmed(value.authenticationMode);\r\n const publicConfiguration: Record<string, string> = {};\r\n const credentials: EmailCredentialMutation[] = [];\r\n\r\n provider.fields.forEach((field, index) => {\r\n if (\r\n field.authenticationModes.length > 0 &&\r\n !field.authenticationModes.includes(mode)\r\n ) {\r\n return;\r\n }\r\n\r\n if (field.isSecret) {\r\n const operation = value[\r\n credentialOperationControlKey(index)\r\n ] as EmailCredentialOperation | null;\r\n\r\n if (!operation || operation === 'omitted') {\r\n return;\r\n }\r\n\r\n const storageKind = (value[credentialStorageControlKey(index)] ??\r\n 'protected-value') as EmailCredentialStorageKind;\r\n\r\n credentials.push({\r\n key: field.key,\r\n operation,\r\n storageKind,\r\n value:\r\n operation === 'replace' && storageKind === 'protected-value'\r\n ? optionalTrimmed(value[credentialValueControlKey(index)])\r\n : null,\r\n externalReference:\r\n operation === 'replace' && storageKind === 'external-reference'\r\n ? optionalTrimmed(value[credentialReferenceControlKey(index)])\r\n : null,\r\n });\r\n return;\r\n }\r\n\r\n const fieldValue = value[providerFieldControlKey(index)];\r\n if (fieldValue === null || fieldValue === undefined || fieldValue === '') {\r\n return;\r\n }\r\n\r\n publicConfiguration[field.key] =\r\n typeof fieldValue === 'boolean' ? String(fieldValue) : String(fieldValue);\r\n });\r\n\r\n const request: EmailConnectionCreateRequest = {\r\n name: requiredTrimmed(value.name),\r\n providerKey: provider.key,\r\n authenticationMode: mode,\r\n senderAddress: requiredTrimmed(value.senderAddress),\r\n senderDisplayName: optionalTrimmed(value.senderDisplayName),\r\n publicConfiguration,\r\n credentials,\r\n };\r\n\r\n return existingConcurrencyToken\r\n ? { ...request, concurrencyToken: existingConcurrencyToken }\r\n : request;\r\n}\r\n\r\nfunction requiredTrimmed(value: unknown): string {\r\n return String(value ?? '').trim();\r\n}\r\n\r\nfunction optionalTrimmed(value: unknown): string | null {\r\n const normalized = String(value ?? '').trim();\r\n return normalized || null;\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnDestroy,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n type BaseFieldConfig,\r\n DynamicFormConfig,\r\n NumberFieldConfig,\r\n RadioButtonFieldConfig,\r\n SelectFieldConfig,\r\n TextFieldConfig,\r\n ToggleFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { finalize, map, of, switchMap } from 'rxjs';\r\nimport {\r\n buildConnectionRequest,\r\n credentialOperationControlKey,\r\n credentialReferenceControlKey,\r\n credentialStorageControlKey,\r\n credentialValueControlKey,\r\n getApplicableProviderFields,\r\n providerFieldControlKey,\r\n type EmailConnectionEditorValue,\r\n} from '../../email-delivery-descriptor.utils';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport type {\r\n EmailConnectionDetails,\r\n EmailConnectionUpdateRequest,\r\n EmailCredentialOperation,\r\n EmailCredentialStorageKind,\r\n EmailProviderDescriptor,\r\n EmailProviderFieldDescriptor,\r\n} from '../../email-delivery.model';\r\n\r\n@Component({\r\n selector: 'mt-email-connection-editor',\r\n imports: [ReactiveFormsModule, TranslocoDirective, DynamicForm, Button],\r\n templateUrl: './email-connection-editor.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailConnectionEditor implements OnInit, OnDestroy {\r\n readonly editorConnectionId = input<string | null>(null);\r\n\r\n private readonly ref = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modal = inject(ModalService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n\r\n protected readonly connectionId = signal<string | null>(null);\r\n protected readonly existingDetails = signal<EmailConnectionDetails | null>(\r\n null,\r\n );\r\n protected readonly editorLoading = signal(true);\r\n protected readonly formGeneration = signal(0);\r\n protected readonly formValue =\r\n signal<EmailConnectionEditorValue>(emptyEditorValue());\r\n protected readonly form = new FormControl<EmailConnectionEditorValue>(\r\n emptyEditorValue(),\r\n { nonNullable: true },\r\n );\r\n private readonly formStatus = toSignal(this.form.statusChanges, {\r\n initialValue: this.form.status,\r\n });\r\n private previousProviderKey: string | null = null;\r\n private previousAuthenticationMode: string | null = null;\r\n private structureSignature = '';\r\n\r\n protected readonly isEdit = computed(() => !!this.connectionId());\r\n protected readonly selectedProvider = computed(() =>\r\n this.facade.providerByKey(this.formValue().providerKey),\r\n );\r\n protected readonly selectedMode = computed(\r\n () => this.formValue().authenticationMode,\r\n );\r\n protected readonly applicableFields = computed(() =>\r\n getApplicableProviderFields(this.selectedProvider(), this.selectedMode()),\r\n );\r\n protected readonly canSave = computed(\r\n () =>\r\n !this.editorLoading() &&\r\n this.formStatus() === 'VALID' &&\r\n !this.facade.mutationLoading(),\r\n );\r\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'basics',\r\n label: this.t('editor.basics'),\r\n type: 'header',\r\n columns: 12,\r\n fields: this.buildBasicFields(),\r\n },\r\n {\r\n key: 'configuration',\r\n label: this.t('editor.configuration'),\r\n type: 'header',\r\n columns: 12,\r\n fields: this.buildConfigurationFields(),\r\n },\r\n {\r\n key: 'credentials',\r\n label: this.t('editor.credentials'),\r\n type: 'header',\r\n columns: 12,\r\n fields: this.buildCredentialFields(),\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((value) => {\r\n this.handleFormValue(value);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const id = this.editorConnectionId();\r\n this.connectionId.set(id);\r\n\r\n const catalog$ = this.facade.providers().length\r\n ? of(undefined)\r\n : this.facade.loadCatalog().pipe(map(() => undefined));\r\n catalog$\r\n .pipe(\r\n switchMap(() => (id ? this.facade.loadConnection(id) : of(null))),\r\n finalize(() => this.editorLoading.set(false)),\r\n )\r\n .subscribe({\r\n next: (details: EmailConnectionDetails | null) => {\r\n this.existingDetails.set(details);\r\n this.seedForm(details);\r\n },\r\n error: (error: unknown) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearSecretControls();\r\n }\r\n\r\n protected save(): void {\r\n if (!this.canSave()) {\r\n this.form.markAllAsTouched();\r\n return;\r\n }\r\n const provider = this.selectedProvider();\r\n if (!provider) return;\r\n\r\n const id = this.connectionId();\r\n const request = buildConnectionRequest(\r\n this.form.getRawValue(),\r\n provider,\r\n this.existingDetails()?.connection.concurrencyToken,\r\n );\r\n const operation = id\r\n ? this.facade.updateConnection(\r\n id,\r\n request as EmailConnectionUpdateRequest,\r\n )\r\n : this.facade.createConnection(request);\r\n\r\n operation.pipe(finalize(() => this.clearSecretControls())).subscribe({\r\n next: () => {\r\n this.ref.close(true);\r\n },\r\n error: (error) => this.handleSaveError(error),\r\n });\r\n }\r\n\r\n protected cancel(): void {\r\n this.clearSecretControls();\r\n this.ref.close(false);\r\n }\r\n\r\n private seedForm(details: EmailConnectionDetails | null): void {\r\n const provider = details\r\n ? this.facade.providerByKey(details.connection.providerKey)\r\n : (this.facade.providers()[0] ?? null);\r\n const mode = details\r\n ? details.connection.authenticationMode\r\n : (provider?.authenticationModes[0]?.key ?? null);\r\n const value: EmailConnectionEditorValue = {\r\n name: details?.connection.name ?? null,\r\n providerKey: provider?.key ?? null,\r\n authenticationMode: mode,\r\n senderAddress: details?.connection.senderAddress ?? null,\r\n senderDisplayName: details?.connection.senderDisplayName ?? null,\r\n };\r\n\r\n provider?.fields.forEach((field, index) => {\r\n if (!isApplicable(field, mode)) return;\r\n if (field.isSecret) {\r\n const status = details?.credentials.find(\r\n (credential) => credential.key === field.key,\r\n );\r\n value[credentialOperationControlKey(index)] = details\r\n ? 'omitted'\r\n : 'replace';\r\n value[credentialStorageControlKey(index)] =\r\n status?.storageKind === 'ExternalReference'\r\n ? 'external-reference'\r\n : 'protected-value';\r\n value[credentialValueControlKey(index)] = null;\r\n value[credentialReferenceControlKey(index)] = null;\r\n return;\r\n }\r\n\r\n const rawValue =\r\n details?.connection.publicConfiguration[field.key] ??\r\n field.defaultValue;\r\n value[providerFieldControlKey(index)] = toEditorFieldValue(\r\n field,\r\n rawValue,\r\n );\r\n });\r\n\r\n this.previousProviderKey = provider?.key ?? null;\r\n this.previousAuthenticationMode = mode;\r\n this.formValue.set(value);\r\n this.form.setValue(value, { emitEvent: false });\r\n this.structureSignature = this.getStructureSignature(value, provider);\r\n this.formGeneration.update((generation) => generation + 1);\r\n }\r\n\r\n private handleFormValue(value: EmailConnectionEditorValue): void {\r\n let provider = this.facade.providerByKey(value.providerKey);\r\n const providerChanged = value.providerKey !== this.previousProviderKey;\r\n let mode = value.authenticationMode;\r\n if (\r\n provider &&\r\n !provider.authenticationModes.some((item) => item.key === mode)\r\n ) {\r\n mode = provider.authenticationModes[0]?.key ?? null;\r\n }\r\n const modeChanged = mode !== this.previousAuthenticationMode;\r\n\r\n if (providerChanged || modeChanged) {\r\n const reset = this.resetProviderValues(value, provider, mode);\r\n this.previousProviderKey = provider?.key ?? null;\r\n this.previousAuthenticationMode = mode;\r\n this.formValue.set(reset);\r\n this.form.setValue(reset, { emitEvent: false });\r\n this.structureSignature = this.getStructureSignature(reset, provider);\r\n this.formGeneration.update((generation) => generation + 1);\r\n return;\r\n }\r\n\r\n provider = this.facade.providerByKey(value.providerKey);\r\n this.formValue.set(value);\r\n const signature = this.getStructureSignature(value, provider);\r\n if (signature !== this.structureSignature) {\r\n this.structureSignature = signature;\r\n this.formGeneration.update((generation) => generation + 1);\r\n }\r\n }\r\n\r\n private resetProviderValues(\r\n value: EmailConnectionEditorValue,\r\n provider: EmailProviderDescriptor | null,\r\n mode: string | null,\r\n ): EmailConnectionEditorValue {\r\n const reset: EmailConnectionEditorValue = {\r\n name: value.name,\r\n providerKey: provider?.key ?? null,\r\n authenticationMode: mode,\r\n senderAddress: value.senderAddress,\r\n senderDisplayName: value.senderDisplayName,\r\n };\r\n\r\n provider?.fields.forEach((field, index) => {\r\n if (!isApplicable(field, mode)) return;\r\n if (field.isSecret) {\r\n reset[credentialOperationControlKey(index)] = 'replace';\r\n reset[credentialStorageControlKey(index)] = 'protected-value';\r\n reset[credentialValueControlKey(index)] = null;\r\n reset[credentialReferenceControlKey(index)] = null;\r\n } else {\r\n reset[providerFieldControlKey(index)] = toEditorFieldValue(\r\n field,\r\n field.defaultValue,\r\n );\r\n }\r\n });\r\n return reset;\r\n }\r\n\r\n private buildBasicFields(): BaseFieldConfig[] {\r\n const provider = this.selectedProvider();\r\n return [\r\n new TextFieldConfig({\r\n key: 'name',\r\n label: this.t('connection.name'),\r\n colSpan: 12,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.maxLength(150),\r\n ],\r\n }),\r\n new SelectFieldConfig({\r\n key: 'providerKey',\r\n label: this.t('connection.provider'),\r\n options: this.facade.providers().map((item) => ({\r\n label: item.displayName,\r\n value: item.key,\r\n })),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n colSpan: 6,\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n new SelectFieldConfig({\r\n key: 'authenticationMode',\r\n label: this.t('connection.authentication-mode'),\r\n options:\r\n provider?.authenticationModes.map((item) => ({\r\n label: item.displayName,\r\n value: item.key,\r\n })) ?? [],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n colSpan: 6,\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n new TextFieldConfig({\r\n key: 'senderAddress',\r\n label: this.t('connection.sender-address'),\r\n inputType: 'email',\r\n colSpan: 6,\r\n validators: [ValidatorConfig.required(), ValidatorConfig.email()],\r\n }),\r\n new TextFieldConfig({\r\n key: 'senderDisplayName',\r\n label: this.t('connection.sender-display-name'),\r\n colSpan: 6,\r\n validators: [ValidatorConfig.maxLength(200)],\r\n }),\r\n ];\r\n }\r\n\r\n private buildConfigurationFields(): BaseFieldConfig[] {\r\n const provider = this.selectedProvider();\r\n if (!provider) return [];\r\n return provider.fields.flatMap((field, index) => {\r\n if (field.isSecret || !isApplicable(field, this.selectedMode())) {\r\n return [];\r\n }\r\n return [this.toProviderFieldConfig(field, index)];\r\n });\r\n }\r\n\r\n private buildCredentialFields(): BaseFieldConfig[] {\r\n const provider = this.selectedProvider();\r\n if (!provider) return [];\r\n return provider.fields.flatMap((field, index) => {\r\n if (!field.isSecret || !isApplicable(field, this.selectedMode())) {\r\n return [];\r\n }\r\n\r\n const operationKey = credentialOperationControlKey(index);\r\n const storageKey = credentialStorageControlKey(index);\r\n const operation = (this.formValue()[operationKey] ??\r\n (this.isEdit() ? 'omitted' : 'replace')) as EmailCredentialOperation;\r\n const storageKind = (this.formValue()[storageKey] ??\r\n 'protected-value') as EmailCredentialStorageKind;\r\n const operationOptions = [\r\n ...(this.isEdit()\r\n ? [{ label: this.t('credential.keep'), value: 'omitted' }]\r\n : []),\r\n { label: this.t('credential.replace'), value: 'replace' },\r\n ...(!field.required && this.isEdit()\r\n ? [{ label: this.t('credential.clear'), value: 'clear' }]\r\n : []),\r\n ];\r\n const fields: BaseFieldConfig[] = [\r\n new SelectFieldConfig({\r\n key: operationKey,\r\n label: `${field.displayName} — ${this.t('credential.operation')}`,\r\n options: operationOptions,\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n colSpan: 6,\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n ];\r\n\r\n if (operation !== 'replace') return fields;\r\n fields.push(\r\n new RadioButtonFieldConfig({\r\n key: storageKey,\r\n label: this.t('credential.storage-choice'),\r\n options: [\r\n {\r\n label: this.t('credential.protected-value'),\r\n value: 'protected-value',\r\n },\r\n {\r\n label: this.t('credential.external-reference'),\r\n value: 'external-reference',\r\n },\r\n ],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n orientation: 'vertical',\r\n colSpan: 6,\r\n validators: [ValidatorConfig.required()],\r\n }),\r\n );\r\n\r\n fields.push(\r\n storageKind === 'external-reference'\r\n ? new TextFieldConfig({\r\n key: credentialReferenceControlKey(index),\r\n label: this.t('credential.external-reference'),\r\n hint: this.t('credential.external-reference-hint'),\r\n colSpan: 12,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ValidatorConfig.maxLength(500),\r\n ValidatorConfig.pattern('^EmailSecrets:[A-Za-z0-9_.-]{1,100}$'),\r\n ],\r\n })\r\n : new TextFieldConfig({\r\n key: credentialValueControlKey(index),\r\n label: field.displayName,\r\n inputType: 'password',\r\n hint: this.t('credential.protected-value-hint'),\r\n colSpan: 12,\r\n validators: [\r\n ValidatorConfig.required(),\r\n ...(field.maximumLength\r\n ? [ValidatorConfig.maxLength(field.maximumLength)]\r\n : []),\r\n ],\r\n }),\r\n );\r\n return fields;\r\n });\r\n }\r\n\r\n private toProviderFieldConfig(\r\n field: EmailProviderFieldDescriptor,\r\n index: number,\r\n ): BaseFieldConfig {\r\n const config = {\r\n key: providerFieldControlKey(index),\r\n label: field.displayName,\r\n colSpan: 6,\r\n readonly:\r\n !!this.existingDetails()?.authorizationState &&\r\n !field.editableAfterAuthorization,\r\n validators: providerFieldValidators(field, this.t.bind(this)),\r\n };\r\n\r\n if (field.dataType === 'Boolean') {\r\n return new ToggleFieldConfig(config);\r\n }\r\n if (field.dataType === 'Integer' || field.dataType === 'Port') {\r\n return new NumberFieldConfig({\r\n ...config,\r\n min: field.dataType === 'Port' ? 1 : undefined,\r\n max: field.dataType === 'Port' ? 65_535 : undefined,\r\n useGrouping: false,\r\n });\r\n }\r\n if (field.dataType === 'Choice') {\r\n return new SelectFieldConfig({\r\n ...config,\r\n options: (field.allowedValues ?? []).map((value) => ({\r\n label: value,\r\n value,\r\n })),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n });\r\n }\r\n return new TextFieldConfig({\r\n ...config,\r\n inputType: field.dataType === 'Email' ? 'email' : 'text',\r\n });\r\n }\r\n\r\n private getStructureSignature(\r\n value: EmailConnectionEditorValue,\r\n provider: EmailProviderDescriptor | null,\r\n ): string {\r\n const credentials = provider?.fields.flatMap((field, index) =>\r\n field.isSecret && isApplicable(field, value.authenticationMode)\r\n ? [\r\n `${value[credentialOperationControlKey(index)] ?? ''}:${\r\n value[credentialStorageControlKey(index)] ?? ''\r\n }`,\r\n ]\r\n : [],\r\n );\r\n return `${value.providerKey ?? ''}|${value.authenticationMode ?? ''}|${\r\n credentials?.join('|') ?? ''\r\n }`;\r\n }\r\n\r\n private clearSecretControls(): void {\r\n const provider = this.selectedProvider();\r\n if (!provider) return;\r\n const value = { ...this.form.getRawValue() };\r\n provider.fields.forEach((field, index) => {\r\n if (!field.isSecret) return;\r\n value[credentialValueControlKey(index)] = null;\r\n value[credentialReferenceControlKey(index)] = null;\r\n });\r\n this.formValue.set(value);\r\n this.form.setValue(value, { emitEvent: false });\r\n this.formGeneration.update((generation) => generation + 1);\r\n }\r\n\r\n private handleSaveError(error: unknown): void {\r\n this.facade.showError(error);\r\n const id = this.connectionId();\r\n if (!(error instanceof HttpErrorResponse) || error.status !== 409 || !id) {\r\n return;\r\n }\r\n this.editorLoading.set(true);\r\n this.facade\r\n .loadConnection(id)\r\n .pipe(finalize(() => this.editorLoading.set(false)))\r\n .subscribe({\r\n next: (details) => {\r\n this.existingDetails.set(details);\r\n this.seedForm(details);\r\n },\r\n error: (loadError) => this.facade.showError(loadError),\r\n });\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n\r\nfunction emptyEditorValue(): EmailConnectionEditorValue {\r\n return {\r\n name: null,\r\n providerKey: null,\r\n authenticationMode: null,\r\n senderAddress: null,\r\n senderDisplayName: null,\r\n };\r\n}\r\n\r\nfunction isApplicable(\r\n field: EmailProviderFieldDescriptor,\r\n mode: string | null,\r\n): boolean {\r\n return (\r\n !!mode &&\r\n (field.authenticationModes.length === 0 ||\r\n field.authenticationModes.includes(mode))\r\n );\r\n}\r\n\r\nfunction toEditorFieldValue(\r\n field: EmailProviderFieldDescriptor,\r\n value: string | null | undefined,\r\n): string | number | boolean | null {\r\n if (value === null || value === undefined || value === '') return null;\r\n if (field.dataType === 'Boolean') return value.toLowerCase() === 'true';\r\n if (field.dataType === 'Integer' || field.dataType === 'Port') {\r\n const numberValue = Number(value);\r\n return Number.isFinite(numberValue) ? numberValue : null;\r\n }\r\n return value;\r\n}\r\n\r\nfunction providerFieldValidators(\r\n field: EmailProviderFieldDescriptor,\r\n translate: (key: string) => string,\r\n): ValidatorConfig[] {\r\n const validators: ValidatorConfig[] = [];\r\n if (field.required) validators.push(ValidatorConfig.required());\r\n if (field.maximumLength) {\r\n validators.push(ValidatorConfig.maxLength(field.maximumLength));\r\n }\r\n if (field.dataType === 'Email') validators.push(ValidatorConfig.email());\r\n if (field.dataType === 'Text') {\r\n validators.push(ValidatorConfig.pattern('^[^\\\\r\\\\n\\\\u0000]*$'));\r\n }\r\n if (field.dataType === 'Identifier') {\r\n validators.push(ValidatorConfig.pattern('^[A-Za-z0-9._-]+$'));\r\n }\r\n if (field.dataType === 'Host') {\r\n validators.push(\r\n ValidatorConfig.custom(\r\n (value) => validHost(value),\r\n translate('validation.host'),\r\n ),\r\n );\r\n }\r\n if (field.dataType === 'Url') {\r\n validators.push(\r\n ValidatorConfig.custom(\r\n (value) => validHttpsUrl(value),\r\n translate('validation.https-url'),\r\n ),\r\n );\r\n }\r\n if (field.dataType === 'HeaderName') {\r\n validators.push(ValidatorConfig.pattern('^X-[A-Za-z0-9-]+$'));\r\n }\r\n return validators;\r\n}\r\n\r\nfunction validHost(value: unknown): boolean {\r\n const host = String(value ?? '')\r\n .trim()\r\n .toLowerCase();\r\n return (\r\n !!host &&\r\n host !== 'localhost' &&\r\n !/^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(host) &&\r\n /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,62}$/.test(\r\n host,\r\n )\r\n );\r\n}\r\n\r\nfunction validHttpsUrl(value: unknown): boolean {\r\n try {\r\n const url = new URL(String(value ?? ''));\r\n return (\r\n url.protocol === 'https:' &&\r\n !url.username &&\r\n !url.password &&\r\n !url.hash &&\r\n url.hostname.toLowerCase() !== 'localhost'\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <div\r\n [class]=\"\r\n 'flex min-h-0 flex-col gap-5 overflow-y-auto p-4 sm:p-5 ' +\r\n modal.contentClass\r\n \"\r\n >\r\n <p class=\"m-0 text-sm text-muted-color\">\r\n {{ t(\"editor.description\") }}\r\n </p>\r\n\r\n @if (selectedProvider(); as provider) {\r\n @if (provider.warnings.length > 0) {\r\n <section\r\n class=\"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3\"\r\n role=\"note\"\r\n aria-labelledby=\"provider-warnings-heading\"\r\n >\r\n <h2\r\n id=\"provider-warnings-heading\"\r\n class=\"m-0 text-sm font-semibold text-amber-950\"\r\n >\r\n {{ t(\"provider-warnings\") }}\r\n </h2>\r\n <ul class=\"mb-0 mt-2 list-disc space-y-1 ps-5 text-sm text-amber-900\">\r\n @for (warning of provider.warnings; track warning) {\r\n <li>{{ warning }}</li>\r\n }\r\n </ul>\r\n </section>\r\n }\r\n }\r\n\r\n @if (isEdit()) {\r\n <div\r\n class=\"rounded-lg border border-blue-200 bg-blue-50 px-4 py-3 text-sm text-blue-950\"\r\n role=\"note\"\r\n >\r\n {{ t(\"editor.update-invalidates-proof\") }}\r\n </div>\r\n }\r\n\r\n @if (editorLoading()) {\r\n <div class=\"py-12 text-center text-sm text-muted-color\" role=\"status\">\r\n {{ t(\"loading\") }}\r\n </div>\r\n } @else {\r\n @for (generation of [formGeneration()]; track generation) {\r\n <mt-dynamic-form [formConfig]=\"formConfig()\" [formControl]=\"form\" />\r\n }\r\n }\r\n\r\n @if (applicableFields().length === 0 && !editorLoading()) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-50 px-4 py-3 text-sm text-muted-color\"\r\n >\r\n {{ t(\"editor.select-provider-mode\") }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n [disabled]=\"!!facade.mutationLoading()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"cancel()\"\r\n />\r\n <mt-button\r\n [label]=\"t('save')\"\r\n icon=\"general.save-01\"\r\n [disabled]=\"!canSave()\"\r\n [loading]=\"facade.mutationLoading() === (isEdit() ? 'update' : 'create')\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"save()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import { DatePipe, DOCUMENT } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { EmptyState } from '@masterteam/components/empty-state';\r\nimport { Menu, type MTMenuItem } from '@masterteam/components/menu';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { take } from 'rxjs';\r\nimport { EmailDeliveryStatus } from '../../components/email-delivery-status/email-delivery-status';\r\nimport { EmailControlledTestDialog } from '../../dialogs/controlled-test/email-controlled-test-dialog';\r\nimport { getApplicableProviderActions } from '../../email-delivery-descriptor.utils';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport type {\r\n EmailProviderActionDescriptor,\r\n EmailProviderFieldDescriptor,\r\n} from '../../email-delivery.model';\r\nimport { EmailConnectionEditor } from '../connection-editor/email-connection-editor';\r\n\r\ninterface EmailConfigurationViewItem {\r\n key: string;\r\n label: string;\r\n value: string;\r\n}\r\n\r\ninterface EmailCredentialViewItem {\r\n key: string;\r\n label: string;\r\n configured: boolean;\r\n storageLabel: string;\r\n lastRotatedAtUtc: string | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-email-connection-details',\r\n imports: [\r\n DatePipe,\r\n TranslocoDirective,\r\n Button,\r\n Card,\r\n EmptyState,\r\n Menu,\r\n EmailDeliveryStatus,\r\n ],\r\n templateUrl: './email-connection-details.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailConnectionDetailsPage implements OnInit {\r\n readonly connectionId = input.required<string>();\r\n\r\n private readonly document = inject(DOCUMENT);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmation = inject(ConfirmationService);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modal = inject(ModalService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n protected readonly actions = computed(() => {\r\n const details = this.facade.selectedConnection();\r\n if (!details || details.connection.id !== this.connectionId()) return [];\r\n return getApplicableProviderActions(\r\n this.facade.providerByKey(details.connection.providerKey),\r\n details.connection.authenticationMode,\r\n details.connection.publicConfiguration['AuthorizationModel'],\r\n );\r\n });\r\n protected readonly provider = computed(() => {\r\n const details = this.facade.selectedConnection();\r\n return details\r\n ? this.facade.providerByKey(details.connection.providerKey)\r\n : null;\r\n });\r\n protected readonly authenticationModeLabel = computed(() => {\r\n const details = this.facade.selectedConnection();\r\n if (!details) return '';\r\n return (\r\n this.provider()?.authenticationModes.find(\r\n (mode) => mode.key === details.connection.authenticationMode,\r\n )?.displayName ?? details.connection.authenticationMode\r\n );\r\n });\r\n protected readonly publicConfiguration = computed<\r\n EmailConfigurationViewItem[]\r\n >(() => {\r\n this.activeLanguage();\r\n const details = this.facade.selectedConnection();\r\n if (!details) return [];\r\n const fields = this.provider()?.fields ?? [];\r\n const fieldOrder = new Map(\r\n fields.map((field, index) => [field.key.toLowerCase(), index]),\r\n );\r\n\r\n return Object.entries(details.connection.publicConfiguration)\r\n .filter(([, value]) => value !== '')\r\n .sort(\r\n ([left], [right]) =>\r\n (fieldOrder.get(left.toLowerCase()) ?? Number.MAX_SAFE_INTEGER) -\r\n (fieldOrder.get(right.toLowerCase()) ?? Number.MAX_SAFE_INTEGER),\r\n )\r\n .map(([key, value]) => {\r\n const field = fields.find(\r\n (candidate) => candidate.key.toLowerCase() === key.toLowerCase(),\r\n );\r\n return {\r\n key,\r\n label: field?.displayName ?? humanizeIdentifier(key),\r\n value: this.configurationValueLabel(value, field),\r\n };\r\n });\r\n });\r\n protected readonly credentialItems = computed<EmailCredentialViewItem[]>(\r\n () => {\r\n this.activeLanguage();\r\n const details = this.facade.selectedConnection();\r\n if (!details) return [];\r\n const fields = this.provider()?.fields ?? [];\r\n\r\n return details.credentials.map((credential) => ({\r\n key: credential.key,\r\n label:\r\n fields.find(\r\n (field) => field.key.toLowerCase() === credential.key.toLowerCase(),\r\n )?.displayName ?? humanizeIdentifier(credential.key),\r\n configured: credential.configured,\r\n storageLabel: this.credentialStorageLabel(credential.storageKind),\r\n lastRotatedAtUtc: credential.lastRotatedAtUtc,\r\n }));\r\n },\r\n );\r\n protected readonly actionMenuItems = computed<MTMenuItem[]>(() => {\r\n this.activeLanguage();\r\n const details = this.facade.selectedConnection();\r\n if (!details || !this.facade.managementAvailable()) return [];\r\n\r\n const items: MTMenuItem[] = this.interactiveActions().map((action) => ({\r\n id: action.key,\r\n label: action.displayName,\r\n icon: 'security.lock-unlocked-01',\r\n command: () => this.authorize(action),\r\n }));\r\n\r\n if (this.hasAction('validate')) {\r\n items.push({\r\n id: 'validate',\r\n label: this.t('validate'),\r\n icon: 'general.check-circle',\r\n command: () => this.validate(),\r\n });\r\n }\r\n if (this.hasAction('test-send')) {\r\n items.push({\r\n id: 'test-send',\r\n label: this.t('test-send'),\r\n icon: 'communication.send-01',\r\n command: () => this.test(),\r\n });\r\n }\r\n if (\r\n details.connection.state === 'Ready' &&\r\n !details.bindings.includes('notifications')\r\n ) {\r\n items.push({\r\n id: 'bind',\r\n label: this.t('use-for-notifications'),\r\n icon: 'general.link-01',\r\n command: () => this.bind(),\r\n });\r\n }\r\n if (details.bindings.includes('notifications')) {\r\n items.push({\r\n id: 'unbind',\r\n label: this.t('stop-using'),\r\n icon: 'general.link-broken-01',\r\n severity: 'warn',\r\n command: () => this.unbind(),\r\n });\r\n }\r\n if (details.authorizationState) {\r\n items.push({\r\n id: 'revoke',\r\n label: this.t('revoke'),\r\n icon: 'security.lock-01',\r\n severity: 'warn',\r\n command: () => this.revoke(),\r\n });\r\n }\r\n if (details.bindings.length === 0) {\r\n items.push(\r\n { id: 'destructive-separator', separator: true },\r\n {\r\n id: 'delete',\r\n label: this.t('delete'),\r\n icon: 'general.trash-01',\r\n severity: 'danger',\r\n command: () => this.delete(),\r\n },\r\n );\r\n }\r\n\r\n return items;\r\n });\r\n\r\n ngOnInit(): void {\r\n this.reload();\r\n }\r\n\r\n protected edit(): void {\r\n const drawer = this.modal.openModal(EmailConnectionEditor, 'drawer', {\r\n header: this.t('editor.edit-title'),\r\n styleClass: '!absolute !shadow-none !w-full !max-w-full',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: { editorConnectionId: this.connectionId() },\r\n });\r\n drawer.onClose.pipe(take(1)).subscribe((saved: boolean) => {\r\n if (saved) this.reload();\r\n });\r\n }\r\n\r\n protected validate(): void {\r\n this.facade.validateConnection(this.connectionId()).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n protected test(): void {\r\n const details = this.facade.selectedConnection();\r\n if (!details) return;\r\n const dialog = this.modal.openModal(EmailControlledTestDialog, 'dialog', {\r\n header: this.t('test.title'),\r\n styleClass: '!w-[42rem] max-w-[96vw]',\r\n dismissible: true,\r\n inputValues: {\r\n connectionId: details.connection.id,\r\n connectionName: details.connection.name,\r\n },\r\n });\r\n dialog.onClose.pipe(take(1)).subscribe(() => this.reload());\r\n }\r\n\r\n protected authorize(action: EmailProviderActionDescriptor): void {\r\n const kind = action.key === 'authorize' ? 'delegated' : 'admin-consent';\r\n this.facade.startAuthorization(this.connectionId(), kind).subscribe({\r\n next: (result) => this.document.location.assign(result.authorizationUrl),\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n protected revoke(): void {\r\n const details = this.facade.selectedConnection();\r\n if (!details) return;\r\n this.confirmation.confirm({\r\n type: 'dialog',\r\n header: this.t('revoke'),\r\n message: this.t('confirm.revoke'),\r\n accept: () =>\r\n this.facade.revokeAuthorization(this.connectionId()).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n }),\r\n });\r\n }\r\n\r\n protected bind(): void {\r\n this.facade.bindConnection(this.connectionId()).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n protected unbind(): void {\r\n this.confirmation.confirm({\r\n type: 'dialog',\r\n header: this.t('stop-using'),\r\n message: this.t('confirm.unbind'),\r\n accept: () =>\r\n this.facade.unbindConnection(this.connectionId()).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n }),\r\n });\r\n }\r\n\r\n protected delete(): void {\r\n const details = this.facade.selectedConnection();\r\n if (!details) return;\r\n this.confirmation.confirmDelete({\r\n type: 'dialog',\r\n message: this.t('confirm.delete'),\r\n accept: () =>\r\n this.facade\r\n .deleteConnection(\r\n this.connectionId(),\r\n details.connection.concurrencyToken,\r\n )\r\n .subscribe({\r\n next: () => this.ref.close(true),\r\n error: (error) => this.facade.showError(error),\r\n }),\r\n });\r\n }\r\n\r\n protected hasAction(key: string): boolean {\r\n return this.actions().some((action) => action.key === key);\r\n }\r\n\r\n protected interactiveActions(): EmailProviderActionDescriptor[] {\r\n return this.actions().filter((action) => action.isInteractive);\r\n }\r\n\r\n protected close(): void {\r\n this.ref.close();\r\n }\r\n\r\n private reload(): void {\r\n this.facade.loadConnection(this.connectionId()).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n\r\n private credentialStorageLabel(storageKind: string): string {\r\n switch (storageKind.replace(/[-_\\s]/g, '').toLowerCase()) {\r\n case 'externalreference':\r\n return this.t('credential.external-reference');\r\n case 'protectedvalue':\r\n return this.t('credential.protected-value');\r\n default:\r\n return humanizeIdentifier(storageKind);\r\n }\r\n }\r\n\r\n private configurationValueLabel(\r\n value: string,\r\n field?: EmailProviderFieldDescriptor,\r\n ): string {\r\n if (value.toLowerCase() === 'true') return this.t('yes');\r\n if (value.toLowerCase() === 'false') return this.t('no');\r\n return field?.dataType === 'Choice' ? humanizeIdentifier(value) : value;\r\n }\r\n}\r\n\r\nfunction humanizeIdentifier(value: string): string {\r\n return value\r\n .replace(/[._-]+/g, ' ')\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/\\s+/g, ' ')\r\n .trim()\r\n .replace(/^./, (character) => character.toUpperCase())\r\n .replace(/\\bSmtp\\b/g, 'SMTP')\r\n .replace(/\\bTls\\b/g, 'TLS')\r\n .replace(/\\bOauth2?\\b/gi, 'OAuth2')\r\n .replace(/\\bHttp\\b/g, 'HTTP')\r\n .replace(/\\bApi\\b/g, 'API');\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n @if (facade.detailsLoading()) {\r\n <div [class]=\"modal.contentClass + ' p-4 sm:p-5'\">\r\n <div class=\"py-12 text-center text-sm text-muted-color\" role=\"status\">\r\n {{ t(\"loading\") }}\r\n </div>\r\n </div>\r\n } @else if (facade.selectedConnection(); as details) {\r\n <div [class]=\"'min-h-0 overflow-y-auto p-4 sm:p-5 ' + modal.contentClass\">\r\n <div class=\"grid w-full gap-5\">\r\n <section\r\n class=\"flex flex-col gap-3 rounded-xl border border-surface-200 bg-surface-0 p-4 shadow-xs sm:flex-row sm:items-center sm:justify-between\"\r\n >\r\n <div class=\"min-w-0\">\r\n <h2 class=\"m-0 truncate text-lg font-semibold text-color\">\r\n {{ details.connection.name }}\r\n </h2>\r\n <p class=\"mb-0 mt-1 break-all text-sm text-muted-color\">\r\n {{ details.connection.senderAddress }}\r\n </p>\r\n </div>\r\n <mt-email-delivery-status\r\n class=\"shrink-0\"\r\n kind=\"connection\"\r\n [value]=\"details.connection.state\"\r\n />\r\n </section>\r\n\r\n <mt-card class=\"block\">\r\n <h3 class=\"mb-4 text-base font-semibold text-color\">\r\n {{ t(\"connection-overview\") }}\r\n </h3>\r\n <dl class=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-3\">\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"connection.provider\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\r\n {{ provider()?.displayName || details.connection.providerKey }}\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"connection.authentication-mode\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\r\n {{ authenticationModeLabel() }}\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"used-for-notifications\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 font-medium text-color\">\r\n {{\r\n details.bindings.includes(\"notifications\")\r\n ? t(\"yes\")\r\n : t(\"no\")\r\n }}\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"connection.last-validation\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 font-medium text-color\">\r\n {{\r\n details.connection.lastValidatedAtUtc\r\n ? (details.connection.lastValidatedAtUtc | date: \"medium\")\r\n : \"—\"\r\n }}\r\n </dd>\r\n </div>\r\n <div class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\">\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"authorization-state\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\r\n {{ details.authorizationState || \"—\" }}\r\n </dd>\r\n </div>\r\n @if (details.connection.senderDisplayName) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\"\r\n >\r\n <dt class=\"text-xs text-muted-color\">\r\n {{ t(\"connection.sender-display-name\") }}\r\n </dt>\r\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\r\n {{ details.connection.senderDisplayName }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n </mt-card>\r\n\r\n @if (publicConfiguration().length > 0) {\r\n <mt-card class=\"block\">\r\n <h3 class=\"mb-4 text-base font-semibold text-color\">\r\n {{ t(\"provider-settings\") }}\r\n </h3>\r\n <dl class=\"grid gap-3 sm:grid-cols-2 xl:grid-cols-3\">\r\n @for (entry of publicConfiguration(); track entry.key) {\r\n <div\r\n class=\"rounded-lg border border-surface-200 bg-surface-50 p-4\"\r\n >\r\n <dt class=\"text-xs text-muted-color\">{{ entry.label }}</dt>\r\n <dd class=\"mb-0 mt-1 break-words font-medium text-color\">\r\n {{ entry.value }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n </mt-card>\r\n }\r\n\r\n <mt-card class=\"block\">\r\n <h3 class=\"mb-4 text-base font-semibold text-color\">\r\n {{ t(\"credential-status\") }}\r\n </h3>\r\n <div class=\"grid gap-3\">\r\n @for (credential of credentialItems(); track credential.key) {\r\n <div\r\n class=\"grid gap-3 rounded-lg border border-surface-200 bg-surface-50 p-4 sm:grid-cols-3 sm:items-center\"\r\n >\r\n <div class=\"min-w-0\">\r\n <p class=\"m-0 break-words font-medium text-color\">\r\n {{ credential.label }}\r\n </p>\r\n <p class=\"mb-0 mt-1 text-xs text-muted-color\">\r\n {{ credential.key }}\r\n </p>\r\n </div>\r\n <div class=\"min-w-0\">\r\n <p class=\"m-0 text-sm font-medium text-color\">\r\n {{ credential.storageLabel }}\r\n </p>\r\n <p class=\"mb-0 mt-1 text-xs text-muted-color\">\r\n @if (credential.lastRotatedAtUtc) {\r\n {{ t(\"last-rotated\") }} ·\r\n {{ credential.lastRotatedAtUtc | date: \"medium\" }}\r\n } @else {\r\n {{ t(\"last-rotated\") }} · —\r\n }\r\n </p>\r\n </div>\r\n <mt-email-delivery-status\r\n class=\"shrink-0 sm:justify-self-end\"\r\n kind=\"support\"\r\n [value]=\"\r\n credential.configured ? 'configured' : 'not-configured'\r\n \"\r\n />\r\n </div>\r\n } @empty {\r\n <p class=\"text-sm text-muted-color\">{{ t(\"no-credentials\") }}</p>\r\n }\r\n </div>\r\n </mt-card>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('close')\"\r\n variant=\"outlined\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"close()\"\r\n />\r\n @if (actionMenuItems().length > 0) {\r\n <mt-button\r\n [label]=\"t('actions')\"\r\n icon=\"general.dots-vertical\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"actionMenu.toggle($event)\"\r\n />\r\n <mt-menu\r\n #actionMenu\r\n [model]=\"actionMenuItems()\"\r\n appendTo=\"body\"\r\n [ariaLabel]=\"t('actions')\"\r\n />\r\n }\r\n <mt-button\r\n [label]=\"t('edit')\"\r\n icon=\"general.edit-01\"\r\n [disabled]=\"!facade.managementAvailable()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n (onClick)=\"edit()\"\r\n />\r\n </div>\r\n } @else {\r\n <div [class]=\"modal.contentClass + ' p-4 sm:p-5'\">\r\n <mt-empty-state illustration=\"none\" [title]=\"t('connection-not-found')\" />\r\n </div>\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button [label]=\"t('close')\" variant=\"outlined\" (onClick)=\"close()\" />\r\n </div>\r\n }\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n} from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { EmptyState } from '@masterteam/components/empty-state';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport {\r\n Table,\r\n type ColumnDef,\r\n type TableAction,\r\n} from '@masterteam/components/table';\r\nimport { EmailControlledTestDialog } from '../../dialogs/controlled-test/email-controlled-test-dialog';\r\nimport { getEmailDeliveryStatusMap } from '../../components/email-delivery-status/email-delivery-status';\r\nimport { getApplicableProviderActions } from '../../email-delivery-descriptor.utils';\r\nimport { EmailDeliveryFacade } from '../../email-delivery.facade';\r\nimport {\r\n EMAIL_DELIVERY_PERMISSIONS,\r\n type EmailConnectionSummary,\r\n} from '../../email-delivery.model';\r\nimport { EmailConnectionDetailsPage } from '../connection-details/email-connection-details';\r\nimport { EmailConnectionEditor } from '../connection-editor/email-connection-editor';\r\n\r\ninterface EmailConnectionTableRow extends EmailConnectionSummary {\r\n providerLabel: string;\r\n usedForNotifications: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-connections',\r\n imports: [TranslocoDirective, Button, EmptyState, Table],\r\n templateUrl: './email-delivery-connections.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryConnections {\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly modal = inject(ModalService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n protected readonly canConfigure = this.facade.hasPermission(\r\n EMAIL_DELIVERY_PERMISSIONS.controlPanel,\r\n );\r\n protected readonly rows = computed<EmailConnectionTableRow[]>(() =>\r\n this.facade.connections().map((connection) => ({\r\n ...connection,\r\n providerLabel:\r\n this.facade.providerByKey(connection.providerKey)?.displayName ??\r\n connection.providerKey,\r\n usedForNotifications: connection.bindings.includes('notifications'),\r\n })),\r\n );\r\n protected readonly columns = computed<ColumnDef[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n {\r\n key: 'name',\r\n label: this.t('connection.name'),\r\n sortable: true,\r\n filterConfig: { type: 'text' },\r\n },\r\n {\r\n key: 'providerLabel',\r\n label: this.t('connection.provider'),\r\n filterConfig: {\r\n type: 'select',\r\n options: this.facade.providers().map((provider) => ({\r\n label: provider.displayName,\r\n value: provider.displayName,\r\n })),\r\n },\r\n },\r\n {\r\n key: 'senderAddress',\r\n label: this.t('connection.sender'),\r\n filterConfig: { type: 'text' },\r\n },\r\n {\r\n key: 'state',\r\n label: this.t('connection.state'),\r\n type: 'status',\r\n filterConfig: {\r\n type: 'select',\r\n options: connectionStates.map((state) => ({\r\n label: this.t(`status.connection.${toKebabCase(state)}`),\r\n value: state,\r\n })),\r\n },\r\n statusMap: getEmailDeliveryStatusMap(\r\n 'connection',\r\n this.transloco.translate.bind(this.transloco),\r\n ),\r\n },\r\n {\r\n key: 'usedForNotifications',\r\n label: this.t('used-for-notifications'),\r\n type: 'boolean',\r\n readonly: true,\r\n filterConfig: { type: 'boolean' },\r\n },\r\n {\r\n key: 'lastValidatedAtUtc',\r\n label: this.t('connection.last-validation'),\r\n type: 'dateTime',\r\n },\r\n ];\r\n });\r\n protected readonly rowActions = computed<TableAction[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n {\r\n icon: 'general.eye',\r\n label: this.t('details'),\r\n action: (row) => this.openDetails(row as EmailConnectionSummary),\r\n },\r\n {\r\n icon: 'general.edit-01',\r\n label: this.t('edit'),\r\n hidden: () => !this.canMutate(),\r\n action: (row) => this.openEdit(row as EmailConnectionSummary),\r\n },\r\n {\r\n icon: 'general.check-circle',\r\n label: this.t('validate'),\r\n hidden: (row) =>\r\n !this.canMutate() ||\r\n !this.hasAction(row as EmailConnectionSummary, 'validate'),\r\n loading: () => this.facade.mutationLoading() === 'validate',\r\n action: (row) => this.validate(row as EmailConnectionSummary),\r\n },\r\n {\r\n icon: 'communication.send-01',\r\n label: this.t('test-send'),\r\n hidden: (row) =>\r\n !this.canMutate() ||\r\n !this.hasAction(row as EmailConnectionSummary, 'test-send'),\r\n action: (row) => this.openTest(row as EmailConnectionSummary),\r\n },\r\n {\r\n icon: 'general.link-01',\r\n label: this.t('bind'),\r\n hidden: (row) => {\r\n const connection = row as EmailConnectionSummary;\r\n return (\r\n !this.canMutate() ||\r\n connection.state !== 'Ready' ||\r\n connection.bindings.includes('notifications')\r\n );\r\n },\r\n action: (row) => this.bind(row as EmailConnectionSummary),\r\n },\r\n {\r\n icon: 'general.link-broken-01',\r\n label: this.t('unbind'),\r\n color: 'warn',\r\n hidden: (row) =>\r\n !this.canMutate() ||\r\n !(row as EmailConnectionSummary).bindings.includes('notifications'),\r\n action: (row) => this.confirmUnbind(row as EmailConnectionSummary),\r\n },\r\n {\r\n icon: 'general.trash-01',\r\n label: this.t('delete'),\r\n color: 'danger',\r\n hidden: (row) =>\r\n !this.canMutate() ||\r\n (row as EmailConnectionSummary).bindings.length > 0,\r\n action: (row) => this.confirmDelete(row as EmailConnectionSummary),\r\n },\r\n ];\r\n });\r\n\r\n protected createConnection(): void {\r\n this.openEditor(null);\r\n }\r\n\r\n protected openDetails(connection: EmailConnectionSummary): void {\r\n const drawer = this.modal.openModal(EmailConnectionDetailsPage, 'drawer', {\r\n header: this.t('connection-details'),\r\n styleClass: '!absolute !shadow-none !w-full !max-w-full',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: { connectionId: connection.id },\r\n });\r\n drawer.onClose.subscribe(() => {\r\n this.facade.loadConnections().subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n });\r\n }\r\n\r\n protected openEdit(connection: EmailConnectionSummary): void {\r\n this.openEditor(connection.id);\r\n }\r\n\r\n private validate(connection: EmailConnectionSummary): void {\r\n this.facade.validateConnection(connection.id).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n private openTest(connection: EmailConnectionSummary): void {\r\n this.modal.openModal(EmailControlledTestDialog, 'dialog', {\r\n header: this.t('test.title'),\r\n styleClass: '!w-[42rem] max-w-[96vw]',\r\n dismissible: true,\r\n inputValues: {\r\n connectionId: connection.id,\r\n connectionName: connection.name,\r\n },\r\n });\r\n }\r\n\r\n private bind(connection: EmailConnectionSummary): void {\r\n this.facade.bindConnection(connection.id).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n }\r\n\r\n private confirmUnbind(connection: EmailConnectionSummary): void {\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n header: this.t('unbind'),\r\n message: this.t('confirm.unbind'),\r\n accept: () =>\r\n this.facade.unbindConnection(connection.id).subscribe({\r\n error: (error) => this.facade.showError(error),\r\n }),\r\n });\r\n }\r\n\r\n private confirmDelete(connection: EmailConnectionSummary): void {\r\n this.confirmationService.confirmDelete({\r\n type: 'dialog',\r\n message: this.t('confirm.delete'),\r\n accept: () =>\r\n this.facade\r\n .deleteConnection(connection.id, connection.concurrencyToken)\r\n .subscribe({ error: (error) => this.facade.showError(error) }),\r\n });\r\n }\r\n\r\n private canMutate(): boolean {\r\n return this.canConfigure && this.facade.managementAvailable();\r\n }\r\n\r\n private openEditor(connectionId: string | null): void {\r\n const drawer = this.modal.openModal(EmailConnectionEditor, 'drawer', {\r\n header: this.t(\r\n connectionId ? 'editor.edit-title' : 'editor.create-title',\r\n ),\r\n styleClass: '!absolute !shadow-none !w-full !max-w-full',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: { editorConnectionId: connectionId },\r\n });\r\n drawer.onClose.subscribe((saved: boolean) => {\r\n if (!saved) return;\r\n this.facade.loadConnections().subscribe({\r\n error: (error) => this.facade.showError(error),\r\n });\r\n });\r\n }\r\n\r\n private hasAction(\r\n connection: EmailConnectionSummary,\r\n actionKey: string,\r\n ): boolean {\r\n return getApplicableProviderActions(\r\n this.facade.providerByKey(connection.providerKey),\r\n connection.authenticationMode,\r\n ).some((action) => action.key === actionKey);\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n\r\nconst connectionStates = [\r\n 'Draft',\r\n 'PendingAuthorization',\r\n 'PendingValidation',\r\n 'Ready',\r\n 'ReauthorizationRequired',\r\n 'ConditionalAccessRequired',\r\n 'Disabled',\r\n 'Invalid',\r\n];\r\n\r\nfunction toKebabCase(value: string): string {\r\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <section class=\"space-y-4\" aria-labelledby=\"connections-heading\">\r\n <div\r\n class=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\"\r\n >\r\n <div>\r\n <h2 id=\"connections-heading\" class=\"text-lg font-semibold text-color\">\r\n {{ t(\"connections-title\") }}\r\n </h2>\r\n <p class=\"mt-1 text-sm text-muted-color\">\r\n {{ t(\"connections-description\") }}\r\n </p>\r\n </div>\r\n @if (\r\n canConfigure &&\r\n facade.managementAvailable() &&\r\n facade.providers().length > 0\r\n ) {\r\n <mt-button\r\n [label]=\"t('create-connection')\"\r\n icon=\"general.plus\"\r\n (onClick)=\"createConnection()\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (\r\n !facade.statusLoading() &&\r\n !facade.catalogLoading() &&\r\n facade.providers().length === 0\r\n ) {\r\n <mt-empty-state\r\n illustration=\"none\"\r\n [title]=\"t('no-providers-title')\"\r\n [description]=\"t('no-providers-description')\"\r\n />\r\n } @else if (\r\n !facade.statusLoading() &&\r\n !facade.connectionsLoading() &&\r\n facade.connections().length === 0\r\n ) {\r\n <mt-empty-state\r\n [title]=\"t('no-connections-title')\"\r\n [description]=\"t('no-connections-description')\"\r\n [actionLabel]=\"\r\n canConfigure && facade.managementAvailable()\r\n ? t('create-connection')\r\n : undefined\r\n \"\r\n actionIcon=\"general.plus\"\r\n (actionClick)=\"createConnection()\"\r\n />\r\n } @else {\r\n <mt-table\r\n [data]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [rowActions]=\"rowActions()\"\r\n [loading]=\"\r\n facade.statusLoading() ||\r\n facade.connectionsLoading() ||\r\n facade.catalogLoading()\r\n \"\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n actionShape=\"popover\"\r\n [clickableRows]=\"true\"\r\n dataKey=\"id\"\r\n storageKey=\"email-delivery-connections\"\r\n (rowClick)=\"openDetails($event)\"\r\n />\r\n }\r\n </section>\r\n</ng-container>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { EmptyState } from '@masterteam/components/empty-state';\r\nimport { Page } from '@masterteam/components/page';\r\nimport type { PageHeaderTab } from '@masterteam/components/page-header';\r\nimport { ToastService } from '@masterteam/components/toast';\r\nimport { EmailDeliveryFacade } from '../email-delivery.facade';\r\nimport { EMAIL_DELIVERY_PERMISSIONS } from '../email-delivery.model';\r\nimport { EmailDeliveryActivity } from '../pages/activity/email-delivery-activity';\r\nimport { EmailDeliveryConnections } from '../pages/connections/email-delivery-connections';\r\n\r\n@Component({\r\n selector: 'mt-email-delivery-shell',\r\n imports: [\r\n Page,\r\n TranslocoDirective,\r\n EmptyState,\r\n EmailDeliveryConnections,\r\n EmailDeliveryActivity,\r\n ],\r\n templateUrl: './email-delivery-shell.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class EmailDeliveryShell implements OnInit {\r\n private readonly route = inject(ActivatedRoute);\r\n private readonly router = inject(Router);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly toast = inject(ToastService);\r\n protected readonly facade = inject(EmailDeliveryFacade);\r\n\r\n private readonly activeLanguage = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n protected readonly activeTab = signal<'connections' | 'activity'>(\r\n 'connections',\r\n );\r\n protected readonly canView = this.facade.hasPermission(\r\n EMAIL_DELIVERY_PERMISSIONS.controlPanel,\r\n );\r\n protected readonly tabs = computed<PageHeaderTab[]>(() => {\r\n this.activeLanguage();\r\n return [\r\n { label: this.t('tabs.connections'), value: 'connections' },\r\n { label: this.t('tabs.activity'), value: 'activity' },\r\n ];\r\n });\r\n\r\n constructor() {\r\n this.route.queryParamMap.pipe(takeUntilDestroyed()).subscribe((params) => {\r\n this.activeTab.set(\r\n params.get('tab') === 'activity' ? 'activity' : 'connections',\r\n );\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.canView) return;\r\n this.facade.initialize();\r\n this.syncTabFromUrl();\r\n this.handleAuthorizationCallback();\r\n }\r\n\r\n protected onTabChange(value: string | number): void {\r\n if (value !== 'connections' && value !== 'activity') return;\r\n void this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: { tab: value === 'connections' ? null : value },\r\n queryParamsHandling: 'merge',\r\n });\r\n }\r\n\r\n protected goBack(): void {\r\n void this.router.navigate(['/control-panel/product-settings']);\r\n }\r\n\r\n private syncTabFromUrl(): void {\r\n this.activeTab.set(\r\n this.route.snapshot.queryParamMap.get('tab') === 'activity'\r\n ? 'activity'\r\n : 'connections',\r\n );\r\n }\r\n\r\n private handleAuthorizationCallback(): void {\r\n const query = this.route.snapshot.queryParamMap;\r\n const authorization = query.get('authorization');\r\n const code = query.get('code');\r\n if (!authorization && !code) return;\r\n\r\n const message = this.facade.describeCode(code);\r\n if (authorization === 'completed') {\r\n this.toast.success(message);\r\n } else {\r\n this.toast.error(message);\r\n }\r\n\r\n const pendingConnectionId =\r\n this.facade.takePendingAuthorizationConnection();\r\n void this.router\r\n .navigate([], {\r\n relativeTo: this.route,\r\n queryParams: { authorization: null, code: null },\r\n queryParamsHandling: 'merge',\r\n replaceUrl: true,\r\n })\r\n .then(() => {\r\n if (!pendingConnectionId) return;\r\n this.facade.loadConnection(pendingConnectionId).subscribe({\r\n next: () => this.facade.loadConnections().subscribe(),\r\n error: (error) => this.facade.showError(error),\r\n });\r\n });\r\n }\r\n\r\n private t(key: string): string {\r\n return this.transloco.translate(`email-delivery.${key}`);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'email-delivery'\">\r\n <mt-page\r\n [title]=\"t('title')\"\r\n avatarIcon=\"communication.mail-01\"\r\n [avatarStyle]=\"{\r\n '--p-avatar-background': 'var(--p-blue-100)',\r\n '--p-avatar-color': 'var(--p-blue-700)',\r\n }\"\r\n [tabs]=\"canView ? tabs() : []\"\r\n [activeTab]=\"activeTab()\"\r\n contentClass=\"min-h-0 max-[1025px]:p-4 max-[640px]:p-3\"\r\n backButton\r\n (backButtonClick)=\"goBack()\"\r\n (tabChange)=\"onTabChange($event)\"\r\n >\r\n @if (canView) {\r\n <p class=\"mb-4 text-sm text-muted-color\">\r\n {{ t(\"description\") }}\r\n </p>\r\n @if (facade.status(); as status) {\r\n <div\r\n class=\"mb-4 rounded-lg border px-4 py-3\"\r\n [class.border-emerald-200]=\"status.isReady\"\r\n [class.bg-emerald-50]=\"status.isReady\"\r\n [class.border-amber-200]=\"!status.isReady && status.managementEnabled\"\r\n [class.bg-amber-50]=\"!status.isReady && status.managementEnabled\"\r\n [class.border-surface-300]=\"!status.managementEnabled\"\r\n [class.bg-surface-100]=\"!status.managementEnabled\"\r\n role=\"status\"\r\n >\r\n <p class=\"font-semibold text-color\">\r\n {{\r\n status.isReady\r\n ? t(\"ready\")\r\n : status.managementEnabled\r\n ? t(\"needs-setup\")\r\n : t(\"unavailable\")\r\n }}\r\n </p>\r\n <p class=\"mt-1 text-sm text-muted-color\">\r\n {{ facade.describeCode(status.code) }}\r\n </p>\r\n </div>\r\n }\r\n\r\n @if (activeTab() === \"activity\") {\r\n <mt-email-delivery-activity />\r\n } @else {\r\n <mt-email-delivery-connections />\r\n }\r\n } @else {\r\n <mt-empty-state\r\n illustration=\"none\"\r\n [title]=\"t('access-denied-title')\"\r\n [description]=\"t('access-denied-description')\"\r\n />\r\n }\r\n </mt-page>\r\n</ng-container>\r\n"],"names":["humanizeIdentifier","identifierEntity"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6BsB,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACUK,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AACvC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,OAAO,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAEzD,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAsB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/D;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA4B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxE;IAEA,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3E;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACzE;AAEA,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,CAAA,YAAA,EAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,CAClD;IACH;AAEA,IAAA,gBAAgB,CAAC,OAAqC,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EACvB,OAAO,CACR;IACH;IAEA,gBAAgB,CAAC,EAAU,EAAE,OAAqC,EAAA;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,eAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,EACjD,OAAO,CACR;IACH;IAEA,gBAAgB,CAAC,EAAU,EAAE,gBAAwB,EAAA;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CACrB,IAAI,CAAC,GAAG,CAAC,CAAA,YAAA,EAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,CAAE,CAAC,EACjD,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,EAAE,CACjC;IACH;IAEA,cAAc,CAAC,OAAe,EAAE,YAAoB,EAAA;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,kBAAkB,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC,EACnD,EAAE,YAAY,EAAE,CACjB;IACH;AAEA,IAAA,gBAAgB,CAAC,OAAe,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CACrB,IAAI,CAAC,GAAG,CAAC,CAAA,SAAA,EAAY,kBAAkB,CAAC,OAAO,CAAC,CAAA,CAAE,CAAC,CACpD;IACH;AAEA,IAAA,kBAAkB,CAAC,EAAU,EAAA;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CAAC,eAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,SAAA,CAAW,CAAC,EAC1D,IAAI,CACL;IACH;IAEA,kBAAkB,CAAC,EAAU,EAAE,OAAmC,EAAA;QAChE,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CAEH,IAAI,CAAC,GAAG,CAAC,CAAA,YAAA,EAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,KAAA,CAAO,CAAC,EAAE,OAAO;aAChE,IAAI,CACH,QAAQ,CAAC,CAAC,QAAQ,KAChB,iBAAiB,CAAC,QAAQ;AACxB,cAAE,EAAE,CAAC,QAAQ;AACb,cAAE,UAAU,CAAC,MAAM,QAAQ,CAAC,CAC/B,EACD,UAAU,CAAC,CAAC,KAAc,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,KAAK,YAAY,iBAAiB,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK;YACrE,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC;QACrE,CAAC,CAAC,CACH;IACL;IAEA,iBAAiB,CAAC,YAAoB,EAAE,aAAqB,EAAA;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CACN,CAAA,YAAA,EAAe,kBAAkB,CAAC,YAAY,CAAC,CAAA,eAAA,EAAkB,kBAAkB,CAAC,aAAa,CAAC,CAAA,CAAE,CACrG,CACF;IACH;AAEA,IAAA,2BAA2B,CAAC,EAAU,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CACN,eAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,8BAAA,CAAgC,CACtE,EACD,IAAI,CACL;IACH;AAEA,IAAA,iBAAiB,CAAC,EAAU,EAAA;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CACN,eAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,kCAAA,CAAoC,CAC1E,EACD,IAAI,CACL;IACH;AAEA,IAAA,mBAAmB,CAAC,EAAU,EAAA;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CAAC,eAAe,kBAAkB,CAAC,EAAE,CAAC,CAAA,qBAAA,CAAuB,CAAC,EACtE,IAAI,CACL;IACH;AAEA,IAAA,WAAW,CAAC,MAAqB,EAAE,MAAqB,EAAE,IAAY,EAAA;AACpE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC3D,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC/C,SAAA,CAAC;IACJ;IAEA,aAAa,CAAC,EAAU,EAAE,OAAkC,EAAA;QAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CAAC,YAAY,kBAAkB,CAAC,EAAE,CAAC,CAAA,OAAA,CAAS,CAAC,EACrD,OAAO,CACR;IACH;AAEA,IAAA,cAAc,CAAC,aAAqB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,CAAA,cAAA,EAAiB,kBAAkB,CAAC,aAAa,CAAC,CAAA,CAAE,CAAC,CAC/D;IACH;AAEA,IAAA,gBAAgB,CACd,OAAe,EACf,UAAkB,EAClB,OAIC,EAAA;QAED,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CAEH,IAAI,CAAC,eAAe,CAAC,CAAA,OAAA,EAAU,OAAO,CAAA,WAAA,EAAc,UAAU,CAAA,WAAA,CAAa,CAAC,EAAE,OAAO;AACtF,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3C;IAEA,aAAa,CACX,OAAe,EACf,OAIC,EAAA;QAED,OAAO,IAAI,CAAC;aACT,IAAI,CAEH,IAAI,CAAC,eAAe,CAAC,CAAA,OAAA,EAAU,OAAO,CAAA,KAAA,CAAO,CAAC,EAAE,OAAO;AACxD,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3C;IAEA,yBAAyB,CAAC,MAAqB,EAAE,IAAY,EAAA;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,EACnC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAC3C;IACH;IAEA,2BAA2B,CAAC,MAAc,EAAE,MAAc,EAAA;QACxD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CAAC,CAAA,wBAAA,EAA2B,kBAAkB,CAAC,MAAM,CAAC,CAAA,MAAA,CAAQ,CAAC,EACvE,EAAE,MAAM,EAAE,CACX;IACH;IAEA,iCAAiC,CAAC,MAAc,EAAE,MAAc,EAAA;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CACN,CAAA,wBAAA,EAA2B,kBAAkB,CAAC,MAAM,CAAC,CAAA,YAAA,CAAc,CACpE,EACD,EAAE,MAAM,EAAE,CACX;IACH;IAEA,eAAe,CAAC,MAAqB,EAAE,IAAY,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAwB,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YACvE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACvC,SAAA,CAAC;IACJ;AAEA,IAAA,kBAAkB,CAAC,oBAA4B,EAAA;QAC7C,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CACF,IAAI,CAAC,GAAG,CACN,CAAA,gBAAA,EAAmB,kBAAkB,CAAC,oBAAoB,CAAC,CAAA,OAAA,CAAS,CACrE,EACD;AACE,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,YAAY,EAAE,MAAM;SACrB;AAEF,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1D;IAEA,kBAAkB,CAChB,oBAA4B,EAC5B,OAAqC,EAAA;QAErC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CACN,mBAAmB,kBAAkB,CAAC,oBAAoB,CAAC,CAAA,OAAA,CAAS,CACrE,EACD,OAAO,CACR;IACH;IAEA,uBAAuB,CACrB,oBAA4B,EAC5B,OAAqC,EAAA;QAErC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CACN,mBAAmB,kBAAkB,CAAC,oBAAoB,CAAC,CAAA,YAAA,CAAc,CAC1E,EACD,OAAO,CACR;IACH;AAEA,IAAA,oBAAoB,CAAC,IAAY,EAAA;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,EACzC,IAAI,EACJ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CACrB;IACH;AAEQ,IAAA,GAAG,CAAC,IAAY,EAAA;QACtB,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;IACjD;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;QAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC;IAC7D;uGAzPW,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA6PlC,SAAS,iBAAiB,CAAC,KAAc,EAAA;AACvC,IAAA,QACE,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,KAAK,KAAK,IAAI;AACd,QAAA,OAAQ,KAAyB,CAAC,OAAO,KAAK,QAAQ;AACtD,QAAA,OAAQ,KAAyB,CAAC,IAAI,KAAK,QAAQ;AAEvD;AAEA,SAAS,YAAY,CACnB,MAA8C,EAAA;IAE9C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAC3B,CAAC,KAAK,KAAyC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CACjE,CACF;AACH;AAEA,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAY,EAAA;AAC1C,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE;AAChE;AAEA,SAAS,kBAAkB,CACzB,QAA4B,EAAA;AAE5B,IAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE;IAC5E,MAAM,aAAa,GAAG,uCAAuC,CAAC,IAAI,CAChE,kBAAkB,CACnB;IAED,OAAO;AACL,QAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE;AACjC,QAAA,QAAQ,EAAE;AACR,cAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACxD,cAAE,8BAA8B;QAClC,WAAW,EACT,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B;KACrE;AACH;;ACjSA,MAAM,iCAAiC,GACrC,oDAAoD;MAGzC,mBAAmB,CAAA;AACb,IAAA,OAAO,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACxC,IAAA,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;IACrC,WAAW,GAAG,KAAK;AAElB,IAAA,MAAM,GAAG,MAAM,CAA6B,IAAI,6EAAC;AACjD,IAAA,SAAS,GAAG,MAAM,CAA4B,EAAE,gFAAC;AACjD,IAAA,YAAY,GAAG,MAAM,CAA2B,EAAE,mFAAC;AACnD,IAAA,WAAW,GAAG,MAAM,CAA2B,EAAE,kFAAC;AAClD,IAAA,kBAAkB,GAAG,MAAM,CAAgC,IAAI,yFAAC;AAChE,IAAA,QAAQ,GAAG,MAAM,CAAyB,EAAE,+EAAC;AAC7C,IAAA,kBAAkB,GAAG,MAAM,CAAgB,IAAI,yFAAC;AAChD,IAAA,mBAAmB,GAAG,MAAM,CAAgB,IAAI,0FAAC;AACjD,IAAA,UAAU,GAAG,MAAM,CAAoC,EAAE,iFAAC;AAC1D,IAAA,oBAAoB,GAAG,MAAM,CAAgB,IAAI,2FAAC;AAClD,IAAA,YAAY,GAAG,MAAM,CAA0B,EAAE,mFAAC;AAClD,IAAA,sBAAsB,GAAG,MAAM,CAAgB,IAAI,6FAAC;AACpD,IAAA,+BAA+B,GAAG,MAAM,CAAC,KAAK,sGAAC;AAE/C,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,oFAAC;AAC7B,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,qFAAC;AAC9B,IAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,yFAAC;AAClC,IAAA,cAAc,GAAG,MAAM,CAAC,KAAK,qFAAC;AAC9B,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,sFAAC;AAC/B,IAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,wFAAC;AACjC,IAAA,mBAAmB,GAAG,MAAM,CAAC,KAAK,0FAAC;AACnC,IAAA,eAAe,GAAG,MAAM,CAAgB,IAAI,sFAAC;AAC7C,IAAA,kBAAkB,GAAG,MAAM,CAAyB,IAAI,yFAAC;AACzD,IAAA,2BAA2B,GAAG,MAAM,CAAgB,IAAI,kGAAC;AAEzD,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,KACjC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC9C,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACF;AACQ,IAAA,mBAAmB,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,KAAK,IAAI,0FAChD;IAED,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,WAAW;YAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,UAAU;AACZ,aAAA,IAAI,CACH,SAAS,CAAC,MACR,QAAQ,CAAC;AACP,YAAA,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;AAC3B,YAAA,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE;AACpC,SAAA,CAAC,CACH;AAEF,aAAA,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3D;AAEA,IAAA,aAAa,CAAC,UAAmC,EAAA;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC;IACzD;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACxC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAC9C;IACH;IAEA,WAAW,GAAA;AAIT,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,OAAO,QAAQ,CAAC;AACd,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAClC,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE;AACnC,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAI;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/B,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAC/C;IACH;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,CACnC,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EACvD,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CACnD;IACH;AAEA,IAAA,cAAc,CAAC,EAAU,EAAA;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EACtD,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAC/C;IACH;AAEA,IAAA,gBAAgB,CACd,OAAqC,EAAA;AAErC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5C,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EACrE,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,EACjD,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,gBAAgB,CACd,EAAU,EACV,OAAqC,EAAA;AAErC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAChD,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAC3C,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,EACjD,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,gBAAgB,CAAC,EAAU,EAAE,gBAAwB,EAAA;AACnD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,IAAI,CACzD,SAAS,CAAC,MACR,QAAQ,CAAC;AACP,YAAA,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE;AACnC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;AAC1B,SAAA,CAAC,CACH,EACD,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;QACxC,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,SAAS,CAAC,EACpB,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;AAEA,IAAA,kBAAkB,CAAC,EAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,IAAI,CACzC,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EACzE,GAAG,CAAC,CAAC,MAAM,KACT,MAAM,CAAC;AACL,cAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;AACnD,cAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACpD,EACD,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,kBAAkB,CAChB,EAAU,EACV,OAAmC,EAAA;AAEnC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;AAC3D,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAClD,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACpD,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EACzE,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,sBAAsB,CACpB,YAAoB,EACpB,aAAqB,EAAA;AAErB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,IAAI,CACjE,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAC3D,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;AAEA,IAAA,cAAc,CAAC,EAAU,EAAE,OAAO,GAAG,eAAe,EAAA;AAClD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAC9C,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAC3C,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,EAC/C,GAAG,CAAC,MAAM,SAAS,CAAC,EACpB,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;AAEA,IAAA,gBAAgB,CAAC,EAAU,EAAE,OAAO,GAAG,eAAe,EAAA;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5C,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAC3C,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,EACjD,GAAG,CAAC,MAAM,SAAS,CAAC,EACpB,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,kBAAkB,CAChB,EAAU,EACV,IAAmC,EAAA;AAEnC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,MAAM,OAAO,GACX,IAAI,KAAK;cACL,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE;cACvC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;AACpC,QAAA,OAAO,OAAO,CAAC,IAAI,CACjB,GAAG,CAAC,MAAM,IAAI,CAAC,+BAA+B,CAAC,EAAE,CAAC,CAAC,EACnD,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;AAEA,IAAA,mBAAmB,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,IAAI,CAC1C,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAC3C,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EACpD,GAAG,CAAC,MAAM,SAAS,CAAC,EACpB,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,YAAY,CAAC,KAAK,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAA;AAC5D,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACvD,QAAA,IAAI,KAAK;AAAE,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAClD,GAAG,CAAC,CAAC,IAAI,KAAI;AACX,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAClE;YACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAChD;IACH;IAEA,aAAa,CACX,OAA6B,EAC7B,OAAkC,EAAA;QAElC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,OAAO,CAAC,EAAE,CAAA,CAAE,CAAC;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,CAAC,MAAM,KAAI;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,KACzB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CACzC;AACD,YAAA,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC;AAC9C,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,cAAc,CAAC,KAAK,GAAG,IAAI,EAAA;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CACzD,GAAG,CAAC,CAAC,IAAI,KAAI;AACX,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB;kBACI,IAAI,CAAC;AACP,kBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CACvD;YACD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAChD,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAClD;IACH;AAEA,IAAA,gBAAgB,CACd,IAAqC,EACrC,MAA+B,EAC/B,MAAc,EAAA;AAEd,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAA,CAAE,CAAC;AACpD,QAAA,MAAM,OAAO,GACX,MAAM,KAAK;AACT,cAAE,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;AAC1D,cAAE,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACrE,QAAA,OAAO,OAAO,CAAC,IAAI,CACjB,SAAS,CAAC,CAAC,OAAO,KAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CACnD,EACD,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,KAAK;AACT,kBAAE;kBACA,yBAAyB,CAC9B;AACH,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;IAEA,gBAAgB,CAAC,KAAK,GAAG,IAAI,EAAA;AAC3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,QAAA,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAC3D,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,CAAC,IAAI,KAAI;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB;kBACI,IAAI,CAAC;AACP,kBAAE,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CACvD;YACD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YAChD,IAAI,CAAC,+BAA+B,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;AACpE,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CACpD;IACH;AAEA,IAAA,kBAAkB,CAChB,oBAA4B,EAAA;QAE5B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,oBAAoB,CAAA,CAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;aACT,kBAAkB,CAAC,oBAAoB;AACvC,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD;AAEA,IAAA,kBAAkB,CAChB,IAA2B,EAC3B,MAAgC,EAChC,MAAc,EAAA;QAEd,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACpE;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,oBAAoB,CAAA,CAAE,CAAC;AAClE,QAAA,MAAM,OAAO,GAAiC;YAC5C,MAAM;YACN,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC;AACD,QAAA,MAAM,SAAS,GACb,MAAM,KAAK;AACT,cAAE,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO;AAChE,cAAE,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC;AAC1E,QAAA,OAAO,SAAS,CAAC,IAAI,CACnB,SAAS,CAAC,CAAC,OAAO,KAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CACrD,EACD,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,KAAK,QAAQ,GAAG,mBAAmB,GAAG,uBAAuB,CACpE;AACH,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;AAEA,IAAA,oBAAoB,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAC5C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAC7C,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC,CACpD,EACD,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,EACrD,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAC/C;IACH;AAEA,IAAA,aAAa,CACX,GAA8B,EAAA;QAE9B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI;IAC1E;AAEA,IAAA,YAAY,CAAC,IAA+B,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC;AACzE,QAAA,MAAM,GAAG,GAAG,CAAA,qBAAA,EAAwB,IAAI,EAAE;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;QAChD,IAAI,UAAU,KAAK,GAAG;AAAE,YAAA,OAAO,UAAU;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AACzE,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AAEhE,QAAA,MAAM,SAAS,GAAG,CAAA,6BAAA,EAAgC,QAAQ,CAAC,cAAc,EAAE;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC;AAClD,QAAA,OAAO,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,IAAI,GAAG;IAC5D;AAEA,IAAA,aAAa,CAAC,KAAc,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;QAC7C,OAAO,OAAO,EAAE;AACd,cAAE,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAA,EAAA,EAAK,OAAO,CAAC,aAAa,CAAA,CAAA;cAC/F,IAAI;IACV;AAEA,IAAA,WAAW,CAAC,KAAc,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QACzB,QACE,OAAO,CAAC,MAAM;AACd,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;AAC7D,kBAAE,cAAc;AAClB,YAAA,IAAI;IAER;AAEA,IAAA,SAAS,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7C;IAEA,kCAAkC,GAAA;QAChC,IAAI,OAAO,cAAc,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI;QACtD,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,iCAAiC,CAAC;AACpE,QAAA,cAAc,CAAC,UAAU,CAAC,iCAAiC,CAAC;AAC5D,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,iBAAiB,CAAC,EAAU,EAAA;AAClC,QAAA,OAAO,QAAQ,CAAC;YACd,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;AACnC,YAAA,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;AACtC,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;AAC7B,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAI;AACvC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACzB,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAC9B;IACH;AAEQ,IAAA,+BAA+B,CAAC,EAAU,EAAA;QAChD,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE;AAC3C,QAAA,cAAc,CAAC,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC;IAC/D;AAEQ,IAAA,WAAW,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC,CAAC;IACvE;uGAnbW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAublC,SAAS,cAAc,CAAC,KAAc,EAAA;AACpC,IAAA,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAA6C;AACjE,QAAA,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK;AACpC,cAAG;cACD,IAAI;IACV;IACA,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,QAAA,KAAK,KAAK,IAAI;AACd,QAAA,OAAQ,KAAuC,CAAC,IAAI,KAAK,QAAQ,EACjE;AACA,QAAA,OAAO,KAA6B;IACtC;AACA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,SAAS,CAChB,OAAY,EACZ,QAAa,EACb,GAAM,EAAA;IAEN,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACpC;AAEA,SAAS,WAAW,CAClB,OAAY,EACZ,WAAc,EACd,GAAM,EAAA;IAEN,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KACtB,IAAI,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,GAAG,IAAI,CACpD;AACH;AAEA,SAAS,iBAAiB,CACxB,OAAgC,EAChC,QAAiC,EAAA;AAEjC,IAAA,MAAM,QAAQ,GAAG,CAAC,IAA2B,KAC3C,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,MAAM;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACrE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACpC;;ACvfA,MAAM,kBAAkB,GAGpB;AACF,IAAA,UAAU,EAAE;AACV,QAAA,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;AAC5C,QAAA,oBAAoB,EAAE,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC;AAC3E,QAAA,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;AACrE,QAAA,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;AAC5C,QAAA,uBAAuB,EAAE,MAAM,CAC7B,SAAS,EACT,qCAAqC,CACtC;AACD,QAAA,yBAAyB,EAAE,MAAM,CAC/B,SAAS,EACT,wCAAwC,CACzC;AACD,QAAA,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;AAClD,QAAA,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC;AACjD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;AAC/C,QAAA,yBAAyB,EAAE,MAAM,CAC/B,SAAS,EACT,qCAAqC,CACtC;AACD,QAAA,yCAAyC,EAAE,MAAM,CAC/C,SAAS,EACT,+BAA+B,CAChC;AACD,QAAA,4BAA4B,EAAE,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC;AACtE,QAAA,qBAAqB,EAAE,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC3D,QAAA,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC7C,QAAA,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAC5D,QAAA,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;AAC/C,QAAA,cAAc,EAAE,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAC5D,QAAA,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC;AAC9D,QAAA,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;AACzD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;AAC3C,QAAA,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;AAC7D,QAAA,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;AAC/C,QAAA,yBAAyB,EAAE,MAAM,CAC/B,SAAS,EACT,iCAAiC,CAClC;AACD,QAAA,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;AACvD,QAAA,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC;AACzC,QAAA,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC;AACzC,QAAA,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC7C,QAAA,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;AAC7C,QAAA,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;AAC/C,QAAA,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC;AAC/C,QAAA,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC;AACpE,QAAA,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC;AACpE,QAAA,yBAAyB,EAAE,MAAM,CAC/B,SAAS,EACT,iCAAiC,CAClC;AACD,QAAA,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAC/D,QAAA,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,0BAA0B,CAAC;AACjE,QAAA,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC;AACnD,QAAA,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,wBAAwB,CAAC;AAC9D,KAAA;CACF;MASY,mBAAmB,CAAA;AACrB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAU;AAChC,IAAA,IAAI,GAAG,KAAK,CAA0B,SAAS,2EAAC;AAExC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACpC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACtE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAa,MAAK;QACxD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,2BAA2B,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAChE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAC9B;AACD,YAAA,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;SAClC;AACH,IAAA,CAAC,iFAAC;uGAnBS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJpB,CAAA,0CAAA,CAA4C,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD5C,YAAY,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;oBACpC,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE,CAAA,0CAAA,CAA4C;AACtD,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;oBAC9B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;AAuBK,SAAU,yBAAyB,CACvC,IAA6B,EAC7B,SAAkC,EAAA;IAElC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK;QAClE,GAAG;AACH,QAAA;YACE,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,OAAO,EAAE,SAAS,CAChB,CAAA,sBAAA,EAAyB,UAAU,CAAC,cAAc,EAAE,CACrD;AACF,SAAA;AACF,KAAA,CAAC,CACH;AACH;AAEA,SAAS,2BAA2B,CAClC,IAA6B,EAC7B,KAAa,EACb,SAAkC,EAAA;IAElC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAClD,OAAO;AACL,QAAA,GAAG,EAAE,KAAK;AACV,QAAA,OAAO,EAAE;cACL,SAAS,CAAC,CAAA,sBAAA,EAAyB,UAAU,CAAC,cAAc,EAAE;AAChE,cAAE,KAAK;AACT,QAAA,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,SAAS;KACtC;AACH;AAEA,SAAS,MAAM,CACb,KAAa,EACb,cAAsB,EAAA;AAEtB,IAAA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;AAClC;;MCnIa,yBAAyB,CAAA;AAC3B,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAU;AACnC,IAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAAU;AACtC,IAAA,uBAAuB,GAAG,KAAK,CAAC,KAAK,8FAAC;AACtC,IAAA,YAAY,GAAG,KAAK,CAAgB,IAAI,mFAAC;AAEjC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACpB,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE;AAC9C,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7D,KAAA,CAAC;AACiB,IAAA,mBAAmB,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE;AAC9D,QAAA,WAAW,EAAE,IAAI;AAClB,KAAA,CAAC;IAEQ,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AAC3B,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACb,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACxC,YAAA,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;AAC5B,SAAA,CAAC;IACpC;IAEU,UAAU,GAAA;AAClB,QAAA,QACE,IAAI,CAAC,MAAM,CAAC,KAAK;AACjB,aAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE;AAC9B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;IAE7C;uGApCW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BtC,i8CAiDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/BI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,cAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKF,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAZrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,OAAA,EAClC;wBACP,mBAAmB;wBACnB,kBAAkB;wBAClB,MAAM;wBACN,aAAa;wBACb,WAAW;qBACZ,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,i8CAAA,EAAA;;;MEEpC,mBAAmB,CAAA;AACrB,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAwB;AAExC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE7C,SAAS,GAAA;QACjB,OAAO;YACL,SAAS;YACT,gBAAgB;YAChB,UAAU;YACV,iBAAiB;YACjB,cAAc;YACd,gBAAgB;SACjB,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;IACnC;AAEU,IAAA,aAAa,CAAC,WAAsC,EAAA;AAC5D,QAAA,QACE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,WAAW,IAAI,WAAW,IAAI,GAAG;IAE7E;IAEU,MAAM,GAAA;AACd,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,yBAAyB,EAAE,QAAQ,EAAE;AACvE,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAChC,YAAA,UAAU,EAAE,yBAAyB;AACrC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;gBACX,QAAQ,EAAE,OAAO,CAAC,EAAE;AACpB,gBAAA,WAAW,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM;AAC7C,sBAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B;AACrC,sBAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC5B,gBAAA,uBAAuB,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5D,gBAAA,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACvC,aAAA;AACF,SAAA,CAAC;AACF,QAAA,MAAM,CAAC;AACJ,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,QAA+B,KAAI;AAC7C,YAAA,IAAI,CAAC,QAAQ;gBAAE;AACf,YAAA,IAAI,CAAC;iBACF,aAAa,CAAC,OAAO,EAAE;gBACtB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;gBACjD,MAAM,EAAE,QAAQ,CAAC,MAAM;aACxB;AACA,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AAChD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGA/DW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BhC,0uLA8IA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvHsB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA/D,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,EAAA,eAAA,EAEzD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0uLAAA,EAAA;;AAoEjD,SAAS,mBAAmB,CAAC,MAAc,EAAA;AACzC,IAAA,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,gBAAgB;AAC7D;;MEtDa,qBAAqB,CAAA;AACf,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpC,IAAA,MAAM,GAAG,IAAI,WAAW,CAAgB,IAAI,CAAC;IAC/C,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACtE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;AAEiB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QAC/C,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,MAAM,SAAS,GAAG,yBAAyB,CACzC,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C;QACD,OAAO;AACL,YAAA,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YAC9C,GAAG,+BAA+B,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;gBACjD,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,KAAK;gBACzC,KAAK;AACN,aAAA,CAAC,CAAC;SACJ;AACH,IAAA,CAAC,oFAAC;AACiB,IAAA,OAAO,GAAG,QAAQ,CAAc,MAAK;QACtD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC/B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,yBAAyB,CAClC,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C;AACF,aAAA;AACD,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE;AACzD,YAAA,EAAE,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,EAAE;AACvE,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAChC,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;SACxE;AACH,IAAA,CAAC,8EAAC;AACiB,IAAA,OAAO,GAAG,QAAQ,CAAgB,MAAK;QACxD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;gBAC7B,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAA2B,CAAC;AAC/D,aAAA;SACF;AACH,IAAA,CAAC,8EAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;IAEU,WAAW,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;IAEU,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAClB;AAEU,IAAA,WAAW,CAAC,OAA6B,EAAA;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,QAAQ,EAAE;AAC9D,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACjC,YAAA,UAAU,EAAE,4CAA4C;AACxD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE,OAAO,EAAE;AACzB,SAAA,CAAC;AACF,QAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAA6B,KAAI;AACpE,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,IAAI,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;AACnE,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGA3FW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzClC,g8DA6DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9BI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,UAAU,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,WAAW,qjBACX,KAAK,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKI,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B;wBACP,mBAAmB;wBACnB,kBAAkB;wBAClB,MAAM;wBACN,UAAU;wBACV,WAAW;wBACX,KAAK;qBACN,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g8DAAA,EAAA;;;MEJpC,yBAAyB,CAAA;AACnB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IACtC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACtE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;IACiB,IAAI,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACxC,QAAA,GAAG,IAAI;AACP,QAAA,aAAa,EAAE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,MAAM;AACvD,QAAA,iBAAiB,EAAEA,oBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AACxD,QAAA,0BAA0B,EAAEC,kBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACvE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;KACrD,CAAC,CAAC,2EACJ;AACkB,IAAA,OAAO,GAAG,QAAQ,CAAc,MAAK;QACtD,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,MAAM,SAAS,GAAG,yBAAyB,CACzC,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C;QACD,OAAO;AACL,YAAA,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE;AAC5D,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACjC,gBAAA,IAAI,EAAE,QAAQ;gBACd,SAAS;AACV,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAChC,gBAAA,IAAI,EAAE,QAAQ;gBACd,SAAS;AACV,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACzB,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC7C,YAAA;AACE,gBAAA,GAAG,EAAE,4BAA4B;AACjC,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACvC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,MAAM,EAAE,IAAI;AACb,aAAA;SACF;AACH,IAAA,CAAC,8EAAC;AACiB,IAAA,OAAO,GAAG,QAAQ,CAAgB,MAAK;QACxD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvB,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAI;oBACd,MAAM,IAAI,GAAG,GAA4B;oBACzC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB;gBACtD,CAAC;gBACD,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAA4B,CAAC;AAC3D,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvB,gBAAA,MAAM,EAAE,CAAC,GAAG,KACV,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;oBAClC,CAAE,GAA6B,CAAC,SAAS;oBACzC,CAAE,GAA6B,CAAC,oBAAoB;oBACpD,CAAE,GAA6B,CAAC,aAAa;AAC/C,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAA4B,EAAE,QAAQ,CAAC;AACrE,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;AAC5B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,MAAM,EAAE,CAAC,GAAG,KACV,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;oBAClC,CAAE,GAA6B,CAAC,oBAAoB;oBACpD,CAAE,GAA6B,CAAC,aAAa;AAC/C,gBAAA,MAAM,EAAE,CAAC,GAAG,KACV,IAAI,CAAC,MAAM,CAAC,GAA4B,EAAE,aAAa,CAAC;AAC3D,aAAA;SACF;AACH,IAAA,CAAC,8EAAC;IAEF,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D;AAEU,IAAA,MAAM,CAAC,IAA2B,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,oBAAoB;YAAE;QAChC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC/C,gBAAA,MAAM,CAAC,IAAI,GAAG,GAAG;AACjB,gBAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;AACnC,gBAAA,MAAM,CAAC,GAAG,GAAG,UAAU;gBACvB,MAAM,CAAC,KAAK,EAAE;AACd,gBAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;YAC1B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;IAEU,MAAM,CACd,IAA2B,EAC3B,MAAgC,EAAA;QAEhC,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,yBAAyB,EAAE,QAAQ,EAAE;AACvE,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CACZ,MAAM,KAAK,QAAQ,GAAG,iBAAiB,GAAG,sBAAsB,CACjE;AACD,YAAA,UAAU,EAAE,yBAAyB;AACrC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI,CAAC,oBAAoB;AACnC,gBAAA,WAAW,EAAE,IAAI,CAAC,CAAC,CACjB,MAAM,KAAK;AACT,sBAAE;sBACA,8BAA8B,CACnC;AACD,gBAAA,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7B,aAAA;AACF,SAAA,CAAC;AACF,QAAA,MAAM,CAAC;AACJ,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,QAA+B,KAAI;AAC7C,YAAA,IAAI,CAAC,QAAQ;gBAAE;AACf,YAAA,IAAI,CAAC;iBACF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM;AAChD,iBAAA,SAAS,CAAC;AACT,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC5B,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjB,CAAC;AACF,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEU,cAAc,GAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACxC,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC;AAC3C,YAAA,MAAM,EAAE,MACN,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AAC9C,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;aAC/C,CAAC;AACL,SAAA,CAAC;IACJ;IAEU,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAClB;AAEQ,IAAA,IAAI,CAAC,KAAc,EAAA;QACzB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC5C,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGAzKW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCtC,s1EAsEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvCY,kBAAkB,gMAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI5C,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,OAAA,EAClC,CAAC,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAA,eAAA,EAEvC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,s1EAAA,EAAA;;AA8KjD,SAASA,kBAAgB,CAAC,KAAoB,EAAA;IAC5C,OAAO;AACL,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,KAAK,IAAI,GAAG;AACnB,QAAA,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAClC;AACH;AAEA,SAASD,oBAAkB,CAAC,KAAa,EAAA;AACvC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,SAAS,EAAE,GAAG;AACtB,SAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,SAAA,IAAI;AACJ,SAAA,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE;AACpD,SAAA,OAAO,CAAC,WAAW,EAAE,MAAM;AAC3B,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK;AACzB,SAAA,OAAO,CAAC,eAAe,EAAE,QAAQ;AACjC,SAAA,OAAO,CAAC,WAAW,EAAE,MAAM;AAC3B,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AAC/B;;MEnMa,uBAAuB,CAAA;AACjB,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IACtC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACtE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;IACiB,IAAI,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AACtC,QAAA,GAAG,IAAI;AACP,QAAA,eAAe,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;QACjD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;KACrD,CAAC,CAAC,2EACJ;AACkB,IAAA,OAAO,GAAG,QAAQ,CAAc,MAAK;QACtD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AAC3B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,MAAM,EAAE,IAAI;AACb,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,wBAAwB;AAC7B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;AACxC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,yBAAyB,CAClC,SAAS,EACT,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C;AACF,aAAA;AACD,YAAA,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;AAC7C,YAAA;AACE,gBAAA,GAAG,EAAE,kBAAkB;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACzB,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;SACF;AACH,IAAA,CAAC,8EAAC;AACiB,IAAA,OAAO,GAAG,QAAQ,CAAgB,MAAK;QACxD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACtB,gBAAA,MAAM,EAAE,CAAC,GAAG,KACV,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;AACjC,oBAAA,GAAuC,CAAC,sBAAsB;wBAC7D,yBAAyB;AAC7B,gBAAA,MAAM,EAAE,CAAC,GAAG,KACV,IAAI,CAAC,MAAM,CAAC,GAAsC,EAAE,OAAO,CAAC;AAC/D,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;AAC5B,gBAAA,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;AAChD,gBAAA,MAAM,EAAE,CAAC,GAAG,KACV,IAAI,CAAC,MAAM,CAAC,GAAsC,EAAE,aAAa,CAAC;AACrE,aAAA;SACF;AACH,IAAA,CAAC,8EAAC;IAEF,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D;IAEU,MAAM,CACd,IAAqC,EACrC,MAA+B,EAAA;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,yBAAyB,EAAE,QAAQ,EAAE;AACvE,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CACZ,MAAM,KAAK,OAAO,GAAG,kBAAkB,GAAG,wBAAwB,CACnE;AACD,YAAA,UAAU,EAAE,yBAAyB;AACrC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;gBACX,QAAQ,EAAE,IAAI,CAAC,MAAM;AACrB,gBAAA,WAAW,EAAE,IAAI,CAAC,CAAC,CACjB,MAAM,KAAK;AACT,sBAAE;sBACA,gCAAgC,CACrC;AACD,gBAAA,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7B,aAAA;AACF,SAAA,CAAC;AACF,QAAA,MAAM,CAAC;AACJ,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,QAA+B,KAAI;AAC7C,YAAA,IAAI,CAAC,QAAQ;gBAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AACpE,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACN;IAEU,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAClB;AAEQ,IAAA,IAAI,CAAC,KAAc,EAAA;QACzB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAC1C,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGA/GW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjCpC,ojDAgDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnBY,kBAAkB,gMAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI5C,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,EAAA,OAAA,EAC/B,CAAC,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAA,eAAA,EAEvC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ojDAAA,EAAA;;AAoHjD,SAAS,gBAAgB,CAAC,KAAoB,EAAA;IAC5C,OAAO;AACL,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,KAAK,IAAI,GAAG;AACnB,QAAA,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KAClC;AACH;;MEvIa,qBAAqB,CAAA;AACb,IAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;AAEzC,IAAA,gBAAgB,CAAC,KAAY,EAAA;QACrC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAE,KAAK,CAAC,aAAoC,CAAC,IAAI,CAAC;IAC7E;uGALW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBlC,m4CAoCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1BI,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,qBAAqB,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,uBAAuB,EAAA,QAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,yBAAyB,EAAA,QAAA,EAAA,iCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKhB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B;wBACP,kBAAkB;wBAClB,IAAI;wBACJ,qBAAqB;wBACrB,uBAAuB;wBACvB,yBAAyB;qBAC1B,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,m4CAAA,EAAA;;;ME+BpC,yBAAyB,CAAA;AAC3B,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAAU;AACvC,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,oFAAU;AAE/B,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC9B,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpC,IAAA,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,oFAAC;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,8EAAC;AACvB,IAAA,MAAM,GAAG,MAAM,CAAyB,IAAI,6EAAC;IACxD,SAAS,GAAG,CAAC;IAEF,IAAI,GAAG,IAAI,WAAW,CACvC;AACE,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,2BAA2B;AACpC,QAAA,IAAI,EAAE,iDAAiD;AACvD,QAAA,MAAM,EAAE,KAAK;AACd,KAAA,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB;IACgB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC9D,QAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AAC/B,KAAA,CAAC;IACiB,SAAS,GAAG,QAAQ,CACrC,MACE,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC7B,QAAA,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAC9B,QAAA,CAAC,IAAI,CAAC,MAAM,EAAE,gFACjB;AAEkB,IAAA,UAAU,GAAG,QAAQ,CAAoB,OAAO;AACjE,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;AACtB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,mBAAmB,CAAC;AACtB,wBAAA,GAAG,EAAE,YAAY;AACjB,wBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAChC,wBAAA,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;AAClD,wBAAA,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC;AACpC,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,IAAI,EAAE,CAAC;AACP,wBAAA,UAAU,EAAE;4BACV,eAAe,CAAC,QAAQ,EAAE;AAC1B,4BAAA,eAAe,CAAC,MAAM,CACpB,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,CAAC,EACjC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAClC;AACF,yBAAA;qBACF,CAAC;AACF,oBAAA,IAAI,eAAe,CAAC;AAClB,wBAAA,GAAG,EAAE,SAAS;AACd,wBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;AAC7B,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,UAAU,EAAE;4BACV,eAAe,CAAC,QAAQ,EAAE;AAC1B,4BAAA,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC;AAC9B,4BAAA,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC;AACxC,yBAAA;qBACF,CAAC;AACF,oBAAA,IAAI,mBAAmB,CAAC;AACtB,wBAAA,GAAG,EAAE,MAAM;AACX,wBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AAC1B,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,IAAI,EAAE,CAAC;wBACP,UAAU,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;qBACnD,CAAC;AACF,oBAAA,IAAI,iBAAiB,CAAC;AACpB,wBAAA,GAAG,EAAE,QAAQ;AACb,wBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AAC1B,wBAAA,OAAO,EAAE,EAAE;qBACZ,CAAC;AACH,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA,CAAC,iFAAC;IAEO,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC5B;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrC,QAAA,IAAI,CAAC;AACF,aAAA,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACvC,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;AACnC,YAAA,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC;YAC7C,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;AACpC,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB;AACA,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAC1B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,IACE,kBAAkB,CAAC,KAAK,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,aAAa,EAChD;oBACA,IAAI,CAAC,YAAY,EAAE;oBACnB;gBACF;AACA,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YAC9B,CAAC;AACF,SAAA,CAAC;IACN;IAEU,QAAQ,GAAA;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE;AACpB,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;IAClC;AAEQ,IAAA,oBAAoB,CAAC,QAAiB,EAAA;AAC5C,QAAA,IAAI,CAAC;aACF,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE;AAChE,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,MAAM,KAAI;AACf,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBACvB;gBACF;gBAEA,IAAI,QAAQ,IAAI,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;oBAC1D,IAAI,CAAC,YAAY,EAAE;gBACrB;qBAAO;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBACzB;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,aAAa,EAAE;oBAChE,IAAI,CAAC,YAAY,EAAE;oBACnB;gBACF;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YAC9B,CAAC;AACF,SAAA,CAAC;IACN;IAEQ,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;QAClB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,YAAY,GAAA;QAClB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9C,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB;QACF;QAEA,KAAK,CAAC,KAAK;AACR,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACrD;IAEU,KAAK,GAAA;QACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC/B;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGAjLW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChDtC,6qFAgFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzCI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,mBAAmB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKV,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAZrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,OAAA,EAClC;wBACP,mBAAmB;wBACnB,kBAAkB;wBAClB,WAAW;wBACX,MAAM;wBACN,mBAAmB;qBACpB,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6qFAAA,EAAA;;AAsLjD,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU;AAE1E,SAAS,qBAAqB,CAAC,KAAa,EAAA;AAC1C,IAAA,OAAO,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC1E;AAEA,SAAS,eAAe,CAAC,KAAoB,EAAA;IAC3C,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CACL,CAAC,KAAK,IAAI,EAAE;SACT,KAAK,CAAC,SAAS;SACf,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AACzB,SAAA,MAAM,CAAC,OAAO,CAAC,CACnB,CACF;AACH;AAEA,SAAS,eAAe,CAAC,KAAc,EAAA;IACrC,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACvD,IAAA,QACE,UAAU,CAAC,MAAM,IAAI,CAAC;QACtB,UAAU,CAAC,MAAM,IAAI,GAAG;QACxB,UAAU,CAAC,KAAK,CACd,CAAC,SAAS,KACR,SAAS,CAAC,MAAM,IAAI,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1E;AAEL;AAEA,SAAS,kBAAkB,CAAC,KAAc,EAAA;IACxC,QACE,KAAK,YAAY,iBAAiB;AAClC,SAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;AAExE;AAEA,SAAS,QAAQ,GAAA;IACf,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM,EAAE;AAC3D,QAAA,OAAO,MAAM,CAAC,UAAU,EAAE;IAC5B;IACA,OAAO,sCAAsC,CAAC,OAAO,CACnD,OAAO,EACP,CAAC,SAAS,KAAI;AACZ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7C,QAAA,MAAM,KAAK,GAAG,SAAS,KAAK,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG;AAC/D,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3B,IAAA,CAAC,CACF;AACH;;AEjQM,SAAU,2BAA2B,CACzC,QAAoD,EACpD,kBAA6C,EAAA;AAE7C,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACpC,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAC3B,CAAC,KAAK,KACJ,KAAK,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;QACtC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CACzD;AACH;SAEgB,4BAA4B,CAC1C,QAAoD,EACpD,kBAA6C,EAC7C,kBAAkC,EAAA;AAElC,IAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,kBAAkB,EAAE;AACpC,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,MAAM,KAAI;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IACE,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;YACrC,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACxD;AACA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,QACE,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM;aAClC,CAAC,CAAC,kBAAkB;gBACnB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAE9D,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,yBAAyB,CAAC,KAAa,EAAA;AACrD,IAAA,OAAO;SACJ,KAAK,CAAC,GAAG;SACT,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;SACzB,MAAM,CAAC,OAAO,CAAC;AACpB;AAEM,SAAU,uBAAuB,CAAC,KAAa,EAAA;IACnD,OAAO,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE;AAChC;AAEM,SAAU,6BAA6B,CAAC,KAAa,EAAA;IACzD,OAAO,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE;AACtC;AAEM,SAAU,2BAA2B,CAAC,KAAa,EAAA;IACvD,OAAO,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAE;AACpC;AAEM,SAAU,yBAAyB,CAAC,KAAa,EAAA;IACrD,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAE;AAClC;AAEM,SAAU,6BAA6B,CAAC,KAAa,EAAA;IACzD,OAAO,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE;AACtC;SAEgB,sBAAsB,CACpC,KAAiC,EACjC,QAAiC,EACjC,wBAAiC,EAAA;IAEjC,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACtD,MAAM,mBAAmB,GAA2B,EAAE;IACtD,MAAM,WAAW,GAA8B,EAAE;IAEjD,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACvC,QAAA,IACE,KAAK,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;YACpC,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EACzC;YACA;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,MAAM,SAAS,GAAG,KAAK,CACrB,6BAA6B,CAAC,KAAK,CAAC,CACF;AAEpC,YAAA,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;gBACzC;YACF;YAEA,MAAM,WAAW,IAAI,KAAK,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAC5D,gBAAA,iBAAiB,CAA+B;YAElD,WAAW,CAAC,IAAI,CAAC;gBACf,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,SAAS;gBACT,WAAW;AACX,gBAAA,KAAK,EACH,SAAS,KAAK,SAAS,IAAI,WAAW,KAAK;sBACvC,eAAe,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AACzD,sBAAE,IAAI;AACV,gBAAA,iBAAiB,EACf,SAAS,KAAK,SAAS,IAAI,WAAW,KAAK;sBACvC,eAAe,CAAC,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;AAC7D,sBAAE,IAAI;AACX,aAAA,CAAC;YACF;QACF;QAEA,MAAM,UAAU,GAAG,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACxD,QAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,EAAE;YACxE;QACF;AAEA,QAAA,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5B,YAAA,OAAO,UAAU,KAAK,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7E,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,OAAO,GAAiC;AAC5C,QAAA,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QACjC,WAAW,EAAE,QAAQ,CAAC,GAAG;AACzB,QAAA,kBAAkB,EAAE,IAAI;AACxB,QAAA,aAAa,EAAE,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC;AACnD,QAAA,iBAAiB,EAAE,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC3D,mBAAmB;QACnB,WAAW;KACZ;AAED,IAAA,OAAO;UACH,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,wBAAwB;UACxD,OAAO;AACb;AAEA,SAAS,eAAe,CAAC,KAAc,EAAA;IACrC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;AACnC;AAEA,SAAS,eAAe,CAAC,KAAc,EAAA;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;IAC7C,OAAO,UAAU,IAAI,IAAI;AAC3B;;MC/Ga,qBAAqB,CAAA;AACvB,IAAA,kBAAkB,GAAG,KAAK,CAAgB,IAAI,yFAAC;AAEvC,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEpC,IAAA,YAAY,GAAG,MAAM,CAAgB,IAAI,mFAAC;AAC1C,IAAA,eAAe,GAAG,MAAM,CACzC,IAAI,sFACL;AACkB,IAAA,aAAa,GAAG,MAAM,CAAC,IAAI,oFAAC;AAC5B,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,qFAAC;AAC1B,IAAA,SAAS,GAC1B,MAAM,CAA6B,gBAAgB,EAAE,gFAAC;AACrC,IAAA,IAAI,GAAG,IAAI,WAAW,CACvC,gBAAgB,EAAE,EAClB,EAAE,WAAW,EAAE,IAAI,EAAE,CACtB;IACgB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC9D,QAAA,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AAC/B,KAAA,CAAC;IACM,mBAAmB,GAAkB,IAAI;IACzC,0BAA0B,GAAkB,IAAI;IAChD,kBAAkB,GAAG,EAAE;AAEZ,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,6EAAC;IAC9C,gBAAgB,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,uFACxD;AACkB,IAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,kBAAkB,mFAC1C;AACkB,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAC7C,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,uFAC1E;IACkB,OAAO,GAAG,QAAQ,CACnC,MACE,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;AAC7B,QAAA,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,8EACjC;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAoB,OAAO;AACjE,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC;AAC9B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAChC,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC;AACrC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,MAAM,EAAE,IAAI,CAAC,wBAAwB,EAAE;AACxC,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACnC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACrC,aAAA;AACF,SAAA;AACF,KAAA,CAAC,iFAAC;AAEH,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACpE,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC7B,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;AACvC,cAAE,EAAE,CAAC,SAAS;AACd,cAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;QACxD;AACG,aAAA,IAAI,CACH,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EACjE,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAE9C,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,OAAsC,KAAI;AAC/C,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxB,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAc,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AACxD,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEU,IAAI,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC5B;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,QAAQ;YAAE;AAEf,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;QAC9B,MAAM,OAAO,GAAG,sBAAsB,CACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EACvB,QAAQ,EACR,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,gBAAgB,CACpD;QACD,MAAM,SAAS,GAAG;cACd,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAC1B,EAAE,EACF,OAAuC;cAEzC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAEzC,QAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9C,SAAA,CAAC;IACJ;IAEU,MAAM,GAAA;QACd,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;AAEQ,IAAA,QAAQ,CAAC,OAAsC,EAAA;QACrD,MAAM,QAAQ,GAAG;AACf,cAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW;AAC1D,eAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACxC,MAAM,IAAI,GAAG;AACX,cAAE,OAAO,CAAC,UAAU,CAAC;AACrB,eAAG,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;AACnD,QAAA,MAAM,KAAK,GAA+B;AACxC,YAAA,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,IAAI,IAAI;AACtC,YAAA,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,IAAI;AAClC,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,aAAa,EAAE,OAAO,EAAE,UAAU,CAAC,aAAa,IAAI,IAAI;AACxD,YAAA,iBAAiB,EAAE,OAAO,EAAE,UAAU,CAAC,iBAAiB,IAAI,IAAI;SACjE;QAED,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;gBAAE;AAChC,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,MAAM,MAAM,GAAG,OAAO,EAAE,WAAW,CAAC,IAAI,CACtC,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAC7C;AACD,gBAAA,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAAG;AAC5C,sBAAE;sBACA,SAAS;AACb,gBAAA,KAAK,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,EAAE,WAAW,KAAK;AACtB,0BAAE;0BACA,iBAAiB;gBACvB,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;gBAC9C,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;gBAClD;YACF;YAEA,MAAM,QAAQ,GACZ,OAAO,EAAE,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClD,KAAK,CAAC,YAAY;AACpB,YAAA,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,CACxD,KAAK,EACL,QAAQ,CACT;AACH,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,GAAG,IAAI,IAAI;AAChD,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC;AACrE,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,GAAG,CAAC,CAAC;IAC5D;AAEQ,IAAA,eAAe,CAAC,KAAiC,EAAA;AACvD,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC;QAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,mBAAmB;AACtE,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,kBAAkB;AACnC,QAAA,IACE,QAAQ;AACR,YAAA,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAC/D;YACA,IAAI,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI;QACrD;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,0BAA0B;AAE5D,QAAA,IAAI,eAAe,IAAI,WAAW,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;YAC7D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,GAAG,IAAI,IAAI;AAChD,YAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC/C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC;AACrE,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,GAAG,CAAC,CAAC;YAC1D;QACF;QAEA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC7D,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,kBAAkB,EAAE;AACzC,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,GAAG,CAAC,CAAC;QAC5D;IACF;AAEQ,IAAA,mBAAmB,CACzB,KAAiC,EACjC,QAAwC,EACxC,IAAmB,EAAA;AAEnB,QAAA,MAAM,KAAK,GAA+B;YACxC,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,YAAA,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,IAAI;AAClC,YAAA,kBAAkB,EAAE,IAAI;YACxB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;SAC3C;QAED,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;gBAAE;AAChC,YAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS;gBACvD,KAAK,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,GAAG,iBAAiB;gBAC7D,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;gBAC9C,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;YACpD;iBAAO;AACL,gBAAA,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,GAAG,kBAAkB,CACxD,KAAK,EACL,KAAK,CAAC,YAAY,CACnB;YACH;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,KAAK;IACd;IAEQ,gBAAgB,GAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,OAAO;AACL,YAAA,IAAI,eAAe,CAAC;AAClB,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAChC,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,UAAU,EAAE;oBACV,eAAe,CAAC,QAAQ,EAAE;AAC1B,oBAAA,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC;AAC/B,iBAAA;aACF,CAAC;AACF,YAAA,IAAI,iBAAiB,CAAC;AACpB,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACpC,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;oBAC9C,KAAK,EAAE,IAAI,CAAC,WAAW;oBACvB,KAAK,EAAE,IAAI,CAAC,GAAG;AAChB,iBAAA,CAAC,CAAC;AACH,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;aACzC,CAAC;AACF,YAAA,IAAI,iBAAiB,CAAC;AACpB,gBAAA,GAAG,EAAE,oBAAoB;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,gCAAgC,CAAC;AAC/C,gBAAA,OAAO,EACL,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;oBAC3C,KAAK,EAAE,IAAI,CAAC,WAAW;oBACvB,KAAK,EAAE,IAAI,CAAC,GAAG;iBAChB,CAAC,CAAC,IAAI,EAAE;AACX,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;aACzC,CAAC;AACF,YAAA,IAAI,eAAe,CAAC;AAClB,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;AAC1C,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,eAAe,CAAC,KAAK,EAAE,CAAC;aAClE,CAAC;AACF,YAAA,IAAI,eAAe,CAAC;AAClB,gBAAA,GAAG,EAAE,mBAAmB;AACxB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,gCAAgC,CAAC;AAC/C,gBAAA,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;aAC7C,CAAC;SACH;IACH;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;QACxB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC9C,YAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;AAC/D,gBAAA,OAAO,EAAE;YACX;YACA,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,CAAC,CAAC;IACJ;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,EAAE;QACxB,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC9C,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE;AAChE,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,MAAM,YAAY,GAAG,6BAA6B,CAAC,KAAK,CAAC;AACzD,YAAA,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,CAAC;YACrD,MAAM,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC;AAC/C,iBAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS,CAAC,CAA6B;YACtE,MAAM,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC;AAC/C,gBAAA,iBAAiB,CAA+B;AAClD,YAAA,MAAM,gBAAgB,GAAG;AACvB,gBAAA,IAAI,IAAI,CAAC,MAAM;AACb,sBAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;sBACvD,EAAE,CAAC;AACP,gBAAA,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;gBACzD,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM;AAChC,sBAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;sBACtD,EAAE,CAAC;aACR;AACD,YAAA,MAAM,MAAM,GAAsB;AAChC,gBAAA,IAAI,iBAAiB,CAAC;AACpB,oBAAA,GAAG,EAAE,YAAY;AACjB,oBAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAC,WAAW,CAAA,GAAA,EAAM,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAA,CAAE;AACjE,oBAAA,OAAO,EAAE,gBAAgB;AACzB,oBAAA,WAAW,EAAE,OAAO;AACpB,oBAAA,WAAW,EAAE,OAAO;AACpB,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;iBACzC,CAAC;aACH;YAED,IAAI,SAAS,KAAK,SAAS;AAAE,gBAAA,OAAO,MAAM;AAC1C,YAAA,MAAM,CAAC,IAAI,CACT,IAAI,sBAAsB,CAAC;AACzB,gBAAA,GAAG,EAAE,UAAU;AACf,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC;AAC1C,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC3C,wBAAA,KAAK,EAAE,iBAAiB;AACzB,qBAAA;AACD,oBAAA;AACE,wBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B,CAAC;AAC9C,wBAAA,KAAK,EAAE,oBAAoB;AAC5B,qBAAA;AACF,iBAAA;AACD,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AACzC,aAAA,CAAC,CACH;AAED,YAAA,MAAM,CAAC,IAAI,CACT,WAAW,KAAK;kBACZ,IAAI,eAAe,CAAC;AAClB,oBAAA,GAAG,EAAE,6BAA6B,CAAC,KAAK,CAAC;AACzC,oBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B,CAAC;AAC9C,oBAAA,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC;AAClD,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,UAAU,EAAE;wBACV,eAAe,CAAC,QAAQ,EAAE;AAC1B,wBAAA,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC;AAC9B,wBAAA,eAAe,CAAC,OAAO,CAAC,sCAAsC,CAAC;AAChE,qBAAA;iBACF;kBACD,IAAI,eAAe,CAAC;AAClB,oBAAA,GAAG,EAAE,yBAAyB,CAAC,KAAK,CAAC;oBACrC,KAAK,EAAE,KAAK,CAAC,WAAW;AACxB,oBAAA,SAAS,EAAE,UAAU;AACrB,oBAAA,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC;AAC/C,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,UAAU,EAAE;wBACV,eAAe,CAAC,QAAQ,EAAE;wBAC1B,IAAI,KAAK,CAAC;8BACN,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;8BAC/C,EAAE,CAAC;AACR,qBAAA;AACF,iBAAA,CAAC,CACP;AACD,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,CAAC;IACJ;IAEQ,qBAAqB,CAC3B,KAAmC,EACnC,KAAa,EAAA;AAEb,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,GAAG,EAAE,uBAAuB,CAAC,KAAK,CAAC;YACnC,KAAK,EAAE,KAAK,CAAC,WAAW;AACxB,YAAA,OAAO,EAAE,CAAC;YACV,QAAQ,EACN,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB;gBAC5C,CAAC,KAAK,CAAC,0BAA0B;AACnC,YAAA,UAAU,EAAE,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9D;AAED,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;AAChC,YAAA,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC;QACtC;AACA,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE;YAC7D,OAAO,IAAI,iBAAiB,CAAC;AAC3B,gBAAA,GAAG,MAAM;AACT,gBAAA,GAAG,EAAE,KAAK,CAAC,QAAQ,KAAK,MAAM,GAAG,CAAC,GAAG,SAAS;AAC9C,gBAAA,GAAG,EAAE,KAAK,CAAC,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS;AACnD,gBAAA,WAAW,EAAE,KAAK;AACnB,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC/B,OAAO,IAAI,iBAAiB,CAAC;AAC3B,gBAAA,GAAG,MAAM;AACT,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM;AACnD,oBAAA,KAAK,EAAE,KAAK;oBACZ,KAAK;AACN,iBAAA,CAAC,CAAC;AACH,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,OAAO;AACrB,aAAA,CAAC;QACJ;QACA,OAAO,IAAI,eAAe,CAAC;AACzB,YAAA,GAAG,MAAM;AACT,YAAA,SAAS,EAAE,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,MAAM;AACzD,SAAA,CAAC;IACJ;IAEQ,qBAAqB,CAC3B,KAAiC,EACjC,QAAwC,EAAA;QAExC,MAAM,WAAW,GAAG,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KACxD,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB;AAC5D,cAAE;AACE,gBAAA,CAAA,EAAG,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,IAClD,KAAK,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,IAAI,EAC/C,CAAA,CAAE;AACH;cACD,EAAE,CACP;QACD,OAAO,CAAA,EAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAA,CAAA,EACjE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAC5B,CAAA,CAAE;IACJ;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;QAC5C,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;YACvC,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAAE;YACrB,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;YAC9C,KAAK,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI;AACpD,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,GAAG,CAAC,CAAC;IAC5D;AAEQ,IAAA,eAAe,CAAC,KAAc,EAAA;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC5B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9B,QAAA,IAAI,EAAE,KAAK,YAAY,iBAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE;YACxE;QACF;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC;aACF,cAAc,CAAC,EAAE;AACjB,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClD,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,OAAO,KAAI;AAChB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxB,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;AACvD,SAAA,CAAC;IACN;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGA9eW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvDlC,4gFA+EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5BY,mBAAmB,0TAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI3D,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,CAAC,EAAA,eAAA,EAEtD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4gFAAA,EAAA;;AAmfjD,SAAS,gBAAgB,GAAA;IACvB,OAAO;AACL,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,kBAAkB,EAAE,IAAI;AACxB,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,iBAAiB,EAAE,IAAI;KACxB;AACH;AAEA,SAAS,YAAY,CACnB,KAAmC,EACnC,IAAmB,EAAA;IAEnB,QACE,CAAC,CAAC,IAAI;AACN,SAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC;YACrC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE/C;AAEA,SAAS,kBAAkB,CACzB,KAAmC,EACnC,KAAgC,EAAA;IAEhC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAAE,QAAA,OAAO,IAAI;AACtE,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM;AACvE,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE;AAC7D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,IAAI;IAC1D;AACA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,uBAAuB,CAC9B,KAAmC,EACnC,SAAkC,EAAA;IAElC,MAAM,UAAU,GAAsB,EAAE;IACxC,IAAI,KAAK,CAAC,QAAQ;QAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AAC/D,IAAA,IAAI,KAAK,CAAC,aAAa,EAAE;AACvB,QAAA,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACjE;AACA,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO;QAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AACxE,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE;QAC7B,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjE;AACA,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE;QACnC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/D;AACA,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE;QAC7B,UAAU,CAAC,IAAI,CACb,eAAe,CAAC,MAAM,CACpB,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,CAAC,EAC3B,SAAS,CAAC,iBAAiB,CAAC,CAC7B,CACF;IACH;AACA,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE;QAC5B,UAAU,CAAC,IAAI,CACb,eAAe,CAAC,MAAM,CACpB,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC,EAC/B,SAAS,CAAC,sBAAsB,CAAC,CAClC,CACF;IACH;AACA,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE;QACnC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/D;AACA,IAAA,OAAO,UAAU;AACnB;AAEA,SAAS,SAAS,CAAC,KAAc,EAAA;AAC/B,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;AAC5B,SAAA,IAAI;AACJ,SAAA,WAAW,EAAE;IAChB,QACE,CAAC,CAAC,IAAI;AACN,QAAA,IAAI,KAAK,WAAW;AACpB,QAAA,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,QAAA,mFAAmF,CAAC,IAAI,CACtF,IAAI,CACL;AAEL;AAEA,SAAS,aAAa,CAAC,KAAc,EAAA;AACnC,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACxC,QAAA,QACE,GAAG,CAAC,QAAQ,KAAK,QAAQ;YACzB,CAAC,GAAG,CAAC,QAAQ;YACb,CAAC,GAAG,CAAC,QAAQ;YACb,CAAC,GAAG,CAAC,IAAI;YACT,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,WAAW;IAE9C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;;MEllBa,0BAA0B,CAAA;AAC5B,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAAU;AAE/B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;AACtB,IAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IACtC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACtE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;AAEiB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,OAAO,EAAE;AACxE,QAAA,OAAO,4BAA4B,CACjC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EACzD,OAAO,CAAC,UAAU,CAAC,kBAAkB,EACrC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAC7D;AACH,IAAA,CAAC,8EAAC;AACiB,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,OAAO;AACL,cAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW;cACxD,IAAI;AACV,IAAA,CAAC,+EAAC;AACiB,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;AACvB,QAAA,QACE,IAAI,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,IAAI,CACvC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAC7D,EAAE,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,kBAAkB;AAE3D,IAAA,CAAC,8FAAC;AACiB,IAAA,mBAAmB,GAAG,QAAQ,CAE/C,MAAK;QACL,IAAI,CAAC,cAAc,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,IAAI,EAAE;AAC5C,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAC/D;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB;AACzD,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;aAClC,IAAI,CACH,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KACd,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,gBAAgB;AAC9D,aAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;aAEnE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,SAAS,KAAK,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CACjE;YACD,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,KAAK,EAAE,WAAW,IAAI,kBAAkB,CAAC,GAAG,CAAC;gBACpD,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC;aAClD;AACH,QAAA,CAAC,CAAC;AACN,IAAA,CAAC,0FAAC;AACiB,IAAA,eAAe,GAAG,QAAQ,CAC3C,MAAK;QACH,IAAI,CAAC,cAAc,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,IAAI,EAAE;QAE5C,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;YAC9C,GAAG,EAAE,UAAU,CAAC,GAAG;AACnB,YAAA,KAAK,EACH,MAAM,CAAC,IAAI,CACT,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CACpE,EAAE,WAAW,IAAI,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC;YACtD,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,WAAW,CAAC;YACjE,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;AAC9C,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,sFACF;AACkB,IAAA,eAAe,GAAG,QAAQ,CAAe,MAAK;QAC/D,IAAI,CAAC,cAAc,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;QAChD,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;AAAE,YAAA,OAAO,EAAE;AAE7D,QAAA,MAAM,KAAK,GAAiB,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;YACrE,EAAE,EAAE,MAAM,CAAC,GAAG;YACd,KAAK,EAAE,MAAM,CAAC,WAAW;AACzB,YAAA,IAAI,EAAE,2BAA2B;YACjC,OAAO,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACtC,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;YAC9B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,EAAE,EAAE,UAAU;AACd,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACzB,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;AAC/B,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;YAC/B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;AAC1B,gBAAA,IAAI,EAAE,uBAAuB;AAC7B,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;AAC3B,aAAA,CAAC;QACJ;AACA,QAAA,IACE,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,OAAO;YACpC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAC3C;YACA,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,EAAE,EAAE,MAAM;AACV,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC;AACtC,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;AAC3B,aAAA,CAAC;QACJ;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AAC3B,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AAC7B,aAAA,CAAC;QACJ;AACA,QAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;YAC9B,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AAC7B,aAAA,CAAC;QACJ;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAA,KAAK,CAAC,IAAI,CACR,EAAE,EAAE,EAAE,uBAAuB,EAAE,SAAS,EAAE,IAAI,EAAE,EAChD;AACE,gBAAA,EAAE,EAAE,QAAQ;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AAC7B,aAAA,CACF;QACH;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,sFAAC;IAEF,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,EAAE;IACf;IAEU,IAAI,GAAA;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,QAAQ,EAAE;AACnE,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACnC,YAAA,UAAU,EAAE,4CAA4C;AACxD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE,kBAAkB,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE;AACzD,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAc,KAAI;AACxD,YAAA,IAAI,KAAK;gBAAE,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEU,QAAQ,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC;AAC5D,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;IAEU,IAAI,GAAA;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,yBAAyB,EAAE,QAAQ,EAAE;AACvE,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AAC5B,YAAA,UAAU,EAAE,yBAAyB;AACrC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;AACX,gBAAA,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;AACnC,gBAAA,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;AACxC,aAAA;AACF,SAAA,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7D;AAEU,IAAA,SAAS,CAAC,MAAqC,EAAA;AACvD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,KAAK,WAAW,GAAG,WAAW,GAAG,eAAe;AACvE,QAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACxE,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;IAEU,MAAM,GAAA;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxB,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACjC,YAAA,MAAM,EAAE,MACN,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC;AAC7D,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;aAC/C,CAAC;AACL,SAAA,CAAC;IACJ;IAEU,IAAI,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC;AACxD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACxB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AAC5B,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACjC,YAAA,MAAM,EAAE,MACN,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC;AAC1D,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;aAC/C,CAAC;AACL,SAAA,CAAC;IACJ;IAEU,MAAM,GAAA;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;AAChD,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAC9B,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACjC,YAAA,MAAM,EAAE,MACN,IAAI,CAAC;iBACF,gBAAgB,CACf,IAAI,CAAC,YAAY,EAAE,EACnB,OAAO,CAAC,UAAU,CAAC,gBAAgB;AAEpC,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAChC,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;aAC/C,CAAC;AACP,SAAA,CAAC;IACJ;AAEU,IAAA,SAAS,CAAC,GAAW,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC;IAC5D;IAEU,kBAAkB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,CAAC;IAChE;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;IAClB;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC;AACxD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;AAEQ,IAAA,sBAAsB,CAAC,WAAmB,EAAA;AAChD,QAAA,QAAQ,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;AACtD,YAAA,KAAK,mBAAmB;AACtB,gBAAA,OAAO,IAAI,CAAC,CAAC,CAAC,+BAA+B,CAAC;AAChD,YAAA,KAAK,gBAAgB;AACnB,gBAAA,OAAO,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC7C,YAAA;AACE,gBAAA,OAAO,kBAAkB,CAAC,WAAW,CAAC;;IAE5C;IAEQ,uBAAuB,CAC7B,KAAa,EACb,KAAoC,EAAA;AAEpC,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACxD,QAAA,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,QAAA,OAAO,KAAK,EAAE,QAAQ,KAAK,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK;IACzE;uGAzSW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzDvC,k0QA0MA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3JI,kBAAkB,gMAClB,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,UAAU,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,mBAAmB,2FANnB,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAWC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAdtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,OAAA,EAC9B;wBACP,QAAQ;wBACR,kBAAkB;wBAClB,MAAM;wBACN,IAAI;wBACJ,UAAU;wBACV,IAAI;wBACJ,mBAAmB;qBACpB,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,k0QAAA,EAAA;;AA8SjD,SAAS,kBAAkB,CAAC,KAAa,EAAA;AACvC,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,SAAS,EAAE,GAAG;AACtB,SAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,SAAA,IAAI;AACJ,SAAA,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE;AACpD,SAAA,OAAO,CAAC,WAAW,EAAE,MAAM;AAC3B,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK;AACzB,SAAA,OAAO,CAAC,eAAe,EAAE,QAAQ;AACjC,SAAA,OAAO,CAAC,WAAW,EAAE,MAAM;AAC3B,SAAA,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;AAC/B;;ME1Ua,wBAAwB,CAAA;AAClB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC/C,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IACtC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACtE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;IAEiB,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CACzD,0BAA0B,CAAC,YAAY,CACxC;IACkB,IAAI,GAAG,QAAQ,CAA4B,MAC5D,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AAC7C,QAAA,GAAG,UAAU;AACb,QAAA,aAAa,EACX,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,WAAW;AAC9D,YAAA,UAAU,CAAC,WAAW;QACxB,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;KACpE,CAAC,CAAC,2EACJ;AACkB,IAAA,OAAO,GAAG,QAAQ,CAAc,MAAK;QACtD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AAChC,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACpC,gBAAA,YAAY,EAAE;AACZ,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM;wBAClD,KAAK,EAAE,QAAQ,CAAC,WAAW;wBAC3B,KAAK,EAAE,QAAQ,CAAC,WAAW;AAC5B,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC;AAClC,gBAAA,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;AACjC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,YAAY,EAAE;AACZ,oBAAA,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;wBACxC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA,kBAAA,EAAqB,WAAW,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC;AACxD,wBAAA,KAAK,EAAE,KAAK;AACb,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACD,gBAAA,SAAS,EAAE,yBAAyB,CAClC,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAC9C;AACF,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,sBAAsB;AAC3B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC;AACvC,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,YAAY,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAClC,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,oBAAoB;AACzB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;AAC3C,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;SACF;AACH,IAAA,CAAC,8EAAC;AACiB,IAAA,UAAU,GAAG,QAAQ,CAAgB,MAAK;QAC3D,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxB,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,GAA6B,CAAC;AACjE,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;gBACrB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;gBAC/B,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAA6B,CAAC;AAC9D,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;gBACzB,MAAM,EAAE,CAAC,GAAG,KACV,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,oBAAA,CAAC,IAAI,CAAC,SAAS,CAAC,GAA6B,EAAE,UAAU,CAAC;gBAC5D,OAAO,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,UAAU;gBAC3D,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAA6B,CAAC;AAC9D,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,uBAAuB;AAC7B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC;gBAC1B,MAAM,EAAE,CAAC,GAAG,KACV,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,oBAAA,CAAC,IAAI,CAAC,SAAS,CAAC,GAA6B,EAAE,WAAW,CAAC;gBAC7D,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAA6B,CAAC;AAC9D,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACrB,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAI;oBACd,MAAM,UAAU,GAAG,GAA6B;AAChD,oBAAA,QACE,CAAC,IAAI,CAAC,SAAS,EAAE;wBACjB,UAAU,CAAC,KAAK,KAAK,OAAO;wBAC5B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAEjD,CAAC;gBACD,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,GAA6B,CAAC;AAC1D,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvB,gBAAA,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,CAAC,GAAG,KACV,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,oBAAA,CAAE,GAA8B,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACrE,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,GAA6B,CAAC;AACnE,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvB,gBAAA,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,CAAC,GAAG,KACV,CAAC,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,GAA8B,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACrD,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,GAA6B,CAAC;AACnE,aAAA;SACF;AACH,IAAA,CAAC,iFAAC;IAEQ,gBAAgB,GAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACvB;AAEU,IAAA,WAAW,CAAC,UAAkC,EAAA;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,0BAA0B,EAAE,QAAQ,EAAE;AACxE,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACpC,YAAA,UAAU,EAAE,4CAA4C;AACxD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE;AAC7C,SAAA,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC;AACtC,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,QAAQ,CAAC,UAAkC,EAAA;AACnD,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;IAChC;AAEQ,IAAA,QAAQ,CAAC,UAAkC,EAAA;QACjD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AACtD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;AAEQ,IAAA,QAAQ,CAAC,UAAkC,EAAA;QACjD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,yBAAyB,EAAE,QAAQ,EAAE;AACxD,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AAC5B,YAAA,UAAU,EAAE,yBAAyB;AACrC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;gBACX,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,cAAc,EAAE,UAAU,CAAC,IAAI;AAChC,aAAA;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,IAAI,CAAC,UAAkC,EAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AAClD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,SAAA,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,UAAkC,EAAA;AACtD,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/B,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxB,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACjC,YAAA,MAAM,EAAE,MACN,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AACpD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;aAC/C,CAAC;AACL,SAAA,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,UAAkC,EAAA;AACtD,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;AACrC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACjC,YAAA,MAAM,EAAE,MACN,IAAI,CAAC;iBACF,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,gBAAgB;AAC3D,iBAAA,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AACnE,SAAA,CAAC;IACJ;IAEQ,SAAS,GAAA;QACf,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;IAC/D;AAEQ,IAAA,UAAU,CAAC,YAA2B,EAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,QAAQ,EAAE;AACnE,YAAA,MAAM,EAAE,IAAI,CAAC,CAAC,CACZ,YAAY,GAAG,mBAAmB,GAAG,qBAAqB,CAC3D;AACD,YAAA,UAAU,EAAE,4CAA4C;AACxD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,EAAE,kBAAkB,EAAE,YAAY,EAAE;AAClD,SAAA,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAc,KAAI;AAC1C,YAAA,IAAI,CAAC,KAAK;gBAAE;AACZ,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC;AACtC,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,SAAS,CACf,UAAkC,EAClC,SAAiB,EAAA;AAEjB,QAAA,OAAO,4BAA4B,CACjC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,EACjD,UAAU,CAAC,kBAAkB,CAC9B,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC;IAC9C;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGAzPW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvCrC,g2EA0EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvCY,kBAAkB,gMAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI5C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,OAAA,EAChC,CAAC,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAA,eAAA,EAEvC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,g2EAAA,EAAA;;AA8PjD,MAAM,gBAAgB,GAAG;IACvB,OAAO;IACP,sBAAsB;IACtB,mBAAmB;IACnB,OAAO;IACP,yBAAyB;IACzB,2BAA2B;IAC3B,UAAU;IACV,SAAS;CACV;AAED,SAAS,WAAW,CAAC,KAAa,EAAA;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE;AACnE;;MEhRa,kBAAkB,CAAA;AACZ,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEtC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACtE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;AACiB,IAAA,SAAS,GAAG,MAAM,CACnC,aAAa,gFACd;IACkB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CACpD,0BAA0B,CAAC,YAAY,CACxC;AACkB,IAAA,IAAI,GAAG,QAAQ,CAAkB,MAAK;QACvD,IAAI,CAAC,cAAc,EAAE;QACrB,OAAO;AACL,YAAA,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE;AAC3D,YAAA,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;SACtD;AACH,IAAA,CAAC,2EAAC;AAEF,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACvE,IAAI,CAAC,SAAS,CAAC,GAAG,CAChB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,UAAU,GAAG,UAAU,GAAG,aAAa,CAC9D;AACH,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;QACxB,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEU,IAAA,WAAW,CAAC,KAAsB,EAAA;AAC1C,QAAA,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,UAAU;YAAE;AACrD,QAAA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC5B,UAAU,EAAE,IAAI,CAAC,KAAK;AACtB,YAAA,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,KAAK,aAAa,GAAG,IAAI,GAAG,KAAK,EAAE;AAC5D,YAAA,mBAAmB,EAAE,OAAO;AAC7B,SAAA,CAAC;IACJ;IAEU,MAAM,GAAA;QACd,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iCAAiC,CAAC,CAAC;IAChE;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAChB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK;AAC/C,cAAE;cACA,aAAa,CAClB;IACH;IAEQ,2BAA2B,GAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa;QAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI;YAAE;QAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AAC9C,QAAA,IAAI,aAAa,KAAK,WAAW,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC7B;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3B;QAEA,MAAM,mBAAmB,GACvB,IAAI,CAAC,MAAM,CAAC,kCAAkC,EAAE;QAClD,KAAK,IAAI,CAAC;aACP,QAAQ,CAAC,EAAE,EAAE;YACZ,UAAU,EAAE,IAAI,CAAC,KAAK;YACtB,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAChD,YAAA,mBAAmB,EAAE,OAAO;AAC5B,YAAA,UAAU,EAAE,IAAI;SACjB;aACA,IAAI,CAAC,MAAK;AACT,YAAA,IAAI,CAAC,mBAAmB;gBAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC;AACxD,gBAAA,IAAI,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE;AACrD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,CAAC,CAAC,GAAW,EAAA;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAC;IAC1D;uGA7FW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChC/B,4jEA2DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDpCI,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,UAAU,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,wBAAwB,EAAA,QAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,qBAAqB,EAAA,QAAA,EAAA,4BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKZ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,OAAA,EAC1B;wBACP,IAAI;wBACJ,kBAAkB;wBAClB,UAAU;wBACV,wBAAwB;wBACxB,qBAAqB;qBACtB,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4jEAAA,EAAA;;;;;"}
|