@tuki-io/tuki-widgets 0.0.219-dev.60 → 0.0.219-dev.63
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/di2mt/widgets/site-upgrade/site-upgrade.module.d.ts +9 -8
- package/di2mt/widgets/user-upgrade/user-upgrade.module.d.ts +11 -10
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +12 -11
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.module.mjs +7 -3
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.mjs +12 -11
- package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.module.mjs +7 -3
- package/esm2020/locations/src/locations.component.mjs +11 -11
- package/esm2020/locations/src/locations.module.mjs +7 -6
- package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +9 -9
- package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +17 -9
- package/esm2020/meetings/src/meetings.module.mjs +7 -6
- package/esm2020/shared/public-api.mjs +2 -1
- package/esm2020/shared/src/ui/tk-loader/tk-loader.component.mjs +34 -0
- package/esm2020/user-creation/src/user-creation.module.mjs +7 -6
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +16 -16
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +27 -10
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +11 -11
- package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +10 -10
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +11 -11
- package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +9 -9
- package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +9 -9
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +8 -7
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +12 -12
- package/esm2020/user-manage/src/user-manage.module.mjs +8 -7
- package/esm2020/users-list/src/classes/site-option.mjs +2 -0
- package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +18 -4
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +15 -15
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -5
- package/esm2020/users-list/src/users-list.component.mjs +104 -46
- package/esm2020/users-list/src/users-list.module.mjs +7 -6
- package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +7 -7
- package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +9 -9
- package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +13 -3
- package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +6 -6
- package/esm2020/workspaces/src/services/workspaces.service.mjs +3 -1
- package/esm2020/workspaces/src/types/workspace.mjs +6 -2
- package/esm2020/workspaces/src/workspaces.component.mjs +43 -9
- package/esm2020/workspaces/src/workspaces.module.mjs +7 -6
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +26 -18
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs +16 -24
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +31 -33
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs +31 -1
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +52 -43
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +43 -51
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +20 -29
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +136 -73
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +87 -43
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +26 -18
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs +16 -24
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +31 -33
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs +31 -1
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +51 -43
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +43 -51
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +20 -29
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +134 -71
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +87 -42
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/locations/src/locations.module.d.ts +2 -2
- package/meetings/src/meetings.module.d.ts +2 -2
- package/package.json +1 -1
- package/shared/public-api.d.ts +1 -0
- package/shared/src/ui/tk-loader/tk-loader.component.d.ts +15 -0
- package/user-creation/src/user-creation.module.d.ts +3 -3
- package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +2 -0
- package/user-device-manage/src/user-device-manage.module.d.ts +16 -16
- package/user-manage/src/user-manage.module.d.ts +12 -13
- package/users-list/src/classes/site-option.d.ts +4 -0
- package/users-list/src/components/table-toolbar/table-toolbar.component.d.ts +6 -1
- package/users-list/src/users-list.component.d.ts +11 -1
- package/users-list/src/users-list.module.d.ts +9 -9
- package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +1 -1
- package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +9 -1
- package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +2 -2
- package/workspaces/src/types/workspace.d.ts +5 -0
- package/workspaces/src/workspaces.component.d.ts +6 -2
- package/workspaces/src/workspaces.module.d.ts +2 -2
- package/esm2020/locations/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +0 -14
- package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +0 -14
- package/locations/src/utils/app-loader/app-loader.d.ts +0 -6
- package/meetings/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-creation/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-device-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/user-manage/src/utils/app-loader/app-loader.d.ts +0 -6
- package/users-list/src/utils/app-loader/app-loader.d.ts +0 -6
- package/workspaces/src/utils/app-loader/app-loader.d.ts +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuki-io-tuki-widgets-locations.mjs","sources":["../../../../projects/tuki/widgets/locations/src/material.module.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.html","../../../../projects/tuki/widgets/locations/src/services/api.service.ts","../../../../projects/tuki/widgets/locations/src/app.constants.ts","../../../../projects/tuki/widgets/locations/src/services/locations.service.ts","../../../../projects/tuki/widgets/locations/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/locations/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/locations/src/locations.component.ts","../../../../projects/tuki/widgets/locations/src/locations.component.html","../../../../projects/tuki/widgets/locations/src/locations.module.ts","../../../../projects/tuki/widgets/locations/public-api.ts","../../../../projects/tuki/widgets/locations/tuki-io-tuki-widgets-locations.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n imports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ],\r\n exports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ]\r\n})\r\nexport class MaterialModule { }\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\nexport interface LocationConfirmDialogData {\r\n title: string;\r\n message: string;\r\n confirmButtonText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'tk-location-confirm-dialog',\r\n templateUrl: './location-confirm-dialog.component.html',\r\n styleUrls: ['./location-confirm-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocationConfirmDialogComponent {\r\n constructor(\r\n public dialogRef: MatDialogRef<LocationConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: LocationConfirmDialogData,\r\n ) { }\r\n\r\n onClose(result: boolean): void {\r\n this.dialogRef.close(result);\r\n }\r\n}\r\n","<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class APIService {\r\n token!: string;\r\n apiUrl!: string;\r\n\r\n constructor(\r\n private httpClient: HttpClient\r\n ) { }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n put(url: string, body: any = null, params = {}): Observable<any> {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer ' + token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n}\r\n","export const API = {\r\n SITES_LOCATIONS: {\r\n // Returns every site for the customer paired with its mapped Control Hub\r\n // location (or null when the site hasn't been migrated yet) — this is the\r\n // source of truth for siteId, superseding the old LOCATIONS.GET_ALL\r\n // endpoint, which only listed already-mapped locations and exposed no siteId.\r\n GET_ALL: \"/api/webex/configuration/customers/:customerId/siteslocations\",\r\n },\r\n SITE_MIGRATION: {\r\n MIGRATE_SITE: \"/api/migration/WEBEX/sites/:siteId/migrate\",\r\n BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\r\n // Pre-existing migration batches for the customer, matched to a site by\r\n // siteId. Reachable through the same exHost/webex gateway as everything\r\n // else in this service — no separate host needed.\r\n GET_BATCH_SITES: \"/api/e2emigration/batch/:customerId/Sites\",\r\n },\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { API } from '../app.constants';\r\nimport { APIService } from './api.service';\r\nimport { Location, LocationAddress, Site, SiteLocation } from '../types/location';\r\n\r\nexport interface SiteBatchStatus {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: string;\r\n}\r\n\r\n// Minimal shape of the site-batch entries from GET_BATCH_SITES — only the\r\n// fields needed to match a batch to a site, plus its status.\r\nexport interface SiteMigrationBatch {\r\n id: number;\r\n siteId: number;\r\n status: string | null;\r\n}\r\n\r\nfunction toLocationAddress(raw: any): LocationAddress {\r\n return {\r\n address1: raw?.address1 || '',\r\n address2: raw?.address2 || '',\r\n city: raw?.city || '',\r\n state: raw?.state || '',\r\n postalCode: raw?.postalCode || '',\r\n country: raw?.country || '',\r\n countryName: raw?.countryName || raw?.country || '',\r\n };\r\n}\r\n\r\nfunction toLocation(raw: any): Location {\r\n return {\r\n id: String(raw?.id ?? ''),\r\n name: raw?.name || '',\r\n timeZone: raw?.timeZone || '',\r\n address: toLocationAddress(raw?.address),\r\n // Every location returned by this endpoint is a Webex Control Hub location.\r\n provisioningType: raw?.provisioningType || 'WEBEX',\r\n hasPendingActions: !!raw?.hasPendingActions,\r\n };\r\n}\r\n\r\nfunction toSite(raw: any): Site {\r\n return {\r\n id: Number(raw?.id),\r\n name: raw?.name || '',\r\n };\r\n}\r\n\r\nfunction toSiteLocation(raw: any): SiteLocation {\r\n return {\r\n site: toSite(raw?.site),\r\n location: raw?.location ? toLocation(raw.location) : null,\r\n };\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationsService {\r\n constructor(private apiService: APIService) { }\r\n\r\n fetchSiteLocations(customerId: number): Observable<SiteLocation[]> {\r\n const url = API.SITES_LOCATIONS.GET_ALL.replace(':customerId', String(customerId));\r\n return this.apiService.fetch(url).pipe(\r\n map((response: any) => (Array.isArray(response) ? response : []).map(toSiteLocation)),\r\n );\r\n }\r\n\r\n migrateSite(siteId: number, batchId?: number): Observable<number> {\r\n const url = API.SITE_MIGRATION.MIGRATE_SITE.replace(':siteId', String(siteId));\r\n return this.apiService.post(url, {}, batchId != null ? { batchId } : {});\r\n }\r\n\r\n getBatchSites(customerId: number): Observable<SiteMigrationBatch[]> {\r\n const url = API.SITE_MIGRATION.GET_BATCH_SITES.replace(':customerId', String(customerId));\r\n return this.apiService.fetch(url).pipe(\r\n map((response: any) => (Array.isArray(response) ? response : [])),\r\n );\r\n }\r\n\r\n getMigrationBatchStatuses(customerId: number, batchIds: number[]): Observable<SiteBatchStatus[]> {\r\n const url = API.SITE_MIGRATION.BATCH_STATUS.replace(':customerId', String(customerId));\r\n return this.apiService.post(url, batchIds);\r\n }\r\n}\r\n","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loader',\r\n templateUrl: './app-loader.component.html',\r\n styleUrls: ['./app-loader.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppLoaderComponent {\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"70\"\r\n strokeWidth=\"3\"></mat-progress-spinner>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { APIService } from './services/api.service';\r\nimport { LocationsService, SiteBatchStatus, SiteMigrationBatch } from './services/locations.service';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { LocationMigrationStatus, SiteLocation } from './types/location';\r\n\r\nconst MIGRATION_POLL_INTERVAL_MS = 10000;\r\n\r\ntype LocationsSortDirection = 'asc' | 'desc';\r\n\r\nconst PAGE_SIZE_OPTIONS = [10, 25, 50];\r\n\r\n@Component({\r\n selector: 'tk-locations',\r\n templateUrl: './locations.component.html',\r\n styleUrls: ['./locations.component.scss'],\r\n})\r\nexport class LocationsComponent implements OnInit, OnDestroy {\r\n @Input() exHost!: string;\r\n @Input() token!: string;\r\n @Input() customerId!: number;\r\n\r\n @Output() openLocation = new EventEmitter<string>();\r\n @Output() editLocation = new EventEmitter<string>();\r\n @Output() removeLocation = new EventEmitter<string>();\r\n @Output() addLocation = new EventEmitter<void>();\r\n @Output() importLocations = new EventEmitter<void>();\r\n\r\n // Every site for the customer, each paired with its mapped Control Hub\r\n // location or null — the siteslocations API returns the full, unpaged list,\r\n // so search/filter/sort/pagination below all run client-side over this.\r\n siteLocations: SiteLocation[] = [];\r\n isLoading = false;\r\n\r\n searchTerm = '';\r\n sortDirection: LocationsSortDirection = 'asc';\r\n isBannerDismissed = false;\r\n\r\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\r\n pageIndex = 0;\r\n pageSize = PAGE_SIZE_OPTIONS[0];\r\n\r\n isFilterPanelOpen = false;\r\n filters = {\r\n country: '',\r\n pendingActions: '',\r\n status: '',\r\n };\r\n\r\n private readonly countryDisplayNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl\r\n ? new Intl.DisplayNames(['en'], { type: 'region' })\r\n : null;\r\n\r\n private readonly migrationIntervals = new Map<number, ReturnType<typeof setInterval>>();\r\n private batchInfoBySiteId = new Map<number, { batchId: number; status: string | null }>();\r\n\r\n constructor(\r\n private apiService: APIService,\r\n private locationsService: LocationsService,\r\n private dialog: MatDialog,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.apiService.apiUrl = this.exHost + '/webex';\r\n this.loadSiteLocations();\r\n this.loadBatchSites();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.migrationIntervals.forEach(interval => clearInterval(interval));\r\n this.migrationIntervals.clear();\r\n }\r\n\r\n private loadSiteLocations(): void {\r\n this.isLoading = true;\r\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\r\n next: (siteLocations) => {\r\n this.siteLocations = this.applyBatchIds(siteLocations);\r\n this.isLoading = false;\r\n },\r\n error: () => {\r\n this.isLoading = false;\r\n },\r\n });\r\n }\r\n\r\n // Runs independently of loadSiteLocations() — whichever resolves second\r\n // re-applies the merge, so batchId ends up set regardless of load order.\r\n private loadBatchSites(): void {\r\n this.locationsService.getBatchSites(this.customerId).subscribe({\r\n next: (batches: SiteMigrationBatch[]) => {\r\n this.batchInfoBySiteId = new Map(\r\n batches.map(batch => [batch.siteId, { batchId: batch.id, status: batch.status }])\r\n );\r\n this.siteLocations = this.applyBatchIds(this.siteLocations);\r\n },\r\n });\r\n }\r\n\r\n private applyBatchIds(rows: SiteLocation[]): SiteLocation[] {\r\n return rows.map(row => {\r\n const info = this.batchInfoBySiteId.get(row.site.id);\r\n return { ...row, batchId: info?.batchId, batchStatus: info?.status ?? null };\r\n });\r\n }\r\n\r\n get pendingLocations(): SiteLocation[] {\r\n return this.siteLocations.filter(row => !!row.location?.hasPendingActions);\r\n }\r\n\r\n get showPendingBanner(): boolean {\r\n return !this.isBannerDismissed && this.pendingLocations.length > 0;\r\n }\r\n\r\n get countries(): string[] {\r\n return Array.from(new Set(this.siteLocations.map(row => this.countryLabel(row)).filter(Boolean))).sort();\r\n }\r\n\r\n get statuses(): string[] {\r\n return Array.from(new Set(this.siteLocations.map(row => row.batchStatus).filter((v): v is string => !!v))).sort();\r\n }\r\n\r\n get filteredRows(): SiteLocation[] {\r\n const term = this.searchTerm.trim().toLowerCase();\r\n const filtered = this.siteLocations.filter(row =>\r\n (!term ||\r\n this.rowName(row).toLowerCase().includes(term) ||\r\n this.addressLine(row).toLowerCase().includes(term) ||\r\n (row.location?.address?.city || '').toLowerCase().includes(term) ||\r\n (row.location?.address?.state || '').toLowerCase().includes(term) ||\r\n this.countryLabel(row).toLowerCase().includes(term)) &&\r\n (!this.filters.country || this.countryLabel(row) === this.filters.country) &&\r\n (!this.filters.pendingActions || String(!!row.location?.hasPendingActions) === this.filters.pendingActions) &&\r\n (!this.filters.status || row.batchStatus === this.filters.status)\r\n );\r\n\r\n return filtered.sort((a, b) => {\r\n const comparison = this.rowName(a).localeCompare(this.rowName(b));\r\n return this.sortDirection === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n get pagedRows(): SiteLocation[] {\r\n const start = this.pageIndex * this.pageSize;\r\n return this.filteredRows.slice(start, start + this.pageSize);\r\n }\r\n\r\n get totalElements(): number {\r\n return this.filteredRows.length;\r\n }\r\n\r\n get pageRangeLabel(): string {\r\n if (!this.totalElements) {\r\n return '0 of 0';\r\n }\r\n const start = this.pageIndex * this.pageSize + 1;\r\n const end = Math.min(this.totalElements, start + this.pagedRows.length - 1);\r\n return `${start} – ${end} of ${this.totalElements}`;\r\n }\r\n\r\n get hasPreviousPage(): boolean {\r\n return this.pageIndex > 0;\r\n }\r\n\r\n get hasNextPage(): boolean {\r\n return (this.pageIndex + 1) * this.pageSize < this.totalElements;\r\n }\r\n\r\n rowName(row: SiteLocation): string {\r\n return row.site.name;\r\n }\r\n\r\n // Categorizes the free-text batch status into the three states the status\r\n // dot can show — matched by keyword since the backend uses inconsistent\r\n // casing/wording (\"Finished Successfully\", \"COMPLETED\", \"collecting with\r\n // fixes\", \"New\", \"FAILED\", ...).\r\n private batchStatusCategory(row: SiteLocation): 'success' | 'in-progress' | 'failed' | '' {\r\n const value = (row.batchStatus || '').toLowerCase();\r\n if (!value) {\r\n return '';\r\n }\r\n if (value.includes('fail')) {\r\n return 'failed';\r\n }\r\n if (value.includes('complet') || value.includes('finished') || value.includes('success')) {\r\n return 'success';\r\n }\r\n return 'in-progress';\r\n }\r\n\r\n isSuccessStatus(row: SiteLocation): boolean {\r\n return this.batchStatusCategory(row) === 'success';\r\n }\r\n\r\n isInProgressStatus(row: SiteLocation): boolean {\r\n return this.batchStatusCategory(row) === 'in-progress';\r\n }\r\n\r\n isFailedStatus(row: SiteLocation): boolean {\r\n return this.batchStatusCategory(row) === 'failed';\r\n }\r\n\r\n addressLine(row: SiteLocation): string {\r\n if (!row.location) {\r\n return '';\r\n }\r\n return [row.location.address.address1, row.location.address.address2, row.location.address.city]\r\n .filter(Boolean)\r\n .join(' - ');\r\n }\r\n\r\n countryLabel(row: SiteLocation): string {\r\n if (!row.location) {\r\n return '';\r\n }\r\n const { countryName, country } = row.location.address;\r\n if (countryName) {\r\n return countryName;\r\n }\r\n if (!country) {\r\n return '';\r\n }\r\n return this.countryDisplayNames?.of(country) || country;\r\n }\r\n\r\n // Same icon set as users-list's \"Provisioning Type\" column (assets/icons/webex.svg,\r\n // local_24.svg, di_cloud_24.svg).\r\n private readonly provisioningTypeIcons: Record<string, { src: string; tooltip: string }> = {\r\n WEBEX: { src: 'assets/icons/webex.svg', tooltip: 'Webex Calling' },\r\n UCM: { src: 'assets/icons/local_24.svg', tooltip: 'UCM' },\r\n DI: { src: 'assets/icons/di_cloud_24.svg', tooltip: 'Webex Calling DI' },\r\n };\r\n\r\n provisioningTypeIcon(row: SiteLocation): { src: string; tooltip: string } | null {\r\n if (!row.location) {\r\n return null;\r\n }\r\n return this.provisioningTypeIcons[row.location.provisioningType] || null;\r\n }\r\n\r\n onSearchInputChange(event: Event): void {\r\n this.searchTerm = (event.target as HTMLInputElement).value;\r\n this.pageIndex = 0;\r\n }\r\n\r\n toggleNameSort(): void {\r\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\r\n }\r\n\r\n dismissBanner(): void {\r\n this.isBannerDismissed = true;\r\n }\r\n\r\n toggleFilterPanel(): void {\r\n this.isFilterPanelOpen = !this.isFilterPanelOpen;\r\n }\r\n\r\n closeFilterPanel(): void {\r\n this.isFilterPanelOpen = false;\r\n }\r\n\r\n onFilterChange(): void {\r\n this.pageIndex = 0;\r\n }\r\n\r\n clearFilters(): void {\r\n this.filters = { country: '', pendingActions: '', status: '' };\r\n this.pageIndex = 0;\r\n }\r\n\r\n onPageSizeChange(event: Event): void {\r\n this.pageSize = Number((event.target as HTMLSelectElement).value);\r\n this.pageIndex = 0;\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.hasPreviousPage) {\r\n this.pageIndex--;\r\n }\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.hasNextPage) {\r\n this.pageIndex++;\r\n }\r\n }\r\n\r\n onOpenLocation(row: SiteLocation): void {\r\n if (row.location) {\r\n this.openLocation.emit(row.location.id);\r\n }\r\n }\r\n\r\n onEditLocation(row: SiteLocation): void {\r\n if (row.location) {\r\n this.editLocation.emit(row.location.id);\r\n }\r\n }\r\n\r\n onRemoveLocation(row: SiteLocation): void {\r\n if (row.location) {\r\n this.removeLocation.emit(row.location.id);\r\n }\r\n }\r\n\r\n canMigrateSite(row: SiteLocation): boolean {\r\n return row.migrationStatus !== 'IN_PROGRESS';\r\n }\r\n\r\n onMigrateSite(row: SiteLocation): void {\r\n const dialogRef = this.dialog.open(LocationConfirmDialogComponent, {\r\n panelClass: 'tk-location-confirm-dialog-panel',\r\n backdropClass: 'tk-location-confirm-dialog-backdrop',\r\n data: {\r\n title: `Migrate ${row.site.name}?`,\r\n message: `<p>Are you sure you want to migrate <em>${row.site.name}</em> site?</p>`,\r\n confirmButtonText: 'Yes, migrate',\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(confirmed => {\r\n if (confirmed) {\r\n this.migrateSite(row);\r\n }\r\n });\r\n }\r\n\r\n private migrateSite(row: SiteLocation): void {\r\n const siteId = row.site.id;\r\n row.migrationStatus = 'IN_PROGRESS';\r\n this.locationsService.migrateSite(siteId, row.batchId).subscribe({\r\n next: (batchId: number) => {\r\n if (batchId) {\r\n this.pollMigrationStatus(siteId, batchId);\r\n } else {\r\n this.onMigrationComplete(siteId);\r\n }\r\n },\r\n error: () => {\r\n this.setMigrationStatus(siteId, 'FAILED');\r\n },\r\n });\r\n }\r\n\r\n private pollMigrationStatus(siteId: number, batchId: number): void {\r\n this.clearMigrationInterval(siteId);\r\n\r\n const poll = (): void => {\r\n this.locationsService.getMigrationBatchStatuses(this.customerId, [batchId]).subscribe({\r\n next: (statuses: SiteBatchStatus[]) => {\r\n const status = statuses.find(item => item.id === batchId);\r\n // The batch stops being returned once it's done processing, so its\r\n // absence here means completion — only its presence with an\r\n // in-progress status means we should keep polling.\r\n if (status && status.status === 'In Progress') {\r\n return;\r\n }\r\n this.clearMigrationInterval(siteId);\r\n if (!status || status.status === 'Completed') {\r\n this.onMigrationComplete(siteId);\r\n } else {\r\n this.setMigrationStatus(siteId, 'FAILED');\r\n }\r\n },\r\n error: () => {\r\n this.clearMigrationInterval(siteId);\r\n this.setMigrationStatus(siteId, 'FAILED');\r\n },\r\n });\r\n };\r\n\r\n poll();\r\n this.migrationIntervals.set(siteId, setInterval(poll, MIGRATION_POLL_INTERVAL_MS));\r\n }\r\n\r\n // Looks the row up by siteId (rather than closing over a row reference) so\r\n // status updates still land on whatever object is currently in\r\n // siteLocations, even after loadSiteLocations()/mergeSiteLocations() below\r\n // have replaced the array with freshly-fetched row objects.\r\n private setMigrationStatus(siteId: number, status: LocationMigrationStatus): void {\r\n const row = this.siteLocations.find(item => item.site.id === siteId);\r\n if (row) {\r\n row.migrationStatus = status;\r\n }\r\n }\r\n\r\n // The migrate/batch-status APIs don't return the newly created location's\r\n // details, so re-fetch to pick up its mapping, address, timezone, etc.\r\n private onMigrationComplete(siteId: number): void {\r\n this.setMigrationStatus(siteId, 'COMPLETED');\r\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\r\n next: (fresh) => this.mergeSiteLocations(fresh),\r\n });\r\n }\r\n\r\n // Preserves the IN_PROGRESS status of any other site still migrating so a\r\n // concurrent poll's next tick doesn't land on a row that briefly lost it.\r\n private mergeSiteLocations(fresh: SiteLocation[]): void {\r\n const inProgressSiteIds = new Set(\r\n this.siteLocations.filter(row => row.migrationStatus === 'IN_PROGRESS').map(row => row.site.id)\r\n );\r\n this.siteLocations = this.applyBatchIds(fresh).map(row =>\r\n inProgressSiteIds.has(row.site.id) && !row.location\r\n ? { ...row, migrationStatus: 'IN_PROGRESS' as const }\r\n : row\r\n );\r\n }\r\n\r\n private clearMigrationInterval(siteId: number): void {\r\n const interval = this.migrationIntervals.get(siteId);\r\n if (interval) {\r\n clearInterval(interval);\r\n this.migrationIntervals.delete(siteId);\r\n }\r\n }\r\n\r\n onAddLocation(): void {\r\n this.addLocation.emit();\r\n }\r\n\r\n onImportLocations(): void {\r\n this.importLocations.emit();\r\n }\r\n\r\n exportLocations(): void {\r\n const rows = this.filteredRows.map(row => [\r\n row.site.name,\r\n this.addressLine(row),\r\n this.countryLabel(row),\r\n row.batchStatus || 'Not migrated',\r\n ]);\r\n const csvLines = [\r\n ['Location Name', 'Address', 'Country/Region', 'Status'],\r\n ...rows,\r\n ].map(row => row.map(cell => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','));\r\n\r\n const blob = new Blob([csvLines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = 'locations.csv';\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n","<div class=\"tk-locations\">\r\n <app-loader *ngIf=\"isLoading\"></app-loader>\r\n\r\n <div class=\"tk-locations__view-toggle\">\r\n <button type=\"button\" class=\"tk-locations__view-button tk-locations__view-button--active\">\r\n <mat-icon class=\"tk-locations__view-icon\">menu</mat-icon>\r\n List\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__view-button\" disabled title=\"Map view coming soon\">\r\n <mat-icon class=\"tk-locations__view-icon\">place</mat-icon>\r\n Map\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__banner\" *ngIf=\"showPendingBanner\">\r\n <mat-icon class=\"tk-locations__banner-icon\">warning</mat-icon>\r\n <span class=\"tk-locations__banner-text\">\r\n View location(s) with pending action items to resume your calling service in {{ pendingLocations.length }} or more locations.\r\n </span>\r\n <button type=\"button\" class=\"tk-locations__banner-close\" aria-label=\"Dismiss\" (click)=\"dismissBanner()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__toolbar\">\r\n <div style=\"position: relative; width: fit-content; min-width: 200px\">\r\n <input\r\n [value]=\"searchTerm\"\r\n class=\"blue-input\"\r\n (input)=\"onSearchInputChange($event)\"\r\n type=\"text\"\r\n placeholder=\"Search by name, city, state, country\"\r\n style=\"\r\n width: 100%;\r\n height: 34px;\r\n border-radius: 0.5rem;\r\n font-size: 16px;\r\n padding: 6px 12px 6px 44px;\r\n border: 1px solid #00000080;\r\n background: #fff;\r\n color: #222;\r\n outline: none;\r\n box-sizing: border-box;\r\n min-width: 280px;\r\n \"\r\n />\r\n <span\r\n style=\"\r\n position: absolute;\r\n left: 12px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #757575;\r\n font-size: 18px;\r\n font-weight: normal;\r\n pointer-events: none;\r\n \"\r\n >\r\n <i\r\n class=\"material-icons\"\r\n style=\"font-size: 18px; font-weight: normal\"\r\n >search</i\r\n >\r\n </span>\r\n </div>\r\n\r\n <button type=\"button\" class=\"tk-locations__filter-button\" (click)=\"toggleFilterPanel()\">\r\n <img class=\"tk-locations__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\r\n Filter\r\n </button>\r\n\r\n <span class=\"tk-locations__count\">{{ totalElements }} locations</span>\r\n\r\n <button type=\"button\" class=\"tk-locations__download-button\" aria-label=\"Download locations\" title=\"Download locations\" (click)=\"exportLocations()\">\r\n <mat-icon>file_download</mat-icon>\r\n </button>\r\n\r\n <button type=\"button\" class=\"tk-locations__manage-button\" [matMenuTriggerFor]=\"manageMenu\">\r\n Manage locations\r\n <mat-icon class=\"tk-locations__manage-chevron\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #manageMenu=\"matMenu\" xPosition=\"before\">\r\n <button mat-menu-item type=\"button\" (click)=\"onAddLocation()\">Add location</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onImportLocations()\">Import locations</button>\r\n </mat-menu>\r\n </div>\r\n\r\n <table class=\"tk-locations__table\">\r\n <thead>\r\n <tr>\r\n <th (click)=\"toggleNameSort()\">\r\n Location Name\r\n <mat-icon class=\"tk-locations__sort-icon\">{{ sortDirection === 'asc' ? 'arrow_upward' : 'arrow_downward' }}</mat-icon>\r\n </th>\r\n <th>Address</th>\r\n <th>Country/Region</th>\r\n <th>Status</th>\r\n <th>Provisioning Type</th>\r\n <th class=\"tk-locations__actions-col\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of pagedRows\" (click)=\"onOpenLocation(row)\">\r\n <td class=\"tk-locations__name-cell\">\r\n <a href=\"javascript:void(0)\" class=\"tk-locations__name-link\" (click)=\"$event.stopPropagation(); onOpenLocation(row)\">{{ row.site.name }}</a>\r\n </td>\r\n <td>{{ addressLine(row) || '—' }}</td>\r\n <td>{{ countryLabel(row) || '—' }}</td>\r\n <td>\r\n <span class=\"tk-locations__status\" *ngIf=\"row.batchStatus; else noStatus\">\r\n <span\r\n class=\"tk-locations__status-dot\"\r\n [class.tk-locations__status-dot--success]=\"isSuccessStatus(row)\"\r\n [class.tk-locations__status-dot--in-progress]=\"isInProgressStatus(row)\"\r\n [class.tk-locations__status-dot--failed]=\"isFailedStatus(row)\"></span>\r\n {{ row.batchStatus }}\r\n </span>\r\n <ng-template #noStatus>—</ng-template>\r\n </td>\r\n <td>\r\n <span class=\"tk-locations__icon-wrapper\" *ngIf=\"provisioningTypeIcon(row) as pt; else noProvisioningType\">\r\n <img [src]=\"pt.src\" [matTooltip]=\"pt.tooltip\" matTooltipPosition=\"right\" width=\"20\" alt=\"\">\r\n </span>\r\n <ng-template #noProvisioningType>—</ng-template>\r\n </td>\r\n <td class=\"tk-locations__actions-col\">\r\n <mat-progress-spinner\r\n *ngIf=\"row.migrationStatus === 'IN_PROGRESS'\"\r\n class=\"tk-locations__row-action-spinner\"\r\n [diameter]=\"20\"\r\n strokeWidth=\"2\"\r\n mode=\"indeterminate\"\r\n matTooltip=\"Migrating site…\">\r\n </mat-progress-spinner>\r\n <button\r\n *ngIf=\"row.migrationStatus !== 'IN_PROGRESS'\"\r\n mat-icon-button\r\n class=\"tk-locations__row-action-button\"\r\n [matMenuTriggerFor]=\"rowMenu\"\r\n (click)=\"$event.stopPropagation()\"\r\n aria-label=\"Open location actions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #rowMenu=\"matMenu\" yPosition=\"below\">\r\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onOpenLocation(row)\">View details</button>\r\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onEditLocation(row)\">Edit location</button>\r\n <button\r\n *ngIf=\"canMigrateSite(row)\"\r\n mat-menu-item\r\n type=\"button\"\r\n (click)=\"onMigrateSite(row)\">Migrate site</button>\r\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onRemoveLocation(row)\">Remove location</button>\r\n </mat-menu>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"!pagedRows.length\">\r\n <td colspan=\"6\" class=\"tk-locations__empty\">No locations match your search.</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div class=\"tk-locations__footer\">\r\n <div class=\"tk-locations__rows-per-page\">\r\n <label for=\"tk-locations-page-size\">Rows per page:</label>\r\n <select id=\"tk-locations-page-size\" class=\"tk-locations__rows-per-page-select\" [ngModel]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <span class=\"tk-locations__footer-text\">{{ pageRangeLabel }}</span>\r\n <div class=\"tk-locations__pagination\">\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasPreviousPage\" (click)=\"goToPreviousPage()\" aria-label=\"Previous page\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasNextPage\" (click)=\"goToNextPage()\" aria-label=\"Next page\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tk-locations__filter-backdrop\"\r\n *ngIf=\"isFilterPanelOpen\"\r\n (click)=\"closeFilterPanel()\">\r\n </div>\r\n\r\n <aside class=\"tk-locations__filter-panel\" [class.tk-locations__filter-panel--open]=\"isFilterPanelOpen\">\r\n <div class=\"tk-locations__filter-panel-header\">\r\n <h3 class=\"tk-locations__filter-panel-title\">Filter locations</h3>\r\n <button\r\n type=\"button\"\r\n class=\"tk-locations__filter-panel-close\"\r\n aria-label=\"Close filter panel\"\r\n (click)=\"closeFilterPanel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-body\">\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-status\">Status</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-status\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.status\" (change)=\"onFilterChange()\">\r\n <option value=\"\">All</option>\r\n <option *ngFor=\"let status of statuses\" [value]=\"status\">{{ status }}</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-country\">Country/Region</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-country\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.country\" (change)=\"onFilterChange()\">\r\n <option value=\"\">All countries</option>\r\n <option *ngFor=\"let country of countries\" [value]=\"country\">{{ country }}</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-pending\">Pending action items</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-pending\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.pendingActions\" (change)=\"onFilterChange()\">\r\n <option value=\"\">All</option>\r\n <option value=\"true\">Yes</option>\r\n <option value=\"false\">No</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-footer\">\r\n <button type=\"button\" class=\"tk-locations__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\r\n <button type=\"button\" class=\"tk-locations__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\r\n </div>\r\n </aside>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MaterialModule } from './material.module';\r\nimport { LocationsComponent } from './locations.component';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\r\n\r\n@NgModule({\r\n declarations: [\r\n LocationsComponent,\r\n LocationConfirmDialogComponent,\r\n AppLoaderComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n FormsModule,\r\n MaterialModule,\r\n ],\r\n exports: [\r\n LocationsComponent,\r\n ],\r\n})\r\nexport class LocationsModule { }\r\n","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Widget Modules\r\nexport * from './src/locations.module';\r\n\r\n// Components\r\nexport * from './src/locations.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.APIService","i2.LocationsService","i3","i9","i11.AppLoaderComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tuki-io-tuki-widgets-locations.mjs","sources":["../../../../projects/tuki/widgets/locations/src/material.module.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.html","../../../../projects/tuki/widgets/locations/src/services/api.service.ts","../../../../projects/tuki/widgets/locations/src/app.constants.ts","../../../../projects/tuki/widgets/locations/src/services/locations.service.ts","../../../../projects/tuki/widgets/locations/src/locations.component.ts","../../../../projects/tuki/widgets/locations/src/locations.component.html","../../../../projects/tuki/widgets/locations/src/locations.module.ts","../../../../projects/tuki/widgets/locations/public-api.ts","../../../../projects/tuki/widgets/locations/tuki-io-tuki-widgets-locations.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n imports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ],\r\n exports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ]\r\n})\r\nexport class MaterialModule { }\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\nexport interface LocationConfirmDialogData {\r\n title: string;\r\n message: string;\r\n confirmButtonText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'tk-location-confirm-dialog',\r\n templateUrl: './location-confirm-dialog.component.html',\r\n styleUrls: ['./location-confirm-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocationConfirmDialogComponent {\r\n constructor(\r\n public dialogRef: MatDialogRef<LocationConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: LocationConfirmDialogData,\r\n ) { }\r\n\r\n onClose(result: boolean): void {\r\n this.dialogRef.close(result);\r\n }\r\n}\r\n","<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class APIService {\r\n token!: string;\r\n apiUrl!: string;\r\n\r\n constructor(\r\n private httpClient: HttpClient\r\n ) { }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n put(url: string, body: any = null, params = {}): Observable<any> {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer ' + token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n}\r\n","export const API = {\r\n SITES_LOCATIONS: {\r\n // Returns every site for the customer paired with its mapped Control Hub\r\n // location (or null when the site hasn't been migrated yet) — this is the\r\n // source of truth for siteId, superseding the old LOCATIONS.GET_ALL\r\n // endpoint, which only listed already-mapped locations and exposed no siteId.\r\n GET_ALL: \"/api/webex/configuration/customers/:customerId/siteslocations\",\r\n },\r\n SITE_MIGRATION: {\r\n MIGRATE_SITE: \"/api/migration/WEBEX/sites/:siteId/migrate\",\r\n BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\r\n // Pre-existing migration batches for the customer, matched to a site by\r\n // siteId. Reachable through the same exHost/webex gateway as everything\r\n // else in this service — no separate host needed.\r\n GET_BATCH_SITES: \"/api/e2emigration/batch/:customerId/Sites\",\r\n },\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { API } from '../app.constants';\r\nimport { APIService } from './api.service';\r\nimport { Location, LocationAddress, Site, SiteLocation } from '../types/location';\r\n\r\nexport interface SiteBatchStatus {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: string;\r\n}\r\n\r\n// Minimal shape of the site-batch entries from GET_BATCH_SITES — only the\r\n// fields needed to match a batch to a site, plus its status.\r\nexport interface SiteMigrationBatch {\r\n id: number;\r\n siteId: number;\r\n status: string | null;\r\n}\r\n\r\nfunction toLocationAddress(raw: any): LocationAddress {\r\n return {\r\n address1: raw?.address1 || '',\r\n address2: raw?.address2 || '',\r\n city: raw?.city || '',\r\n state: raw?.state || '',\r\n postalCode: raw?.postalCode || '',\r\n country: raw?.country || '',\r\n countryName: raw?.countryName || raw?.country || '',\r\n };\r\n}\r\n\r\nfunction toLocation(raw: any): Location {\r\n return {\r\n id: String(raw?.id ?? ''),\r\n name: raw?.name || '',\r\n timeZone: raw?.timeZone || '',\r\n address: toLocationAddress(raw?.address),\r\n // Every location returned by this endpoint is a Webex Control Hub location.\r\n provisioningType: raw?.provisioningType || 'WEBEX',\r\n hasPendingActions: !!raw?.hasPendingActions,\r\n };\r\n}\r\n\r\nfunction toSite(raw: any): Site {\r\n return {\r\n id: Number(raw?.id),\r\n name: raw?.name || '',\r\n };\r\n}\r\n\r\nfunction toSiteLocation(raw: any): SiteLocation {\r\n return {\r\n site: toSite(raw?.site),\r\n location: raw?.location ? toLocation(raw.location) : null,\r\n };\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationsService {\r\n constructor(private apiService: APIService) { }\r\n\r\n fetchSiteLocations(customerId: number): Observable<SiteLocation[]> {\r\n const url = API.SITES_LOCATIONS.GET_ALL.replace(':customerId', String(customerId));\r\n return this.apiService.fetch(url).pipe(\r\n map((response: any) => (Array.isArray(response) ? response : []).map(toSiteLocation)),\r\n );\r\n }\r\n\r\n migrateSite(siteId: number, batchId?: number): Observable<number> {\r\n const url = API.SITE_MIGRATION.MIGRATE_SITE.replace(':siteId', String(siteId));\r\n return this.apiService.post(url, {}, batchId != null ? { batchId } : {});\r\n }\r\n\r\n getBatchSites(customerId: number): Observable<SiteMigrationBatch[]> {\r\n const url = API.SITE_MIGRATION.GET_BATCH_SITES.replace(':customerId', String(customerId));\r\n return this.apiService.fetch(url).pipe(\r\n map((response: any) => (Array.isArray(response) ? response : [])),\r\n );\r\n }\r\n\r\n getMigrationBatchStatuses(customerId: number, batchIds: number[]): Observable<SiteBatchStatus[]> {\r\n const url = API.SITE_MIGRATION.BATCH_STATUS.replace(':customerId', String(customerId));\r\n return this.apiService.post(url, batchIds);\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { APIService } from './services/api.service';\r\nimport { LocationsService, SiteBatchStatus, SiteMigrationBatch } from './services/locations.service';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { LocationMigrationStatus, SiteLocation } from './types/location';\r\n\r\nconst MIGRATION_POLL_INTERVAL_MS = 10000;\r\n\r\ntype LocationsSortDirection = 'asc' | 'desc';\r\n\r\nconst PAGE_SIZE_OPTIONS = [10, 25, 50];\r\n\r\n@Component({\r\n selector: 'tk-locations',\r\n templateUrl: './locations.component.html',\r\n styleUrls: ['./locations.component.scss'],\r\n})\r\nexport class LocationsComponent implements OnInit, OnDestroy {\r\n @Input() exHost!: string;\r\n @Input() token!: string;\r\n @Input() customerId!: number;\r\n\r\n @Output() openLocation = new EventEmitter<string>();\r\n @Output() editLocation = new EventEmitter<string>();\r\n @Output() removeLocation = new EventEmitter<string>();\r\n @Output() addLocation = new EventEmitter<void>();\r\n @Output() importLocations = new EventEmitter<void>();\r\n\r\n // Every site for the customer, each paired with its mapped Control Hub\r\n // location or null — the siteslocations API returns the full, unpaged list,\r\n // so search/filter/sort/pagination below all run client-side over this.\r\n siteLocations: SiteLocation[] = [];\r\n isLoading = false;\r\n\r\n searchTerm = '';\r\n sortDirection: LocationsSortDirection = 'asc';\r\n isBannerDismissed = false;\r\n\r\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\r\n pageIndex = 0;\r\n pageSize = PAGE_SIZE_OPTIONS[0];\r\n\r\n isFilterPanelOpen = false;\r\n filters = {\r\n country: '',\r\n pendingActions: '',\r\n status: '',\r\n };\r\n\r\n private readonly countryDisplayNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl\r\n ? new Intl.DisplayNames(['en'], { type: 'region' })\r\n : null;\r\n\r\n private readonly migrationIntervals = new Map<number, ReturnType<typeof setInterval>>();\r\n private batchInfoBySiteId = new Map<number, { batchId: number; status: string | null }>();\r\n\r\n constructor(\r\n private apiService: APIService,\r\n private locationsService: LocationsService,\r\n private dialog: MatDialog,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.apiService.apiUrl = this.exHost + '/webex';\r\n this.loadSiteLocations();\r\n this.loadBatchSites();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.migrationIntervals.forEach(interval => clearInterval(interval));\r\n this.migrationIntervals.clear();\r\n }\r\n\r\n private loadSiteLocations(): void {\r\n this.isLoading = true;\r\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\r\n next: (siteLocations) => {\r\n this.siteLocations = this.applyBatchIds(siteLocations);\r\n this.isLoading = false;\r\n },\r\n error: () => {\r\n this.isLoading = false;\r\n },\r\n });\r\n }\r\n\r\n // Runs independently of loadSiteLocations() — whichever resolves second\r\n // re-applies the merge, so batchId ends up set regardless of load order.\r\n private loadBatchSites(): void {\r\n this.locationsService.getBatchSites(this.customerId).subscribe({\r\n next: (batches: SiteMigrationBatch[]) => {\r\n this.batchInfoBySiteId = new Map(\r\n batches.map(batch => [batch.siteId, { batchId: batch.id, status: batch.status }])\r\n );\r\n this.siteLocations = this.applyBatchIds(this.siteLocations);\r\n },\r\n });\r\n }\r\n\r\n private applyBatchIds(rows: SiteLocation[]): SiteLocation[] {\r\n return rows.map(row => {\r\n const info = this.batchInfoBySiteId.get(row.site.id);\r\n return { ...row, batchId: info?.batchId, batchStatus: info?.status ?? null };\r\n });\r\n }\r\n\r\n get pendingLocations(): SiteLocation[] {\r\n return this.siteLocations.filter(row => !!row.location?.hasPendingActions);\r\n }\r\n\r\n get showPendingBanner(): boolean {\r\n return !this.isBannerDismissed && this.pendingLocations.length > 0;\r\n }\r\n\r\n get countries(): string[] {\r\n return Array.from(new Set(this.siteLocations.map(row => this.countryLabel(row)).filter(Boolean))).sort();\r\n }\r\n\r\n get statuses(): string[] {\r\n return Array.from(new Set(this.siteLocations.map(row => row.batchStatus).filter((v): v is string => !!v))).sort();\r\n }\r\n\r\n get filteredRows(): SiteLocation[] {\r\n const term = this.searchTerm.trim().toLowerCase();\r\n const filtered = this.siteLocations.filter(row =>\r\n (!term ||\r\n this.rowName(row).toLowerCase().includes(term) ||\r\n this.addressLine(row).toLowerCase().includes(term) ||\r\n (row.location?.address?.city || '').toLowerCase().includes(term) ||\r\n (row.location?.address?.state || '').toLowerCase().includes(term) ||\r\n this.countryLabel(row).toLowerCase().includes(term)) &&\r\n (!this.filters.country || this.countryLabel(row) === this.filters.country) &&\r\n (!this.filters.pendingActions || String(!!row.location?.hasPendingActions) === this.filters.pendingActions) &&\r\n (!this.filters.status || row.batchStatus === this.filters.status)\r\n );\r\n\r\n return filtered.sort((a, b) => {\r\n const comparison = this.rowName(a).localeCompare(this.rowName(b));\r\n return this.sortDirection === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n get pagedRows(): SiteLocation[] {\r\n const start = this.pageIndex * this.pageSize;\r\n return this.filteredRows.slice(start, start + this.pageSize);\r\n }\r\n\r\n get totalElements(): number {\r\n return this.filteredRows.length;\r\n }\r\n\r\n get pageRangeLabel(): string {\r\n if (!this.totalElements) {\r\n return '0 of 0';\r\n }\r\n const start = this.pageIndex * this.pageSize + 1;\r\n const end = Math.min(this.totalElements, start + this.pagedRows.length - 1);\r\n return `${start} – ${end} of ${this.totalElements}`;\r\n }\r\n\r\n get hasPreviousPage(): boolean {\r\n return this.pageIndex > 0;\r\n }\r\n\r\n get hasNextPage(): boolean {\r\n return (this.pageIndex + 1) * this.pageSize < this.totalElements;\r\n }\r\n\r\n rowName(row: SiteLocation): string {\r\n return row.site.name;\r\n }\r\n\r\n // Categorizes the free-text batch status into the three states the status\r\n // dot can show — matched by keyword since the backend uses inconsistent\r\n // casing/wording (\"Finished Successfully\", \"COMPLETED\", \"collecting with\r\n // fixes\", \"New\", \"FAILED\", ...).\r\n private batchStatusCategory(row: SiteLocation): 'success' | 'in-progress' | 'failed' | '' {\r\n const value = (row.batchStatus || '').toLowerCase();\r\n if (!value) {\r\n return '';\r\n }\r\n if (value.includes('fail')) {\r\n return 'failed';\r\n }\r\n if (value.includes('complet') || value.includes('finished') || value.includes('success')) {\r\n return 'success';\r\n }\r\n return 'in-progress';\r\n }\r\n\r\n isSuccessStatus(row: SiteLocation): boolean {\r\n return this.batchStatusCategory(row) === 'success';\r\n }\r\n\r\n isInProgressStatus(row: SiteLocation): boolean {\r\n return this.batchStatusCategory(row) === 'in-progress';\r\n }\r\n\r\n isFailedStatus(row: SiteLocation): boolean {\r\n return this.batchStatusCategory(row) === 'failed';\r\n }\r\n\r\n addressLine(row: SiteLocation): string {\r\n if (!row.location) {\r\n return '';\r\n }\r\n return [row.location.address.address1, row.location.address.address2, row.location.address.city]\r\n .filter(Boolean)\r\n .join(' - ');\r\n }\r\n\r\n countryLabel(row: SiteLocation): string {\r\n if (!row.location) {\r\n return '';\r\n }\r\n const { countryName, country } = row.location.address;\r\n if (countryName) {\r\n return countryName;\r\n }\r\n if (!country) {\r\n return '';\r\n }\r\n return this.countryDisplayNames?.of(country) || country;\r\n }\r\n\r\n // Same icon set as users-list's \"Provisioning Type\" column (assets/icons/webex.svg,\r\n // local_24.svg, di_cloud_24.svg).\r\n private readonly provisioningTypeIcons: Record<string, { src: string; tooltip: string }> = {\r\n WEBEX: { src: 'assets/icons/webex.svg', tooltip: 'Webex Calling' },\r\n UCM: { src: 'assets/icons/local_24.svg', tooltip: 'UCM' },\r\n DI: { src: 'assets/icons/di_cloud_24.svg', tooltip: 'Webex Calling DI' },\r\n };\r\n\r\n provisioningTypeIcon(row: SiteLocation): { src: string; tooltip: string } | null {\r\n if (!row.location) {\r\n return null;\r\n }\r\n return this.provisioningTypeIcons[row.location.provisioningType] || null;\r\n }\r\n\r\n onSearchInputChange(event: Event): void {\r\n this.searchTerm = (event.target as HTMLInputElement).value;\r\n this.pageIndex = 0;\r\n }\r\n\r\n toggleNameSort(): void {\r\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\r\n }\r\n\r\n dismissBanner(): void {\r\n this.isBannerDismissed = true;\r\n }\r\n\r\n toggleFilterPanel(): void {\r\n this.isFilterPanelOpen = !this.isFilterPanelOpen;\r\n }\r\n\r\n closeFilterPanel(): void {\r\n this.isFilterPanelOpen = false;\r\n }\r\n\r\n onFilterChange(): void {\r\n this.pageIndex = 0;\r\n }\r\n\r\n clearFilters(): void {\r\n this.filters = { country: '', pendingActions: '', status: '' };\r\n this.pageIndex = 0;\r\n }\r\n\r\n onPageSizeChange(event: Event): void {\r\n this.pageSize = Number((event.target as HTMLSelectElement).value);\r\n this.pageIndex = 0;\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.hasPreviousPage) {\r\n this.pageIndex--;\r\n }\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.hasNextPage) {\r\n this.pageIndex++;\r\n }\r\n }\r\n\r\n onOpenLocation(row: SiteLocation): void {\r\n if (row.location) {\r\n this.openLocation.emit(row.location.id);\r\n }\r\n }\r\n\r\n onEditLocation(row: SiteLocation): void {\r\n if (row.location) {\r\n this.editLocation.emit(row.location.id);\r\n }\r\n }\r\n\r\n onRemoveLocation(row: SiteLocation): void {\r\n if (row.location) {\r\n this.removeLocation.emit(row.location.id);\r\n }\r\n }\r\n\r\n canMigrateSite(row: SiteLocation): boolean {\r\n return row.migrationStatus !== 'IN_PROGRESS';\r\n }\r\n\r\n onMigrateSite(row: SiteLocation): void {\r\n const dialogRef = this.dialog.open(LocationConfirmDialogComponent, {\r\n panelClass: 'tk-location-confirm-dialog-panel',\r\n backdropClass: 'tk-location-confirm-dialog-backdrop',\r\n data: {\r\n title: `Migrate ${row.site.name}?`,\r\n message: `<p>Are you sure you want to migrate <em>${row.site.name}</em> site?</p>`,\r\n confirmButtonText: 'Yes, migrate',\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(confirmed => {\r\n if (confirmed) {\r\n this.migrateSite(row);\r\n }\r\n });\r\n }\r\n\r\n private migrateSite(row: SiteLocation): void {\r\n const siteId = row.site.id;\r\n row.migrationStatus = 'IN_PROGRESS';\r\n this.locationsService.migrateSite(siteId, row.batchId).subscribe({\r\n next: (batchId: number) => {\r\n if (batchId) {\r\n this.pollMigrationStatus(siteId, batchId);\r\n } else {\r\n this.onMigrationComplete(siteId);\r\n }\r\n },\r\n error: () => {\r\n this.setMigrationStatus(siteId, 'FAILED');\r\n },\r\n });\r\n }\r\n\r\n private pollMigrationStatus(siteId: number, batchId: number): void {\r\n this.clearMigrationInterval(siteId);\r\n\r\n const poll = (): void => {\r\n this.locationsService.getMigrationBatchStatuses(this.customerId, [batchId]).subscribe({\r\n next: (statuses: SiteBatchStatus[]) => {\r\n const status = statuses.find(item => item.id === batchId);\r\n // The batch stops being returned once it's done processing, so its\r\n // absence here means completion — only its presence with an\r\n // in-progress status means we should keep polling.\r\n if (status && status.status === 'In Progress') {\r\n return;\r\n }\r\n this.clearMigrationInterval(siteId);\r\n if (!status || status.status === 'Completed') {\r\n this.onMigrationComplete(siteId);\r\n } else {\r\n this.setMigrationStatus(siteId, 'FAILED');\r\n }\r\n },\r\n error: () => {\r\n this.clearMigrationInterval(siteId);\r\n this.setMigrationStatus(siteId, 'FAILED');\r\n },\r\n });\r\n };\r\n\r\n poll();\r\n this.migrationIntervals.set(siteId, setInterval(poll, MIGRATION_POLL_INTERVAL_MS));\r\n }\r\n\r\n // Looks the row up by siteId (rather than closing over a row reference) so\r\n // status updates still land on whatever object is currently in\r\n // siteLocations, even after loadSiteLocations()/mergeSiteLocations() below\r\n // have replaced the array with freshly-fetched row objects.\r\n private setMigrationStatus(siteId: number, status: LocationMigrationStatus): void {\r\n const row = this.siteLocations.find(item => item.site.id === siteId);\r\n if (row) {\r\n row.migrationStatus = status;\r\n }\r\n }\r\n\r\n // The migrate/batch-status APIs don't return the newly created location's\r\n // details, so re-fetch to pick up its mapping, address, timezone, etc.\r\n private onMigrationComplete(siteId: number): void {\r\n this.setMigrationStatus(siteId, 'COMPLETED');\r\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\r\n next: (fresh) => this.mergeSiteLocations(fresh),\r\n });\r\n }\r\n\r\n // Preserves the IN_PROGRESS status of any other site still migrating so a\r\n // concurrent poll's next tick doesn't land on a row that briefly lost it.\r\n private mergeSiteLocations(fresh: SiteLocation[]): void {\r\n const inProgressSiteIds = new Set(\r\n this.siteLocations.filter(row => row.migrationStatus === 'IN_PROGRESS').map(row => row.site.id)\r\n );\r\n this.siteLocations = this.applyBatchIds(fresh).map(row =>\r\n inProgressSiteIds.has(row.site.id) && !row.location\r\n ? { ...row, migrationStatus: 'IN_PROGRESS' as const }\r\n : row\r\n );\r\n }\r\n\r\n private clearMigrationInterval(siteId: number): void {\r\n const interval = this.migrationIntervals.get(siteId);\r\n if (interval) {\r\n clearInterval(interval);\r\n this.migrationIntervals.delete(siteId);\r\n }\r\n }\r\n\r\n onAddLocation(): void {\r\n this.addLocation.emit();\r\n }\r\n\r\n onImportLocations(): void {\r\n this.importLocations.emit();\r\n }\r\n\r\n exportLocations(): void {\r\n const rows = this.filteredRows.map(row => [\r\n row.site.name,\r\n this.addressLine(row),\r\n this.countryLabel(row),\r\n row.batchStatus || 'Not migrated',\r\n ]);\r\n const csvLines = [\r\n ['Location Name', 'Address', 'Country/Region', 'Status'],\r\n ...rows,\r\n ].map(row => row.map(cell => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','));\r\n\r\n const blob = new Blob([csvLines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = 'locations.csv';\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n","<tk-loader *ngIf=\"isLoading\"></tk-loader>\r\n\r\n<div class=\"tk-locations\">\r\n <div class=\"tk-locations__view-toggle\">\r\n <button type=\"button\" class=\"tk-locations__view-button tk-locations__view-button--active\">\r\n <mat-icon class=\"tk-locations__view-icon\">menu</mat-icon>\r\n List\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__view-button\" disabled title=\"Map view coming soon\">\r\n <mat-icon class=\"tk-locations__view-icon\">place</mat-icon>\r\n Map\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__banner\" *ngIf=\"showPendingBanner\">\r\n <mat-icon class=\"tk-locations__banner-icon\">warning</mat-icon>\r\n <span class=\"tk-locations__banner-text\">\r\n View location(s) with pending action items to resume your calling service in {{ pendingLocations.length }} or more locations.\r\n </span>\r\n <button type=\"button\" class=\"tk-locations__banner-close\" aria-label=\"Dismiss\" (click)=\"dismissBanner()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__toolbar\">\r\n <div style=\"position: relative; width: fit-content; min-width: 200px\">\r\n <input\r\n [value]=\"searchTerm\"\r\n class=\"blue-input\"\r\n (input)=\"onSearchInputChange($event)\"\r\n type=\"text\"\r\n placeholder=\"Search by name, city, state, country\"\r\n style=\"\r\n width: 100%;\r\n height: 34px;\r\n border-radius: 0.5rem;\r\n font-size: 16px;\r\n padding: 6px 12px 6px 44px;\r\n border: 1px solid #00000080;\r\n background: #fff;\r\n color: #222;\r\n outline: none;\r\n box-sizing: border-box;\r\n min-width: 280px;\r\n \"\r\n />\r\n <span\r\n style=\"\r\n position: absolute;\r\n left: 12px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #757575;\r\n font-size: 18px;\r\n font-weight: normal;\r\n pointer-events: none;\r\n \"\r\n >\r\n <i\r\n class=\"material-icons\"\r\n style=\"font-size: 18px; font-weight: normal\"\r\n >search</i\r\n >\r\n </span>\r\n </div>\r\n\r\n <button type=\"button\" class=\"tk-locations__filter-button\" (click)=\"toggleFilterPanel()\">\r\n <img class=\"tk-locations__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\r\n Filter\r\n </button>\r\n\r\n <span class=\"tk-locations__count\">{{ totalElements }} locations</span>\r\n\r\n <button type=\"button\" class=\"tk-locations__download-button\" aria-label=\"Download locations\" title=\"Download locations\" (click)=\"exportLocations()\">\r\n <mat-icon>file_download</mat-icon>\r\n </button>\r\n\r\n <button type=\"button\" class=\"tk-locations__manage-button\" [matMenuTriggerFor]=\"manageMenu\">\r\n Manage locations\r\n <mat-icon class=\"tk-locations__manage-chevron\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #manageMenu=\"matMenu\" xPosition=\"before\">\r\n <button mat-menu-item type=\"button\" (click)=\"onAddLocation()\">Add location</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onImportLocations()\">Import locations</button>\r\n </mat-menu>\r\n </div>\r\n\r\n <table class=\"tk-locations__table\">\r\n <thead>\r\n <tr>\r\n <th (click)=\"toggleNameSort()\">\r\n Location Name\r\n <mat-icon class=\"tk-locations__sort-icon\">{{ sortDirection === 'asc' ? 'arrow_upward' : 'arrow_downward' }}</mat-icon>\r\n </th>\r\n <th>Address</th>\r\n <th>Country/Region</th>\r\n <th>Status</th>\r\n <th>Provisioning Type</th>\r\n <th class=\"tk-locations__actions-col\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of pagedRows\" (click)=\"onOpenLocation(row)\">\r\n <td class=\"tk-locations__name-cell\">\r\n <a href=\"javascript:void(0)\" class=\"tk-locations__name-link\" (click)=\"$event.stopPropagation(); onOpenLocation(row)\">{{ row.site.name }}</a>\r\n </td>\r\n <td>{{ addressLine(row) || '—' }}</td>\r\n <td>{{ countryLabel(row) || '—' }}</td>\r\n <td>\r\n <span class=\"tk-locations__status\" *ngIf=\"row.batchStatus; else noStatus\">\r\n <span\r\n class=\"tk-locations__status-dot\"\r\n [class.tk-locations__status-dot--success]=\"isSuccessStatus(row)\"\r\n [class.tk-locations__status-dot--in-progress]=\"isInProgressStatus(row)\"\r\n [class.tk-locations__status-dot--failed]=\"isFailedStatus(row)\"></span>\r\n {{ row.batchStatus }}\r\n </span>\r\n <ng-template #noStatus>—</ng-template>\r\n </td>\r\n <td>\r\n <span class=\"tk-locations__icon-wrapper\" *ngIf=\"provisioningTypeIcon(row) as pt; else noProvisioningType\">\r\n <img [src]=\"pt.src\" [matTooltip]=\"pt.tooltip\" matTooltipPosition=\"right\" width=\"20\" alt=\"\">\r\n </span>\r\n <ng-template #noProvisioningType>—</ng-template>\r\n </td>\r\n <td class=\"tk-locations__actions-col\">\r\n <mat-progress-spinner\r\n *ngIf=\"row.migrationStatus === 'IN_PROGRESS'\"\r\n class=\"tk-locations__row-action-spinner\"\r\n [diameter]=\"20\"\r\n strokeWidth=\"2\"\r\n mode=\"indeterminate\"\r\n matTooltip=\"Migrating site…\">\r\n </mat-progress-spinner>\r\n <button\r\n *ngIf=\"row.migrationStatus !== 'IN_PROGRESS'\"\r\n mat-icon-button\r\n class=\"tk-locations__row-action-button\"\r\n [matMenuTriggerFor]=\"rowMenu\"\r\n (click)=\"$event.stopPropagation()\"\r\n aria-label=\"Open location actions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #rowMenu=\"matMenu\" yPosition=\"below\">\r\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onOpenLocation(row)\">View details</button>\r\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onEditLocation(row)\">Edit location</button>\r\n <button\r\n *ngIf=\"canMigrateSite(row)\"\r\n mat-menu-item\r\n type=\"button\"\r\n (click)=\"onMigrateSite(row)\">Migrate site</button>\r\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onRemoveLocation(row)\">Remove location</button>\r\n </mat-menu>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"!pagedRows.length\">\r\n <td colspan=\"6\" class=\"tk-locations__empty\">No locations match your search.</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div class=\"tk-locations__footer\">\r\n <div class=\"tk-locations__rows-per-page\">\r\n <label for=\"tk-locations-page-size\">Rows per page:</label>\r\n <select id=\"tk-locations-page-size\" class=\"tk-locations__rows-per-page-select\" [ngModel]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <span class=\"tk-locations__footer-text\">{{ pageRangeLabel }}</span>\r\n <div class=\"tk-locations__pagination\">\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasPreviousPage\" (click)=\"goToPreviousPage()\" aria-label=\"Previous page\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasNextPage\" (click)=\"goToNextPage()\" aria-label=\"Next page\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tk-locations__filter-backdrop\"\r\n *ngIf=\"isFilterPanelOpen\"\r\n (click)=\"closeFilterPanel()\">\r\n </div>\r\n\r\n <aside class=\"tk-locations__filter-panel\" [class.tk-locations__filter-panel--open]=\"isFilterPanelOpen\">\r\n <div class=\"tk-locations__filter-panel-header\">\r\n <h3 class=\"tk-locations__filter-panel-title\">Filter locations</h3>\r\n <button\r\n type=\"button\"\r\n class=\"tk-locations__filter-panel-close\"\r\n aria-label=\"Close filter panel\"\r\n (click)=\"closeFilterPanel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-body\">\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-status\">Status</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-status\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.status\" (change)=\"onFilterChange()\">\r\n <option value=\"\">All</option>\r\n <option *ngFor=\"let status of statuses\" [value]=\"status\">{{ status }}</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-country\">Country/Region</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-country\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.country\" (change)=\"onFilterChange()\">\r\n <option value=\"\">All countries</option>\r\n <option *ngFor=\"let country of countries\" [value]=\"country\">{{ country }}</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-pending\">Pending action items</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-pending\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.pendingActions\" (change)=\"onFilterChange()\">\r\n <option value=\"\">All</option>\r\n <option value=\"true\">Yes</option>\r\n <option value=\"false\">No</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-footer\">\r\n <button type=\"button\" class=\"tk-locations__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\r\n <button type=\"button\" class=\"tk-locations__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\r\n </div>\r\n </aside>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MaterialModule } from './material.module';\r\nimport { LocationsComponent } from './locations.component';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { TkLoaderComponent } from '@tuki-io/tuki-widgets/shared';\r\n\r\n@NgModule({\r\n declarations: [\r\n LocationsComponent,\r\n LocationConfirmDialogComponent,\r\n ],\r\n imports: [\r\n TkLoaderComponent,\r\n CommonModule,\r\n HttpClientModule,\r\n FormsModule,\r\n MaterialModule,\r\n ],\r\n exports: [\r\n LocationsComponent,\r\n ],\r\n})\r\nexport class LocationsModule { }\r\n","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Widget Modules\r\nexport * from './src/locations.module';\r\n\r\n// Components\r\nexport * from './src/locations.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.APIService","i2.LocationsService","i3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;MA0Ba,cAAc,CAAA;;4GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAhBvB,eAAe;QACf,eAAe;QACf,aAAa;QACb,aAAa;QACb,wBAAwB;AACxB,QAAA,gBAAgB,aAGhB,eAAe;QACf,eAAe;QACf,aAAa;QACb,aAAa;QACb,wBAAwB;QACxB,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAGP,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAhBvB,eAAe;QACf,eAAe;QACf,aAAa;QACb,aAAa;QACb,wBAAwB;AACxB,QAAA,gBAAgB,EAGhB,eAAe;QACf,eAAe;QACf,aAAa;QACb,aAAa;QACb,wBAAwB;QACxB,gBAAgB,CAAA,EAAA,CAAA,CAAA;4FAGP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAlB1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,wBAAwB;wBACxB,gBAAgB;AACjB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,aAAa;wBACb,wBAAwB;wBACxB,gBAAgB;AACjB,qBAAA;iBACF,CAAA;;;MCVY,8BAA8B,CAAA;IACzC,WACS,CAAA,SAAuD,EAC9B,IAA+B,EAAA;AADxD,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAA8C;AAC9B,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAA2B;KAC5D;AAEL,IAAA,OAAO,CAAC,MAAe,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC9B;;AARU,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,8CAG/B,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAHd,8BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,8BAA8B,kECf3C,uzBAYA,EAAA,MAAA,EAAA,CAAA,6jCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FDGa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;+BACE,4BAA4B,EAAA,aAAA,EAGvB,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,uzBAAA,EAAA,MAAA,EAAA,CAAA,6jCAAA,CAAA,EAAA,CAAA;;;8BAKlC,MAAM;+BAAC,eAAe,CAAA;;;;MEXd,UAAU,CAAA;AAIrB,IAAA,WAAA,CACU,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAC3B;AAEL,IAAA,KAAK,CAAC,GAAW,EAAE,MAAY,EAAE,KAAe,EAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KACvG;AAED,IAAA,IAAI,CAAC,GAAW,EAAE,IAAS,EAAE,MAAM,GAAG,EAAE,EAAA;AACtC,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC9G;IAED,GAAG,CAAC,GAAW,EAAE,IAAA,GAAY,IAAI,EAAE,MAAM,GAAG,EAAE,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC7G;AAED,IAAA,MAAM,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KAC1G;AAEO,IAAA,oBAAoB,CAAC,MAAW,EAAA;QACtC,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;gBACf,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;AACzF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,UAAU,CAAC,KAAe,EAAA;AAChC,QAAA,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAChC,QAAA,IAAI,KAAK,EAAE;YACT,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC7C,SAAA;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC;AAC7D,QAAA,OAAO,OAAO,CAAC;KAChB;IAEO,kBAAkB,CAAC,IAAS,EAAE,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAA;QAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,mBAAmB,CAAC,EACzD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AAC3B,QAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;KAC3D;;wGA9DU,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;4FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;ACNM,MAAM,GAAG,GAAG;AACjB,IAAA,eAAe,EAAE;;;;;AAKf,QAAA,OAAO,EAAE,+DAA+D;AACzE,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,YAAY,EAAE,4CAA4C;AAC1D,QAAA,YAAY,EAAE,yDAAyD;;;;AAIvE,QAAA,eAAe,EAAE,2CAA2C;AAC7D,KAAA;CACF;;ACMD,SAAS,iBAAiB,CAAC,GAAQ,EAAA;IACjC,OAAO;QACL,QAAQ,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,QAAQ,KAAI,EAAE;QAC7B,QAAQ,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,QAAQ,KAAI,EAAE;QAC7B,IAAI,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,IAAI,KAAI,EAAE;QACrB,KAAK,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,KAAK,KAAI,EAAE;QACvB,UAAU,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,UAAU,KAAI,EAAE;QACjC,OAAO,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,OAAO,KAAI,EAAE;AAC3B,QAAA,WAAW,EAAE,CAAA,GAAG,aAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,WAAW,MAAI,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,OAAO,CAAA,IAAI,EAAE;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ,EAAA;;IAC1B,OAAO;AACL,QAAA,EAAE,EAAE,MAAM,CAAC,CAAA,EAAA,GAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;QACzB,IAAI,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,IAAI,KAAI,EAAE;QACrB,QAAQ,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,QAAQ,KAAI,EAAE;QAC7B,OAAO,EAAE,iBAAiB,CAAC,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,OAAO,CAAC;;QAExC,gBAAgB,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,gBAAgB,KAAI,OAAO;QAClD,iBAAiB,EAAE,CAAC,EAAC,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,iBAAiB,CAAA;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,GAAQ,EAAA;IACtB,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,EAAE,CAAC;QACnB,IAAI,EAAE,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,uBAAH,GAAG,CAAE,IAAI,KAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ,EAAA;IAC9B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,IAAI,CAAC;QACvB,QAAQ,EAAE,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,QAAQ,IAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI;KAC1D,CAAC;AACJ,CAAC;MAKY,gBAAgB,CAAA;AAC3B,IAAA,WAAA,CAAoB,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAAK;AAE/C,IAAA,kBAAkB,CAAC,UAAkB,EAAA;AACnC,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AACnF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,QAAa,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CACtF,CAAC;KACH;IAED,WAAW,CAAC,MAAc,EAAE,OAAgB,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,IAAI,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;KAC1E;AAED,IAAA,aAAa,CAAC,UAAkB,EAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1F,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CACpC,GAAG,CAAC,CAAC,QAAa,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAClE,CAAC;KACH;IAED,yBAAyB,CAAC,UAAkB,EAAE,QAAkB,EAAA;AAC9D,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KAC5C;;8GAzBU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;ACvDD,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAIzC,MAAM,iBAAiB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;MAO1B,kBAAkB,CAAA;AAuC7B,IAAA,WAAA,CACU,UAAsB,EACtB,gBAAkC,EAClC,MAAiB,EAAA;AAFjB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AACtB,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAClC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAW;AArCjB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAC1C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU,CAAC;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ,CAAC;;;;AAKrD,QAAA,IAAa,CAAA,aAAA,GAAmB,EAAE,CAAC;AACnC,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElB,QAAA,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;AAChB,QAAA,IAAa,CAAA,aAAA,GAA2B,KAAK,CAAC;AAC9C,QAAA,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;AAEjB,QAAA,IAAe,CAAA,eAAA,GAAG,iBAAiB,CAAC;AAC7C,QAAA,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;AACd,QAAA,IAAA,CAAA,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAA,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;QAC1B,IAAA,CAAA,OAAO,GAAG;AACR,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,MAAM,EAAE,EAAE;SACX,CAAC;QAEe,IAAmB,CAAA,mBAAA,GAAG,OAAO,IAAI,KAAK,WAAW,IAAI,cAAc,IAAI,IAAI;AAC1F,cAAE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;cACjD,IAAI,CAAC;AAEQ,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAA0C,CAAC;AAChF,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAAsD,CAAC;;;QA8KzE,IAAA,CAAA,qBAAqB,GAAqD;YACzF,KAAK,EAAE,EAAE,GAAG,EAAE,wBAAwB,EAAE,OAAO,EAAE,eAAe,EAAE;YAClE,GAAG,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE;YACzD,EAAE,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,OAAO,EAAE,kBAAkB,EAAE;SACzE,CAAC;KA5KG;IAEL,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;KACjC;IAEO,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,EAAE,CAAC,aAAa,KAAI;gBACtB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aACxB;AACF,SAAA,CAAC,CAAC;KACJ;;;IAIO,cAAc,GAAA;QACpB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;AAC7D,YAAA,IAAI,EAAE,CAAC,OAA6B,KAAI;AACtC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,CAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAClF,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aAC7D;AACF,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,aAAa,CAAC,IAAoB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAG;;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,GAAG,CAAE,EAAA,EAAA,OAAO,EAAE,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,OAAO,EAAE,WAAW,EAAE,CAAA,EAAA,GAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,MAAM,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,EAAG,CAAA,CAAA;AAC/E,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAG,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAC,EAAC,CAAA,EAAA,GAAA,GAAG,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,iBAAiB,CAAA,CAAA,EAAA,CAAC,CAAC;KAC5E;AAED,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;KACpE;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KAC1G;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KACnH;AAED,IAAA,IAAI,YAAY,GAAA;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAG;;YAC/C,OAAA,CAAC,CAAC,IAAI;AACJ,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAClD,CAAC,CAAA,MAAA,CAAA,EAAA,GAAA,GAAG,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,KAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChE,CAAC,CAAA,MAAA,CAAA,EAAA,GAAA,GAAG,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,KAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjE,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrD,iBAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;iBACzE,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC,EAAC,CAAA,EAAA,GAAA,GAAG,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAiB,CAAA,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAC3G,iBAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAAA,SAAA,CAClE,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,YAAA,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC;AACjE,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,SAAS,GAAA;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9D;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;KACjC;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAA,EAAG,KAAK,CAAM,GAAA,EAAA,GAAG,OAAO,IAAI,CAAC,aAAa,CAAA,CAAE,CAAC;KACrD;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KAC3B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;KAClE;AAED,IAAA,OAAO,CAAC,GAAiB,EAAA;AACvB,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;KACtB;;;;;AAMO,IAAA,mBAAmB,CAAC,GAAiB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACxF,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,aAAa,CAAC;KACtB;AAED,IAAA,eAAe,CAAC,GAAiB,EAAA;QAC/B,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;KACpD;AAED,IAAA,kBAAkB,CAAC,GAAiB,EAAA;QAClC,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC;KACxD;AAED,IAAA,cAAc,CAAC,GAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC;KACnD;AAED,IAAA,WAAW,CAAC,GAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;aAC7F,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,KAAK,CAAC,CAAC;KAChB;AAED,IAAA,YAAY,CAAC,GAAiB,EAAA;;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtD,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;QACD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,EAAE,CAAC,OAAO,CAAC,KAAI,OAAO,CAAC;KACzD;AAUD,IAAA,oBAAoB,CAAC,GAAiB,EAAA;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;KAC1E;AAED,IAAA,mBAAmB,CAAC,KAAY,EAAA;QAC9B,IAAI,CAAC,UAAU,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;KACpE;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;KAC/B;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;KAClD;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAChC;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;AAED,IAAA,gBAAgB,CAAC,KAAY,EAAA;QAC3B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAE,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC,CAAC;AAClE,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KACpB;IAED,gBAAgB,GAAA;QACd,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;IAED,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;AAED,IAAA,cAAc,CAAC,GAAiB,EAAA;QAC9B,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,SAAA;KACF;AAED,IAAA,cAAc,CAAC,GAAiB,EAAA;QAC9B,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,GAAiB,EAAA;QAChC,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,SAAA;KACF;AAED,IAAA,cAAc,CAAC,GAAiB,EAAA;AAC9B,QAAA,OAAO,GAAG,CAAC,eAAe,KAAK,aAAa,CAAC;KAC9C;AAED,IAAA,aAAa,CAAC,GAAiB,EAAA;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;AACjE,YAAA,UAAU,EAAE,kCAAkC;AAC9C,YAAA,aAAa,EAAE,qCAAqC;AACpD,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,CAAW,QAAA,EAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAG,CAAA,CAAA;AAClC,gBAAA,OAAO,EAAE,CAA2C,wCAAA,EAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAiB,eAAA,CAAA;AAClF,gBAAA,iBAAiB,EAAE,cAAc;AAClC,aAAA;AACF,SAAA,CAAC,CAAC;QAEH,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,SAAS,IAAG;AAC5C,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,WAAW,CAAC,GAAiB,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,QAAA,GAAG,CAAC,eAAe,GAAG,aAAa,CAAC;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC/D,YAAA,IAAI,EAAE,CAAC,OAAe,KAAI;AACxB,gBAAA,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3C,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAClC,iBAAA;aACF;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aAC3C;AACF,SAAA,CAAC,CAAC;KACJ;IAEO,mBAAmB,CAAC,MAAc,EAAE,OAAe,EAAA;AACzD,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,IAAI,GAAG,MAAW;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,gBAAA,IAAI,EAAE,CAAC,QAA2B,KAAI;AACpC,oBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;;;;AAI1D,oBAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE;wBAC7C,OAAO;AACR,qBAAA;AACD,oBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;oBACpC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;AAC5C,wBAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAClC,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC3C,qBAAA;iBACF;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACpC,oBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;iBAC3C;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;AAEF,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC;KACpF;;;;;IAMO,kBAAkB,CAAC,MAAc,EAAE,MAA+B,EAAA;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;AACrE,QAAA,IAAI,GAAG,EAAE;AACP,YAAA,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;AAC9B,SAAA;KACF;;;AAIO,IAAA,mBAAmB,CAAC,MAAc,EAAA;AACxC,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC;YAClE,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAChD,SAAA,CAAC,CAAC;KACJ;;;AAIO,IAAA,kBAAkB,CAAC,KAAqB,EAAA;AAC9C,QAAA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,KAAK,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAChG,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IACpD,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;cAChD,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,GAAG,CAAA,EAAA,EAAE,eAAe,EAAE,aAAsB,EAAA,CAAA,GACjD,GAAG,CACR,CAAC;KACH;AAEO,IAAA,sBAAsB,CAAC,MAAc,EAAA;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,IAAI,QAAQ,EAAE;YACZ,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxC,SAAA;KACF;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC7B;IAED,eAAe,GAAA;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI;YACxC,GAAG,CAAC,IAAI,CAAC,IAAI;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YACtB,GAAG,CAAC,WAAW,IAAI,cAAc;AAClC,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,CAAC,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,CAAC;AACxD,YAAA,GAAG,IAAI;AACR,SAAA,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEjF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAClF,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;KAC1B;;gHA3aU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,uSClB/B,m7VA+OA,EAAA,MAAA,EAAA,CAAA,u9PAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,4LAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD7Na,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,m7VAAA,EAAA,MAAA,EAAA,CAAA,u9PAAA,CAAA,EAAA,CAAA;kJAKf,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MEFI,eAAe,CAAA;;6GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAdxB,kBAAkB;AAClB,QAAA,8BAA8B,aAG9B,iBAAiB;QACjB,YAAY;QACZ,gBAAgB;QAChB,WAAW;QACX,cAAc,aAGd,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGT,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAVxB,iBAAiB;QACjB,YAAY;QACZ,gBAAgB;QAChB,WAAW;QACX,cAAc,CAAA,EAAA,CAAA,CAAA;4FAML,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhB3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,kBAAkB;wBAClB,8BAA8B;AAC/B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,YAAY;wBACZ,gBAAgB;wBAChB,WAAW;wBACX,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,kBAAkB;AACnB,qBAAA;iBACF,CAAA;;;ACxBD;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
|