tango-app-ui-analyse-zone 3.7.1-beta.22 → 3.7.1-beta.23

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.
@@ -1 +1 @@
1
- {"version":3,"file":"tango-app-ui-analyse-zone.mjs","sources":["../../../projects/tango-analyse-zone/src/lib/components/services/zone.service.ts","../../../projects/tango-analyse-zone/src/lib/components/services/zonev2.service.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-journey/zone-journey.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-journey/zone-journey.component.html","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.ts","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.html","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.ts","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.html","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.ts","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.html","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.ts","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone-routing.module.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.html","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone.module.ts","../../../projects/tango-analyse-zone/src/public-api.ts","../../../projects/tango-analyse-zone/src/tango-app-ui-analyse-zone.ts"],"sourcesContent":["import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError, ReplaySubject } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ZoneService implements OnDestroy {\r\n zoneAnalysisV1Url:any;\r\n trafficApiUrl:any;\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n zoneSegmentation = new BehaviorSubject<any>(null);\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisV1Url = env.zoneAnalysisV1Url;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + 'list'+ EXCEL_EXTENSION);\r\n }\r\n public saveAsExcelFile1(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n\r\n zoneConcentrationTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data)\r\n }\r\n // zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n // return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n // }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapDatas_v1`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapAvailableDates_v1`, data)\r\n }\r\n getCardData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/cardsAgeAnalysis_v1`, data)\r\n }\r\n getTopPerformingZonesData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingZones_v1`, data)\r\n }\r\n getTopPerformingStoresTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data)\r\n }\r\n getTopPerformingStoresTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSegmentationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1`, data)\r\n }\r\n getSegmentationDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430`, data)\r\n }\r\n getInterationTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable459Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data)\r\n }\r\n getInterationTable459DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneInteractionTableExport_430( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTableExport_430`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationTableExport`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n zonesegmentationTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTable_v1`, data)\r\n }\r\n getZoneSegmentationTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTableExport_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getPasserByTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_v1`, data)\r\n }\r\n getPasserByTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInteractionTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_v1`, data)\r\n }\r\n getInteractionTable430Export( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getZonewiseCustomerFunnelData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_v1`, data)\r\n }\r\n getZonewiseCustomerFunnelExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n private zoneNameSubject = new BehaviorSubject<string | null>(null);\r\n\r\n setData(zoneName: string) {\r\n this.zoneNameSubject.next(zoneName);\r\n }\r\n\r\n getData(): string | null {\r\n return this.zoneNameSubject.value; // current value\r\n }\r\n\r\n getData$(): Observable<string | null> {\r\n return this.zoneNameSubject.asObservable(); // stream to subscribe\r\n }\r\n\r\n getHeaderZone(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getZoneAPI_v2`,data)\r\n }\r\n \r\n getNewZoneFF(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneFF_v2`, data)\r\n }\r\n\r\n getSelectedZoneFF(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getSelectedZoneFF_v2`, data)\r\n }\r\n getSelectedZoneFFExport(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getSelectedZoneFF_v2`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n\r\n // pant project new services\r\n \r\n getNewHoTColdZoneApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewHoTColdZone_v1`, data)\r\n }\r\n getNewZoneShopperAnalysisApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneShopperAnalysis_v1`, data)\r\n }\r\n getNewZoneShopperAnalysisExportApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneShopperAnalysis_v1`, data,{responseType: 'arraybuffer'})\r\n\r\n }\r\n getNewZoneShopperBubbleChartApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneShopperBubbleChart_v1`, data)\r\n }\r\n getNewCustomerTravelZoneeApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewCustomerTravelZone_v1`, data)\r\n }\r\n getNewAnalysisZoneApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewAnalysisZone_v1`, data)\r\n }\r\n getOverallStoreCardsData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getOverallStoreCards_v1`, data)\r\n }\r\n\r\n getBouncedCardList(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/bouncedCards_v3`, params);\r\n }\r\n\r\n getEngagersCardList(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/engagersCards_v3`, params);\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class Zonev2Service {\r\n zoneAnalysisUrl:any;\r\n trafficApiUrl: any;\r\n private footfallSubject = new BehaviorSubject<number | null>(null); // Initialize with null\r\n footfall$ = this.footfallSubject.asObservable();\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n private zonesSubject = new BehaviorSubject<any[]>([]);\r\n zones$ = this.zonesSubject.asObservable();\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisUrl = env.zoneAnalysisUrl;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n updateFootfall(count: number) {\r\n this.footfallSubject.next(count);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n \r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n // V2 API\r\n getZoneCardsData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zonecards_v2`, data)\r\n }\r\n getTopPerformingZones( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingZones_v2`, data)\r\n }\r\n getTopPerformingStores( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v2`, data)\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getAvailableZoneNames( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/availableZoneNames_v2`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationDates_v2`, data)\r\n }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationHeatmap_v2`, data)\r\n }\r\n getAnalaysisSummary( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneConcentrationSummary_v2`, data)\r\n }\r\n getTrajectoryAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysis_v2`, data)\r\n }\r\n getFootfallDirectoryFolders(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectoryFolders`,\r\n params\r\n );\r\n }\r\n getFootfallDirectory(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectory`,\r\n params\r\n );\r\n }\r\n getStoresActive(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.zoneAnalysisUrl}/getMySubscription`, params);\r\n }\r\n getTrajectoryRateAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysisRate_V2`, data)\r\n }\r\n getCustomerJourney( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourney_V2`, data)\r\n }\r\n getCustomerJourneyTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data)\r\n }\r\n getCustomerJourneyTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n\r\n setZones(zones: any[]) {\r\n this.zonesSubject.next(zones);\r\n}\r\n\r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n\r\n}\r\n\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n} from \"@angular/core\";\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { skip, startWith, takeUntil } from \"rxjs/operators\";\r\nimport { Subject, debounceTime,interval } from \"rxjs\";\r\nimport { ZoneService } from \"../services/zone.service\";\r\nimport { GlobalStateService } from \"tango-app-ui-global\";\r\nimport { ToastService } from \"tango-app-ui-shared\";\r\nimport { Zonev2Service } from \"../services/zonev2.service\";\r\n\r\n@Component({\r\n selector: \"lib-overallcards\",\r\n templateUrl: \"./overallcards.component.html\",\r\n styleUrl: \"./overallcards.component.scss\",\r\n})\r\nexport class OverallcardsComponent implements OnDestroy, OnInit {\r\n cardData: any = {};\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n private genderroot!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n searchInput: any = \"\";\r\n sortColumName: string = \"\";\r\n sortBy: any = \"\";\r\n sortDirection: any = \"\";\r\n getZoneSegmentionData: any = [];\r\n segmentationDataLoading = false;\r\n segmentationNoData = false;\r\n zoneName: any = \"Overall Store\";\r\n clientData: any;\r\n storeIdarray: any;\r\n tableobj: any;\r\n overallStoreCards: any = [];\r\n cardDataTraffic: any = [];\r\n cardNoTrafficData = false;\r\n cardDataTrafficLoading = true;\r\n\r\n constructor(\r\n private zone: NgZone,\r\n private ZoneService: ZoneService,\r\n private zoneV2Service: Zonev2Service,\r\n private cd: ChangeDetectorRef,\r\n public gs: GlobalStateService,\r\n private toast: ToastService,\r\n ) {}\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId);\r\n\r\n // --- ZoneService.getData$() subscription ---\r\n this.ZoneService.getData$()\r\n .pipe(\r\n startWith(null), // 👈 fallback seed emission\r\n skip(1), // skip service's initial seed (keep fallback)\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((res: any) => {\r\n if (res) {\r\n this.zoneName = res;\r\n \r\n this.getCardData();\r\n \r\n } else {\r\n // fallback if no emission\r\n this.getCardData();\r\n this.getAvailableZones();\r\n this.getNewHotClodZone();\r\n this.getCustomPath();\r\n this.dateValue(this.dateType);\r\n }\r\n });\r\n\r\n // --- Client data from localStorage ---\r\n setTimeout(() => {\r\n const clientData: any = JSON.parse(\r\n localStorage.getItem(\"client-details\") || \"{}\"\r\n );\r\n this.clientData = clientData;\r\n }, 100);\r\n\r\n this.cd.detectChanges();\r\n if (this.headerData?.client === \"459\") {\r\n this.getCardDataTraffic();\r\n }\r\n // --- Zone segmentation subscription ---\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(\r\n startWith(null), // 👈 fallback\r\n skip(1), // skip BehaviorSubject initial emission\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((zoneData: any) => {\r\n if (zoneData) {\r\n this.zoneName = zoneData;\r\n this.getZoneSegmentation();\r\n this.getCardData();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getOverallStoreCards() {\r\n this.tableobj = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.storeIdarray,\r\n clientId: this.headerData.client,\r\n dateType: this.dateType,\r\n };\r\n this.ZoneService.getOverallStoreCardsData(this.tableobj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res.code === 200) {\r\n this.overallStoreCards = res?.data?.card;\r\n console.log(\"Overall Store Cards Data:\", this.overallStoreCards);\r\n } else {\r\n this.overallStoreCards = [];\r\n }\r\n },\r\n error: (e) => {\r\n this.overallStoreCards = [];\r\n },\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.autoSlideStop$.next();\r\n this.autoSlideStop$.complete();\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) return;\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n\r\n this.genderroot = am5.Root.new(\"genderchartdiv\");\r\n\r\n\r\n const wrapper = this.genderroot.container.children.push(\r\n am5.Container.new(this.genderroot, {\r\n width: am5.percent(100),\r\n height: am5.percent(100),\r\n layout: this.genderroot.horizontalLayout\r\n })\r\n );\r\n\r\n\r\n const chart = wrapper.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60),\r\n width: am5.percent(45),\r\n height: am5.percent(100)\r\n })\r\n );\r\n\r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: \"value\",\r\n categoryField: \"category\",\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n\r\n\r\n series.labels.template.setAll({\r\n visible: false\r\n });\r\n\r\n \r\n series.ticks.template.setAll({\r\n visible: false\r\n });\r\n\r\n\r\n series.data.setAll(this.genderAnalysis);\r\n\r\n const legend = wrapper.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n width: am5.percent(50),\r\n paddingTop: 20,\r\n layout: this.genderroot.verticalLayout\r\n })\r\n );\r\n\r\n legend.itemContainers.template.setAll({\r\n width: am5.percent(100)\r\n });\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n width: am5.percent(100)\r\n });\r\n\r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n textAlign: \"right\",\r\n width: am5.percent(100)\r\n });\r\n\r\n legend.data.setAll(series.dataItems);\r\n series.appear(1000, 100);\r\n\r\n }, 100);\r\n}\r\n genderchart1() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv1\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv1');\r\n \r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n \r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n \r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n \r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis); \r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(95),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n \r\n });\r\n \r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n legend.itemContainers.template.events.on(\"click\", (ev:any) => { ev.stopPropagation(); });\r\n legend.data.setAll(series.dataItems);\r\n \r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n}\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName ? this.zoneName : \"Overall Store\",\r\n };\r\n\r\n this.ZoneService.getCardData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.card;\r\n this.genderAnalysis = response.data.genderAnalysis;\r\n this.genderAnalysis.forEach((item: any) => {\r\n item.value = Math.round(item.value);\r\n });\r\n this.ageAnalysis = response.data.ageAnalysis;\r\n setTimeout(() => {\r\n if(this.headerData?.client ==='478')\r\n this.genderchart(); // Call this method after data is set\r\n else \r\n this.genderchart1();\r\n }, 200);\r\n\r\n this.cardDataLoading = false;\r\n this.cardNoData = false;\r\n } else {\r\n this.cardData = [];\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n (error) => {\r\n this.cardData = [];\r\n this.cd.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneSegmentation();\r\n }\r\n\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.getZoneSegmentation();\r\n }\r\n\r\n getZoneSegmentation() {\r\n this.segmentationDataLoading = true;\r\n this.segmentationNoData = false;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId: this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n // };\r\n this.ZoneService.zonesegmentationTable(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res.code === 200) {\r\n this.getZoneSegmentionData = res?.data?.zoneConcentrationData;\r\n this.segmentationDataLoading = false;\r\n this.segmentationNoData = false;\r\n } else {\r\n this.segmentationDataLoading = false;\r\n this.segmentationNoData = true;\r\n }\r\n },\r\n error: (e) => {\r\n this.segmentationDataLoading = false;\r\n this.segmentationNoData = true;\r\n },\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId: this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: true,\r\n };\r\n this.ZoneService.getZoneSegmentationTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, \"Zone Segmentation \");\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast(\"Something went Wrong..\");\r\n },\r\n });\r\n }\r\n\r\n getCardDataTraffic(): void {\r\n this.cardDataTrafficLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n\r\n this.ZoneService.getSegmentationData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.cardDataTrafficLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if (response?.data?.segmentationAnalysis?.length) {\r\n this.cardDataTraffic = response.data.segmentationAnalysis;\r\n // this.cardData = response.data.segmentationAnalysis.map((item: any) => ({\r\n // name: item.category,\r\n // value: item.value,\r\n // concentrationRate: item.concentrationRate\r\n // }));\r\n this.cardNoTrafficData = this.cardDataTraffic.length === 0;\r\n } else {\r\n this.cardDataTraffic = [];\r\n this.cardNoTrafficData = true;\r\n }\r\n } else {\r\n this.cardDataTraffic = [];\r\n this.cardNoTrafficData = true;\r\n }\r\n // this.dataEmitter.emit(this.cardData?.length);\r\n },\r\n (error) => {\r\n this.cardDataTraffic = [];\r\n this.cardNoData = true;\r\n this.cd.detectChanges();\r\n }\r\n );\r\n }\r\n onExportTraffic() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getSegmentationDataExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, \"TrafficSegmentation\");\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast(\"Something went Wrong..\");\r\n },\r\n });\r\n }\r\n\r\n getHotColdZoneData: any;\r\n getNewHotClodZone() {\r\n let obj = {\r\n clietId: this.headerData.client,\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n };\r\n this.ZoneService.getNewHoTColdZoneApi(obj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res?.code === 200) {\r\n this.getHotColdZoneData = res?.data;\r\n } else {\r\n this.getHotColdZoneData = [];\r\n }\r\n },\r\n error: (e) => {\r\n this.getHotColdZoneData = [];\r\n },\r\n });\r\n }\r\n getEngagersCardData: any;\r\n getBouncedCardData: any;\r\n getBouncedCard() {\r\n this.tableobj.dateType = this.dateType;\r\n this.ZoneService.getBouncedCardList(this.tableobj)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.getBouncedCardData = res?.data;\r\n } else {\r\n this.getBouncedCardData = [];\r\n }\r\n },\r\n error: (err: any) => {\r\n this.getBouncedCardData = [];\r\n this.cd.detectChanges();\r\n },\r\n });\r\n }\r\n engagersNodata = false;\r\n getEngagersCard() {\r\n this.tableobj.dateType = this.dateType;\r\n this.ZoneService.getEngagersCardList(this.tableobj)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.getEngagersCardData = res?.data;\r\n } else {\r\n this.getEngagersCardData = [];\r\n }\r\n },\r\n error: (err: any) => {\r\n this.getEngagersCardData = [];\r\n this.cd.detectChanges();\r\n },\r\n });\r\n }\r\n dateType: any = \"daily\";\r\n dateValue(type: any) {\r\n this.dateType = type;\r\n this.getOverallStoreCards();\r\n this.getBouncedCard();\r\n this.getEngagersCard();\r\n }\r\n customerTravelPath: any = [];\r\n\r\npaths: any[] = [];\r\nactivePathIndex = 0;\r\n\r\npathLoading = true;\r\npathNoData = false;\r\n\r\nprivate autoSlideStop$ = new Subject<void>();\r\n\r\n/* ---------------- API ---------------- */\r\n\r\ngetCustomPath() {\r\n this.pathLoading = true;\r\n this.pathNoData = false;\r\n this.autoSlideStop$.next();\r\n\r\n const obj = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((s: any) => s.checked)\r\n .map((s: any) => s.storeId),\r\n clietId: this.headerData.client,\r\n nPaths: 5\r\n };\r\n\r\n this.ZoneService.getNewCustomerTravelZoneeApi(obj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.pathLoading = false;\r\n\r\n if (!res?.data?.customer_travel_path?.length) {\r\n this.paths = [];\r\n this.pathNoData = true;\r\n return;\r\n }\r\n\r\n const travelPathObj = res.data.customer_travel_path[0];\r\n\r\n this.paths = Object.keys(travelPathObj).map(key => ({\r\n label: key,\r\n percent: travelPathObj[key].percent,\r\n path: travelPathObj[key].path\r\n }));\r\n\r\n this.activePathIndex = 0;\r\n this.pathNoData = false;\r\n\r\n // 🔥 START AUTO CAROUSEL (ONLY HERE)\r\n this.startAutoCarousel();\r\n },\r\n\r\n error: () => {\r\n this.paths = [];\r\n this.pathNoData = true;\r\n this.pathLoading = false;\r\n }\r\n });\r\n}\r\n\r\n\r\nnext() {\r\n this.activePathIndex =\r\n (this.activePathIndex + 1) % this.paths.length;\r\n}\r\n\r\nprev() {\r\n this.activePathIndex =\r\n (this.activePathIndex - 1 + this.paths.length) % this.paths.length;\r\n}\r\n\r\ngoTo(index: number) {\r\n this.activePathIndex = index;\r\n}\r\n\r\n\r\nstartAutoCarousel() {\r\n if (this.paths.length <= 1) return;\r\n\r\n interval(3000) // ⏱ 3 seconds\r\n .pipe(takeUntil(this.autoSlideStop$), takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.activePathIndex =\r\n (this.activePathIndex + 1) % this.paths.length;\r\n this.cd.detectChanges();\r\n });\r\n}\r\n\r\n\r\n\r\navailableZones:any = [];\r\nselectedZone:any = '';\r\n\r\n getAvailableZones(){\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, \r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.zoneV2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res: any) => {\r\n if (res && res?.code === 200) {\r\n this.availableZones = (res.data.availableZoneData || []).filter(\r\n (zone: any) => zone.zoneName?.toLowerCase() !== 'overall store'\r\n);\r\n // this.zoneV2Service.setZones(this.availableZones);\r\n this.cd.detectChanges();\r\nif (this.availableZones.length) {\r\n this.selectedZone = this.availableZones[0].zoneName;\r\n this.getAnalyseZone();\r\n}\r\n } else {\r\n this.availableZones = [];\r\n }\r\n },\r\n error: (err: any) => {\r\n this.availableZones = [];\r\n }\r\n }\r\n );\r\n }\r\nonZoneChange(event:any){\r\n this.selectedZone = event.target.value;\r\n this.getAnalyseZone();\r\n}\r\ngetAnalyseZoneData: any;\r\n getAnalyseZone() {\r\n let obj = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zone:this.selectedZone\r\n }\r\n this.ZoneService.getNewAnalysisZoneApi(obj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res?.code === 200) {\r\n this.getAnalyseZoneData = res?.data?.analysisData;\r\n console.log(\"Analyse Zone Data:\", this.getAnalyseZoneData);\r\n } else {\r\n this.getAnalyseZoneData = [];\r\n }\r\n },\r\n error: (e) => {\r\n this.getAnalyseZoneData = [];\r\n },\r\n });\r\n\r\n\r\n }\r\n}\r\n","<div class=\"row\">\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"col-lg-4 h-auto\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ overallStoreCards?.overallFootfall?.count !== null &&\r\n overallStoreCards?.overallFootfall?.count !== undefined\r\n ? overallStoreCards?.overallFootfall?.count\r\n : '--'\r\n }}</div>\r\n\r\n <div class=\"subtext\">Overall Store Footfall</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"overallStoreCards?.overallFootfall?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!overallStoreCards?.overallFootfall?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{ overallStoreCards?.overallFootfall?.PreviousData}}%</span> vs\r\n previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"mt-1 cursor-pointer fs-5 mx-1\"\r\n [ngClass]=\"dateType ==='daily' ? 'text-primary' :'text-normal'\" (click)=\"dateValue('daily')\">1D\r\n </div>\r\n <div class=\"mt-1 cursor-pointer fs-5 mx-1\"\r\n [ngClass]=\"dateType ==='weekly' ? 'text-primary' :'text-normal'\" (click)=\"dateValue('weekly')\">1W\r\n </div>\r\n <div class=\"mt-1 cursor-pointer fs-5 mx-1\"\r\n [ngClass]=\"dateType ==='monthly' ? 'text-primary' :'text-normal'\" (click)=\"dateValue('monthly')\">\r\n 1M</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ getBouncedCardData?.card?.bounced?.rate !== null &&\r\n getBouncedCardData?.card?.bounced?.rate !== undefined\r\n ? getBouncedCardData?.card?.bounced?.rate.toLocaleString('en-US', {\r\n minimumFractionDigits: 0\r\n })\r\n : '--'\r\n }}\r\n %</div>\r\n\r\n <div class=\"subtext\">Bounced Rate</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"getBouncedCardData?.data?.bounced?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!getBouncedCardData?.data?.bounced?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{getBouncedCardData?.data?.bounced?.PreviousData}}%</span>\r\n vs previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ getEngagersCardData?.card?.engagers?.rate !== null &&\r\n getEngagersCardData?.card?.engagers?.rate !== undefined\r\n ? getEngagersCardData?.card?.engagers?.rate.toLocaleString('en-US', {\r\n minimumFractionDigits: 0\r\n })\r\n : '--'\r\n }}\r\n %</div>\r\n\r\n <div class=\"subtext\">Engagers Rate</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"getEngagersCardData?.data?.engagers?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!getEngagersCardData?.data?.engagers?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\">\r\n <span class=\"percent-value\">{{getEngagersCardData?.data?.engagers?.PreviousData}}%</span> vs previous\r\n {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ overallStoreCards?.avgDwellTime?.count !== null && overallStoreCards?.avgDwellTime?.count !== undefined ? overallStoreCards?.avgDwellTime?.count : '--' }} Mins</div>\r\n\r\n <div class=\"subtext\">Average Dwell Time</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"overallStoreCards?.avgDwellTime?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!overallStoreCards?.avgDwellTime?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{ overallStoreCards?.avgDwellTime?.PreviousData}}%</span>\r\n vs previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ overallStoreCards?.impressionRate?.rate !== null && overallStoreCards?.impressionRate?.rate !== undefined ? overallStoreCards?.impressionRate?.rate.toLocaleString('en-US', {\r\n minimumFractionDigits: 0\r\n }) : '--' }}%</div>\r\n\r\n <div class=\"subtext\">Impression rate</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"overallStoreCards?.impressionRate?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!overallStoreCards?.impressionRate?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{ overallStoreCards?.impressionRate?.PreviousData}}%</span>\r\n vs previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <!-- <div class=\"card\">\r\n <div class=\"card-header py-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"subtext\">Overall Store Footfall <span\r\n ngbTooltip=\"Unique Store Footfall Walk-ins\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"headcount\">{{ cardData.oveallZoneFootfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.bounced?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Bounced Footfall Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent less than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value :clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.engagers?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Engagers Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent more than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value : clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} Mins</div>\r\n <div class=\"subtext mt-3\">Average Dwell Time <span\r\n ngbTooltip=\"Avg time spent by the engagers inside the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.concentration?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Concentration Rate <span\r\n ngbTooltip=\"The proportion of walk-ins remaining in key areas\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div [ngClass]=\"headerData?.client === '478' ? 'col-3':'col-4'\" class=\"h-300px\">\r\n \r\n <section *ngIf=\"headerData?.client === '478'\">\r\n\r\n <div *ngIf=\"storeIdarray?.length === 1\" class=\"card\">\r\n \r\n \r\n <div class=\"headtext px-3 pt-3\">Demographics</div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Demographics Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Age Range</th>\r\n <th>Percentage of FF</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.category }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\"\r\n [value]=\"item.value\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--'}}%\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray?.length > 1\" class=\"card px-3 py-2\">\r\n <div class=\"analysis-header d-flex align-items-center gap-2\">\r\n <select class=\"form-select analysis-select\" [(ngModel)]=\"selectedZone\" (change)=\"onZoneChange($event)\">\r\n <option *ngFor=\"let zone of availableZones\" [value]=\"zone.zoneName\">\r\n {{ zone.zoneName | titlecase }}\r\n </option>\r\n </select>\r\n <h4 class=\"analysis-title\">Analysis</h4>\r\n </div>\r\n <div class=\"ellipse1 border-0 p-3 py-5\">\r\n <div class=\"headcount\">{{getAnalyseZoneData?.zoneTotal ?? '--'}} <span class=\"text-normal fs-5\">({{getAnalyseZoneData?.zonePercentage}}%)</span></div>\r\n \r\n <div class=\"subtext\">Trial Zone Footfall</div>\r\n </div>\r\n <div class=\"gender-cards py-3 mt-1\">\r\n <!-- Male -->\r\n <div class=\"gender-card\">\r\n <h3>{{getAnalyseZoneData?.male ?? '--'}} <span>({{getAnalyseZoneData?.malePercentage ?? '--'}}%)</span></h3>\r\n <p>Male</p>\r\n <span class=\"age-pill me-2\">{{getAnalyseZoneData?.age | titlecase}} <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"8\" viewBox=\"0 0 10 8\" fill=\"none\">\r\n <path d=\"M1.38203 3.4875L1.06953 2.8125L0.394531 2.5L1.06953 2.1875L1.38203 1.5125L1.69453 2.1875L2.36953 2.5L1.69453 2.8125L1.38203 3.4875ZM6.88203 3L6.40703 1.975L5.38203 1.5L6.40703 1.025L6.88203 0L7.35703 1.025L8.38203 1.5L7.35703 1.975L6.88203 3Z\" fill=\"#009BF3\"/>\r\n <path d=\"M0.507812 7.125L2.3867 5.15377C2.76593 4.7559 3.39518 4.73868 3.7956 5.11522L4.51482 5.79154C4.88735 6.14184 5.46413 6.15466 5.85186 5.82126L9.13281 3\" stroke=\"#009BF3\" stroke-width=\"1.4\"/>\r\n <circle cx=\"2.94531\" cy=\"4.3125\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"5.19531\" cy=\"6.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"0.695312\" cy=\"6.9375\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"8.94531\" cy=\"3.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n </svg></span>\r\n <span class=\"age-value\">{{getAnalyseZoneData?.agePercentage ?? '--'}}%</span>\r\n </div>\r\n \r\n <!-- Female -->\r\n <div class=\"gender-card\">\r\n <h3>{{getAnalyseZoneData?.female ?? '--'}} <span>({{getAnalyseZoneData?.femalePercentage ?? '--'}}%)</span></h3>\r\n <p>Female</p>\r\n <span class=\"age-pill me-2\">{{getAnalyseZoneData?.age | titlecase}} <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"8\" viewBox=\"0 0 10 8\" fill=\"none\">\r\n <path d=\"M1.38203 3.4875L1.06953 2.8125L0.394531 2.5L1.06953 2.1875L1.38203 1.5125L1.69453 2.1875L2.36953 2.5L1.69453 2.8125L1.38203 3.4875ZM6.88203 3L6.40703 1.975L5.38203 1.5L6.40703 1.025L6.88203 0L7.35703 1.025L8.38203 1.5L7.35703 1.975L6.88203 3Z\" fill=\"#009BF3\"/>\r\n <path d=\"M0.507812 7.125L2.3867 5.15377C2.76593 4.7559 3.39518 4.73868 3.7956 5.11522L4.51482 5.79154C4.88735 6.14184 5.46413 6.15466 5.85186 5.82126L9.13281 3\" stroke=\"#009BF3\" stroke-width=\"1.4\"/>\r\n <circle cx=\"2.94531\" cy=\"4.3125\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"5.19531\" cy=\"6.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"0.695312\" cy=\"6.9375\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"8.94531\" cy=\"3.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n </svg></span>\r\n <span class=\"age-value\">{{getAnalyseZoneData?.agePercentage ?? '--'}}%</span>\r\n </div>\r\n </div>\r\n <div class=\"card-border h-100 py-2 mb-3 mt-1\">\r\n <div class=\"ellipse1 border-0 mb-3 p-3 py-5\">\r\n <div class=\"headcount\">{{getAnalyseZoneData?.conversionCount ?? '--'}} <span class=\"text-normal fs-5\">({{getAnalyseZoneData?.conversionCountPercentage ?? '--'}}%)</span></div>\r\n \r\n <div class=\"subtext\">Trial <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M3.33203 7.99967H12.6654M12.6654 7.99967L7.9987 3.33301M12.6654 7.99967L7.9987 12.6663\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> Footfall</div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n <section *ngIf=\"headerData?.client !== '478'\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Gender Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n \r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\"> \r\n <div class=\"col-lg-12 my-18\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv1\"></div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div [ngClass]=\"headerData?.client === '478' ? 'col-5':'col-4'\" class=\"h-300px\">\r\n <div *ngIf=\"headerData?.client !== '478'\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Age Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll2\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Age Range</th>\r\n <th>Percentage of FF</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.category }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\"\r\n [value]=\"item.value\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--'}}%\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n \r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\"> \r\n <div class=\"col-lg-12 my-18\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"headerData?.client === '478'\">\r\n\r\n <div class=\"card min-h-400px max-h-auto px-3\">\r\n <div class=\"my-3\">\r\n <h3 class=\"title pt-3\">Most Travelled Path</h3>\r\n <div *ngIf=\"!pathLoading && !pathNoData\" class=\"path-wrapper border border-1\">\r\n <div class=\"ellipse1 border-0 p-3\">\r\n <!-- SLIDE -->\r\n <div class=\"path-slide\">\r\n <span class=\"badge\">\r\n {{ paths[activePathIndex]?.label }}\r\n </span>\r\n \r\n <span class=\"percent\">\r\n {{ paths[activePathIndex]?.percent }}% of Customers Travel Path\r\n </span>\r\n \r\n <div class=\"path-text\">\r\n <ng-container *ngFor=\"let step of paths[activePathIndex]?.path; let last = last\">\r\n <span class=\"step\">{{ step | titlecase}}</span>\r\n <span class=\"arrowpath\" *ngIf=\"!last\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33203 7.99967H12.6654M12.6654 7.99967L7.9987 3.33301M12.6654 7.99967L7.9987 12.6663\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n \r\n \r\n <!-- DOTS -->\r\n <div class=\"dots col-6 mt-7\">\r\n <span *ngFor=\"let _ of paths; let i = index\" [class.active]=\"activePathIndex === i\"\r\n (click)=\"goTo(i)\">\r\n </span>\r\n </div>\r\n \r\n <!-- ARROWS -->\r\n <div class=\"mt-1 col-6 text-end\">\r\n <span class=\"cursor-pointer\" (click)=\"prev()\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"42\" height=\"42\" viewBox=\"0 0 42 42\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15064_157019)\">\r\n <path\r\n d=\"M26.832 21.0003H15.1654M15.1654 21.0003L20.9987 15.167M15.1654 21.0003L20.9987 26.8337\"\r\n stroke=\"#344054\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15064_157019\" x=\"-2\" y=\"-1\" width=\"46\" height=\"46\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15064_157019\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_15064_157019\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n <span class=\"cursor-pointer\" (click)=\"next()\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"42\" height=\"42\" viewBox=\"0 0 42 42\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15064_157023)\">\r\n <path\r\n d=\"M15.168 21.0003H26.8346M26.8346 21.0003L21.0013 15.167M26.8346 21.0003L21.0013 26.8337\"\r\n stroke=\"#344054\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15064_157023\" x=\"-2\" y=\"-1\" width=\"46\" height=\"46\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15064_157023\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_15064_157023\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n <ng-container *ngIf=\"pathLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"pathNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center p-5 flex-column\">\r\n <img class=\"img-src2\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Travelled Paths</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"my-3\">\r\n <div class=\"row\">\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card-border h-100\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{getHotColdZoneData?.hotZone | titlecase}}</div>\r\n \r\n <div class=\"subtext\">Hot Zone <span class=\"mx-2\"><svg placement=\"top\"\r\n [ngbTooltip]=\"hotZoneTooltip\"\r\n container=\"body\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M7.9987 10.6663V7.99967M7.9987 5.33301H8.00536M14.6654 7.99967C14.6654 11.6816 11.6806 14.6663 7.9987 14.6663C4.3168 14.6663 1.33203 11.6816 1.33203 7.99967C1.33203 4.31778 4.3168 1.33301 7.9987 1.33301C11.6806 1.33301 14.6654 4.31778 14.6654 7.99967Z\"\r\n stroke=\"#344054\" stroke-width=\"1.3\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <ng-template #hotZoneTooltip>\r\n <div class=\"tooltip-title text-start ms-3\">Hot Zone</div>\r\n <div class=\"tooltip-desc\">\r\n Zone with the highest dwell time compared to all other zones\r\n </div>\r\n </ng-template>\r\n </div>\r\n \r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"text-font ms-2\">{{getHotColdZoneData?.hotZoneDwell ?? '--'}} mins\r\n higher </span><span class=\"week-font ms-2\">vs Other Zones</span> </span>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card-border h-100\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{getHotColdZoneData?.coldZone | titlecase}}</div>\r\n \r\n <div class=\"subtext\">Cold Zone <span class=\"mx-2\"><svg placement=\"top\" \r\n [ngbTooltip]=\"coldZoneTooltip\"\r\n container=\"body\" \r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M7.9987 10.6663V7.99967M7.9987 5.33301H8.00536M14.6654 7.99967C14.6654 11.6816 11.6806 14.6663 7.9987 14.6663C4.3168 14.6663 1.33203 11.6816 1.33203 7.99967C1.33203 4.31778 4.3168 1.33301 7.9987 1.33301C11.6806 1.33301 14.6654 4.31778 14.6654 7.99967Z\"\r\n stroke=\"#344054\" stroke-width=\"1.3\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <ng-template #coldZoneTooltip>\r\n <div class=\"tooltip-title text-start ms-3\">Cold Zone</div>\r\n <div class=\"tooltip-desc\">\r\n Zone with the lowest dwell time compared to all other zones\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"text-font ms-2\">{{getHotColdZoneData?.coldZoneDwell ?? '--'}} Sec\r\n higher </span><span class=\"week-font ms-2\">vs Other Zones</span> </span>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"getZoneSegmentionData?.length > 0\" class=\"col-4 h-auto\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 ps-3 pe-0 min-h-50px\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <div class=\"headtext\">Zone Segmentation</div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button *ngIf=\"!segmentationNoData && !segmentationDataLoading\" type=\"button\"\r\n (click)=\"onExport()\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader me-4\"\r\n [disabled]=\"!getZoneSegmentionData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"headtext p-3\">Zone Segmentation</div> -->\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-1 table-responsive agerangescroll1\">\r\n <table *ngIf=\"!segmentationDataLoading && !segmentationNoData\"\r\n class=\"table bottom-border text-nowrap\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg.Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('Trolley')\">\r\n Trolley\r\n <svg [ngClass]=\"sortColumName === 'Trolley' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Trolley' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('Basket')\">\r\n Basket\r\n <svg [ngClass]=\"sortColumName === 'Basket' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Basket' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"h-45px\">\r\n <tr *ngFor=\"let item of getZoneSegmentionData\">\r\n <td>\r\n <div class=\"table-title-primary\">{{ item.zoneName }}</div>\r\n </td>\r\n <td>\r\n {{ item.footfallCount }}\r\n </td>\r\n <td>\r\n {{ item.avgDwellTime }} mins\r\n </td>\r\n <td>\r\n {{ item.Trolley }}%\r\n </td>\r\n <td>\r\n {{ item.Basket }}%\r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"segmentationDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"segmentationNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Segmentation</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"col-md-4 mt-2\"\r\n *ngIf=\"!cardNoTrafficData && headerData?.client === '459' && (storeIdarray[0] ==='459-4' || storeIdarray[0] ==='459-2')\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Traffic Segmentation <span class=\"ms-1\"\r\n ngbTooltip=\"Entrance level traffic segmentation\" placement=\"right\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExportTraffic()\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader me-4\"\r\n [disabled]=\"!cardDataTraffic?.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body mb-18 p-0\">\r\n <div class=\"mx-3 h-188px\">\r\n <table *ngIf=\"!cardDataTrafficLoading && !cardNoTrafficData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Entrance</th>\r\n <th>Entrance wise footfall</th>\r\n <th *ngIf=\"headerData?.client === '463'\">Concentration Rate</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardDataTraffic\">\r\n <td>{{ item.category }}</td>\r\n <td>{{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </td>\r\n <td *ngIf=\"headerData?.client === '463'\">{{\r\n item.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--' }} %</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataTrafficLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoTrafficData && !cardDataTrafficLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </div>","import { Component,ChangeDetectorRef, OnInit ,Input, OnChanges,OnDestroy,SimpleChanges, AfterViewInit, ViewChild, ElementRef, HostListener} from '@angular/core';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5flow from '@amcharts/amcharts5/flow';\r\nimport am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Router } from \"@angular/router\";\r\nimport { Zonev2Service } from '../services/zonev2.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n@Component({\r\n selector: 'lib-zone-journey',\r\n templateUrl: './zone-journey.component.html',\r\n styleUrl: './zone-journey.component.scss'\r\n})\r\nexport class ZoneJourneyComponent implements OnDestroy,OnChanges {\r\n private root!: am5.Root;\r\n @Input() headerData :any;\r\n @Input() clientData :any;\r\n private destroy$ = new Subject<void>();\r\n constructor(private service:ZoneService,private zoneV2Service:Zonev2Service,private cd:ChangeDetectorRef,private router:Router,private ts:ToastService) { }\r\nngOnChanges(changes: SimpleChanges): void {\r\n if (changes['headerData']?.currentValue) {\r\n this.headerData = changes['headerData'].currentValue;\r\n }\r\n if (changes['clientData']?.currentValue) {\r\n this.clientData = changes['clientData'].currentValue;\r\n }\r\n this.getAvailableZones();\r\n this.cd.detectChanges();\r\n}\r\n\r\n\r\nzoneShopperAnalysis:any;\r\nbubbleChartData:any;\r\nobject:any;\r\nobject1:any;\r\nzoneSearchText:string='';\r\n\r\nshowDropdown = false;\r\nsearchText = '';\r\nzoneList:any=[];\r\nfilteredZones:any=[];\r\n\r\n\r\nzonesInitialized = false;\r\ntempZoneList: any[] = [];\r\ntempFilteredZones: any[] = [];\r\ndropdownSearchText = '';\r\navailableZones:any[] = [];\r\n getAvailableZones(){\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, \r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.zoneV2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res: any) => {\r\n if (res && res?.code === 200) {\r\n this.availableZones = (res.data.availableZoneData || []).filter(\r\n (zone: any) => zone.zoneName?.toLowerCase() !== 'overall store'\r\n);\r\n this.zoneList = this.availableZones.map(z => ({\r\n name: z.zoneName,\r\n checked: true\r\n }));\r\n this.zonesInitialized = true;\r\n this.getZoneJourney([]);\r\n this.getBubble([]);\r\n this.cd.detectChanges();\r\n\r\n } else {\r\n this.availableZones = [];\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.availableZones = [];\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n }\r\n );\r\n }\r\n\r\n// getAvailableZones() {\r\n// this.zoneV2Service.zones$\r\n// .pipe(takeUntil(this.destroy$))\r\n// .subscribe((zones) => {\r\n \r\n// this.availableZones = zones;\r\n\r\n// if (!this.zonesInitialized) {\r\n// this.zoneList = zones.map(z => ({\r\n// name: z.zoneName,\r\n// checked: true\r\n// }));\r\n\r\n// this.zonesInitialized = true;\r\n// if(this.zoneList.length){\r\n// console.log('available zones in zone journey', this.zoneList); \r\n// this.getZoneJourney([]);\r\n// this.getBubble([]);\r\n// } else {\r\n// console.log('available zones in zone journey', this.zoneList);\r\n// this.zoneChartNoData = true;\r\n// this.zoneChartLoading = false;\r\n// this.zoneCardNoData = true;\r\n// this.zoneCardLoading = false;\r\n// this.getZoneJourney([]);\r\n// this.getBubble([]);\r\n// }\r\n \r\n// }\r\n// });\r\n// }\r\n\r\n@ViewChild('zoneDropdown') zoneDropdown!: ElementRef;\r\n\r\n\r\n/* OPEN / TOGGLE */\r\ntoggleDropdown(event: MouseEvent) {\r\n event.stopPropagation(); \r\n this.showDropdown = !this.showDropdown;\r\n\r\n if (this.showDropdown) {\r\n this.tempZoneList = this.zoneList.map((z:any) => ({ ...z }));\r\n this.tempFilteredZones = [...this.tempZoneList];\r\n }\r\n}\r\n\r\n/* 🔥 OUTSIDE CLICK HANDLER */\r\n@HostListener('document:click', ['$event'])\r\nonDocumentClick(event: MouseEvent) {\r\n if (!this.showDropdown) return;\r\n\r\n const clickedInside =\r\n this.zoneDropdown?.nativeElement.contains(event.target);\r\n\r\n if (!clickedInside) {\r\n this.showDropdown = false;\r\n }\r\n}\r\ntoggleSelectAll(event: any) {\r\n const checked = event.target.checked;\r\n\r\n // Apply to full temp list\r\n this.tempZoneList = this.tempZoneList.map(z => ({\r\n ...z,\r\n checked\r\n }));\r\n\r\n // Re-apply search filter so UI updates correctly\r\n this.filterZones();\r\n}\r\nisAllSelected(): boolean {\r\n return (\r\n this.tempZoneList.length > 0 &&\r\n this.tempZoneList.every(z => z.checked)\r\n );\r\n}\r\n\r\nfilterZones() {\r\n const text = this.dropdownSearchText.toLowerCase();\r\n this.tempFilteredZones = this.tempZoneList.filter(z =>\r\n z.name.toLowerCase().includes(text)\r\n );\r\n}\r\n\r\napplyZones() {\r\n this.zoneList = this.tempZoneList.map(z => ({ ...z }));\r\n\r\n const hiddenZones = this.zoneList\r\n .filter((z: any) => !z.checked)\r\n .map((z: any) => z.name);\r\n\r\n this.getZoneJourney(hiddenZones);\r\n this.getBubble(hiddenZones);\r\n this.cd.detectChanges();\r\n this.dropdownSearchText = '';\r\n this.showDropdown = false;\r\n}\r\n\r\nresetZones() {\r\n // Reset applied state\r\n this.zoneList = this.zoneList.map((z:any) => ({\r\n ...z,\r\n checked: true\r\n }));\r\n\r\n // Sync temp state\r\n this.tempZoneList = this.zoneList.map((z:any) => ({ ...z }));\r\n this.tempFilteredZones = [...this.tempZoneList];\r\n\r\n this.dropdownSearchText = '';\r\n\r\n // Apply immediately\r\n this.getZoneJourney([]);\r\n this.getBubble([]);\r\n\r\n this.showDropdown = false;\r\n}\r\ngetZoneJourneyExport() {\r\n this.object1 = {\r\n clientId: this.headerData?.client,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n nob: this.clientData?.isNOB,\r\n hideZones: this.zoneList.filter((z: any) => !z.checked).map((z: any) => z.name),\r\n search: this.searchZoneText || '',\r\n export : true\r\n };\r\n\r\n this.service.getNewZoneShopperAnalysisExportApi(this.object1).subscribe({\r\n next: (res) => {\r\n if(this.headerData.date.startDate == this.headerData.date.endDate){\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate;\r\n this.service.saveAsExcelFile1(res, fileName);\r\n } else {\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate+'_'+this.headerData.date.endDate;\r\n this.service.saveAsExcelFile1(res, fileName);\r\n }\r\n },\r\n error: ((e:any) => {\r\n let errorMsg = 'Something went Wrong..';\r\n if (e && e.error && e.error.error) {\r\n errorMsg = e.error.error;\r\n } \r\n this.ts.getErrorToast(errorMsg)\r\n })\r\n });\r\n}\r\nzoneCardNoData = false;\r\n zoneCardLoading = true;\r\ngetZoneJourney(hiddenZones: any[] = []) {\r\n this.zoneCardLoading = true;\r\n this.zoneCardNoData = false;\r\n this.object1 = {\r\n clientId: this.headerData?.client,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n nob: this.clientData?.isNOB,\r\n hideZones: hiddenZones, // ✅ always correct\r\n search: this.searchZoneText || '',\r\n export : false\r\n };\r\n\r\n this.service.getNewZoneShopperAnalysisApi(this.object1).subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.zoneShopperAnalysis = res.data;\r\n this.zones = this.zoneShopperAnalysis?.zoneShopperAnalysis || [];\r\n this.zoneCardNoData = false;\r\n this.zoneCardLoading = false;\r\n this.cd.detectChanges();\r\n } else {\r\n this.zoneShopperAnalysis = null;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n },\r\n error: () => {\r\n this.zoneShopperAnalysis = null;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n });\r\n}\r\n\r\nzoneChartNoData = false;\r\n zoneChartLoading = true;\r\ngetBubble(hiddenZones: any[] = []) {\r\n this.zoneChartLoading = true;\r\n this.zoneChartNoData = false;\r\n this.object = {\r\n clientId: this.headerData?.client,\r\n storeId: this.headerData?.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n nob: this.clientData?.isNOB,\r\n hideZones: hiddenZones,\r\n\r\n };\r\nthis.service.getNewZoneShopperBubbleChartApi(this.object).subscribe({\r\n next: (res:any)=>{\r\n if(res && res.code === 200){\r\n this.bubbleChartData = res.data;\r\n this.createChart();\r\n this.zoneChartNoData = false;\r\n this.zoneChartLoading = false;\r\n this.cd.detectChanges();\r\n } else {\r\n this.bubbleChartData = null;\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n }\r\n },\r\n error: (err:any)=>{\r\n this.bubbleChartData = null;\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n // console.log('zone journey bubble chart error',err);\r\n }\r\n });\r\n \r\n}\r\n\r\ncreateChart() {\r\n setTimeout(() => {\r\n // Dispose old chart\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n\r\n // Root\r\n this.root = am5.Root.new('chartdiv');\r\n this.root.setThemes([am5themes_Animated.new(this.root)]);\r\n\r\n // Arc Diagram Series\r\n const series = this.root.container.children.push(\r\n am5flow.ArcDiagram.new(this.root, {\r\n sourceIdField: 'from',\r\n targetIdField: 'to',\r\n valueField: 'value',\r\n orientation: 'horizontal'\r\n })\r\n );\r\n\r\n // --------------------------------------------------\r\n // TOOLTIP (HTML)\r\n // --------------------------------------------------\r\n const tooltip = am5.Tooltip.new(this.root, {\r\n getFillFromSprite: false,\r\n getStrokeFromSprite: false,\r\n autoTextColor: false,\r\n keepTargetHover: true,\r\n pointerOrientation: 'horizontal'\r\n });\r\n\r\n tooltip.get('background')?.setAll({\r\n fill: am5.color(0xffffff),\r\n stroke: am5.color(0xe5e7eb),\r\n shadowColor: am5.color(0xf7f7f7),\r\n shadowBlur: 10,\r\n shadowOffsetY: 4\r\n });\r\n\r\n // Attach tooltip to links\r\n series.links.template.set('tooltip', tooltip);\r\n series.links.template.set('tooltipHTML', '');\r\nseries.links.template.setAll({\r\n strokeWidth: 2, // visible line\r\n interactive: true,\r\n tooltip: tooltip\r\n});\r\n\r\n// Add a larger invisible hit area\r\nseries.links.template.states.create(\"hover\", {\r\n strokeWidth: 3\r\n});\r\n\r\n // Adapter for HTML content\r\n series.links.template.adapters.add('tooltipHTML', (_html, target) => {\r\n const dataItem = target.dataItem;\r\n if (!dataItem) return '';\r\n\r\n const dc: any = dataItem.dataContext;\r\n\r\n return `\r\n <div class=\"am-tooltip\">\r\n <div class=\"am-tooltip-header\">\r\n ${dc.from} → ${dc.to}\r\n </div>\r\n <table class=\"am-tooltip-table\">\r\n <tr>\r\n <td>Footfall</td>\r\n <td class=\"value\">${dc.value ?? '--'}</td>\r\n </tr>\r\n <tr>\r\n <td>NoB</td>\r\n <td class=\"value\">${dc.NoB ?? '--'}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n `;\r\n });\r\n\r\n // --------------------------------------------------\r\n // NODE LABELS\r\n // --------------------------------------------------\r\n series.nodes.labels.template.setAll({\r\n text: '{id}\\n{total}',\r\n centerX: am5.percent(50),\r\n centerY: am5.percent(50),\r\n textAlign: 'center',\r\n fontSize: 11,\r\n fill: am5.color(0x000000),\r\n maxWidth: 90\r\n });\r\n\r\n // --------------------------------------------------\r\n // FLOW BULLETS\r\n // --------------------------------------------------\r\n series.bullets.push((_root, _series, dataItem) => {\r\n const bullet = am5.Bullet.new(this.root, {\r\n locationY: Math.random(),\r\n sprite: am5.Circle.new(this.root, {\r\n radius: 2,\r\n fill: dataItem.get('source').get('fill')\r\n })\r\n });\r\n\r\n bullet.animate({\r\n key: 'locationY',\r\n from: 0,\r\n to: 1,\r\n duration: Math.random() * 1000 + 2000\r\n });\r\n\r\n return bullet;\r\n });\r\n\r\n // --------------------------------------------------\r\n // DATA + ORDERING\r\n // --------------------------------------------------\r\n const nodeOrder = (name: string) => {\r\n if (name === 'Entry') return 0;\r\n if (name === 'Exit') return 999;\r\n return 1;\r\n };\r\n\r\n series.data.setAll(this.bubbleChartData?.zoneBubbleChartMetrics);\r\n\r\n Array.from(series.nodes.children).sort((a: any, b: any) => {\r\n return (\r\n nodeOrder(a.dataItem?.dataContext?.id) -\r\n nodeOrder(b.dataItem?.dataContext?.id)\r\n );\r\n });\r\n\r\n series.appear(1000, 100);\r\n }, 500);\r\n}\r\n\r\n\r\n\r\n\r\n ngOnDestroy(): void {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n // this.stopAutoSlide();\r\n }\r\n \r\n zones:any = [];\r\n\r\nactiveIndex: number | null = 0;\r\n\r\ntoggle(index: number) {\r\n this.activeIndex = this.activeIndex === index ? null : index;\r\n}\r\nsearchNewOpen =false;\r\nsearchOpen(){\r\n this.searchNewOpen = !this.searchNewOpen;\r\nif(!this.searchNewOpen){\r\n this.searchZoneText ='';\r\n this.getZoneJourney([]);\r\n}\r\n}\r\n\r\nsearchZoneText:string ='';\r\nSearchZones(){\r\n this.getZoneJourney([]);\r\n}\r\nisMinimized = false;\r\n\r\n// drag support\r\ndragging = false;\r\noffsetX = 0;\r\noffsetY = 0;\r\n\r\nfloatingPos = {\r\n top: 120,\r\n left: window.innerWidth - 380\r\n};\r\n\r\nexpandClose() {\r\n this.isMinimized = !this.isMinimized;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nstartDrag(event: MouseEvent) {\r\n if (!this.isMinimized) return;\r\n\r\n this.dragging = true;\r\n this.offsetX = event.clientX - this.floatingPos.left;\r\n this.offsetY = event.clientY - this.floatingPos.top;\r\n\r\n document.addEventListener('mousemove', this.onDrag);\r\n document.addEventListener('mouseup', this.stopDrag);\r\n}\r\n\r\nonDrag = (event: MouseEvent) => {\r\n if (!this.dragging) return;\r\n\r\n this.floatingPos.left = event.clientX - this.offsetX;\r\n this.floatingPos.top = event.clientY - this.offsetY;\r\n};\r\n\r\nstopDrag = () => {\r\n this.dragging = false;\r\n document.removeEventListener('mousemove', this.onDrag);\r\n document.removeEventListener('mouseup', this.stopDrag);\r\n};\r\n\r\n nobUpload(){\r\n this.router.navigate([\"/manage/traffic/nob\"]); \r\n }\r\n}\r\n","<!-- zone-journey.component.html -->\r\n<div class=\"card my-card mx-1 my-2\">\r\n <div class=\"card-header px-0 mx-5 border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-1\">Zone-Based Shopper Analysis </span>\r\n <span class=\"text-sub mb-1\">Understand your Shoppers journey from one zone to another\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n<div class=\"zone-dropdown me-2\" #zoneDropdown\r\n (click)=\"$event.stopPropagation()\">\r\n\r\n <!-- BUTTON -->\r\n <button [disabled]=\"!zoneShopperAnalysis\"\r\n class=\"btn btn-outline w-100 me-2 d-flex justify-content-between\"\r\n (click)=\"toggleDropdown($event)\"\r\n >\r\n Show / Hide Zone\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"7\" viewBox=\"0 0 12 7\" fill=\"none\">\r\n<path d=\"M1 1L6 6L11 1\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg></span>\r\n </button>\r\n\r\n <!-- DROPDOWN -->\r\n <div *ngIf=\"showDropdown\" class=\"dropdown-panel h-300px d-flex flex-column\">\r\n\r\n <!-- HEADER (fixed) -->\r\n <div class=\"dropdown-header px-2 pb-2\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search Zone\"\r\n [(ngModel)]=\"dropdownSearchText\"\r\n (input)=\"filterZones()\"\r\n />\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2 mb-2 px-2\">\r\n <span class=\"mx-1\"><input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected()\"\r\n (change)=\"toggleSelectAll($event)\"\r\n /></span>\r\n <span class=\"ms-2\">Select All</span>\r\n </div>\r\n <!-- BODY (scrollable list) -->\r\n <div class=\"dropdown-body flex-grow-1 overflow-auto px-2\">\r\n <div\r\n class=\"zone-item\"\r\n *ngFor=\"let zone of tempFilteredZones\"\r\n >\r\n <span class=\"mx-1\"><input\r\n type=\"checkbox\"\r\n [(ngModel)]=\"zone.checked\"\r\n /></span>\r\n <span class=\"ms-2\">{{ zone.name }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- FOOTER (fixed) -->\r\n <div class=\"dropdown-footer d-flex justify-content-end gap-2 p-2 border-top\">\r\n <button class=\"btn btn-sm btn-outline w-50\" (click)=\"resetZones()\">\r\n Reset\r\n </button>\r\n <button class=\"btn btn-sm btn-primary w-50\" (click)=\"applyZones()\">\r\n Apply\r\n </button>\r\n </div>\r\n\r\n</div>\r\n\r\n</div>\r\n\r\n\r\n <button type=\"button\" (click)=\"getZoneJourneyExport()\" [disabled]=\"!zoneShopperAnalysis\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader me-4\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-3 mx-3\">\r\n <div class=\"bordered-box w-50 me-2 py-1\">\r\n <div class=\"group d-flex justify-content-between pt-1 px-3\">\r\n <span class=\"text-title py-2\"><svg class=\"mx-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"21\" viewBox=\"0 0 19 21\" fill=\"none\">\r\n <path\r\n d=\"M0.5 16.3258H6V17.5758C6 18.3051 5.71027 19.0046 5.19454 19.5203C4.67882 20.036 3.97935 20.3258 3.25 20.3258C2.52065 20.3258 1.82118 20.036 1.30546 19.5203C0.789731 19.0046 0.5 18.3051 0.5 17.5758V16.3258ZM4.5 4.44576C6.5 4.44576 7.5 7.32576 7.5 9.32576C7.5 10.3258 7 11.3258 6.5 12.8258L6 14.3258H0.5C0.5 13.3258 0 11.8258 0 9.32576C0 6.82576 1.998 4.44576 4.5 4.44576ZM16.554 12.4238L16.337 13.6548C16.2023 14.3654 15.7931 14.9943 15.198 15.4054C14.6029 15.8165 13.8698 15.9765 13.1576 15.8509C12.4453 15.7254 11.8111 15.3242 11.3925 14.7344C10.9739 14.1446 10.8045 13.4136 10.921 12.6998L11.137 11.4698L16.554 12.4238ZM14.678 0.0307624C17.142 0.464762 18.696 3.15576 18.262 5.61776C17.828 8.07976 17.075 9.46976 16.902 10.4548L11.485 9.49976L11.253 7.93576C11.021 6.37176 10.703 5.29976 10.876 4.31576C11.223 2.34576 12.708 -0.316238 14.678 0.0307624Z\"\r\n fill=\"#1D2939\" />\r\n </svg>Overall Footfall :</span>\r\n <span><span class=\"text-val\">{{zoneShopperAnalysis?.OverallFootfall ?? '--'}}</span> <span class=\"text-perc ms-1\">({{zoneShopperAnalysis?.ConversionPercent ?? '--'}} %)</span></span>\r\n </div>\r\n </div>\r\n <div class=\"bordered-box w-50 py-1\">\r\n <div class=\"group d-flex justify-content-between pt-1 px-3\">\r\n <span *ngIf=\"this.clientData?.isNOB\" class=\"text-title py-2\"><svg class=\"mx-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 11H15M9 15H15M9 7H15M5 3C5 2.73478 5.10536 2.48043 5.29289 2.29289C5.48043 2.10536 5.73478 2 6 2H18C18.2652 2 18.5196 2.10536 18.7071 2.29289C18.8946 2.48043 19 2.73478 19 3V22L15.5 19.5L12 22L8.5 19.5L5 22V3Z\"\r\n stroke=\"#1D2939\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> NoB :</span>\r\n <span *ngIf=\"!this.clientData?.isNOB\" class=\"text-title py-2\"><svg class=\"mx-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 11H15M9 15H15M9 7H15M5 3C5 2.73478 5.10536 2.48043 5.29289 2.29289C5.48043 2.10536 5.73478 2 6 2H18C18.2652 2 18.5196 2.10536 18.7071 2.29289C18.8946 2.48043 19 2.73478 19 3V22L15.5 19.5L12 22L8.5 19.5L5 22V3Z\"\r\n stroke=\"#1D2939\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Conversion :</span>\r\n <span class=\"text-val\">{{zoneShopperAnalysis?.Nob ?? '--'}} <span *ngIf=\"this.clientData?.isNOB\" class=\"px-0 cursor-pointer\" (click)=\"nobUpload()\"><svg placement=\"top\" ngbTooltip=\"Upload NoB\" xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"\r\n viewBox=\"0 0 40 40\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15106_106090)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"#EAF8FF\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#EAF8FF\" />\r\n <path\r\n d=\"M23.3326 22.3332L19.9992 18.9999M19.9992 18.9999L16.6659 22.3332M19.9992 18.9999V26.4999M26.9909 24.3249C27.8037 23.8818 28.4458 23.1806 28.8158 22.3321C29.1858 21.4835 29.2627 20.5359 29.0344 19.6388C28.8061 18.7417 28.2855 17.9462 27.5548 17.3778C26.8241 16.8094 25.925 16.5005 24.9992 16.4999H23.9492C23.697 15.5243 23.2269 14.6185 22.5742 13.8507C21.9215 13.0829 21.1033 12.4731 20.181 12.0671C19.2587 11.661 18.2564 11.4694 17.2493 11.5065C16.2423 11.5436 15.2568 11.8085 14.3669 12.2813C13.477 12.7541 12.7058 13.4225 12.1114 14.2362C11.517 15.05 11.1148 15.9879 10.9351 16.9794C10.7553 17.9709 10.8027 18.9903 11.0736 19.961C11.3445 20.9316 11.8319 21.8281 12.4992 22.5832\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15106_106090\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15106_106090\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_15106_106090\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row gx-0 p-3\">\r\n <div [ngClass]=\"isMinimized ? 'col-12' : 'col-8'\"\r\n [style.height.px]=\"zoneChartNoData ? 300 : (isMinimized ? 650 : 550)\">\r\n <ng-container *ngIf=\"zoneChartLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zoneChartNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Based Shopper Analysis Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!zoneChartNoData && !zoneChartLoading\" id=\"chartdiv\" style=\"width: 100%; height: 100%;\"></div>\r\n </div>\r\n\r\n <div [ngClass]=\"isMinimized ? 'zone-floating' : 'col-4'\" [style.top.px]=\"isMinimized ? floatingPos.top : null\"\r\n [style.left.px]=\"isMinimized ? floatingPos.left : null\" (mousedown)=\"startDrag($event)\">\r\n <!-- (mousedown)=\"startDrag($event)\" -->\r\n <ng-container *ngIf=\"zoneCardLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zoneCardNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Based Shopper Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-conatiner *ngIf=\"!zoneCardNoData && !zoneCardLoading\" class=\"card \">\r\n <div class=\"card-header border-0 px-4\"\r\n [ngClass]=\"isMinimized ?'bg-secondary min-h-30px': 'bg-light-primary min-h-45px mb-2'\">\r\n <div class=\"card-title align-items-start\"><span *ngIf=\"isMinimized\" class=\"me-2 mb-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9 20C8.45 20 7.97917 19.8042 7.5875 19.4125C7.19583 19.0208 7 18.55 7 18C7 17.45 7.19583 16.9792 7.5875 16.5875C7.97917 16.1958 8.45 16 9 16C9.55 16 10.0208 16.1958 10.4125 16.5875C10.8042 16.9792 11 17.45 11 18C11 18.55 10.8042 19.0208 10.4125 19.4125C10.0208 19.8042 9.55 20 9 20ZM15 20C14.45 20 13.9792 19.8042 13.5875 19.4125C13.1958 19.0208 13 18.55 13 18C13 17.45 13.1958 16.9792 13.5875 16.5875C13.9792 16.1958 14.45 16 15 16C15.55 16 16.0208 16.1958 16.4125 16.5875C16.8042 16.9792 17 17.45 17 18C17 18.55 16.8042 19.0208 16.4125 19.4125C16.0208 19.8042 15.55 20 15 20ZM9 14C8.45 14 7.97917 13.8042 7.5875 13.4125C7.19583 13.0208 7 12.55 7 12C7 11.45 7.19583 10.9792 7.5875 10.5875C7.97917 10.1958 8.45 10 9 10C9.55 10 10.0208 10.1958 10.4125 10.5875C10.8042 10.9792 11 11.45 11 12C11 12.55 10.8042 13.0208 10.4125 13.4125C10.0208 13.8042 9.55 14 9 14ZM15 14C14.45 14 13.9792 13.8042 13.5875 13.4125C13.1958 13.0208 13 12.55 13 12C13 11.45 13.1958 10.9792 13.5875 10.5875C13.9792 10.1958 14.45 10 15 10C15.55 10 16.0208 10.1958 16.4125 10.5875C16.8042 10.9792 17 11.45 17 12C17 12.55 16.8042 13.0208 16.4125 13.4125C16.0208 13.8042 15.55 14 15 14ZM9 8C8.45 8 7.97917 7.80417 7.5875 7.4125C7.19583 7.02083 7 6.55 7 6C7 5.45 7.19583 4.97917 7.5875 4.5875C7.97917 4.19583 8.45 4 9 4C9.55 4 10.0208 4.19583 10.4125 4.5875C10.8042 4.97917 11 5.45 11 6C11 6.55 10.8042 7.02083 10.4125 7.4125C10.0208 7.80417 9.55 8 9 8ZM15 8C14.45 8 13.9792 7.80417 13.5875 7.4125C13.1958 7.02083 13 6.55 13 6C13 5.45 13.1958 4.97917 13.5875 4.5875C13.9792 4.19583 14.45 4 15 4C15.55 4 16.0208 4.19583 16.4125 4.5875C16.8042 4.97917 17 5.45 17 6C17 6.55 16.8042 7.02083 16.4125 7.4125C16.0208 7.80417 15.55 8 15 8Z\"\r\n fill=\"#667085\" />\r\n </svg></span> Zone Journey </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span *ngIf=\"!isMinimized\" (click)=\"searchOpen()\" class=\"me-3\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M19 19L14.65 14.65M17 9C17 13.4183 13.4183 17 9 17C4.58172 17 1 13.4183 1 9C1 4.58172 4.58172 1 9 1C13.4183 1 17 4.58172 17 9Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"cursor-pointer\" *ngIf=\"!isMinimized\"\r\n (click)=\"expandClose(); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path d=\"M5 12H19\" stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"cursor-pointer\" *ngIf=\"isMinimized\"\r\n (click)=\"expandClose(); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path d=\"M15 3H21M21 3V9M21 3L14 10M9 21H3M3 21V15M3 21L10 14\" stroke=\"#667085\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isMinimized\" class=\"card-body h-500px overflow-auto px-0 py-2\">\r\n \r\n<div *ngIf=\"searchNewOpen\" class=\"px-2 pb-2\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search Zone\"\r\n [(ngModel)]=\"searchZoneText\"\r\n (change)=\"SearchZones()\"\r\n />\r\n </div>\r\n <div class=\"zone-card mx-3 \" *ngFor=\"let zone of zones;let i = index\">\r\n\r\n <!-- HEADER -->\r\n <div [ngClass]=\"activeIndex === i ? 'zone-header':'zone-default'\" (click)=\"toggle(i)\">\r\n <div [ngClass]=\"activeIndex === i ? 'zone-title':'zone-notitle'\">{{ zone.fromZone |\r\n titlecase}}\r\n </div>\r\n\r\n <div class=\"zone-metrics\">\r\n <span class=\"badge badge-light-primary px-2\" placement=\"top\" ngbTooltip=\"Footfall (Engagers)\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\"\r\n viewBox=\"0 0 10 11\" fill=\"none\">\r\n <path\r\n d=\"M0.25 8.16288H3V8.78788C3 9.15255 2.85513 9.50229 2.59727 9.76015C2.33941 10.018 1.98967 10.1629 1.625 10.1629C1.26033 10.1629 0.910591 10.018 0.652728 9.76015C0.394866 9.50229 0.25 9.15255 0.25 8.78788V8.16288ZM2.25 2.22288C3.25 2.22288 3.75 3.66288 3.75 4.66288C3.75 5.16288 3.5 5.66288 3.25 6.41288L3 7.16288H0.25C0.25 6.66288 0 5.91288 0 4.66288C0 3.41288 0.999 2.22288 2.25 2.22288ZM8.277 6.21188L8.1685 6.82738C8.10117 7.18269 7.89656 7.49717 7.59901 7.70271C7.30146 7.90824 6.93492 7.98827 6.57878 7.92547C6.22263 7.86268 5.90557 7.6621 5.69626 7.3672C5.48695 7.07229 5.40225 6.7068 5.4605 6.34988L5.5685 5.73488L8.277 6.21188ZM7.339 0.0153812C8.571 0.232381 9.348 1.57788 9.131 2.80888C8.914 4.03988 8.5375 4.73488 8.451 5.22738L5.7425 4.74988L5.6265 3.96788C5.5105 3.18588 5.3515 2.64988 5.438 2.15788C5.6115 1.17288 6.354 -0.158119 7.339 0.0153812Z\"\r\n fill=\"#009BF3\" />\r\n </svg></span> {{ zone.fromZoneFootfallCount ?? '--' }}\r\n </span>\r\n <span class=\"badge badge-light-default px-2\" placement=\"top\"\r\n [ngbTooltip]=\"clientData?.isNOB ? 'NoB' : 'Conversion'\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M4.5 5.5H7.5M4.5 7.5H7.5M4.5 3.5H7.5M2.5 1.5C2.5 1.36739 2.55268 1.24021 2.64645 1.14645C2.74021 1.05268 2.86739 1 3 1H9C9.13261 1 9.25979 1.05268 9.35355 1.14645C9.44732 1.24021 9.5 1.36739 9.5 1.5V11L7.75 9.75L6 11L4.25 9.75L2.5 11V1.5Z\"\r\n stroke=\"#344054\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> {{ zone.fromZoneNobCount ?? '--' }}\r\n </span>\r\n\r\n <span class=\"arrow cursor-pointer\"><svg *ngIf=\"activeIndex === i\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"7\" viewBox=\"0 0 12 7\"\r\n fill=\"none\">\r\n <path d=\"M0.832031 5.83301L5.83203 0.833008L10.832 5.83301\" stroke=\"#33B5FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"activeIndex !== i\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"7\" viewBox=\"0 0 12 7\" fill=\"none\">\r\n <path d=\"M0.832031 0.833008L5.83203 5.83301L10.832 0.833008\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- BODY -->\r\n <div class=\"zone-body max-h-200px min-h-auto overflow-auto\" *ngIf=\"activeIndex === i\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table text-nowrap bottom-border \">\r\n <thead>\r\n\r\n <tr>\r\n <th class=\"w-50\">To Zone</th>\r\n <th>Footfall (Engagers)</th>\r\n <th ><span class=\"me-2\" *ngIf=\"this.clientData?.isNOB\">NoB</span> <span class=\"me-2\" *ngIf=\"!this.clientData?.isNOB\">Conversion</span> <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15320_82488)\">\r\n <path\r\n d=\"M7.9987 10.6663V7.99967M7.9987 5.33301H8.00536M14.6654 7.99967C14.6654 11.6816 11.6806 14.6663 7.9987 14.6663C4.3168 14.6663 1.33203 11.6816 1.33203 7.99967C1.33203 4.31778 4.3168 1.33301 7.9987 1.33301C11.6806 1.33301 14.6654 4.31778 14.6654 7.99967Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15320_82488\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of zone.toZoneData\">\r\n <td>{{ row.toZone | titlecase}}</td>\r\n <td>{{ row.footfall ?? '--' }} ({{ row.engagerPercent }}%)</td>\r\n <td>{{ row.nob ?? '--' }} ({{ row.nobPercent }}%)</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-conatiner>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n</div>","import { ChangeDetectorRef, Component, ElementRef, Input, NgZone, OnChanges, OnDestroy, OnInit,SimpleChanges } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-top-performing-zones',\r\n templateUrl: './top-performing-zones.component.html',\r\n styleUrl: './top-performing-zones.component.scss'\r\n})\r\nexport class TopPerformingZonesComponent implements OnInit,OnDestroy,OnChanges{\r\n private zoneroot: am5.Root;\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,private router: Router,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones();\r\n this.getTopPerformingStores();\r\n // this.zonefootfall();\r\n})\r\n\r\n }\r\n @Input() clientData :any;\r\nngOnChanges(changes: SimpleChanges): void {\r\n if (changes['clientData']?.currentValue) {\r\n this.clientData = changes['clientData'].currentValue;\r\n }\r\n}\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n // });\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n };\r\n \r\n this.ZoneService.getTopPerformingZonesData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingZones = response.data.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n setTimeout(() => {\r\n this.zonefootfall(); \r\n }, 500);\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n zonefootfall() {\r\n // setTimeout(() => {\r\n const chartDiv = document.getElementById(\"zonechartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `zonechartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n \r\n this.zoneroot = am5.Root.new(\"zonechartdiv\");\r\n \r\n // Create chart\r\n const chart = this.zoneroot.container.children.push(am5xy.XYChart.new(this.zoneroot, {\r\n panX: true,\r\n panY: true,\r\n wheelX: \"none\",\r\n wheelY: \"none\",\r\n paddingLeft: 0\r\n }));\r\n \r\n // Hide zoom-out button\r\n chart.zoomOutButton.set(\"forceHidden\", true);\r\n \r\n // Create axes\r\n const xRenderer = am5xy.AxisRendererX.new(this.zoneroot, {\r\n minGridDistance: 30,\r\n minorGridEnabled: true\r\n });\r\n xRenderer.labels.template.setAll({\r\n rotation: -45,\r\n centerY: am5.p100,\r\n centerX: am5.p50,\r\n paddingRight: 15,\r\n textAlign: \"center\"\r\n });\r\n xRenderer.grid.template.set(\"visible\", false);\r\n \r\n const xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(this.zoneroot, {\r\n maxDeviation: 0.3,\r\n categoryField: \"zoneName\", // Change from \"country\" to \"zoneName\"\r\n renderer: xRenderer\r\n }));\r\n \r\n const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(this.zoneroot, {\r\n maxDeviation: 0.1,\r\n min: 0,\r\n renderer: am5xy.AxisRendererY.new(this.zoneroot, {})\r\n }));\r\n \r\n yAxis.children.unshift(am5.Label.new(this.zoneroot, {\r\n rotation: -90,\r\n text: 'Footfall',\r\n y: am5.p50,\r\n centerX: am5.p50\r\n }));\r\n \r\n // Add series\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.zoneroot, {\r\n name: \"Footfall\",\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: \"value\",\r\n categoryXField: \"zoneName\" // Change from \"country\" to \"zoneName\"\r\n }));\r\n \r\n // Rounded corners for columns\r\n series.columns.template.setAll({\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n // Add Label bullet\r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.zoneroot, {\r\n locationY: 1,\r\n sprite: am5.Label.new(this.zoneroot, {\r\n text: \"{valueYWorking.formatNumber('#.')}\",\r\n fill: this.zoneroot.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n series.columns.template.setAll({\r\n tooltipText: \"{categoryX}: {valueYWorking.formatNumber('#.')}\",\r\n tooltipY: am5.p50\r\n });\r\n if (this.topPerformingZones && this.topPerformingZones.length > 0) {\r\n xAxis.data.setAll(this.topPerformingZones);\r\n series.data.setAll(this.topPerformingZones);\r\n \r\n } else {\r\n // console.error(\"No data available for top performing zones\");\r\n }\r\n // }, 0);\r\n }\r\n\r\n getTopPerformingStores(): void {\r\n this.searchDisabled = true;\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TopPerformingStores');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n searchField(e:any) {\r\n this.searchInput = e.target.value;\r\n this.getTopPerformingStores()\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores()\r\n }\r\n // storeView(data:any){\r\n // const datavalue: any = JSON.parse(\r\n // localStorage.getItem(\"header-filters\") || \"{}\"\r\n // );\r\n // datavalue.store = data;\r\n // localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n // this.changeDetector.detectChanges()\r\n // this.gs.dataRangeValue.next(datavalue)\r\n // this.router.navigate([\"/manage/stores/cameras\"], {\r\n // queryParams: { storeId: data},\r\n // });\r\n\r\n // }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n\r\n}\r\n\r\n","<div class=\"row\">\r\n <div class=\"col-lg-5\">\r\n <div class=\"card\">\r\n <div class=\"card-header p-4 border-0\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Zones based on by the highest footfall\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span> </span>\r\n <span class=\"subratetext mt-2\">Based on Zone Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!analysisLoading && !analysisNoData\" id=\"zonechartdiv\"></div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"h-100 card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Stores ranked based on the highest concentration rate\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">Based on Concentration Rate</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\" fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input type=\"text\" class=\"form-control ps-14 me-4 invoicesearch\" placeholder=\"Search...\" autocomplete=\"off\" \r\n (keyup.enter)=\"searchField($event)\" />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">Zone Name <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">Concentration <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">Avg Dwell Time <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('overallFootfall')\">Overall Footfall <svg [ngClass]=\"sortColumName === 'overallFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'overallFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneFootfall')\">Zone Footfall<svg [ngClass]=\"sortColumName === 'zoneFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer mb-2\" (click)=\"storeView(store.storeId)\">{{ store?.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneName || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} %</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} mins</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.overallFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mt-18\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> \r\n</div>\r\n\r\n<lib-zone-journey *ngIf=\"headerData\" [headerData]=\"headerData\" [clientData]=\"clientData\"></lib-zone-journey>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-zone-summary-table',\r\n templateUrl: './zone-summary-table.component.html',\r\n styleUrl: './zone-summary-table.component.scss'\r\n})\r\nexport class ZoneSummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private ZoneService: ZoneService,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.ZoneService.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneSummaryTable');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable1()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th *ngIf=\"headerData?.client ==='478'\"><div class=\"cursor-pointer\" (click)=\"sortData('storefootfallCount')\">\r\n Store FF\r\n <svg [ngClass]=\"sortColumName === 'storefootfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storefootfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th *ngIf=\"headerData?.client ==='478'\"><div class=\"cursor-pointer\" (click)=\"sortData('nob')\">\r\n Zone Wise NoB\r\n <svg [ngClass]=\"sortColumName === 'nob' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'nob' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Zone Conc.Rate\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><div class=\"table-title\">{{ store?.date ? (store.date | date: 'd MMM, y') : '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td *ngIf=\"store?.storefootfallCount !== null && store?.storefootfallCount !== undefined\"><div class=\"table-title\">{{store.storefootfallCount}}</div></td>\r\n <td *ngIf=\"store?.nob !== null && store?.nob !== undefined\"><div class=\"table-title\">{{store.nob}}</div></td>\r\n <td><div class=\"table-title\">{{ store.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.below12?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-concentrationheatmap',\r\n templateUrl: './concentrationheatmap.component.html',\r\n styleUrl: './concentrationheatmap.component.scss'\r\n})\r\nexport class ConcentrationheatmapComponent {\r\n @Input() imageURLV1: [];\r\n currentSlideIndex = 0;\r\n currentSlide = 0;\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURLV1) {\r\n this.overallStoreData.ImageURLs = this.imageURLV1; \r\n }\r\n\r\n \r\n\r\n}\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\n \r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n<ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs; let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, importProvidersFrom, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarouselConfig, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport { ConcentrationheatmapComponent } from './concentrationheatmap/concentrationheatmap.component';\r\n\r\n@Component({\r\n selector: 'lib-zone-concentration',\r\n templateUrl: './zone-concentration.component.html',\r\n styleUrl: './zone-concentration.component.scss',\r\n providers: [NgbCarouselConfig],\r\n})\r\nexport class ZoneConcentrationComponent implements OnInit,OnDestroy {\r\n dayjs = dayjs;\r\n searchInput: any =\"\";\r\n searchDisabled: any = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n zoneConcentrationData: any[] = [];\r\n overallStoreData: any = {};\r\n type: string = 'daily'; \r\n overallStoreConcentrationDates: any[] = [];\r\n selectedDate: string = '';\r\n periodzone: number = 1; \r\n customOption: boolean = false; \r\n timer_active: boolean = false; \r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n zoneName: string = '';\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n customArrow: boolean = false;\r\n isExport: boolean = false;\r\n currentSlide = 0;\r\n currentSlideIndex = 0;\r\n // startIndex: number = 0;\r\n // datesPerPage: number = 5;\r\n // visibleDates: any[] = [];\r\n // timer_active = 0;\r\n // periodzone = 1;\r\n // customOption: boolean = false;\r\n // overallStoreConcentrationDates: Array<{ zoneDate: string }> = [];\r\n private readonly destroy$ = new Subject();\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n storeIdarray: any =[];\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store: any) => store.checked).map((store: any) => store.storeId)\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.type = 'daily';\r\n // if(eDate.diff(sDate,'day') < 7) {\r\n // this.disableWeek = true;\r\n // this.disableMonth = true;\r\n // // this.type = 'daily';\r\n // }\r\n // else if(eDate.diff(sDate,'day') < 27) {\r\n // this.disableMonth = true;\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // // this.type = 'weekly';\r\n // }\r\n // else {\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // this.disableMonth = false;\r\n // // this.type = 'monthly';\r\n // }\r\n this.getZoneConcentrationData();\r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n})\r\n \r\n }\r\n\r\n getZoneConcentrationData(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.ZoneService.setData(this.zoneName);\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.searchDisabled = false;\r\n this.getOverallStoreHeatmapDates();\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.zoneConcentrationTableDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneConcentrationSummary');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneConcentrationData();\r\n }\r\n\r\n searchField(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n \r\n }\r\n\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.ZoneService.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n } else {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n getOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = []\r\n this.overallStoreData =[]\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type\r\n };\r\n\r\n this.ZoneService.getOverallStoreHeatmapDates(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if(response && response.data){\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate; \r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n \r\n // if(['weekly','monthly'].includes(this.type)) {\r\n // let lastDigit = this.overallStoreConcentrationDates[this.overallStoreConcentrationDates.length -1].zoneDate;\r\n // let lastSplit = lastDigit.split('-')[1];\r\n // lastSplit = lastSplit +' '+ this.dayjs().format('YYYY');\r\n // if(this.dayjs(lastSplit,'MMM DD YYYY').format('YYYY-MM-DD') > this.dayjs(this.headerData.date.endDate).format('YYYY-MM-DD'))\r\n // this.overallStoreConcentrationDates.splice(this.overallStoreConcentrationDates.length-1,1);\r\n // }\r\n if (this.type === 'daily') {\r\n if (this.overallStoreConcentrationDates.length > 7) {\r\n this.customArrow = true;\r\n }\r\n } else if (this.type === 'weekly') {\r\n if (this.overallStoreConcentrationDates.length > 4) {\r\n this.customArrow = true;\r\n }\r\n } else { \r\n }\r\n this.getOverallStoreConcentrationData();\r\n // this.heatmapLoading = false;\r\n // this.heatmapNoData = false;\r\n } else {\r\n \r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n }else{\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n onDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n }\r\n }\r\n\r\n selectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates(); \r\n // this.getOverallStoreConcentrationData();\r\n}\r\n\r\nonZoneClick(zoneName: string): void {\r\n this.zoneName = zoneName; \r\n this.getOverallStoreHeatmapDates();\r\n this.ZoneService.zoneSegmentation.next(zoneName)\r\n // this.getZoneSegmentation(zoneName) \r\n}\r\nconcentrationHeatmap(imageURLV1: string) {\r\n const modalRef = this.modalService.open(ConcentrationheatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURLV1 = imageURLV1;\r\n modalRef.result.then((result) => {\r\n \r\n });\r\n}\r\n\r\nscrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\nscrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreData?.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n\r\n\r\n}\r\n\r\n","<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div *ngIf=\"!zonesummaryNoData && !zonesummaryLoading\" class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <tr *ngFor=\"let zone of zoneConcentrationData\">\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2\">\r\n <span\r\n class=\"text-capitalize cursor-pointer\"><a (click)=\"onZoneClick(zone.zoneName)\">{{ zone.zoneName || '--' }}</a>\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody> \r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span\r\n ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\"\r\n (click)=\"selectPlan('daily')\"\r\n [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\"\r\n (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\"\r\n (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n \r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n \r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\" [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <button *ngIf=\"image?.downtime !== null\" class=\"minsbadge position-absolute top-0 end-0 m-3 me-18\">\r\n <span class=\"minsbadgeprimary mt-2 mb-2 \">{{image.downtime}} mins<span class=\"ms-1\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 10\" fill=\"none\">\r\n <path d=\"M7.14063 0.000488281C7.79785 0.000488281 8.42578 0.135108 8.99902 0.379231C9.59375 0.632395 10.1289 1.0041 10.5771 1.46523C11.0244 1.92534 11.3857 2.47588 11.6318 3.0897C11.8691 3.67941 12 4.32538 12 5.00049C12 5.6766 11.8691 6.32257 11.6318 6.91228C11.3857 7.5241 11.0244 8.07463 10.5762 8.53575C10.1289 8.99587 9.59375 9.36758 8.99707 9.62074C8.42383 9.86487 7.7959 9.99949 7.13965 9.99949C6.48242 9.99949 5.85449 9.86487 5.28125 9.62074C4.68652 9.36758 4.15137 8.99587 3.7041 8.53575L3.70312 8.53475C3.25488 8.07363 2.89453 7.52309 2.64844 6.91228C2.57227 6.72241 2.50684 6.52751 2.45312 6.32759C2.55469 6.33764 2.6582 6.34266 2.7627 6.34266C2.96094 6.34266 3.1543 6.32458 3.34277 6.28942C3.37402 6.38586 3.4082 6.4813 3.44531 6.57473C3.64746 7.07704 3.94434 7.52912 4.31348 7.90887C4.68262 8.28862 5.12305 8.59402 5.61035 8.80198C6.08008 9.0019 6.59668 9.11341 7.13965 9.11341C7.68262 9.11341 8.19824 9.0029 8.66895 8.80198C9.15723 8.59402 9.59668 8.28862 9.96582 7.90887C10.335 7.52912 10.6318 7.07604 10.834 6.57473C11.0283 6.09151 11.1367 5.56006 11.1367 5.00149C11.1367 4.44292 11.0293 3.91248 10.834 3.42826C10.6318 2.92595 10.335 2.47387 9.96582 2.09412C9.59668 1.71437 9.15625 1.40897 8.66895 1.20101C8.19922 1.00109 7.68262 0.889578 7.13965 0.889578C6.59668 0.889578 6.08106 1.00009 5.61035 1.20101C5.56836 1.21909 5.52637 1.23818 5.48535 1.25727C5.3252 0.998077 5.13184 0.762996 4.91016 0.559058C5.03125 0.494762 5.15527 0.435489 5.28125 0.38124C5.85645 0.135108 6.4834 0.000488281 7.14063 0.000488281ZM6.58301 2.62355C6.58301 2.50099 6.63184 2.39048 6.70898 2.31011C6.78711 2.22974 6.89453 2.18052 7.01367 2.18052C7.13281 2.18052 7.24023 2.22974 7.31836 2.31011C7.39648 2.39048 7.44434 2.50099 7.44434 2.62355V4.95629L9.13867 5.99004C9.24023 6.05233 9.30859 6.15178 9.33594 6.26129C9.36328 6.37079 9.35059 6.49135 9.29004 6.59583V6.59683C9.22949 6.70131 9.13281 6.77164 9.02637 6.79977C8.91992 6.8279 8.80273 6.81484 8.70117 6.75255H8.7002L6.80469 5.59623C6.73926 5.55906 6.68555 5.50481 6.64648 5.44051C6.60645 5.3732 6.58301 5.29384 6.58301 5.20945V2.62355Z\" fill=\"#009BF3\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.63477 0.265717C4.08984 0.265717 5.26953 1.4793 5.26953 2.97618C5.26953 4.47307 4.08984 5.68665 2.63477 5.68665C1.17969 5.68665 0 4.47307 0 2.97618C0 1.4793 1.17969 0.265717 2.63477 0.265717ZM2.63477 4.53033L4.04883 2.73206H3.1709V1.77566H2.09863V2.73206H1.2207L2.63477 4.53033Z\" fill=\"#F04438\"/>\r\n </svg></span></span>\r\n </button>\r\n <a [href]=\"image.URL\" download><svg\r\n id=\"download-icon\"\r\n width=\"44\"\r\n height=\"44\"\r\n viewBox=\"0 0 44 44\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\"\r\n >\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_d_3822_19479\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"44\"\r\n height=\"44\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\"\r\n />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ overallStoreData?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, skip, startWith, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\n\r\n@Component({\r\n selector: 'lib-segmentation',\r\n templateUrl: './segmentation.component.html',\r\n styleUrl: './segmentation.component.scss'\r\n})\r\n\r\nexport class SegmentationComponent implements OnInit, OnDestroy{\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n cardDataLoading1: boolean = true;\r\n cardNoData1: boolean = false;\r\n cardDataLoading3: boolean = true;\r\n cardNoData3: boolean = false;\r\n cardDataLoading4: boolean = true;\r\n cardNoData4: boolean = false;\r\n cardDataLoading5: boolean = true;\r\n cardNoData5: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n zoneName:any='Overall Store';\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n @Output() dataEmitter = new EventEmitter<string>();\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n\r\n switch (this.headerData?.client) {\r\n case '430':\r\n // First source: getData$\r\n this.ZoneService.getData$()\r\n .pipe(\r\n startWith(null), // 👈 fallback seed emission\r\n skip(1), // skip service's initial seed (keep fallback)\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((res: any) => {\r\n if (res) {\r\n this.zoneName = res;\r\n this.loadClient430Data();\r\n } else {\r\n \r\n this.loadClient430Data();\r\n }\r\n })\r\n\r\n // Second source: zoneSegmentation\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(skip(1), takeUntil(this.destroy$))\r\n .subscribe((zoneData: any) => {\r\n this.zoneName = zoneData;\r\n this.getCardData4();\r\n this.getCardData5();\r\n });\r\n }\r\n break;\r\n\r\n case '463':\r\n this.loadClient463Data();\r\n break;\r\n\r\n default:\r\n // handle other clients if needed\r\n break;\r\n }\r\n });\r\n}\r\n\r\n// Helper for client=430\r\nprivate loadClient430Data() {\r\n this.getCardData1();\r\n this.getCardData3();\r\n this.getCardData();\r\n this.getCardData4();\r\n this.getCardData5();\r\n}\r\n\r\n// Helper for client=463\r\nprivate loadClient463Data() {\r\n this.getCardData();\r\n}\r\n\r\n private root!: am5.Root;\r\n ngOnDestroy(): void {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getSegmentationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.segmentationAnalysis\r\n // this.cardData = response.data.segmentationAnalysis.map((item: any) => ({\r\n // name: item.category,\r\n // value: item.value,\r\n // concentrationRate: item.concentrationRate\r\n // }));\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n // this.dataEmitter.emit(this.cardData?.length);\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getSegmentationDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TrafficSegmentation');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData1:any=[];\r\n getCardData1(): void {\r\n this.cardDataLoading1 = true;\r\n this.cardNoData1 = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading1 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData1 = response.data.data\r\n this.cardNoData1 = this.cardData1.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData1); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n \r\n createChart(cardData1: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData1.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport1() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n cardData3:any=[]\r\n getCardData3(): void {\r\n this.cardDataLoading3 = true;\r\n this.cardNoData3 = true;\r\n const requestData = {\r\n search: this.searchInput3,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading3 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData3 = response?.data?.passerByData\r\n this.cardNoData3 = this.cardData3.length === 0;\r\n } else {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport3() {\r\n const requestData = {\r\n search: this.searchInput3,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n itemsPerPage3 = 10000\r\n currentPage3 = 0\r\n totalItems3 = 0\r\n searchInput3:any =''\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData3();\r\n }\r\n\r\n cardData4:any=[]\r\n getCardData4(): void {\r\n this.cardDataLoading4 = true;\r\n this.cardNoData4 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getInteractionTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading4 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData4 = response?.data?.customerinteraction_data;\r\n this.cardData4.total = response?.data?.total;\r\n this.cardNoData4 = this.cardData4.length === 0;\r\n } else {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport4() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInteractionTable430Export(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Interaction Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData5:any=[];\r\n getCardData5(): void {\r\n this.cardDataLoading5 = true;\r\n this.cardNoData5 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getZonewiseCustomerFunnelData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading5 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData5 = response?.data?.data;\r\n this.cardNoData5 = this.cardData5.length === 0;\r\n } else {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport5() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:true\r\n };\r\n \r\n \r\n this.ZoneService.getZonewiseCustomerFunnelExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Zonewise Customer Funnel ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n","<div class=\"row\" >\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData && (headerData?.client === '430') || (!cardNoData && headerData?.client === '463')\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Traffic Segmentation <span class=\"ms-1\"\r\n ngbTooltip=\"Entrance level traffic segmentation\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-18 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Entrance</th>\r\n <th>Entrance wise footfall</th>\r\n <th *ngIf=\"headerData?.client === '463'\">Concentration Rate</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>{{ item.category }}</td>\r\n <td>{{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td *ngIf=\"headerData?.client === '463'\">{{ item.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} %</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport1()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData1.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData1\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.assist_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate :'--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n \r\n\r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData5 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Zonewise Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport5()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData5.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading5 && !cardNoData5\" class=\"body me-4 mb-8\">\r\n <div *ngFor=\"let item of cardData5\" class=\"m-4 agerangescroll\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n {{ item.assist_time_string || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate + '%' : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading5\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData5 && !cardDataLoading5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction vs Conversion <span class=\"ms-1\"\r\n ngbTooltip=\"Comparison of engaged walk-in vs potential conversion in the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData3 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Passer-by Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of camera wise passerby count\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport3()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData3.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading3 && !cardNoData3\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData3\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading3\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData3 && !cardDataLoading3\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData4 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Time-series analysis of customer interactions\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport4()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData4.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading4 && !cardNoData4\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Category</th>\r\n <th>Value</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData4\">\r\n <td>\r\n {{ item.category }}\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\" [value]=\"item?.value\" [max]=\"cardData4?.total\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item?.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading4\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData4 && !cardDataLoading4\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interaction Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client459',\r\n templateUrl: './interation-table-client459.component.html',\r\n styleUrl: './interation-table-client459.component.scss'\r\n})\r\n\r\nexport class InterationTableClient459Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable459Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable459DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'QueueManagement');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}","<div *ngIf=\"!cardNoData\" class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Queue Management</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store ID</th>\r\n <th>Date</th>\r\n <th>Zone Name</th>\r\n <th>Hour</th>\r\n <th>Footfall</th>\r\n <th>Avg Time Spent (Mins)</th>\r\n <!-- <th>Min Time Spent</th>\r\n <th>Max Time Spent</th> -->\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.store_id ? item.store_id :'--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.date ? item.date :'--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zone_name ? item.zone_name: '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.hour ? item.hour : '0' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.Footfall && item.Footfall !== 0 ? item.Footfall.toFixed(0) : '--' }}\r\n </div>\r\n</td>\r\n\r\n<td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.avg_time_spent && item.avg_time_spent !== 0 ? item.avg_time_spent : '--' }}\r\n </div>\r\n</td>\r\n\r\n \r\n <!-- <td>\r\n <div class=\"table-title subscribedtext\">{{ item.min_time_spent || '--' }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.max_time_spent || '--' }}</div>\r\n </td> -->\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { Router } from '@angular/router';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Zonev2Service } from '../services/zonev2.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey-chart',\r\n templateUrl: './customer-journey-chart.component.html',\r\n styleUrl: './customer-journey-chart.component.scss'\r\n})\r\nexport class CustomerJourneyChartComponent implements OnInit, AfterViewInit, OnDestroy {\r\n chartRoot: am5.Root;\r\n viewMode: 'chart' | 'table' = 'chart';\r\n @Input() clientData: any;\r\n headerData: any;\r\n\r\n isPageLoading: boolean = true;\r\n\r\n sortedColumn: string = '';\r\n sortOrder: number = 1;\r\n\r\n searchTerm: string = '';\r\n\r\n limit: number = 10;\r\n offset: number = 1;\r\n totalItems: number = 0;\r\n paginationSizes = [10, 20, 30];\r\n\r\n customerJourneyTableData: any[] = [];\r\n customerJourneyChartData: {\r\n from: string,\r\n to: string,\r\n value: number\r\n }[] = [];\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private router: Router,\r\n private toast: ToastService,\r\n private gs: GlobalStateService, private zoneService: ZoneService,\r\n private zoneV2Service: Zonev2Service\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\nthis.getheaderZoneApi();\r\nthis.getNewZoneData();\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n })\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initializeChart()\r\n }\r\n\r\n toggleView(view: 'chart' | 'table') {\r\n if (this.viewMode === view) return;\r\n this.viewMode = view;\r\n this.searchTerm = '';\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n }\r\n\r\n getCustomerJourneyTableData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyTableData = []\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourneyTable(payload).subscribe({\r\n next: (response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.customerJourneyTableData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data['total_count']\r\n } else {\r\n this.customerJourneyTableData = []\r\n this.totalItems = 0\r\n }\r\n\r\n if (this.totalItems < 10) {\r\n this.paginationSizes = [this.totalItems]\r\n } else {\r\n this.paginationSizes = [10, 20, 30]\r\n }\r\n\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyTableData = [];\r\n this.isPageLoading = false;\r\n console.log(\"@@ ~ getCustomerJourneyTableData [ERR]:\", err);\r\n }\r\n })\r\n }\r\n\r\n getCustomerJourneyChartData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyChartData = []\r\n const payload = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sortType: 'bottom',\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourney(payload).subscribe({\r\n next: (response: any) => {\r\n if (response && response.status === 'success') {\r\n this.customerJourneyChartData = response.data.customerJourneyData;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChartData(this.customerJourneyChartData);\r\n } else {\r\n this.customerJourneyChartData = []\r\n }\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyChartData = []\r\n this.isPageLoading = false;\r\n console.log('@@ getFixtureSizesList [ERR]: ', err)\r\n }\r\n })\r\n }\r\n\r\n initializeChart() {\r\n try {\r\n if (this.chartRoot) return; // Exit if already initialized.\r\n\r\n this.chartRoot = am5.Root.new('customerJourneyChart');\r\n this.chartRoot.setThemes([am5themes_Animated.new(this.chartRoot)]);\r\n\r\n this.chartRoot.container.children.push(am5flow.Sankey.new(this.chartRoot, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 30\r\n }));\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ initializeChart [ERR]:\", error);\r\n }\r\n }\r\n\r\n updateChartData(data: any) {\r\n let filteredData = this.removeCircularLinks(data);\r\n try {\r\n if (!this.chartRoot) throw new Error('Chart not found');\r\n\r\n const series = this.chartRoot.container.children.getIndex(0) as am5flow.Sankey;\r\n if (!series) throw new Error('Chart not found');\r\n\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData);\r\n } else {\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ updateChartData [ERR]:\", error);\r\n }\r\n }\r\n\r\n addNewZone() {\r\n const data: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n data.store = data.stores[0].storeId;\r\n\r\n localStorage.setItem(\"header-filters\", JSON.stringify(data));\r\n this.gs.dataRangeValue.next(data)\r\n\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: data.stores[0].storeId },\r\n });\r\n }\r\n\r\n export() {\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n console.log(\"@@ ~ this.headerData.date.startDate:\", this.headerData.date.endDate);\r\n\r\n this.zoneV2Service.getCustomerJourneyTableExport(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n let fileName = 'Customer_Journey_Export';\r\n\r\n if (this.headerData.date.startDate == this.headerData.date.endDate) {\r\n fileName = `${fileName}_${this.headerData.date.startDate}`\r\n } else {\r\n fileName = `${fileName}_${this.headerData.date.startDate}_${this.headerData.date.endDate}`\r\n }\r\n\r\n this.zoneV2Service.saveAsExcelFile(res, fileName);\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n\r\n }\r\n\r\n removeCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from: any, to: any, visited: any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n onSearch(): void {\r\n this.sortedColumn = '';\r\n this.sortOrder = 1\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n onSortTable(column: string): void {\r\n if (this.sortedColumn === column) {\r\n this.sortOrder = this.sortOrder === 1 ? -1 : 1;\r\n } else {\r\n this.sortedColumn = column;\r\n this.sortOrder = 1;\r\n }\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n paginationSize(): number {\r\n return this.totalItems < 10 ? this.totalItems : this.limit;\r\n }\r\n\r\n onPageSizeChange(pageSize: number) {\r\n this.offset = 1;\r\n this.limit = Number(pageSize);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n onPageChange(pageOffset: any) {\r\n this.offset = Number(pageOffset);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.chartRoot?.dispose();\r\n }\r\ngetNewZoneFFData:any = [];\r\nzones:any= [];\r\n getNewZoneData() {\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n }\r\n this.zoneService.getNewZoneFF(object).subscribe({\r\n next:(res:any)=>{\r\n // console.log('@@ getNewZoneFF ~ res:', res);\r\n this.getNewZoneFFData = res.data;\r\n },\r\n error:(err:any)=>{\r\n console.log('@@ getheaderZoneApi ~ err:', err);\r\n }\r\n})\r\n}\r\nnoSelectedData =true;\r\ngetSelectedZoneFF(){\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n zoneList: this.selectedZones.map((zone: any) => zone.zoneName),\r\n export : false,\r\n }\r\nthis.zoneService.getSelectedZoneFF(object).subscribe({\r\n next: (res: any) => {\r\n console.log('Response received:', res);\r\n if (res?.data?.data?.zoneData?.length > 0) {\r\n this.noSelectedData = false;\r\n this.zones = res.data.data.zoneData;\r\n } else {\r\n this.noSelectedData = true;\r\n this.zones = [];\r\n }\r\n },\r\n error: (err) => {\r\n console.error('Error from API:', err);\r\n },\r\n complete: () => {\r\n console.log('API call completed');\r\n }\r\n});\r\n}\r\ngetheaderZoneApi() {\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n }\r\nthis.zoneService.getHeaderZone(object).subscribe({\r\n next:(res:any)=>{\r\n this.allZones = res?.data?.data?.zoneData;\r\n this.applyZones();\r\n },\r\n error:(err:any)=>{\r\n console.log('@@ getheaderZoneApi ~ err:', err);\r\n }\r\n})\r\n}\r\n allZones:any = [];\r\n\r\n selectedZones: any[] = [];\r\n dropdownOpen = false;\r\n searchText = '';\r\ncomparisonData: any[] = [];\r\n toggleDropdown() {\r\n this.dropdownOpen = !this.dropdownOpen;\r\n this.searchText = '';\r\n }\r\n\r\nfilteredZones(): any[] {\r\n const filtered = this.allZones.filter(\r\n (zone: any) =>\r\n zone.zoneName.toLowerCase().includes(this.searchText.toLowerCase()) &&\r\n !this.selectedZones.some((z: any) => z.zoneName === zone.zoneName)\r\n );\r\n\r\n // console.log('@@ ~ filteredZones:', filtered);\r\n return filtered;\r\n}\r\n\r\n selectZone(zone: string) {\r\n if (this.selectedZones.length < 3) {\r\n this.selectedZones.push(zone);\r\n this.dropdownOpen = false;\r\n this.searchText = '';\r\n }\r\n }\r\n\r\n removeZone(index: number) {\r\n this.selectedZones.splice(index, 1);\r\n this.getSelectedZoneFF();\r\n }\r\nclearZones() {\r\n this.selectedZones = [];\r\n this.dropdownOpen = false;\r\n this.searchText = '';\r\n this.getSelectedZoneFF();\r\n}\r\n applyZones() {\r\n if (this.selectedZones.length >= 1) {\r\n this.getSelectedZoneFF();\r\n }\r\n }\r\n onExport() {\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n zoneList: this.selectedZones.map((zone: any) => zone.zoneName),\r\n export : true,\r\n }\r\n this.zoneService.getSelectedZoneFFExport(object).subscribe({\r\n next:(res:any)=>{\r\n if(this.headerData.date.startDate == this.headerData.date.endDate){\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate;\r\n this.zoneService.saveAsExcelFile1(res, fileName);\r\n } else {\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate+'_'+this.headerData.date.endDate;\r\n this.zoneService.saveAsExcelFile1(res, fileName);\r\n }\r\n }, \r\n error: (err: any) => {\r\n const errorMsg =\r\n err?.error?.message ||\r\n err?.error?.error ||\r\n err?.message ||\r\n 'Something went wrong..';\r\n\r\n this.toast.getErrorToast(errorMsg);\r\n}\r\n\r\n })\r\n \r\n }\r\n\r\n nobUpload(){\r\n this.router.navigate([\"/manage/traffic/nob\"]); \r\n }\r\n\r\n draggedIndex: number | null = null;\r\n\r\nonDragStart(index: number) {\r\n this.draggedIndex = index;\r\n}\r\n\r\nonDragOver(event: DragEvent) {\r\n event.preventDefault(); // REQUIRED to allow drop\r\n}\r\n\r\nonDrop(targetIndex: number) {\r\n if (this.draggedIndex === null || this.draggedIndex === targetIndex) {\r\n return;\r\n }\r\n\r\n const draggedItem = this.selectedZones[this.draggedIndex];\r\n\r\n // Remove from old position\r\n this.selectedZones.splice(this.draggedIndex, 1);\r\n\r\n // Insert at new position\r\n this.selectedZones.splice(targetIndex, 0, draggedItem);\r\n\r\n this.draggedIndex = null;\r\n}\r\n\r\nenableDrag(event: MouseEvent) {\r\n const chip = (event.target as HTMLElement).closest('.zone-chip');\r\n if (chip) {\r\n chip.setAttribute('draggable', 'true');\r\n }\r\n}\r\n\r\ndisableDrag(event: MouseEvent) {\r\n const chip = (event.target as HTMLElement).closest('.zone-chip');\r\n if (chip) {\r\n chip.setAttribute('draggable', 'false');\r\n }\r\n}\r\n\r\n}\r\n","<!-- <section id=\"customer-journey-chart\" class=\"card p-5\"> -->\r\n <!-- ---------HEADER---------- -->\r\n <!-- <div class=\"d-flex justify-content-between mb-3\">\r\n <div class=\"d-flex align-items-center justify-content-center gap-3\">\r\n <h3>Customer Journey</h3>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_13146_67458)\">\r\n <path\r\n d=\"M6.06065 6.91667C6.21739 6.47111 6.52675 6.0954 6.93395 5.85609C7.34116 5.61677 7.81991 5.52929 8.28544 5.60914C8.75096 5.68899 9.1732 5.93102 9.47737 6.29235C9.78154 6.65369 9.94802 7.11101 9.94732 7.58333C9.94732 8.91667 7.94732 9.58333 7.94732 9.58333M8.00065 12.25H8.00732M14.6673 8.91667C14.6673 12.5986 11.6826 15.5833 8.00065 15.5833C4.31875 15.5833 1.33398 12.5986 1.33398 8.91667C1.33398 5.23477 4.31875 2.25 8.00065 2.25C11.6826 2.25 14.6673 5.23477 14.6673 8.91667Z\"\r\n stroke=\"#98A2B3\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_13146_67458\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0 0.916016)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-5\">\r\n <div style=\"position: relative\" [hidden]=\"viewMode === 'chart'\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n (change)=\"onSearch()\"\r\n style=\"padding: 0.68rem 3rem\"\r\n class=\"form-control\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\" class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n ></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div id=\"segment-btn\">\r\n <div [class.active]=\"viewMode === 'chart'\" class=\"segment chart-btn\" (click)=\"toggleView('chart')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M15 17.5833V9.25M10 17.5833V4.25M5 17.5833V12.5833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div [class.active]=\"viewMode === 'table'\" class=\"segment table-btn\" (click)=\"toggleView('table')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M6.66667 5.91602H17.5M6.66667 10.916H17.5M6.66667 15.916H17.5M2.5 5.91602H2.50833M2.5 10.916H2.50833M2.5 15.916H2.50833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\">\r\n <path\r\n d=\"M12 13.916C12.5523 13.916 13 13.4683 13 12.916C13 12.3637 12.5523 11.916 12 11.916C11.4477 11.916 11 12.3637 11 12.916C11 13.4683 11.4477 13.916 12 13.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 6.91602C12.5523 6.91602 13 6.4683 13 5.91602C13 5.36373 12.5523 4.91602 12 4.91602C11.4477 4.91602 11 5.36373 11 5.91602C11 6.4683 11.4477 6.91602 12 6.91602Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 20.916C12.5523 20.916 13 20.4683 13 19.916C13 19.3637 12.5523 18.916 12 18.916C11.4477 18.916 11 19.3637 11 19.916C11 20.4683 11.4477 20.916 12 20.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li>\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.00065 1.33398V10.6673M1.33398 6.00065H10.6673\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"addNewZone()\"> Add New Zone </a>\r\n </span>\r\n </li>\r\n <li [hidden]=\"viewMode === 'chart'\">\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M14 10V12.6667C14 13.0203 13.8595 13.3594 13.6095 13.6095C13.3594 13.8595 13.0203 14 12.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V10M11.3333 5.33333L8 2M8 2L4.66667 5.33333M8 2V10\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"export()\"> Export </a>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <div [hidden]=\"!isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- <div [hidden]=\"isPageLoading\"> -->\r\n <!-- ---------CHART---------- -->\r\n <!-- <div [hidden]=\"viewMode === 'table'\">\r\n <div [hidden]=\"customerJourneyChartData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyChartData.length === 0\">\r\n <div id=\"customerJourneyChart\"></div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- ---------TABLE---------- -->\r\n <!-- <div [hidden]=\"viewMode === 'chart'\">\r\n <div [hidden]=\"customerJourneyTableData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyTableData.length === 0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneName')\">\r\n Zone Name\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneName' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('noOfStores')\">\r\n No. of stores\r\n <svg\r\n [ngClass]=\"sortedColumn === 'noOfStores' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'noOfStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneFF')\">\r\n Zone FF\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneFF' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneFF' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('impressions')\">\r\n Concentration\r\n <svg\r\n [ngClass]=\"sortedColumn === 'impressions' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'impressions' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg\r\n [ngClass]=\"sortedColumn === 'AvgDwellTime' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'AvgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyTableData\">\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.noOfStores || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFF || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressions || 0 }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.AvgDwellTime || 0 }} Mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n \r\n <lib-pagination\r\n class=\"text-start\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n ></lib-pagination>\r\n </div>\r\n </div> -->\r\n <!-- </div>\r\n</section> -->\r\n\r\n<div class=\"card mt-3\">\r\n <div class=\"card-header border-bottom-0 d-flex justify-content-between align-items-center\">\r\n <h3 class=\"card-title\">Zone-Based Shopper Journey </h3>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" *ngIf=\"selectedZones.length >= 1\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n</div>\r\n<div class=\"card-body pt-1\">\r\n <div class=\"row bordered-box\">\r\n <div class=\"col-md-3\">\r\n <div class=\"compare-card\">\r\n <h3>Select Zones to Compare</h3>\r\n\r\n <!-- Selected Zones List -->\r\n <div class=\"selected-zones\">\r\n <div *ngFor=\"let zone of selectedZones; let i = index\" class=\"zone-chip\" draggable=\"true\"\r\n (dragstart)=\"onDragStart(i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop(i)\">\r\n <span class=\"drag-icon\" (mousedown)=\"enableDrag($event)\"\r\n (mouseup)=\"disableDrag($event)\">☰</span>\r\n <span>{{ zone.zoneName | titlecase}}</span>\r\n <button class=\"remove-btn\" (click)=\"removeZone(i)\">✕</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Select Dropdown -->\r\n <div class=\"select-zone\" *ngIf=\"selectedZones.length < 3\">\r\n <div class=\"dropdown-container\" (click)=\"toggleDropdown()\">\r\n <span>+ Select Zone</span>\r\n </div>\r\n\r\n <div class=\"dropdown\" *ngIf=\"dropdownOpen\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search zones...\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"dropdown-search\"\r\n />\r\n <ul class=\"dropdown-list\">\r\n <li\r\n *ngFor=\"let zone of filteredZones()\"\r\n (click)=\"selectZone(zone)\"\r\n [class.disabled]=\"selectedZones.includes(zone)\"\r\n >\r\n {{ zone?.zoneName | titlecase}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <!-- Info Text -->\r\n <p class=\"hint-text mt-20\">\r\n {{ selectedZones.length < 1\r\n ? 'Choose minimum 2, max 3 Zones to compare'\r\n : 'Maximum 3 Zones to compare' }}\r\n </p>\r\n\r\n <!-- Apply Button -->\r\n <div class=\"button-group\">\r\n <!-- Reset button: show only when 3 zones selected -->\r\n <button\r\n *ngIf=\"selectedZones.length >= 1\"\r\n class=\"btn btn-outline reset-btn w-100\"\r\n (click)=\"clearZones()\"\r\n >\r\n Reset\r\n </button>\r\n\r\n <!-- Apply button: always visible -->\r\n <button\r\n class=\"apply-btn w-100\"\r\n [class.active]=\"selectedZones.length >= 1\"\r\n [disabled]=\"selectedZones.length < 1\"\r\n (click)=\"applyZones()\"\r\n >\r\n Apply\r\n </button>\r\n</div>\r\n\r\n</div>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <div class=\"card-header ellipse1 border-0 px-3 mb-2\">\r\n <h3 class=\"card-title align-items-start flex-column\"><span class=\"card-label header\">Based on Overall\r\n Footfall</span><span class=\"sub-header\">Tells you the percentage of total store footfall attributed to each zone\r\n </span></h3>\r\n </div>\r\n<div class=\"d-flex justify-content-between mt-3\" >\r\n <div class=\"bordered-box w-50 me-2 py-3\">\r\n <div class=\"group d-flex justify-content-between px-3\">\r\n <span class=\"text-title py-2\">Overall Footfall :</span>\r\n <span><span class=\"text-val\">{{getNewZoneFFData?.overallFootfall ? getNewZoneFFData?.overallFootfall :'--'}}</span> <span class=\"text-perc ms-1\">({{getNewZoneFFData?.overallFootfallPercentage ? getNewZoneFFData?.overallFootfallPercentage :'--'}})</span></span>\r\n </div>\r\n </div>\r\n <div class=\"bordered-box w-50 py-3\">\r\n <div class=\"group d-flex justify-content-between px-3\">\r\n <span class=\"text-title py-2\">NoB :</span>\r\n <span class=\"text-val\">{{getNewZoneFFData?.nobCount ?? '0'}} <span *ngIf=\"this.clientData?.isNOB\" class=\"px-0 cursor-pointer\" (click)=\"nobUpload()\"><svg placement=\"top\" ngbTooltip=\"Upload NoB\" xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"\r\n viewBox=\"0 0 40 40\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15106_106090)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"#EAF8FF\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#EAF8FF\" />\r\n <path\r\n d=\"M23.3326 22.3332L19.9992 18.9999M19.9992 18.9999L16.6659 22.3332M19.9992 18.9999V26.4999M26.9909 24.3249C27.8037 23.8818 28.4458 23.1806 28.8158 22.3321C29.1858 21.4835 29.2627 20.5359 29.0344 19.6388C28.8061 18.7417 28.2855 17.9462 27.5548 17.3778C26.8241 16.8094 25.925 16.5005 24.9992 16.4999H23.9492C23.697 15.5243 23.2269 14.6185 22.5742 13.8507C21.9215 13.0829 21.1033 12.4731 20.181 12.0671C19.2587 11.661 18.2564 11.4694 17.2493 11.5065C16.2423 11.5436 15.2568 11.8085 14.3669 12.2813C13.477 12.7541 12.7058 13.4225 12.1114 14.2362C11.517 15.05 11.1148 15.9879 10.9351 16.9794C10.7553 17.9709 10.8027 18.9903 11.0736 19.961C11.3445 20.9316 11.8319 21.8281 12.4992 22.5832\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15106_106090\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15106_106090\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_15106_106090\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <table *ngIf=\"!noSelectedData\" class=\"table bottom-border mt-3\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"w-50\">Zones</th>\r\n <th class=\"w-50\">Footfall Count (Concentration %)</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of zones\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.zoneName | titlecase}}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"5px\" type=\"primary\" [value]=\"item.percentage\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.footfall }} ({{ item.percentage }}%)\r\n <!-- {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}% -->\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n\r\n\r\n <div *ngIf=\"noSelectedData\" class=\"row\">\r\n <div class=\"card-body pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"footimg-nodata1\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mb-3\">Select Zones to Compare</div>\r\n <!-- <div class=\"nodata-sub\">There is no result for this conversion funnel</div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n@Component({\r\n selector: 'lib-tango-analyse-zone',\r\n templateUrl: './tango-analyse-zone.component.html',\r\n styleUrl: './tango-analyse-zone.component.scss',\r\n})\r\nexport class TangoAnalyseZoneComponent implements OnInit,OnDestroy {\r\n storeId: number = 0;\r\n clientId: number; \r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService,private zoneService:ZoneService,private cd:ChangeDetectorRef,\r\n ) {\r\n }\r\n clientData: any;\r\n // receivedData: any = '';\r\n ngOnInit(): void {\r\n this.setPageData();\r\n const userData: any = JSON.parse(localStorage.getItem(\"client-details\") || \"{}\");\r\n this.clientData = userData;\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId() \r\n this.checkTodayReportStatus() \r\n})\r\n}\r\n\r\nhasSegmentationData: boolean = false;\r\n\r\nupdateSegmentationStatus(hasData: boolean) {\r\n this.hasSegmentationData = hasData;\r\n}\r\n// receiveData(data: any) {\r\n// this.receivedData = data;\r\n// console.log(data)\r\n// this.cd.detectChanges();\r\n// }\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData?.stores?.filter((store: any) => store?.checked).length;\r\n }\r\n\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n this.dataProcessedLoading = false;\r\n this.cd.detectChanges();\r\n }\r\n });\r\n }\r\n}\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<div *ngIf=\"storeId === 1\">\r\n<lib-zone-concentration></lib-zone-concentration>\r\n</div>\r\n<div class=\"mt-4\" *ngIf=\"!(storeId > 1 && headerData?.client === '459')\">\r\n <lib-overallcards></lib-overallcards>\r\n</div>\r\n<div *ngIf=\"storeId === 1\">\r\n <lib-segmentation></lib-segmentation>\r\n</div>\r\n <!-- <ng-container *ngIf=\"hasSegmentationData === true\"> -->\r\n \r\n <!-- </ng-container> -->\r\n <!-- <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-8\">\r\n <lib-interation-table-client430></lib-interation-table-client430>\r\n </div>\r\n <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-4\">\r\n <lib-passerby-table></lib-passerby-table>\r\n </div>\r\n </div> -->\r\n\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId === 1 && headerData?.client === '459'\">\r\n<lib-interation-table-client459></lib-interation-table-client459>\r\n</div>\r\n<div class=\"mt-2\" *ngIf=\"storeId > 1\">\r\n <div *ngIf=\"headerData?.client !== '459'\">\r\n <lib-top-performing-zones *ngIf=\"clientData\" [clientData]=\"clientData\"></lib-top-performing-zones>\r\n </div>\r\n</div>\r\n\r\n<div class=\"mt-2\" *ngIf=\"storeId === 1 && headerData?.client === '478'\">\r\n <lib-customer-journey-chart *ngIf=\"clientData\" [clientData]=\"clientData\"></lib-customer-journey-chart>\r\n</div>\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId > 1\">\r\n <lib-zone-summary-table *ngIf=\"clientData\" [clientData]=\"clientData\"></lib-zone-summary-table>\r\n</div>\r\n</div>\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> ","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime} from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-zones-cards',\r\n templateUrl: './zones-cards.component.html',\r\n styleUrl: './zones-cards.component.scss'\r\n})\r\nexport class ZonesCardsComponent {\r\n zoneCardsData: any;\r\n headerData: any;\r\n zoneCardsFootfall: number | undefined;\r\n private destroy$ = new Subject<void>();\r\n constructor(private Zonev2Service: Zonev2Service,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService, private router: Router, private ActivatedRoute: ActivatedRoute,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getZoneCards();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getZoneCards(): void {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getZoneCardsData(requestData).pipe(takeUntil(this.destroy$)).subscribe(\r\n (response: any) => {\r\n if (response?.status === 'success') {\r\n this.zoneCardsData = response.data.card;\r\n this.Zonev2Service.updateFootfall(response.data.card.footfall.count);\r\n \r\n } else {\r\n this.zoneCardsData = []\r\n }\r\n },\r\n (error) => {\r\n this.zoneCardsData = []\r\n console.error('Error fetching zone card data', error);\r\n }\r\n );\r\n }\r\n\r\n// redirectToHeatmap(zoneName: string): void {\r\n// if (zoneName) {\r\n// this.router.navigate([], {\r\n// relativeTo: this.ActivatedRoute,\r\n// queryParams: { zoneName } });\r\n// const heatmapElement = document.querySelector(`#heatmapscroll`);\r\n// console.log(\"heatmapElement\", heatmapElement)\r\n// if (heatmapElement) {\r\n \r\n// heatmapElement.scrollIntoView({ block: 'center', behavior: 'smooth' });\r\n// }\r\n// }\r\n// }\r\n\r\n}\r\n","<div class=\"col-md-12\">\r\n <div class=\"row d-flex justify-content-between align-items-stretch\">\r\n\r\n <!-- Total Store Footfall Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.footfall?.count ? zoneCardsData?.footfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</span>\r\n <span class=\"cardtext\">Total Store Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.footfall?.zoneName ? (zoneCardsData?.footfall?.zoneName | titlecase) : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Footfall <span class=\"subcount\">- {{zoneCardsData?.footfall?.zoneFootfallCount ? zoneCardsData?.footfall?.zoneFootfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Highest Impression Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.impression?.rate ? zoneCardsData?.impression?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Highest Store impression</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.impression?.zoneName ?(zoneCardsData?.impression?.zoneName | titlecase) : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with <span class=\"subcount\">{{zoneCardsData?.impression?.zoneImpressionRate ? zoneCardsData?.impression?.zoneImpressionRate + '%' : '--'}}</span> <br> impression</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Total Bounced Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.bounced?.rate ? zoneCardsData?.bounced?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Zone Bounced Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.bounced?.zoneName ? zoneCardsData?.bounced?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Bounced rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Engagers Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.engagers?.rate ? zoneCardsData?.engagers?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Engagers Zone Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.engagers?.zoneName ? zoneCardsData?.engagers?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Engager Rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Average Dwell Time Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.avgDwellTime?.rate ? zoneCardsData?.avgDwellTime?.rate + ' Mins' : '--'}}</span>\r\n <span class=\"cardtext\">Average Top Zone Dwell Time</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.avgDwellTime?.zoneName ? zoneCardsData?.avgDwellTime?.zoneName : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Dwell Time</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { AfterViewInit, Component, Input, ViewChild } from '@angular/core';\r\nimport { NgbCarousel, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-store-zoom-heatmap',\r\n templateUrl: './store-zoom-heatmap.component.html',\r\n styleUrl: './store-zoom-heatmap.component.scss'\r\n})\r\nexport class StoreZoomHeatmapComponent implements AfterViewInit {\r\n @ViewChild('carousel1', { static: true }) carousel1!: NgbCarousel;\r\n \r\n @Input() imageURL: [];\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n currentSlideIndex = 0;\r\n\r\n currentSlide = 0;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURL) {\r\n this.overallStoreData.ImageURLs = this.imageURL; \r\n \r\n \r\n }\r\n}\r\n\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n <ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs;let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, NgZone, AfterViewInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarousel, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5percent from '@amcharts/amcharts5/percent';\r\nimport * as am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { StoreZoomHeatmapComponent } from './store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { ActivatedRoute } from '@angular/router';\r\n@Component({\r\n selector: 'lib-store-heatmap',\r\n templateUrl: './store-heatmap.component.html',\r\n styleUrl: './store-heatmap.component.scss'\r\n})\r\nexport class StoreHeatmapComponent {\r\n @ViewChild('carousel', { static: true }) carousel!: NgbCarousel;\r\n private readonly destroy$ = new Subject();\r\n selectedTab: string = '';\r\n headerData: any;\r\n dayjs = dayjs;\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n type: string = 'daily';\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n zoneName: string = '';\r\n selectedDate: string = '';\r\n overallStoreData: any = {};\r\n overallStoreconcentrationData: any = {}\r\n // zoneConcentrationData: any[] = [];\r\n availableZones: any[] = [];\r\n overallStoreConcentrationDates: any[] = [];\r\n periodzone: number = 1;\r\n customOption: boolean = false;\r\n searchInput: any = \"\";\r\n sortColumName: string = '';\r\n sortBy: number = 1;\r\n sortDirection: number = -1;\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n private genderroot!: am5.Root;\r\n private arcroot!: am5.Root;\r\n currentZone: any; // Declare as 'any' or use a specific type if known\r\n otherZone: any;\r\n arcDiagram: any;\r\n currentSlideIndex = 0;\r\n customArrow: boolean = false;\r\n trajectoryNoData: boolean = false;\r\n trajectoryLoading: boolean = true;\r\n trajectoryRateNoData: boolean = false;\r\n trajectoryRateLoading: boolean = true;\r\n cardcustomArrow: boolean = false;\r\n\r\n currentSlide = 0;\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n @ViewChild('zoneNameList', {read:ElementRef}) zoneNameList!:ElementRef;\r\n\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService, private elementRef: ElementRef,private route: ActivatedRoute) { \r\n \r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.cardcustomArrow = false;\r\n this.type = 'daily';\r\n if(eDate.diff(sDate,'day') < 6) {\r\n this.disableWeek = true;\r\n this.disableMonth = true;\r\n this.type = 'daily';\r\n }\r\n else if(eDate.diff(sDate,'day') < 27) {\r\n this.disableMonth = true;\r\n this.disableDay = false;\r\n this.disableWeek = false;\r\n this.type = 'weekly';\r\n }\r\n else {\r\n this.disableDay = false;\r\n this.disableWeek = false;\r\n this.disableMonth = false;\r\n this.type = 'monthly';\r\n }\r\n\r\n this.route.queryParams.subscribe(params => {\r\n this.zoneName = params['zoneName'];\r\n if (this.zoneName) {\r\n this.changeTab(this.zoneName);\r\n\r\n }\r\n });\r\n \r\n this.getAvailableZoneNames();\r\n // this.getTrajectoryAnalysis();\r\n \r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n })\r\n\r\n }\r\n ngOnDestroy(): void {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n if (this.arcroot) {\r\n this.arcroot.dispose();\r\n }\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n\r\n }\r\n\r\n changeTab(tabName: string) {\r\n this.selectedTab = tabName;\r\n this.zoneName = tabName;\r\n // this.type = 'daily';\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.changeDetector.detectChanges(); \r\n }\r\n getAvailableZoneNames(): void {\r\n // this.cardcustomArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = true;\r\n this.overallStoreData = [];\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, // Adjust based on your date selection mechanism\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.availableZones = response.data.availableZoneData;\r\n if (this.availableZones.length) {\r\n\r\n this.selectedTab = this.availableZones[0].zoneName;\r\n this.zoneName = this.selectedTab;\r\n // this.changeTab(this.selectedTab);\r\n }\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.availableZones.length ? this.availableZones[0].zoneName : '';\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.getAnalaysisSummary()\r\n \r\n\r\n\r\n\r\n } else {\r\n // this.zonesummaryLoading = false;\r\n // this.zonesummaryNoData = true;\r\n\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n\r\n this.availableZones = [];\r\n this.overallStoreConcentrationDates = [];\r\n this.overallStoreconcentrationData = [];\r\n this.cardNoData = true;\r\n this.cardDataLoading = false;\r\n // this.overallStoreData = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.availableZones = [];\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n // this.cardDataLoading = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.Zonev2Service.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.formatDateInput(this.selectedDate);\r\n \r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreconcentrationData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n \r\n \r\n } else {\r\n this.overallStoreconcentrationData = [];\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreconcentrationData = []\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\ngetOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = [];\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((s: any) => s.checked).map((s: any) => s.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n };\r\n\r\n this.Zonev2Service.getOverallStoreHeatmapDates(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: any) => {\r\n const data = response?.data?.overallStoreConcentrationDates || [];\r\n this.overallStoreConcentrationDates = data;\r\n this.heatmapLoading = false;\r\n\r\n if (response?.code === 200 && response?.status === 'success' && data.length) {\r\n this.selectedDate = data[0].zoneDate;\r\n\r\n // Show arrows based on count\r\n this.customArrow =\r\n (this.type === 'daily' && data.length > 7) ||\r\n (this.type === 'weekly' && data.length > 5);\r\n\r\n // ✅ Load dependent data\r\n this.getOverallStoreConcentrationData();\r\n this.getAnalaysisSummary();\r\n } else {\r\n this.heatmapNoData = true;\r\n this.cardNoData = true;\r\n this.overallStoreConcentrationDates = [];\r\n this.overallStoreData =[];\r\n }\r\n },\r\n error: () => {\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n },\r\n });\r\n}\r\n\r\n\r\nonDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n this.getAnalaysisSummary();\r\n }\r\n}\r\n\r\n\r\nselectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates(); // auto handles everything\r\n}\r\n\r\n\r\n onZoneClick(zoneName: string): void {\r\n \r\n this.zoneName = zoneName;\r\n this.getOverallStoreHeatmapDates();\r\n \r\n }\r\n concentrationHeatmap(imageURL: string) {\r\n const modalRef = this.modalService.open(StoreZoomHeatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURL = imageURL;\r\n modalRef.result.then((result) => {\r\n\r\n });\r\n }\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv');\r\n\r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n\r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n\r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n\r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis);\r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(95),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n\r\n });\r\n\r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n\r\n legend.data.setAll(series.dataItems);\r\n\r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n }\r\n// --- Utility: format date string (single or range)\r\nprivate formatDateInput(dateStr: string): { fromDate: string; toDate: string } {\r\n if (!dateStr) {\r\n return { fromDate: this.headerData.date.startDate, toDate: this.headerData.date.endDate };\r\n }\r\n\r\n const formatLocalDate = (d: string) => {\r\n const date = new Date(d);\r\n const y = date.getFullYear();\r\n const m = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n return `${y}-${m}-${day}`;\r\n };\r\n\r\n const parts = dateStr.split(' - ').map(p => p.trim());\r\n const from = formatLocalDate(parts[0]);\r\n const to = formatLocalDate(parts[1] || parts[0]);\r\n return { fromDate: from, toDate: to };\r\n}\r\n\r\n\r\ngetAnalaysisSummary(): void {\r\n const { fromDate, toDate } = this.formatDateInput(this.selectedDate);\r\n\r\n const requestData = {\r\n fromDate,\r\n toDate,\r\n storeId: this.headerData.stores.filter((s: any) => s.checked).map((s: any) => s.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n\r\n this.cardDataLoading = true;\r\n this.cardNoData = false;\r\n\r\n this.Zonev2Service.getAnalaysisSummary(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: any) => {\r\n const zoneData = response?.data?.zoneConcentrationData || [];\r\n if (zoneData.length) {\r\n this.overallStoreData = zoneData[0];\r\n this.ageAnalysis = this.overallStoreData.ageAnalysis || [];\r\n this.genderAnalysis = this.overallStoreData.genderAnalysis || [];\r\n setTimeout(() => this.genderchart(), 200);\r\n this.cardNoData = false;\r\n } else {\r\n this.overallStoreData = [];\r\n this.cardNoData = true;\r\n }\r\n this.cardDataLoading = false;\r\n },\r\n error: () => {\r\n this.overallStoreData = [];\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n },\r\n });\r\n}\r\n\r\n\r\n getAgeArray() {\r\n let data: any = [];\r\n this.ageAnalysis.forEach((item: any, index: any) => {\r\n if (index % 2 == 0) {\r\n data.push(index);\r\n }\r\n })\r\n\r\n return data;\r\n }\r\n getTrajectoryAnalysis(): void {\r\n this.trajectoryLoading = true;\r\n this.trajectoryNoData = false;\r\n // this.cardDataLoading = true;\r\n // this.cardNoData = true;\r\n\r\n if (!this.zoneName || this.zoneName.trim() === '') {\r\n if (this.availableZones && this.availableZones.length > 0) {\r\n this.zoneName = this.availableZones[0].zoneName;\r\n } else {\r\n this.trajectoryLoading = false;\r\n this.trajectoryNoData = true;\r\n return; \r\n }\r\n }\r\n \r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName\r\n // zoneName: \"Fresh\", // Fixed as per your current implementation\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.trajectoryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const data = response.data.trajectoryAnalysisData;\r\n const zoneList = data.zoneList;\r\n const diagramData: Array<{ from: string; to: string; value: number; fill: am5.Color }> = [];\r\n zoneList.forEach((zone: { from: any; to: any; value: any; }, index: number) => {\r\n diagramData.push({\r\n from: zone.from,\r\n to: zone.to,\r\n value: zone.value, // Use the value from the API response\r\n fill: this.getZoneColor(index) // Custom function to get a color for the zone\r\n });\r\n });\r\n this.trajectoryNoData = false;\r\n if (diagramData.length > 0) {\r\n \r\n setTimeout(() => {\r\n this.createArcDiagram(diagramData);\r\n }, 200);\r\n // this.trajectoryNoData = false;\r\n } else {\r\n // this.trajectoryNoData = true;\r\n }\r\n \r\n // this.cardNoData = false;\r\n } else {\r\n this.trajectoryNoData = true; \r\n // this.cardDataLoading = false;\r\n // this.cardNoData = true; // Set no data flag if response is unsuccessful\r\n }\r\n this.cardDataLoading = false; // Stop loading spinner after data is processed\r\n },\r\n error => {\r\n this.trajectoryLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true; // Set no data flag on error\r\n });\r\n }\r\n getTrajectoryRateAnalysis(): void {\r\n this.trajectoryRateLoading = true;\r\n this.trajectoryRateNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryRateAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.trajectoryRateLoading = false;\r\n \r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const zoneData = response.data.zoneConcentrationData[0]?.trajectoryAnalysisRateData;\r\n \r\n this.currentZone = response.data.zoneConcentrationData[0]?.currentZone;\r\n this.otherZone = zoneData.otherZone;\r\n if (this.currentZone && this.otherZone) {\r\n // this.currentZone.impressionRate, this.otherZone.ageGenderRate, etc.\r\n } else {\r\n // this.trajectoryRateNoData = true;\r\n }\r\n \r\n this.trajectoryRateNoData = false; // Data exists\r\n } else {\r\n // response.data.zoneConcentrationData = []\r\n this.trajectoryRateNoData = true;\r\n }\r\n this.cardDataLoading = false;\r\n },\r\n (error) => {\r\n this.trajectoryRateLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n );\r\n }\r\n \r\n createArcDiagram(diagramData: { from: string; to: string; value: number; fill: am5.Color; }[]): void {\r\n setTimeout(() => {\r\n // Dispose previous diagram if it exists\r\n if (this.arcDiagram) {\r\n this.arcDiagram.dispose();\r\n }\r\n\r\n // Create root element\r\n const root = am5.Root.new(\"arcDiagramDiv\");\r\n root.container.setAll({\r\n width: am5.p100, // 100% width\r\n height: am5.percent(80) // Adjust the percentage to control the height\r\n });\r\n\r\n // Create series\r\n const series = root.container.children.push(am5flow.ArcDiagram.new(root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n orientation: \"horizontal\"\r\n }));\r\n\r\n // Configure labels\r\n series.nodes.labels.template.setAll({\r\n fontSize: \"16px\",\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n width: 160\r\n });\r\n \r\n // Animated bullets\r\n series.bullets.push((root, series, dataItem) => {\r\n const bullet = am5.Bullet.new(root, {\r\n locationY: Math.random(),\r\n sprite: am5.Circle.new(root, {\r\n radius: 2,\r\n fill: dataItem.get(\"source\").get(\"fill\")\r\n })\r\n });\r\n\r\n bullet.animate({\r\n key: \"locationY\",\r\n to: 1,\r\n from: 0,\r\n duration: Math.random() * 1000 + 2000,\r\n loops: Infinity\r\n });\r\n\r\n return bullet;\r\n });\r\n\r\n // Set data dynamically from the API response\r\n series.data.setAll(diagramData);\r\n\r\n // Make stuff animate on load\r\n series.appear(1000, 100);\r\n this.arcDiagram = series;\r\n },100);\r\n }\r\n getZoneColor(index: number): am5.Color {\r\n const colors = [am5.color(0x4285F4), am5.color(0xAA46BB), am5.color(0xFF7043), am5.color(0x8E24AA)];\r\n return colors[index % colors.length];\r\n }\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreconcentrationData?.ImageURLs?.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n }\r\n\r\n scrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\n scrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n zonescrollLeft() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: -150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n \r\n zonescrollRight() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: 150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n}","<div class=\"card\">\r\n <div class=\"card-header storecard\">\r\n <div class=\"zone-container position-relative mx-5\">\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-left position-absolute\" (click)=\"zonescrollLeft()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <div class=\"zone-buttons-container d-flex justify-content-start align-items-center no-wrap-list ms-4 me-10\" #zoneNameList>\r\n <button id=\"heatmapscroll\" *ngFor=\"let zone of availableZones\" \r\n class=\"btn btn-color-gray-600 btn-active btn-active-secondary py-3\"\r\n [ngClass]=\"selectedTab === zone.zoneName ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\r\n (click)=\"changeTab(zone.zoneName)\">\r\n {{ zone.zoneName }}\r\n </button>\r\n </div>\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-right position-absolute\" (click)=\"zonescrollRight()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"row px-3 pt-3\">\r\n <div class=\"col-lg-6 right-border my-1\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Store Heatmap</span>\r\n </h3>\r\n \r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\" (click)=\"selectPlan('daily')\" [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\" (click)=\"selectPlan('weekly')\" [attr.disabled]=\"disableWeek ? true : null\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\" (click)=\"selectPlan('monthly')\" [attr.disabled]=\"disableMonth ? true : null\">\r\n Month\r\n </button>\r\n </div>\r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div >\r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n \r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreconcentrationData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreconcentrationData?.ImageURLs)\"\r\n [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n \r\n <a [href]=\"image.URL\" download><svg id=\"download-icon\" width=\"44\" height=\"44\"\r\n viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\"\r\n stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration\r\n Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Analysis</span>\r\n </h3>\r\n </div>\r\n <div class=\"body me-4\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n <div class=\"m-4\" *ngIf=\"!cardDataLoading\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-12\">{{ overallStoreData?.footfall?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.footfall?.storeRate || '--' }}%</span> of store footfall\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Impression Rate</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{ overallStoreData?.impression?.zoneRate || '--' }}%</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.impression?.storeRate || '--' }}%</span> Store Impression\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Bounced Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-6\">{{ overallStoreData?.bounced?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.bounced?.storeRate || '--' }}%</span> of total bounced\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Engagers</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-10\">{{ overallStoreData?.engagers?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.engagers?.storeRate || '--' }}%</span> of total engagers\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Avg. Zone Dwell Time</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-12\">{{ overallStoreData?.avgDwellTime?.zoneAvgDwellTime || '--' }} mins</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n Avg. dwell time <span class=\"textprimary mx-1\">{{ overallStoreData?.avgDwellTime?.storeAvgDwellTime || '--' }} mins</span>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-8\">\r\n <div class=\"headtext p-3\">Age & Gender Analysis</div>\r\n <div class=\"card-body p-0 mb-2\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"mt-4\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div class=\"card-body p-0 mt-5\">\r\n <div>\r\n \r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <!-- <table class=\"table table-borderless text-center w-100\"> -->\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"overalltext\">{{ item?.category || '' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n </tr>\r\n<!-- </table> -->\r\n\r\n <!-- <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let i of getAgeArray()\">\r\n <td>\r\n <div class=\"overalltext\">{{ ageAnalysis[i]?.category || '' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ ageAnalysis[i]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"overalltext\">{{ ageAnalysis[i + 1]?.category || '' }}</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"table-title\">{{ ageAnalysis[i + 1]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n </tr>\r\n </tbody> -->\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"selectedTab !== 'Overall Store'\" class=\"row p-8\">\r\n <div class=\"col-12 trajectorycard\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Trajectory Analysis</span>\r\n </h3> \r\n </div>\r\n <div class=\"card-body\">\r\n \r\n \r\n\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <ng-container *ngIf=\"trajectoryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryNoData && !trajectoryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryLoading && !trajectoryNoData\" class=\"arcdiagram\">\r\n <div id=\"arcDiagramDiv\"></div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6 p-12\">\r\n <ng-container *ngIf=\"trajectoryRateLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryRateNoData && !trajectoryRateLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryRateLoading && !trajectoryRateNoData\" class=\"row ps-15 mt-20\">\r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ currentZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n {{ selectedTab }}\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">Other Zones</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ currentZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ currentZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ currentZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ otherZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n Other Zones\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">{{ selectedTab }}</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ otherZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ otherZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ otherZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\">\r\n <div ngbAccordion>\r\n <div ngbAccordionItem [collapsed]=\"false\">\r\n <h2 ngbAccordionHeader>\r\n <button class=\"headtext\" ngbAccordionButton>Image Directory<div class=\"divider\"></div></button>\r\n </h2>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-image-directory></lib-image-directory>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container> -->\r\n \r\n</div>\r\n\r\n\r\n\r\n","import { Component, EventEmitter, HostListener, Input, Output, Provider, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nconst SELECT_CONTROL_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ReactiveSelectComponent),\r\n multi: true,\r\n};\r\n\r\n@Component({\r\n selector: 'lib-reactive-select',\r\n templateUrl: './reactive-select.component.html',\r\n styleUrl: './reactive-select.component.scss',\r\n providers: [SELECT_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class ReactiveSelectComponent implements ControlValueAccessor {\r\n\r\n private onTouched: Function;\r\n private onChanged: Function;\r\n protected isDisabled: boolean;\r\n @Input() idField: string\r\n @Input() nameField: string\r\n @Input() label: string\r\n @Input() data: any\r\n protected isOpened: boolean = false\r\n protected selected: Record<string, any> | null = null\r\n protected selectedId: string | number\r\n\r\n writeValue(val: string | number): void {\r\n this.selectedId = val\r\n this.selected = this.data.filter((item:Record<string, any>)=> item?.[this.idField] === val)[0] \r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChanged = fn\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled\r\n\r\n }\r\n\r\n onSelect(item: Record<string, any>) {\r\n this.onTouched()\r\n this.selected = item\r\n this.selectedId = item?.[this.idField] \r\n this.isOpened = false\r\n this.onChanged(this.selectedId)\r\n this.onSelectionChange(item); \r\n }\r\n\r\n \r\n onSelectionChange(item: Record<string, any>) {\r\n this.valueChange.emit(item?.[this.idField]);\r\n }\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.isDisabled) {\r\n const targetElement = event.target as HTMLElement;\r\n if (!this.isComponentClicked(targetElement)) {\r\n this.isOpened = false;\r\n }\r\n }\r\n }\r\n\r\n isComponentClicked(targetElement: HTMLElement): boolean {\r\n const parentElement = targetElement.parentElement;\r\n if (parentElement) {\r\n const clickedOnComponent = parentElement.classList.contains('custom-select');\r\n if (clickedOnComponent) {\r\n return true;\r\n } else {\r\n return this.isComponentClicked(parentElement);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n\r\n}\r\n","<div class=\"custom-select w-200px\">\r\n <div class=\"form-group\">\r\n <label *ngIf=\"label\" class=\"form-label w-100\">{{label}}</label>\r\n <div class=\"position-relative\">\r\n <div (click)=\"isOpened = !isOpened;\" [ngClass]=\"isDisabled ? 'disable' : ''\" class=\"form-select dropselect w-100\">\r\n {{selected?.[nameField]}}</div>\r\n <div *ngIf=\"isOpened\" class=\"card py-2 w-100 position-absolute end-0 z-1 drop-list\">\r\n <ul class=\"list-unstyled mb-2 w-100\">\r\n <li *ngFor=\"let item of data\" (click)=\"onSelect(item)\"\r\n [ngClass]=\"item?.[idField] === selected?.[idField] ? 'active' : ''\"\r\n class=\"text px-5 items cursor-pointer py-4 w-100\">\r\n {{item?.[nameField]}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectorRef } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey',\r\n templateUrl: './customer-journey.component.html',\r\n styleUrl: './customer-journey.component.scss'\r\n})\r\nexport class CustomerJourneyComponent {\r\n private root: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n form: FormGroup;\r\n selectControl: FormControl;\r\n datasets: Array<{ value: string, label: string }> = [\r\n { value: 'top', label: 'Highest Visited Path' },\r\n { value: 'bottom', label: 'Lowest Visited Path' }\r\n ];\r\n\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes = [10, 20, 30]\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n searchInput: any =\"\";\r\n customerJourneyData: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n customerjourneyLoading: boolean = true;\r\n customerjourneyNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n showAverage: boolean = true;\r\n totalfootfallCount: number | null = null;;\r\n\r\n constructor(private zone: NgZone, private elRef: ElementRef, private fb: FormBuilder, private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService) {}\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.initializeChart();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.selectControl = new FormControl('top');\r\n this.form = this.fb.group({\r\n selectControl: this.selectControl\r\n });\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n // this.getCustomerJourney()\r\n this.getCustomerJourneyTable();\r\n // this.initializeChart();\r\n})\r\nthis.Zonev2Service.footfall$.subscribe((count) => {\r\n this.totalfootfallCount = count;\r\n this.getCustomerJourney();\r\n});\r\n \r\n }\r\n limit = 10;\r\n offset = 1;\r\n getCustomerJourney(): void {\r\n this.customerjourneyLoading = true;\r\n this.customerjourneyNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchInput,\r\n sortType: this.selectControl.value,\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourney(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.customerjourneyLoading = true;\r\n if (response && response.status === 'success') {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = false;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChart(response.data.customerJourneyData, this.totalfootfallCount);\r\n \r\n } else {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n }\r\n }, (error:any) => {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n // console.error('Error fetching customer journey data:', error);\r\n });\r\n}\r\ninitializeChart(): void {\r\n const chartDiv = document.getElementById('customerjourney');\r\n if (!chartDiv) {\r\n // console.error('Could not find HTML element with id customerjourney');\r\n return;\r\n }\r\n\r\n if (!this.root) { // Check if chart is already initialized\r\n try {\r\n this.root = am5.Root.new('customerjourney');\r\n this.root.setThemes([am5themes_Animated.new(this.root)]);\r\n\r\n const series = this.root.container.children.push(am5flow.Sankey.new(this.root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 100\r\n }));\r\n } catch (error) {\r\n // console.error('Error initializing chart:', error);\r\n }\r\n }\r\n}\r\n\r\nupdateChart(data: any[], footfallCount: number | null): void {\r\n let filteredData = this.removeCircularLinks(data);\r\n // let firstZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.to == item.from);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n // let lastZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.from == item.to);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n \r\n // firstZone = firstZone.map((item) => {\r\n // return {from:'Entry ('+this.totalfootfallCount+')',\r\n // to:item.from,\r\n // value:item.value,}\r\n // })\r\n // lastZone = lastZone.map((item) => {\r\n // return {from:item.to,to:'Exit ('+this.totalfootfallCount+')',value:item.value,}\r\n // })\r\n\r\n // filteredData = [...firstZone,...filteredData,...lastZone];\r\n\r\n if (this.root) {\r\n const series = this.root.container.children.getIndex(0) as am5flow.Sankey;\r\n if (series) {\r\n // Check if data is available, otherwise use fallback data\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData); // Update with API data\r\n } else {\r\n \r\n // Predefined sample data as fallback\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n this.changeDetector.detectChanges(); // Trigger Angular change detection\r\n } else {\r\n // console.error('Series not found for chart');\r\n }\r\n }\r\n}\r\n\r\nremoveCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from:any, to:any, visited:any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n \r\n setColorStep(series: any, step: number): void {\r\n series.nodes.set(\"colors\", am5.ColorSet.new(this.root, {\r\n step: step\r\n }));\r\n }\r\n \r\n onValueChange(event: any): void {\r\n this.getCustomerJourney();\r\n }\r\n\r\n getCustomerJourneyTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.pageSize,\r\n offset: this.offset - 1,\r\n export: false,\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTable(requestData).subscribe({\r\n next: (response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.customerJourneyData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data['total_count']\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n } else {\r\n this.customerJourneyData = []\r\n this.totalItems = 0\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n }\r\n\r\n if (this.totalItems < 10) {\r\n this.paginationSizes = [this.totalItems]\r\n } else {\r\n this.paginationSizes = [10, 20, 30]\r\n }\r\n\r\n },\r\n error: (err) => {\r\n this.customerJourneyData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n console.log(\"@@ ~ getCustomerJourneyTableData [ERR]:\", err);\r\n }\r\n })\r\n }\r\n\r\n paginationSize(): number {\r\n return this.totalItems < 10 ? this.totalItems : this.limit;\r\n }\r\n onExport(): void {\r\n this.currentPage = 1;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n // console.log('API Response:', res); \r\n this.Zonev2Service.saveAsExcelFile(res, 'CustomerJourney_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.offset = 1;\r\n this.limit = 10;\r\n this.getCustomerJourneyTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getCustomerJourneyTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.offset = 1;\r\n this.limit = Number(pageSize);\r\n this.changeDetector.detectChanges();\r\n this.getCustomerJourneyTable()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.offset = Number(pageOffset);\r\n this.getCustomerJourneyTable()\r\n }\r\n toggleView(): void {\r\n this.showAverage =!this.showAverage;\r\n if (this.showAverage === true) {\r\n // this.getCustomerJourney()\r\n // this.initializeChart();\r\n }\r\n }\r\n goToZone(){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n datavalue.store = datavalue.stores[0].storeId;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: datavalue.stores[0].storeId},\r\n });\r\n \r\n }\r\n\r\n\r\n}","<div class=\"card\">\r\n <div [hidden]=\"!showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\"><span class=\"card-label mb-2\">Customer Journey</span></h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end\">\r\n View All Zones</button>\r\n <form class=\"mx-4\" [formGroup]=\"form\">\r\n <lib-reactive-select\r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n\r\n <button (click)=\"goToZone()\"\r\n class=\"btn bg-light-primary btn-light-primary btn-active-light-primary\"><span\r\n ><svg \r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M9.99984 4.16602V15.8327M4.1665 9.99935H15.8332\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg></span> Add New Zone \r\n </button>\r\n \r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <ng-container *ngIf=\"customerjourneyLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"customerjourneyNoData && !customerjourneyLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div [hidden]=\"customerjourneyLoading || customerjourneyNoData\" id=\"customerjourney\"></div>\r\n </div>\r\n</div>\r\n \r\n<div [hidden]=\"showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Customer Journey</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n \r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end mx-4\">\r\n View Average Customer Journey</button>\r\n <span class=\"me-4\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute mt-3 ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n /></span>\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!customerJourneyData.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('noOfStores')\">\r\n No. of stores\r\n <svg [ngClass]=\"sortColumName === 'noOfStores' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'noOfStores' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneFF')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'zoneFF' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFF' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('impressions')\">\r\n Impressions\r\n <svg [ngClass]=\"sortColumName === 'impressions' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'impressions' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'AvgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'AvgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyData\">\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.noOfStores || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneFF || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.impressions || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.AvgDwellTime || '--' }} Mins</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination\r\n class=\"text-start\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n ></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component, ElementRef, NgZone } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-top-performing',\r\n templateUrl: './top-performing.component.html',\r\n styleUrl: './top-performing.component.scss'\r\n})\r\n\r\nexport class TopPerformingComponent {\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n type: string = 'top-zones';\r\n storetype: string = 'top-Stores';\r\n\r\n // Default selected type\r\n disableTopZones: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomZones: boolean = false;\r\n disableTopStores: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomStores: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n pageSize = 5\r\n currentPage = 1\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n sortStoreColumName: any = '';\r\n constructor(public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones('top');\r\n this.getTopPerformingStores('top')\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n \r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(sortType: string): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1,\r\n };\r\n \r\n this.Zonev2Service.getTopPerformingZones(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingZones?.length === 0){\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }else{\r\n this.topPerformingZones = response?.data?.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n }\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getTopPerformingStores(sortType: string): void {\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1, \r\n };\r\n\r\n this.Zonev2Service.getTopPerformingStores(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingStores?.length === 0){\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n }else{\r\n this.topPerformingStores = response?.data?.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n }\r\n\r\n \r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string,): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingZones(this.type);\r\n }\r\n\r\n \r\n sortDataStore(column: string,): void {\r\n if (this.sortStoreColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortStoreColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores(this.storetype);\r\n }\r\n \r\n selectPlanzone(type: string): void {\r\n this.type = type;\r\n if (type === 'top-zones') {\r\n this.getTopPerformingZones('top'); // Fetch top zones\r\n } else if (type === 'bottom-zones') {\r\n this.getTopPerformingZones('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n selectPlanStore(storetype: string): void {\r\n this.storetype = storetype;\r\n if (storetype === 'top-Stores') {\r\n this.getTopPerformingStores('top'); // Fetch top zones\r\n } else if (storetype === 'bottom-Stores') {\r\n this.getTopPerformingStores('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n \r\n\r\n // selectPlan(planType: string): void {\r\n // if (planType === 'top-zones') {\r\n // this.type = 'top-zones'; // Select Top 5 Zones\r\n // } else if (planType === 'bottom-zones') {\r\n // this.type = 'bottom-zones'; // Select Bottom 5 Zones\r\n // }\r\n // }\r\n\r\n \r\n}","<div class=\"row \">\r\n <div class=\"d-flex justify-content-between p-3\">\r\n <div class=\"col-lg-6 card\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Top performing zones across the stores selected\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'top-zones',\r\n 'inactivePlanBtn': type !== 'top-zones',\r\n 'disabled': disableTopZones\r\n }\" \r\n (click)=\"selectPlanzone('top-zones')\" \r\n [attr.disabled]=\"disableTopZones ? true : null\">\r\n Top 5 Zones\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'bottom-zones',\r\n 'inactivePlanBtn': type !== 'bottom-zones',\r\n 'disabled': disableBottomZones\r\n }\" \r\n (click)=\"selectPlanzone('bottom-zones')\" \r\n [attr.disabled]=\"disableBottomZones ? true : null\">\r\n Bottom 5 Zones\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!analysisLoading && !analysisNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Zone Name</th>\r\n <th>Footfall</th>\r\n <th>Bounced</th>\r\n <th>Engagers</th>\r\n <th>Impressions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let zone of topPerformingZones\">\r\n <td>\r\n <div class=\"table-title\">{{ zone?.zoneName ? zone.zoneName : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.footfallCount ? zone.footfallCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.bouncedCount ? zone.bouncedCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.engagersCount ? zone.engagersCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.impressionRate ? zone.impressionRate + '%' : '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Zones</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-lg-6 card mx-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Top performing stores and their concentration % along with avg dwell time\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'top-Stores',\r\n 'inactivePlanBtn': storetype !== 'top-Stores',\r\n 'disabled': disableTopStores\r\n }\" \r\n (click)=\"selectPlanStore('top-Stores')\" \r\n [attr.disabled]=\"disableTopStores ? true : null\">\r\n Top 5 Stores\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'bottom-Stores',\r\n 'inactivePlanBtn': storetype !== 'bottom-Stores',\r\n 'disabled': disableBottomStores\r\n }\" \r\n (click)=\"selectPlanStore('bottom-Stores')\" \r\n [attr.disabled]=\"disableBottomStores ? true : null\">\r\n Bottom 5 Stores\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store Info</th>\r\n <th>Zone Name</th>\r\n <th>Zone Footfall</th>\r\n <th>Impressions</th>\r\n <th>Avg Dwell Time</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressionRate || '--' }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.avgDwellTime || '--' }} mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-summary-table',\r\n templateUrl: './summary-table.component.html',\r\n styleUrl: './summary-table.component.scss'\r\n})\r\n\r\nexport class SummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.zoneSummaryData?.length === 0){\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = false;\r\n }else{\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n }\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.Zonev2Service.saveAsExcelFile(res, 'ZoneSummaryTable_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('impressionRate')\">\r\n Impression Rate\r\n <svg [ngClass]=\"sortColumName === 'impressionRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'impressionRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><a class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</a></td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store?.date | date: 'd MMM, y' || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.impressionRate?.toFixed(0) || '0' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bellow12 || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount || '0' }}</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n\r\n@Component({\r\n selector: 'lib-zone-v2',\r\n templateUrl: './zone-v2.component.html',\r\n styleUrl: './zone-v2.component.scss'\r\n})\r\nexport class ZoneV2Component {\r\n storeId: number = 0;\r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService, private zoneService:ZoneService,private cd:ChangeDetectorRef\r\n ) {\r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId()\r\n this.setPageData();\r\n this.checkTodayReportStatus()\r\n})\r\n}\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData.stores.filter((store: any) => store.checked).length;\r\n }\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<lib-zones-cards></lib-zones-cards>\r\n<div class=\"mt-4\">\r\n<lib-customer-journey></lib-customer-journey>\r\n</div>\r\n<div *ngIf=\"storeId === 1\" class=\"mt-4\">\r\n<lib-store-heatmap></lib-store-heatmap>\r\n</div>\r\n<div *ngIf=\"storeId > 1\" class=\"mt-2\">\r\n <lib-top-performing></lib-top-performing>\r\n</div>\r\n<div class=\"mt-4\" >\r\n <lib-summary-table></lib-summary-table>\r\n</div>\r\n</div>\r\n\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> \r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\n\r\n\r\nconst routes: Routes = [\r\n {\r\n path:'v1',\r\n component:TangoAnalyseZoneComponent\r\n },\r\n {\r\n path: 'v2',\r\n component: ZoneV2Component\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class TangoAnalyseZoneRoutingModule { }\r\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n\r\n@Component({\r\n selector: 'lib-image-directory-view',\r\n templateUrl: './image-directory-view.component.html',\r\n styleUrl: './image-directory-view.component.scss'\r\n})\r\nexport class ImageDirectoryViewComponent implements OnInit {\r\n @Input() Imagedata:any;\r\n @Input() processType:any;\r\n @Input() footfallDate:any;\r\n @Input() storeName:any;\r\n @Input() storeId:any;\r\n @Input() headerData:any;\r\n @Input() imageArray:any;\r\n @Input() folderName:any;\r\n Images: any;\r\n itemsPerPage = 10;\r\n currentPage = 1;\r\n totalItems = 1;\r\n paginationSizes = [1];\r\n pageSize = 1;\r\n dataSubscrptionValue: any=[];\r\n statusValues: any;\r\n filteredData: any;\r\n objData: any;\r\n storeArrayValue: any;\r\n constructor(private Zonev2Service:Zonev2Service, private cd: ChangeDetectorRef,){\r\n\r\n }\r\nngOnInit(): void {\r\n this.Images = this.Imagedata?.images?.entryTimeImage;\r\n this.filteredData = this.imageArray.filter((item:any) => item.folderName === this.folderName);\r\n this.totalItems = this.filteredData[0].count\r\n this.getStoreActive();\r\n}\r\nprivate readonly destroy$ = new Subject();\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\ngetStoreActive(){\r\nlet obj={\r\n \"clientId\":this.headerData.client,\r\n \"storeId\": this.storeId\r\n}\r\nthis.Zonev2Service\r\n.getStoresActive(obj)\r\n.pipe(takeUntil(this.destroy$))\r\n?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.dataSubscrptionValue = res.data.storeSubscription.product;\r\n }\r\n }\r\n })\r\n}\r\n\r\nimageData(type:any){\r\n if(type ==='entry'){\r\n this.Images = this.Imagedata?.images?.entryTimeImage\r\n } else if(type === 'exit'){\r\n this.Images = this.Imagedata?.images?.exitTimeImage\r\n } else if(type ==='staff') {\r\n this.Images = this.Imagedata?.images?.staffEngagementImage\r\n }\r\n\r\n}\r\n\r\n// getImageView() {\r\n// this.objData = {\r\n// storeId: this.headerData.stores\r\n// .filter((store: any) => store.checked)\r\n// .map((store: any) => store.storeId),\r\n// clientId: this.headerData.client,\r\n// processType: this.processType,\r\n// footfallDate: this.footfallDate,\r\n// folderName:this.folderName\r\n// };\r\n// this.service\r\n// .getFootfallDirectory(this.objData)\r\n// .pipe(takeUntil(this.destroy$))\r\n// ?.subscribe({\r\n// next: (res: any) => {\r\n// if (res && res.code === 200) {\r\n// if(!res?.data.footfallData.length){\r\n// } else{\r\n// this.Imagedata = res?.data.footfallData;\r\n// this.storeArrayValue = res?.data.storeName\r\n \r\n// this.cd.detectChanges();\r\n// }\r\n// } \r\n// },\r\n// error: (err: any) => {\r\n// this.cd.detectChanges();\r\n// },\r\n// complete: () => {},\r\n// });\r\n// }\r\n// onPageChange(pageOffset: number) {\r\n// this.currentPage = Number(pageOffset);\r\n// this.getImageView();\r\n// }\r\n\r\n// onPageSizeChange(pageSize: number) {\r\n// this.pageSize = Number(pageSize);\r\n// this.getImageView();\r\n// }\r\n}","<div class=\"row h-550px scroll w-100\"></div>\r\n <div class=\"col-md-12 col-lg-8 col-xl-8 col-xxl-8\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-7\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <!-- Display footfall count or '--' if not available -->\r\n <span class=\"card-label header\">{{storeName | titlecase}} - {{footfallDate | date:'dd MMM, yyyy'}}</span>\r\n </h3>\r\n </div>\r\n <!-- Switch toggle -->\r\n <div class=\"col-md-5 text-end\">\r\n <span class=\"custId\">Customer ID</span>\r\n <span class=\"badge badge-light-primary mx-2\">{{Imagedata?.tempId}}</span>\r\n <span class=\"badge badge-light-danger\">{{processType | titlecase}} </span>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row contain\">\r\n <div class=\"col-12 mb-5\">\r\n <img class=\"cursor-pointer\" class=\"img-src\" [src]=\"Images\"\r\n (error)=\"Images = null\" alt=\"\">\r\n <div *ngIf=\"!Images\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\" d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row slider\">\r\n\r\n <ng-container>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.entryTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.entryTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.entryTimeImage\r\n }\">\r\n <div>Entry Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.entryTimeImage\"\r\n (error)=\"Imagedata?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageData('entry')\">\r\n <div *ngIf=\"!Imagedata?.images?.entryTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.staffEngagementImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.staffEngagementImage,\r\n 'border-gray': Images !== Imagedata?.images?.staffEngagementImage\r\n }\">\r\n <div>Staff Engagement</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.staffEngagementImage\"\r\n (error)=\"Imagedata?.images.staffEngagementImage = null\" alt=\"\" (click)=\"imageData('staff')\">\r\n <div *ngIf=\"!Imagedata?.images?.staffEngagementImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4 \" *ngIf=\"Imagedata?.images?.exitTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.exitTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.exitTimeImage\r\n }\">\r\n <div>Exit Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.exitTimeImage\"\r\n (error)=\"Imagedata?.images.exitTimeImage = null\" alt=\"\" (click)=\"imageData('exit')\">\r\n <div *ngIf=\"!Imagedata?.images?.exitTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <span (click)=\"next()\" class=\"next\">\r\n <span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"7\" height=\"12\" viewBox=\"0 0 7 12\"\r\n fill=\"none\">\r\n <path d=\"M1 11L6 6L1 1\" stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n </span> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <!-- <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div>\r\n <div class=\"col-md-12 col-lg-4 col-xl-4 col-xxl-4\">\r\n <div *ngIf=\"dataSubscrptionValue.tangoTraffic\" class=\"row\">\r\n <div class=\"col-12 mb-5 cam-details-header px-0\">Time Spent</div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Entry Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Exit Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n <!-- <div class=\"py-2 img-doc-time\">Avg Dwell Time</div> -->\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.entryTime ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.exitTime ?? '--'}}</div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.totalTimeSpent ?? '--'}}</div>\r\n <!-- <div class=\"py-2 img-doc-value\">20 Mins</div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <hr />\r\n\r\n <div *ngIf=\"!dataSubscrptionValue.tangoZone\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Zone\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Identify hotspots and optimize your merchandise with Tango Zone's store heatmap analytics\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/zone-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"row\">\r\n <span class=\"zone-header\">Zones Visited</span>\r\n <ng-container class=\"h-200px scroll\">\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n </ng-container>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"last-visit\">Last Visited Zone</span>\r\n </div>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"badge badge-light-primary mx-2\"> John Jacobs</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"mt-5 col-lg-12\">\r\n <button class=\"btn btn-light-primary1 w-100 px-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4713_25)\">\r\n <path d=\"M19.6673 5.83341L13.834 10.0001L19.6673 14.1667V5.83341Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12.1673 4.16675H3.00065C2.08018 4.16675 1.33398 4.91294 1.33398 5.83341V14.1667C1.33398 15.0872 2.08018 15.8334 3.00065 15.8334H12.1673C13.0878 15.8334 13.834 15.0872 13.834 14.1667V5.83341C13.834 4.91294 13.0878 4.16675 12.1673 4.16675Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4713_25\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.5)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">View Trajectory</span></button>\r\n </div>\r\n <hr />\r\n <div *ngIf=\"!dataSubscrptionValue.tangoTrax\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Trax\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Create AI-driven checklists to streamline your processes and boost compliance with Tango Trax.\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/trax-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div *ngIf=\"dataSubscrptionValue.tangoTrax\" class=\"row\">\r\n <div class=\"zone-header my-3 ps-3\">Staff Engagement</div>\r\n\r\n <div class=\"row ps-3 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Time taken to assist <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n\r\n <div class=\"py-2 img-doc-time\">Time spent with staff</div>\r\n\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeTakenToAssist ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeSpentWithStaff ?? '--'}} </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <hr /> -->\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport dayjs from 'dayjs';\r\nimport { FormBuilder, FormControl } from '@angular/forms';\r\n\r\nimport { ImageDirectoryViewComponent } from '../image-directory-view/image-directory-view.component';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-image-directory',\r\n templateUrl: './image-directory.component.html',\r\n styleUrl: './image-directory.component.scss'\r\n})\r\n\r\nexport class ImageDirectoryComponent implements OnInit, OnDestroy {\r\n selectIndex: any = 0;\r\n selectedTime: any;\r\n objData: any;\r\n objectsArray: any;\r\n imagesArrayData: any;\r\n processType = \"footfall\";\r\n headerData: any;\r\n folderView = true;\r\n dayjs = dayjs;\r\n dateArray: string[];\r\n form: any;\r\n noData: boolean =false;\r\n loading:boolean =true;\r\n storeArrayValue: any;\r\n storeIdarray: any;\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n public gs: GlobalStateService,\r\n private cd: ChangeDetectorRef,\r\n private modalService: NgbModal,private fb: FormBuilder\r\n ) {\r\n this.form = this.fb.group({\r\n selectValue: new FormControl('') // Initialize as FormControl\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n if(data !==null || data?.client !== null){\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store:any) => store.checked).map((store:any) => store.storeId)\r\n this.objData = {\r\n storeId: data.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: data.client,\r\n processType: this.processType,\r\n footfallDate: this.headerData.date.endDate,\r\n };\r\n const initialValue = this.getInitialValue();\r\n const selectControl = this.form.get('selectValue') as FormControl;\r\n if (selectControl) {\r\n selectControl.setValue(initialValue);\r\n }\r\n this.backToFootfall();\r\n this.displayDateRange();\r\n }\r\n });\r\n }\r\n private readonly destroy$ = new Subject();\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n getImageFolder() {\r\n \r\n delete this.objData.folderName;\r\n this.Zonev2Service\r\n .getFootfallDirectoryFolders(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.objectsArray = res?.data.footfallData;\r\n this.selectedTime = this.objectsArray[0].folderName;\r\n this.objData.folderName = this.selectedTime;\r\n this.getImageView();\r\n this.cd.detectChanges();\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n getImageView() {\r\n this.loading =true;\r\n this.noData =false;\r\n this.Zonev2Service\r\n .getFootfallDirectory(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n if(!res?.data.footfallData.length){\r\n this.loading =false;\r\n this.noData =true;\r\n } else{\r\n this.imagesArrayData = res?.data.footfallData;\r\n this.storeArrayValue = res?.data.storeName\r\n this.loading =false;\r\n this.noData =false;\r\n this.cd.detectChanges();\r\n }\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n\r\n getimages(index: any, obj: any) {\r\n this.selectIndex = index;\r\n (this.objData.footfallDate = obj), (this.folderView = false);\r\n this.getImageFolder();\r\n }\r\n backToFootfall() {\r\n this.selectIndex = 0;\r\n this.folderView = true;\r\n }\r\n selectedTimes(val: any) {\r\n this.selectedTime = val;\r\n this.objData.folderName = val;\r\n this.folderView = false;\r\n this.selectedTime = val;\r\n this.getImageView();\r\n }\r\n\r\n imageView(obj: any,footfallDate:any) {\r\n const modalRef = this.modalService.open(ImageDirectoryViewComponent, {\r\n centered: true,\r\n size: \"xl\",\r\n scrollable: true,\r\n });\r\n modalRef.componentInstance.Imagedata = obj;\r\n modalRef.componentInstance.processType = this.objData.processType;\r\n modalRef.componentInstance.footfallDate = footfallDate;\r\n modalRef.componentInstance.storeName = this.storeArrayValue;\r\n modalRef.componentInstance.storeId = this.storeIdarray\r\n modalRef.componentInstance.headerData = this.headerData;\r\n modalRef.componentInstance.imageArray = this.objectsArray;\r\n modalRef.componentInstance.folderName = this.objData.folderName\r\n modalRef.result.then((result: any) => {});\r\n }\r\n\r\n getDateRangeArray(fromDate: string, toDate: string): string[] {\r\n const start = new Date(fromDate); // Convert string to Date object\r\n const end = new Date(toDate); // Convert string to Date object\r\n const dateArray: string[] = [];\r\n\r\n // Check if the dates are valid\r\n if (isNaN(start.getTime()) || isNaN(end.getTime())) {\r\n return dateArray;\r\n }\r\n\r\n // Loop from start date to end date\r\n let currentDate = start;\r\n while (currentDate <= end) {\r\n dateArray.push(currentDate.toISOString().split(\"T\")[0]); // Format YYYY-MM-DD\r\n currentDate.setDate(currentDate.getDate() + 1); // Increment the date by 1 day\r\n }\r\n\r\n return dateArray;\r\n }\r\n\r\n // Method to display or log the date range array\r\n displayDateRange() {\r\n const dates = this.getDateRangeArray(\r\n this.headerData.date.startDate,\r\n this.headerData.date.endDate\r\n );\r\n this.dateArray = dates;\r\n }\r\n datasets = [\r\n { value: 'footfall', label: 'Footfall' },\r\n { value: 'bounced', label: 'Bounced Footfall' },\r\n { value: 'engager', label: 'Engagers' },\r\n { value: 'missedOpportunity', label: 'Missed Opportunity' },\r\n { value: 'conversion', label: 'Conversion' }\r\n ];\r\n\r\n getInitialValue(): string {\r\n // For example, selecting the second item in the dataset\r\n return this.datasets[0].value; // Change as needed\r\n }\r\n onValueChange(selectedId: any) {\r\n this.objData.processType = selectedId,\r\n this.getImageFolder();\r\n }\r\n get selectControl(): FormControl {\r\n return this.form.get('selectValue') as FormControl;\r\n }\r\n}\r\n"," <div class=\"card-header border-0 px-0\">\r\n <div class=\"col-md-12\">\r\n <div class=\"switch-form-card\">\r\n <div class=\"d-flex align-items-center\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\" />\r\n <path d=\"M23.8333 14.6666L15.5 24.6666H23L22.1667 31.3333L30.5 21.3333H23L23.8333 14.6666Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"txt-one ms-2\">\r\n <ng-container>Examine individual footfall in gallery view with optimal sample images for detailed analysis.</ng-container>\r\n <!-- <ng-container *ngIf=\"isMultiple\">Upload multiple stores for configuration</ng-container> -->\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M18.295 7.115C18.6844 6.72564 18.6844 6.09436 18.295 5.705C17.9056 5.31564 17.2744 5.31564 16.885 5.705L12 10.59L7.115 5.705C6.72564 5.31564 6.09436 5.31564 5.705 5.705C5.31564 6.09436 5.31564 6.72564 5.705 7.115L10.59 12L5.705 16.885C5.31564 17.2744 5.31564 17.9056 5.705 18.295C6.09436 18.6844 6.72564 18.6844 7.115 18.295L12 13.41L16.885 18.295C17.2744 18.6844 17.9056 18.6844 18.295 18.295C18.6844 17.9056 18.6844 17.2744 18.295 16.885L13.41 12L18.295 7.115Z\"\r\n fill=\"black\" />\r\n </svg> -->\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"folderView\" class=\"p-1\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1 mt-5 text-center\" *ngFor=\"let obj of dateArray;let i = index\">\r\n <div (click)=\"getimages(i,obj)\">\r\n <div *ngIf=\"i === selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.154297\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#33B5FF\" />\r\n <path\r\n d=\"M39.8216 36.1667C39.8216 36.7855 39.5758 37.379 39.1382 37.8166C38.7006 38.2542 38.1071 38.5 37.4883 38.5H18.8216C18.2028 38.5 17.6093 38.2542 17.1717 37.8166C16.7341 37.379 16.4883 36.7855 16.4883 36.1667V19.8333C16.4883 19.2145 16.7341 18.621 17.1717 18.1834C17.6093 17.7458 18.2028 17.5 18.8216 17.5H24.6549L26.9883 21H37.4883C38.1071 21 38.7006 21.2458 39.1382 21.6834C39.5758 22.121 39.8216 22.7145 39.8216 23.3333V36.1667Z\"\r\n stroke=\"white\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n <div *ngIf=\"i !== selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.462891\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M40.1302 36.1667C40.1302 36.7855 39.8844 37.379 39.4468 37.8166C39.0092 38.2542 38.4157 38.5 37.7969 38.5H19.1302C18.5114 38.5 17.9179 38.2542 17.4803 37.8166C17.0427 37.379 16.7969 36.7855 16.7969 36.1667V19.8333C16.7969 19.2145 17.0427 18.621 17.4803 18.1834C17.9179 17.7458 18.5114 17.5 19.1302 17.5H24.9635L27.2969 21H37.7969C38.4157 21 39.0092 21.2458 39.4468 21.6834C39.8844 22.121 40.1302 22.7145 40.1302 23.3333V36.1667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n </div>\r\n <div *ngIf=\"!folderView\" class=\"p1\">\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-between align-items-center\">\r\n <span class=\"cursor-pointer\" (click)=\"backToFootfall()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <div class=\"ms-auto text-end\">\r\n <form [formGroup]=\"form\">\r\n <lib-reactive-select \r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100 text-start\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mt-6 p-0 w-100 overflow-x\">\r\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.folderName)\"\r\n [ngClass]=\"selectedTime === obj?.folderName ? 'active' : ''\" class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.folderName}}<span class=\"mx-2 \" [ngClass]=\"selectedTime === obj?.folderName ? 'badge-num-primary' :'badge-num-muted'\">{{obj?.count?obj?.count:0}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this image directory</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row p-3 img-traffic contain\" *ngIf=\"!noData && !loading\">\r\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of imagesArrayData\">\r\n <img *ngIf=\"obj.images.entryTimeImage\" class=\"img-src cursor-pointer\" [src]=\"obj.images.entryTimeImage\" (error)=\"obj?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageView(obj,objData.footfallDate)\">\r\n <div *ngIf=\"!obj.images.entryTimeImage\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n <div class=\"py-2 img-doc-directory\">{{obj.tempId}} <span class=\"badge badge-light-success ms-2\">{{selectControl.value | titlecase}}</span></div>\r\n <div class=\"py-2 img-doc-time\">Entry Time</div>\r\n <div class=\"py-2 img-doc-time\">Exit Time</div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n </div>\r\n <div class=\"col-md-4 text-end\" >\r\n <div class=\"py-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1841_143300)\">\r\n <path d=\"M14.1986 5.33333V14H2.19857V5.33333M6.86523 8H9.5319M0.865234 2H15.5319V5.33333H0.865234V2Z\" stroke=\"#101828\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1841_143300\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.199219)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.entryTime}} </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.exitTime}}</div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.totalTimeSpent}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n","import { ChangeDetectorRef, Component, ElementRef } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\n\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client430',\r\n templateUrl: './interation-table-client430.component.html',\r\n styleUrl: './interation-table-client430.component.scss'\r\n})\r\nexport class InterationTableClient430Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private root!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService,private el: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n // });\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n console.log(this.cardData);\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n\r\n createChart(cardData: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n}\r\n","\r\n<div class=\"row\">\r\n\r\n<div class=\"col-6 ps-5 pe-0\" *ngIf=\"!cardNoData\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Customer Funnel</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Attended\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Interaction Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time || '--' }} Mins\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-6 ps-7 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Interaction vs Conversion</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n \r\n</div>\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-passerby-table',\r\n templateUrl: './passerby-table.component.html',\r\n styleUrl: './passerby-table.component.scss'\r\n})\r\nexport class PasserbyTableComponent implements OnInit,OnDestroy {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n itemsPerPage = 10000\r\n currentPage = 0\r\n totalItems = 0\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response?.data?.passerByData\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n search: this.searchInput,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData();\r\n }\r\n}\r\n","<div class=\"row mt-2\">\r\n <div class=\"col-12 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start flex-column headtext px-3\">Passer-by Analysis</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TangoAnalyseZoneRoutingModule } from './tango-analyse-zone-routing.module';\r\nimport { NgbAccordionModule, NgbCarouselModule, NgbModule, NgbProgressbarModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { OverallcardsComponent } from './components/overallcards/overallcards.component';\r\nimport { TopPerformingZonesComponent } from './components/top-performing-zones/top-performing-zones.component';\r\nimport { ZoneSummaryTableComponent } from './components/zone-summary-table/zone-summary-table.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ZoneConcentrationComponent } from './components/zone-concentration/zone-concentration.component';\r\nimport { CommonSharedModule } from 'tango-app-ui-shared';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ConcentrationheatmapComponent } from './components/zone-concentration/concentrationheatmap/concentrationheatmap.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\nimport { ZonesCardsComponent } from './components/zone-v2/zones-cards/zones-cards.component';\r\nimport { StoreHeatmapComponent } from './components/zone-v2/store-heatmap/store-heatmap.component';\r\nimport { ImageDirectoryComponent } from './components/zone-v2/image-directory/image-directory.component';\r\nimport { ImageDirectoryViewComponent } from './components/zone-v2/image-directory-view/image-directory-view.component';\r\nimport { CustomerJourneyComponent } from './components/zone-v2/customer-journey/customer-journey.component';\r\nimport { ReactiveSelectComponent } from './components/zone-v2/reactive-select/reactive-select.component';\r\nimport { TopPerformingComponent } from './components/zone-v2/top-performing/top-performing.component';\r\nimport { SummaryTableComponent } from './components/zone-v2/summary-table/summary-table.component';\r\nimport { StoreZoomHeatmapComponent } from './components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { SegmentationComponent } from './components/segmentation/segmentation.component';\r\nimport { InterationTableClient430Component } from './components/interation-table-client430/interation-table-client430.component';\r\nimport { InterationTableClient459Component } from './components/interation-table-client459/interation-table-client459.component';\r\nimport { PasserbyTableComponent } from './components/passerby-table/passerby-table.component';\r\nimport { CustomerJourneyChartComponent } from './components/customer-journey-chart/customer-journey-chart.component';\r\nimport { ZoneJourneyComponent } from './components/zone-journey/zone-journey.component';\r\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n OverallcardsComponent,\r\n TangoAnalyseZoneComponent,\r\n TopPerformingZonesComponent,\r\n ZoneSummaryTableComponent,\r\n ZoneConcentrationComponent,\r\n ConcentrationheatmapComponent,\r\n\r\n ZoneV2Component,\r\n ConcentrationheatmapComponent,\r\n ZonesCardsComponent,\r\n StoreHeatmapComponent,\r\n ImageDirectoryComponent,\r\n ImageDirectoryViewComponent,\r\n CustomerJourneyComponent,\r\n ReactiveSelectComponent,\r\n TopPerformingComponent,\r\n SummaryTableComponent,\r\n StoreZoomHeatmapComponent,\r\n SegmentationComponent,\r\n InterationTableClient430Component,\r\n InterationTableClient459Component,\r\n PasserbyTableComponent,\r\n CustomerJourneyChartComponent,\r\n ZoneJourneyComponent,\r\n \r\n ],\r\n imports: [\r\n // CommonModule,\r\n // TangoAnalyseZoneRoutingModule,\r\n // NgbProgressbarModule,\r\n // FormsModule,\r\n // ReactiveFormsModule,\r\n // NgbCarouselModule,\r\n // CommonSharedModule,\r\n // NgbTooltipModule,\r\n // NgbModule\r\n CommonModule,\r\n TangoAnalyseZoneRoutingModule,\r\n NgbProgressbarModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonSharedModule,\r\n NgbTooltipModule,\r\n NgbModule,\r\n NgbAccordionModule,\r\n CommonSharedModule,\r\n NgbCarouselModule,\r\n MatAutocompleteModule\r\n],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]\r\n})\r\nexport class TangoAnalyseZoneModule { }\r\n","/*\r\n * Public API Surface of tango-analyse-zone\r\n */\r\n\r\nexport * from './lib/components/tango-analyse-zone/tango-analyse-zone.component';\r\nexport * from './lib/tango-analyse-zone.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EXCEL_TYPE","EXCEL_EXTENSION","takeUntil","i1.ZoneService","i2.Zonev2Service","i3","i5","i6","i7","i1","i2","i3.ZoneService","i8.ZoneJourneyComponent","i4","startWith","skip","i4.ZoneService","i5.Zonev2Service","i8","i2.ZoneService","i4.OverallcardsComponent","i5.TopPerformingZonesComponent","i6.ZoneSummaryTableComponent","i7.ZoneConcentrationComponent","i8.SegmentationComponent","i9.InterationTableClient459Component","i10.CustomerJourneyChartComponent","i1.Zonev2Service","i3.Zonev2Service","i8.ReactiveSelectComponent","i4.ZonesCardsComponent","i5.StoreHeatmapComponent","i6.CustomerJourneyComponent","i7.TopPerformingComponent","i8.SummaryTableComponent","debounceTime","i6.ReactiveSelectComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAMA,YAAU,GAAG,iFAAiF;AACpG,MAAMC,iBAAe,GAAG,OAAO;MAKlB,WAAW,CAAA;AAMF,IAAA,IAAA;AAA0B,IAAA,EAAA;AAL9C,IAAA,iBAAiB;AACjB,IAAA,aAAa;AACL,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/D,IAAA,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACnD,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;IACjD,WAAA,CAAoB,IAAgB,EAAU,EAAsB,EAAA;QAAhD,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAsB,IAAA,CAAA,EAAE,GAAF,EAAE;QAC9C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACnE,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB;AAC9C,gBAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa;AACvC,YAAA;AACH,QAAA,CAAC,CAAC;IACJ;IACA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IACO,iBAAiB,CAAC,IAAW,EAAE,aAAqB,EAAA;QACzD,MAAM,SAAS,GAAmB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;AAChE,QAAA,MAAM,QAAQ,GAAkB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;AACvF,QAAA,MAAM,WAAW,GAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAClF,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC;IAClD;IAEO,eAAe,CAAC,MAAW,EAAE,QAAgB,EAAA;QAClD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAED;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAEC,iBAAe,CAAC;IAC5D;IACO,gBAAgB,CAAC,MAAW,EAAE,QAAgB,EAAA;QACnD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAED;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAGC,iBAAe,CAAC;IACpD;IACO,cAAc,CAAC,MAAW,EAAE,QAAgB,EAAA;QACjD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAED;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAGC,iBAAe,CAAC;IACpD;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAE3C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAEE,IAAA,0BAA0B,CAAE,IAAQ,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,iCAAA,CAAmC,EAAE,IAAI,CAAC;IAC3F;;;;AAIA,IAAA,gCAAgC,CAAE,IAAQ,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,2BAA2B,CAAE,IAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,6BAAA,CAA+B,EAAE,IAAI,CAAC;IACvF;AACA,IAAA,WAAW,CAAE,IAAQ,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAChF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,uBAAA,CAAyB,EAAE,IAAI,CAAC;IACjF;AACA,IAAA,iCAAiC,CAAE,IAAQ,EAAA;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,yBAAyB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAChH;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,sBAAsB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC7G;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,4BAA4B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACnH;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,yBAAA,CAA2B,EAAE,IAAI,CAAC;IACnF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,iCAAiC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACxH;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,yBAAA,CAA2B,EAAE,IAAI,CAAC;IACnF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,2BAA2B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAClH;AACA,IAAA,8BAA8B,CAAE,IAAQ,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,iCAAiC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACxH;AACA,IAAA,gCAAgC,CAAE,IAAQ,EAAA;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,+BAA+B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACtH;AAEA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,yBAAA,CAA2B,EAAE,IAAI,CAAC;IACnF;AACA,IAAA,8BAA8B,CAAE,IAAQ,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,iCAAiC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACxH;AACA,IAAA,uBAAuB,CAAE,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,qBAAA,CAAuB,EAAE,IAAI,CAAC;IAC/E;AACA,IAAA,6BAA6B,CAAE,IAAQ,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,8BAA8B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACrH;AACA,IAAA,uBAAuB,CAAE,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,4BAA4B,CAAE,IAAQ,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,6BAA6B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACpH;AACA,IAAA,6BAA6B,CAAE,IAAQ,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,0BAAA,CAA4B,EAAE,IAAI,CAAC;IACpF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,gCAAgC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACvH;AACA,IAAA,yBAAyB,CAAC,MAAW,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,uBAAA,CAAyB,EAAE,MAAM,CAAC;IACpF;AACQ,IAAA,WAAW,CAAC,KAAwB,EAAA;QAC1C,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAClE;IACH;AACO,IAAA,eAAe,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAEjE,IAAA,OAAO,CAAC,QAAgB,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrC;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IACpC;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;IAC7C;AAEA,IAAA,aAAa,CAAC,IAAQ,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,cAAA,CAAgB,EAAC,IAAI,CAAC;IACvE;AAEA,IAAA,YAAY,CAAC,IAAQ,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,gBAAA,CAAkB,EAAE,IAAI,CAAC;IAC1E;AAEA,IAAA,iBAAiB,CAAC,IAAQ,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,qBAAA,CAAuB,EAAE,IAAI,CAAC;IAC/E;AACE,IAAA,uBAAuB,CAAC,IAAQ,EAAA;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,uBAAuB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC9G;;AAKE,IAAA,oBAAoB,CAAC,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,qBAAA,CAAuB,EAAE,IAAI,CAAC;IAC/E;AACG,IAAA,4BAA4B,CAAC,IAAQ,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,6BAAA,CAA+B,EAAE,IAAI,CAAC;IACvF;AACA,IAAA,kCAAkC,CAAC,IAAQ,EAAA;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,+BAA+B,EAAE,IAAI,EAAC,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAErH;AACG,IAAA,+BAA+B,CAAC,IAAQ,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,gCAAA,CAAkC,EAAE,IAAI,CAAC;IAC1F;AACE,IAAA,4BAA4B,CAAC,IAAQ,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,4BAAA,CAA8B,EAAE,IAAI,CAAC;IACtF;AACG,IAAA,qBAAqB,CAAC,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAChF;AACA,IAAA,wBAAwB,CAAE,IAAQ,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,wBAAA,CAA0B,EAAE,IAAI,CAAC;IAClF;AAEE,IAAA,kBAAkB,CAAC,MAAW,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,gBAAA,CAAkB,EAAE,MAAM,CAAC;IAC7E;AAEA,IAAA,mBAAmB,CAAC,MAAW,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,iBAAA,CAAmB,EAAE,MAAM,CAAC;IAC9E;wGArMW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACJD,MAAM,UAAU,GAAG,iFAAiF;AACpG,MAAM,eAAe,GAAG,OAAO;MAOlB,aAAa,CAAA;AASJ,IAAA,IAAA;AAA0B,IAAA,EAAA;AAR9C,IAAA,eAAe;AACf,IAAA,aAAa;IACL,eAAe,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC,CAAC;AACnE,IAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACvC,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/D,IAAA,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAC1C,IAAA,YAAY,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AACtD,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACzC,WAAA,CAAoB,IAAgB,EAAU,EAAsB,EAAA;QAAhD,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAsB,IAAA,CAAA,EAAE,GAAF,EAAE;QAC9C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACnE,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe;AAC1C,gBAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa;AAEvC,YAAA;AACH,QAAA,CAAC,CAAC;IACJ;IACA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;AACA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;IACO,iBAAiB,CAAC,IAAW,EAAE,aAAqB,EAAA;QACzD,MAAM,SAAS,GAAmB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;AAChE,QAAA,MAAM,QAAQ,GAAkB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;AACvF,QAAA,MAAM,WAAW,GAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAClF,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC;IAClD;IAEO,eAAe,CAAC,MAAW,EAAE,QAAgB,EAAA;QAClD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,eAAe,CAAC;IACpD;IAEO,cAAc,CAAC,MAAW,EAAE,QAAgB,EAAA;QACjD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,eAAe,CAAC;IACpD;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAE3C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;;AAEE,IAAA,gBAAgB,CAAE,IAAQ,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,aAAA,CAAe,EAAE,IAAI,CAAC;IACrE;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,sBAAsB,CAAE,IAAQ,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,uBAAA,CAAyB,EAAE,IAAI,CAAC;IAC/E;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC5E;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,sBAAsB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC3G;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,2BAA2B,CAAE,IAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,kCAAA,CAAoC,EAAE,IAAI,CAAC;IAC1F;AACA,IAAA,gCAAgC,CAAE,IAAQ,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,oCAAA,CAAsC,EAAE,IAAI,CAAC;IAC5F;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,4BAAA,CAA8B,EAAE,IAAI,CAAC;IACpF;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,2BAA2B,CAAC,MAAW,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,yBAAA,CAA2B,EAChD,MAAM,CACP;IACH;AACA,IAAA,oBAAoB,CAAC,MAAW,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,kBAAA,CAAoB,EACzC,MAAM,CACP;IACH;AACA,IAAA,eAAe,CAAC,MAAW,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,kBAAA,CAAoB,EAAE,MAAM,CAAC;IACjF;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,0BAAA,CAA4B,EAAE,IAAI,CAAC;IAClF;AACA,IAAA,kBAAkB,CAAE,IAAQ,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,mBAAA,CAAqB,EAAE,IAAI,CAAC;IAC3E;AACA,IAAA,uBAAuB,CAAE,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,wBAAA,CAA0B,EAAE,IAAI,CAAC;IAChF;AACA,IAAA,6BAA6B,CAAE,IAAQ,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,0BAA0B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC/G;AACA,IAAA,yBAAyB,CAAC,MAAW,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,uBAAA,CAAyB,EAAE,MAAM,CAAC;IACpF;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEU,IAAA,WAAW,CAAC,KAAwB,EAAA;QAC1C,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAClE;IACH;wGAxHW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAHZ,MAAM,EAAA,CAAA;;4FAGP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,qBAAqB,CAAA;AA0BtB,IAAA,IAAA;AACA,IAAA,WAAA;AACA,IAAA,aAAA;AACA,IAAA,EAAA;AACD,IAAA,EAAA;AACC,IAAA,KAAA;IA9BV,QAAQ,GAAQ,EAAE;IAClB,cAAc,GAAU,EAAE;IAC1B,WAAW,GAAU,EAAE;IACvB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;AACF,IAAA,UAAU;AACV,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,WAAW,GAAQ,EAAE;IACrB,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,qBAAqB,GAAQ,EAAE;IAC/B,uBAAuB,GAAG,KAAK;IAC/B,kBAAkB,GAAG,KAAK;IAC1B,QAAQ,GAAQ,eAAe;AAC/B,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,QAAQ;IACR,iBAAiB,GAAQ,EAAE;IAC3B,eAAe,GAAQ,EAAE;IACzB,iBAAiB,GAAG,KAAK;IACzB,sBAAsB,GAAG,IAAI;IAE7B,WAAA,CACU,IAAY,EACZ,WAAwB,EACxB,aAA4B,EAC5B,EAAqB,EACtB,EAAsB,EACrB,KAAmB,EAAA;QALnB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,EAAE,GAAF,EAAE;QACH,IAAA,CAAA,EAAE,GAAF,EAAE;QACD,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAACC,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;iBAClC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;;AAGrC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ;AACtB,iBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,CAAC,CAAC,CAAC;AACP,YAAAA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzB,iBAAA,SAAS,CAAC,CAAC,GAAQ,KAAI;AACtB,gBAAA,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;oBAEnB,IAAI,CAAC,WAAW,EAAE;AAEnB,gBAAA;AAAM,qBAAA;;oBAEL,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,iBAAiB,EAAE;oBACxB,IAAI,CAAC,iBAAiB,EAAE;oBACtB,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,gBAAA;AACH,YAAA,CAAC,CAAC;;YAGJ,UAAU,CAAC,MAAK;AACd,gBAAA,MAAM,UAAU,GAAQ,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;AACD,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;YAC9B,CAAC,EAAE,GAAG,CAAC;AAEP,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,KAAK,EAAE;gBACrC,IAAI,CAAC,kBAAkB,EAAE;AAC1B,YAAA;;AAED,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE;gBACtC,IAAI,CAAC,WAAW,CAAC;AACd,qBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC;AACf,gBAAA,IAAI,CAAC,CAAC,CAAC;AACP,gBAAAA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzB,qBAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,oBAAA,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;wBACxB,IAAI,CAAC,mBAAmB,EAAE;wBAC1B,IAAI,CAAC,WAAW,EAAE;AACnB,oBAAA;AACH,gBAAA,CAAC,CAAC;AACL,YAAA;AACH,QAAA,CAAC,CAAC;IACN;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;YACpC,OAAO,EAAE,IAAI,CAAC,YAAY;AAC1B,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;QACD,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ;AACpD,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI;oBACxC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjE,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC5B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;YAC7B,CAAC;AACF,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,QAAA;AACH,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAED,WAAW,GAAA;QACV,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC1D,YAAA,IAAI,CAAC,QAAQ;gBAAE;YACf,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;YAED,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAGhD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACrD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACjC,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,gBAAA,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACxB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;AACzB,aAAA,CAAC,CACH;AAGD,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CACjC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACvC,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5B,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,gBAAA,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACxB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC9B,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACxC,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CACH;AAGD,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;AAGF,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3B,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;YAGF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;AAEvC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;AACzB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACvB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACvB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACvB,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;AACpC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAE1B,CAAC,EAAE,GAAG,CAAC;IACT;IACC,YAAY,GAAA;QACV,UAAU,CAAC,MAAK;YACX,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;YAC3D,IAAI,CAAC,QAAQ,EAAE;;gBAEb;AACD,YAAA;YAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;YACD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAEjD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACjD,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACrC,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9B,aAAA,CAAC,CACL;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC5B,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACtC,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE;AAChB,aAAA,CAAC,CACL;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC3B,QAAQ,EAAE,CAAC;AACd,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,OAAO,EAAE;AACZ,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AAC5B,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB;AAC3C,aAAA,CAAC,CACL;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,KAAK;AAElB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3B,aAAA,CAAC;YACJ,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAM,KAAI,EAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;;AAGlC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC5B,CAAC,EAAE,GAAG,CAAC;IACX;IAEE,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,eAAe;SAC1D;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW;AACrC,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CACR,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBAClC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc;gBAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;oBACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW;gBAC5C,UAAU,CAAC,MAAK;AACd,oBAAA,IAAG,IAAI,CAAC,UAAU,EAAE,MAAM,KAAI,KAAK;AACnC,wBAAA,IAAI,CAAC,WAAW,EAAE,CAAC;;wBAEnB,IAAI,CAAC,YAAY,EAAE;gBACrB,CAAC,EAAE,GAAG,CAAC;AAEP,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACxB,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;AACH,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,QAAA,CAAC,CACF;IACL;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;QACzC,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,qBAAqB,GAAG,GAAG,EAAE,IAAI,EAAE,qBAAqB;AAC7D,oBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAChC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC/B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC,CAAC;AACF,SAAA,CAAC;IACN;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,IAAI;SACb;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,WAAW;AACxD,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,oBAAoB,CAAC;YAC7D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD,CAAC;AACF,SAAA,CAAC;IACN;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW;AAC7C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CACR,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;YACnC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,IAAI,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE;oBAChD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB;;;;;;oBAMzD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;AAC3D,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC9B,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC9B,YAAA;;AAEH,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,QAAA,CAAC,CACF;IACL;IACA,eAAe,GAAA;AACb,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW;AACnD,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD,CAAC;AACF,SAAA,CAAC;IACN;AAEA,IAAA,kBAAkB;IAClB,iBAAiB,GAAA;AACf,QAAA,IAAI,GAAG,GAAG;AACR,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;SACtC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG;AACtC,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AAC5B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI;AACpC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC9B,CAAC;AACF,SAAA,CAAC;IACN;AACA,IAAA,mBAAmB;AACnB,IAAA,kBAAkB;IAClB,cAAc,GAAA;QACZ,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACtC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ;AAC9C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;AAC3B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI;AACpC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACN;IACA,cAAc,GAAG,KAAK;IACtB,eAAe,GAAA;QACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACtC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ;AAC/C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;AAC3B,oBAAA,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE,IAAI;AACrC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC9B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACN;IACA,QAAQ,GAAQ,OAAO;AACvB,IAAA,SAAS,CAAC,IAAS,EAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,eAAe,EAAE;IACxB;IACA,kBAAkB,GAAQ,EAAE;IAE9B,KAAK,GAAU,EAAE;IACjB,eAAe,GAAG,CAAC;IAEnB,WAAW,GAAG,IAAI;IAClB,UAAU,GAAG,KAAK;AAEV,IAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;IAI5C,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAE1B,QAAA,MAAM,GAAG,GAAG;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO;iBAC5B,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AAC7B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,GAAG;AAC9C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBAExB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE;AAC5C,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;oBACtB;AACD,gBAAA;gBAED,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAEtD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AAClD,oBAAA,KAAK,EAAE,GAAG;AACV,oBAAA,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO;AACnC,oBAAA,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1B,iBAAA,CAAC,CAAC;AAEH,gBAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;gBAGvB,IAAI,CAAC,iBAAiB,EAAE;YAC1B,CAAC;YAED,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YAC1B;AACD,SAAA,CAAC;IACN;IAGA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;IAClD;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;IACtE;AAEA,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;IAGA,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE;AAE5B,QAAA,QAAQ,CAAC,IAAI,CAAC;AACX,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAEA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7D,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,eAAe;AAClB,gBAAA,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;AAChD,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,QAAA,CAAC,CAAC;IACN;IAIA,cAAc,GAAO,EAAE;IACvB,YAAY,GAAO,EAAE;IAEnB,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SACjC;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AAC9B,oBAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAE,MAAM,CACrE,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,eAAe,CAChE;;AAEE,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AAC1B,oBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;wBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ;wBACnD,IAAI,CAAC,cAAc,EAAE;AACtB,oBAAA;AACQ,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACzB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YAC1B;AACD,SAAA,CACA;IACH;AACF,IAAA,YAAY,CAAC,KAAS,EAAA;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;QACtC,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,kBAAkB;IAChB,cAAc,GAAA;AACZ,QAAA,IAAI,GAAG,GAAG;AACR,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,IAAI,EAAC,IAAI,CAAC;SACX;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG;AACvC,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;oBAC5B,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI,EAAE,YAAY;oBACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC3D,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC9B,CAAC;AACF,SAAA,CAAC;IAGN;wGAvsBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,wDCtBlC,0pyEAkhCU,EAAA,MAAA,EAAA,CAAA,u9HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FD5/BG,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,0pyEAAA,EAAA,MAAA,EAAA,CAAA,u9HAAA,CAAA,EAAA;;;MEJjB,oBAAoB,CAAA;AAKR,IAAA,OAAA;AAA4B,IAAA,aAAA;AAAoC,IAAA,EAAA;AAA6B,IAAA,MAAA;AAAsB,IAAA,EAAA;AAJjI,IAAA,IAAI;AACF,IAAA,UAAU;AACT,IAAA,UAAU;AACT,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACxC,WAAA,CAAoB,OAAmB,EAAS,aAA2B,EAAS,EAAoB,EAAS,MAAa,EAAS,EAAe,EAAA;QAAlI,IAAA,CAAA,OAAO,GAAP,OAAO;QAAqB,IAAA,CAAA,aAAa,GAAb,aAAa;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA2B,IAAA,CAAA,MAAM,GAAN,MAAM;QAAgB,IAAA,CAAA,EAAE,GAAF,EAAE;IAAiB;AAC/J,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;YACtC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AACtD,QAAA;AACD,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AACvD,QAAA;QACD,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;IACzB;AAGA,IAAA,mBAAmB;AACnB,IAAA,eAAe;AACf,IAAA,MAAM;AACN,IAAA,OAAO;IACP,cAAc,GAAQ,EAAE;IAExB,YAAY,GAAG,KAAK;IACpB,UAAU,GAAG,EAAE;IACf,QAAQ,GAAK,EAAE;IACf,aAAa,GAAK,EAAE;IAGpB,gBAAgB,GAAG,KAAK;IACxB,YAAY,GAAU,EAAE;IACxB,iBAAiB,GAAU,EAAE;IAC7B,kBAAkB,GAAG,EAAE;IACvB,cAAc,GAAS,EAAE;IACvB,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SACjC;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AAC9B,oBAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAE,MAAM,CACrE,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,eAAe,CAChE;AACE,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK;wBACvC,IAAI,EAAE,CAAC,CAAC,QAAQ;AAChB,wBAAA,OAAO,EAAE;AACV,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,oBAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AACvB,oBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAClB,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AAEtB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACtB,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC7B,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAChC;AACD,SAAA,CACA;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCyB,IAAA,YAAY;;AAIvC,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC9B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;QAEtC,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAK,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAChD,QAAA;IACH;;AAIA,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AAExB,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAEzD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAC1B,QAAA;IACH;AACA,IAAA,eAAe,CAAC,KAAU,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO;;AAGpC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK;AAC9C,YAAA,GAAG,CAAC;YACJ;AACD,SAAA,CAAC,CAAC;;QAGH,IAAI,CAAC,WAAW,EAAE;IACpB;IACA,aAAa,GAAA;AACX,QAAA,QACE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IAE3C;IAEA,WAAW,GAAA;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IACjD,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACpC;IACH;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAEtD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;aACtB,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,OAAO;aAC7B,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC;AAE1B,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IAEA,UAAU,GAAA;;AAER,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAK,MAAM;AAC5C,YAAA,GAAG,CAAC;AACJ,YAAA,OAAO,EAAE;AACV,SAAA,CAAC,CAAC;;QAGH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAK,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAE/C,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;;AAG5B,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAElB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IACA,oBAAoB,GAAA;QAClB,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC;AAC/E,YAAA,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;AACjC,YAAA,MAAM,EAAG;SACV;QAED,IAAI,CAAC,OAAO,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACpE,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACX,gBAAA,IAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAC;oBACrE,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;oBACvE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC3C,gBAAA;AAAM,qBAAA;oBACP,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,GAAC,GAAG,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;oBACxG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC3C,gBAAA;YACC,CAAC;AACD,YAAA,KAAK,GAAG,CAAC,CAAK,KAAI;gBAChB,IAAI,QAAQ,GAAG,wBAAwB;gBACvC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;AACjC,oBAAA,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK;AACzB,gBAAA;AACD,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjC,YAAA,CAAC;AACN,SAAA,CAAC;IACJ;IACA,cAAc,GAAG,KAAK;IACd,eAAe,GAAG,IAAI;IAC9B,cAAc,CAAC,cAAqB,EAAE,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;AAC3B,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;AACjC,YAAA,MAAM,EAAG;SACV;QAED,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;AAC3B,oBAAA,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,IAAI;oBACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,IAAI,EAAE;AAChE,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC7B,gBAAA;YACH,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC9B;AACD,SAAA,CAAC;IACJ;IAEA,eAAe,GAAG,KAAK;IACf,gBAAgB,GAAG,IAAI;IAC/B,SAAS,CAAC,cAAqB,EAAE,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC7B,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AACzC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACxC,YAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;AAC3B,YAAA,SAAS,EAAE,WAAW;SAEvB;QACH,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,GAAO,KAAG;AACf,gBAAA,IAAG,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAC;AACzB,oBAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI;oBAC/B,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC5B,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC9B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAO,KAAG;AAChB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;YAEjC;AACD,SAAA,CAAC;IAEJ;IAEA,WAAW,GAAA;QACT,UAAU,CAAC,MAAK;;YAEd,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,YAAA;;YAGD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;YAGxD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC9C,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CACH;;;;YAKD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACzC,gBAAA,iBAAiB,EAAE,KAAK;AACxB,gBAAA,mBAAmB,EAAE,KAAK;AAC1B,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,kBAAkB,EAAE;AACrB,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;AAChC,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzB,gBAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC3B,gBAAA,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChC,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,aAAa,EAAE;AAChB,aAAA,CAAC;;YAGF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;AAChD,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3B,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;;YAGF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;AAC3C,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC;;AAGE,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAI;AAClE,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,gBAAA,IAAI,CAAC,QAAQ;AAAE,oBAAA,OAAO,EAAE;AAExB,gBAAA,MAAM,EAAE,GAAQ,QAAQ,CAAC,WAAW;gBAEpC,OAAO,CAAA;;;AAGC,YAAA,EAAA,EAAE,CAAC,IAAI,CAAA,GAAA,EAAM,EAAE,CAAC,EAAE,CAAA;;;;;kCAKE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAA;;;;kCAIhB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAA;;;;OAIzC;AACH,YAAA,CAAC,CAAC;;;;YAKF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClC,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzB,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;;;;AAKF,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,KAAI;gBAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,oBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;oBACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,wBAAA,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;qBACxC;AACF,iBAAA,CAAC;gBAEF,MAAM,CAAC,OAAO,CAAC;AACb,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,EAAE,EAAE,CAAC;oBACL,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG;AAClC,iBAAA,CAAC;AAEF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;;;;AAKF,YAAA,MAAM,SAAS,GAAG,CAAC,IAAY,KAAI;gBACjC,IAAI,IAAI,KAAK,OAAO;AAAE,oBAAA,OAAO,CAAC;gBAC9B,IAAI,IAAI,KAAK,MAAM;AAAE,oBAAA,OAAO,GAAG;AAC/B,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC;AAEhE,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;gBACxD,QACE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;oBACtC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;AAE1C,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;IAKE,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;IAE1B;IAEC,KAAK,GAAO,EAAE;IAEjB,WAAW,GAAkB,CAAC;AAE9B,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;IAC9D;IACA,aAAa,GAAE,KAAK;IACpB,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa;AAC1C,QAAA,IAAG,CAAC,IAAI,CAAC,aAAa,EAAC;AACrB,YAAA,IAAI,CAAC,cAAc,GAAE,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AACxB,QAAA;IACD;IAEA,cAAc,GAAS,EAAE;IACzB,WAAW,GAAA;AACR,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;IAC1B;IACA,WAAW,GAAG,KAAK;;IAGnB,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,CAAC;IACX,OAAO,GAAG,CAAC;AAEX,IAAA,WAAW,GAAG;AACZ,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG;KAC3B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;IACtC;AAYA,IAAA,SAAS,CAAC,KAAiB,EAAA;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AAEvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI;AACpD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;QAEnD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;QACnD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;IACrD;AAEA,IAAA,MAAM,GAAG,CAAC,KAAiB,KAAI;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACrD,IAAA,CAAC;IAED,QAAQ,GAAG,MAAK;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;QACtD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;AACxD,IAAA,CAAC;IAEC,SAAS,GAAA;QACP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC/C;wGA9gBW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,iUCdjC,6s0BAmWM,EAAA,MAAA,EAAA,CAAA,k5HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FDrVO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,6s0BAAA,EAAA,MAAA,EAAA,CAAA,k5HAAA,CAAA,EAAA;wLAMjB,UAAU,EAAA,CAAA;sBAAlB;gBACS,UAAU,EAAA,CAAA;sBAAlB;gBA0GqB,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc;gBAgBzB,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MExH7B,2BAA2B,CAAA;AAuBlB,IAAA,IAAA;AAAqB,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,WAAA;AAAkC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAA+B,IAAA,UAAA;AAA+B,IAAA,MAAA;AAtBjQ,IAAA,QAAQ;IAChB,mBAAmB,GAAU,EAAE;IAC/B,kBAAkB,GAAU,EAAE;IAC9B,WAAW,GAAW,EAAE;IACxB,cAAc,GAAY,KAAK;IAC/B,eAAe,GAAY,IAAI;IAC/B,cAAc,GAAY,KAAK;IAC/B,0BAA0B,GAAY,IAAI;IAC1C,yBAAyB,GAAY,KAAK;AAC1C,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;IACzB,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;;;;;;AAQN,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;AACzC,IAAA,WAAA,CAAoB,IAAY,EAAS,YAAsB,EAAU,EAAe,EAAU,WAAwB,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAS,UAAsB,EAAS,MAAc,EAAA;QAAnQ,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAiB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,WAAW,GAAX,WAAW;QAAuB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,UAAU,GAAV,UAAU;QAAqB,IAAA,CAAA,MAAM,GAAN,MAAM;IAAY;IAE3R,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,sBAAsB,EAAE;;AAErC,QAAA,CAAC,CAAC;IAEA;AACW,IAAA,UAAU;AACvB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;YACtC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AACtD,QAAA;IACH;IACE,WAAW,GAAA;;QAEP,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxB,QAAA;;AAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;SAChC;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB;AAC1D,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC3B,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,YAAY,EAAE;gBACrB,CAAC,EAAE,GAAG,CAAC;AACV,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC7B,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,YAAY,GAAA;;QAER,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE;;YAEb;AACD,QAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxB,QAAA;QAED,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;;QAG5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnF,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,WAAW,EAAE;AACd,SAAA,CAAC,CAAC;;QAGH,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC;;QAG5C,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACvD,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,gBAAgB,EAAE;AACnB,SAAA,CAAC;AACF,QAAA,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/B,QAAQ,EAAE,CAAC,EAAE;YACb,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;AAE7C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnE,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,aAAa,EAAE,UAAU;AACzB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChE,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpD,SAAA,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClD,QAAQ,EAAE,CAAC,EAAE;AACb,YAAA,IAAI,EAAE,UAAU;YAChB,CAAC,EAAE,GAAG,CAAC,GAAG;YACV,OAAO,EAAE,GAAG,CAAC;AACd,SAAA,CAAC,CAAC;;AAGH,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACrE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,UAAU;AAC3B,SAAA,CAAC,CAAC;;AAGH,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;YACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnC,gBAAA,SAAS,EAAE,CAAC;gBACZ,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,EAAE,oCAAoC;oBAC1C,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC1D,oBAAA,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,oBAAA,YAAY,EAAE;iBACf;AACF,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,YAAA,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,GAAG,CAAC;AACf,SAAA,CAAC;QACF,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAE5C,QAAA;AAAM,aAAA;;AAEN,QAAA;;IAEL;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACvH,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;YACvC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB;AAC5D,gBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,gBAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,gBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACvC,QAAA,CAAC,CACF;IACD;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACvG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;AACA,IAAA,WAAW,CAAC,CAAK,EAAA;QACf,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,sBAAsB,EAAE;IAC/B;;;;;;;;;;;;;AAcA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;wGAjSW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,2HClBxC,0oeA6M4G,EAAA,MAAA,EAAA,CAAA,smFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD3L/F,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,0oeAAA,EAAA,MAAA,EAAA,CAAA,smFAAA,CAAA,EAAA;mSAwCzB,UAAU,EAAA,CAAA;sBAAlB;;;MExCQ,yBAAyB,CAAA;AA+B1B,IAAA,WAAA;AACA,IAAA,cAAA;AACD,IAAA,EAAA;AAA8B,IAAA,YAAA;AAC7B,IAAA,MAAA;AAAuB,IAAA,KAAA;AACvB,IAAA,KAAA;IAlCV,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,eAAe,GAAS,EAAE;IAC1B,QAAQ,GAAG,EAAE;IACb,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAO,EAAE;IACpB,mBAAmB,GAAU,EAAE;IAC/B,cAAc,GAAY,KAAK;IAC/B,WAAW,GAAU,EAAE;IACvB,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;AAClC,IAAA,UAAU;AAEF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;;;;;;;;AAYtC,IAAA,WAAA,CACU,WAAwB,EACxB,cAAiC,EAClC,EAAsB,EAAQ,YAAsB,EACnD,MAAc,EAAS,KAAqB,EAC5C,KAAmB,EAAA;QAJnB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,cAAc,GAAd,cAAc;QACf,IAAA,CAAA,EAAE,GAAF,EAAE;QAA4B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QAAiB,IAAA,CAAA,KAAK,GAAL,KAAK;QAC5B,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IAGH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAA,CAAC,CAAC;IAEA;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW;AAC7C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe;gBACxD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;gBAC1C,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW;AAC7C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe;gBACxD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;;AAE1C,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,kBAAkB,CAAC;YAC3D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACN;IACA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAC,EAAE;QAChB,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,eAAe,EAAE;IACxB;AACA,IAAA,YAAY,CAAC,UAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;QAC7B,IAAI,CAAC,eAAe,EAAE;IACxB;AACA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;IACA,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC;wGArOW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,8DCdtC,+uwBA+SM,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAF,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FDjSO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,+uwBAAA,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA;;;MEFvB,6BAA6B,CAAA;AAC/B,IAAA,UAAU;IACnB,iBAAiB,GAAG,CAAC;IACrB,YAAY,GAAG,CAAC;AAChB,IAAA,gBAAgB,GAA8D,EAAE,SAAS,EAAE,EAAE,EAAE;AAE/F,IAAA,WAAA,GAAA,EAAe;IAEf,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU;AAClD,QAAA;IAIL;IACA,eAAe,GAAA;QACb,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAC5E,QAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;IACvD;AAEA,IAAA,aAAa,CACZ,UAAyB,EAAA;AAE1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;QAChF,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAChF,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACD,QAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACG,aAAA;AACF,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACL;wGAnDa,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,sGCR1C,kkBAWE,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,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,EAAAA,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,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDHW,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,kkBAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA;wDAK3B,UAAU,EAAA,CAAA;sBAAlB;;;MEOU,0BAA0B,CAAA;AA0CjB,IAAA,IAAA;AAAqB,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,WAAA;AAAkC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAA+B,IAAA,UAAA;IAzC1O,KAAK,GAAG,KAAK;IACb,WAAW,GAAO,EAAE;IACpB,cAAc,GAAQ,KAAK;IAC3B,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,qBAAqB,GAAU,EAAE;IACjC,gBAAgB,GAAQ,EAAE;IAC1B,IAAI,GAAW,OAAO;IACtB,8BAA8B,GAAU,EAAE;IAC1C,YAAY,GAAW,EAAE;IACzB,UAAU,GAAW,CAAC;IACtB,YAAY,GAAY,KAAK;IAC7B,YAAY,GAAY,KAAK;IAC7B,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;IAClC,cAAc,GAAY,IAAI;IAC9B,aAAa,GAAY,KAAK;AAC9B,IAAA,UAAU;IACV,aAAa,GAAQ,EAAE;IACvB,QAAQ,GAAW,EAAE;IACrB,UAAU,GAAY,KAAK;IAC3B,WAAW,GAAY,KAAK;IAC5B,YAAY,GAAY,KAAK;IAC7B,WAAW,GAAY,KAAK;IAC5B,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,CAAC;IAChB,iBAAiB,GAAG,CAAC;;;;;;;;AAQJ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;AACC,IAAA,QAAQ;IAClD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,YAAY,GAAO,EAAE;AACrB,IAAA,WAAA,CAAoB,IAAY,EAAS,YAAsB,EAAU,EAAe,EAAU,WAAwB,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAS,UAAsB,EAAA;QAA5O,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAiB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,WAAW,GAAX,WAAW;QAAuB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,UAAU,GAAV,UAAU;IAAgB;IACpQ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACpH,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO;;;;;;;;;;;;;;;;;;YAkBnB,IAAI,CAAC,wBAAwB,EAAE;;;AAGzC,QAAA,CAAC,CAAC;IAEA;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;QAGD,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAClH,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB;;gBAEhE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE;gBAC/F,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC3B,IAAI,CAAC,2BAA2B,EAAE;AACnC,YAAA;AAAM,iBAAA;;;;AAIL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;;AAGlB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CACF;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACtG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,0BAA0B,CAAC;YACnE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEA,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;QAGD,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAClH,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB;;;AAGhE,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;;;;AAIL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;;AAGlB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CACF;IAEH;IAEA,gCAAgC,GAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC;SAChB;QACD,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;;YAEtH,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;;gBAE5D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,8BAA8B;AACpE,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;gBAC1B,UAAU,CAAC,MAAK;oBACd,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,oBAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;gBACnD,CAAC,EAAE,GAAG,CAAC;AACR,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;;AAEzB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC1B,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;;;AAG3B,QAAA,CAAC,CACF;IACH;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC;SAChB;QAED,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACnH,YAAA,IAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAC;gBAC3B,IAAI,CAAC,8BAA8B,GAAG,QAAQ,CAAC,IAAI,CAAC,8BAA8B;gBAClF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,QAAQ;AACnE,gBAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE;;;;;;;;AASjH,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,wBAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,4BAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,wBAAA;AACF,oBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,wBAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,4BAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,wBAAA;AACF,oBAAA;AAAM,yBAAA;AACN,oBAAA;oBACD,IAAI,CAAC,gCAAgC,EAAE;;;AAG1C,gBAAA;AAAM,qBAAA;AAEL,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC1B,gBAAA;AACF,YAAA;AAAI,iBAAA;AACH,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC5B,YAAA;QACH,CAAC,EACC,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAE3B,QAAA,CAAC,CACF;IACH;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,gCAAgC,EAAE;AACxC,QAAA;IACH;AAEA,IAAA,UAAU,CAAC,YAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;QACxB,IAAI,CAAC,2BAA2B,EAAE;;IAEtC;AAEA,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAElD;AACA,IAAA,oBAAoB,CAAC,UAAkB,EAAA;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,6BAA6B,EAAE;AACrE,YAAA,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;AACvB,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAG,UAAU;QAClD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAEhC,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACxE,EAAC,IAAI,EAAE,CAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;IACnC,WAAW,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACzE,EAAC,IAAI,EAAE,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;AAEhC,IAAA,aAAa,CACZ,UAAyB,EAAA;AAC1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;QAClE,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACI,aAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACzE,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACI,aAAA;AACH,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACP;wGAtYa,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,iDAF1B,CAAC,iBAAiB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAsCD,UAAU,6BCpDzC,+huCAggBM,EAAA,MAAA,EAAA,CAAA,+9KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAI,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDhfO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;+BACE,wBAAwB,EAAA,SAAA,EAGvB,CAAC,iBAAiB,CAAC,EAAA,QAAA,EAAA,+huCAAA,EAAA,MAAA,EAAA,CAAA,+9KAAA,CAAA,EAAA;4QAsCY,QAAQ,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAC,IAAI,EAAC,UAAU,EAAC;;;MEtC7B,qBAAqB,CAAA;AAgBZ,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;IAf7H,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;IAC3B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;AAC5B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,QAAQ,GAAK,eAAe;AAC5B,IAAA,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAA;QAA5H,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;AACzI,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;IACnD,QAAQ,GAAA;QACP,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,YAAA,QAAQ,IAAI,CAAC,UAAU,EAAE,MAAM;AAC7B,gBAAA,KAAK,KAAK;;AAEN,oBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ;AAClB,yBAAA,IAAI,CACHK,WAAS,CAAC,IAAI,CAAC;AACf,oBAAAC,MAAI,CAAC,CAAC,CAAC;AACP,oBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzB,yBAAA,SAAS,CAAC,CAAC,GAAQ,KAAI;AACtB,wBAAA,IAAI,GAAG,EAAE;AACP,4BAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;4BACnB,IAAI,CAAC,iBAAiB,EAAE;AACzB,wBAAA;AAAM,6BAAA;4BAEb,IAAI,CAAC,iBAAiB,EAAE;AACzB,wBAAA;AACH,oBAAA,CAAC,CAAC;;AAGF,oBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE;wBACtC,IAAI,CAAC,WAAW,CAAC;AACd,6BAAA,IAAI,CAACA,MAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,6BAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,4BAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;4BACxB,IAAI,CAAC,YAAY,EAAE;4BACnB,IAAI,CAAC,YAAY,EAAE;AACrB,wBAAA,CAAC,CAAC;AACL,oBAAA;oBACD;AAEF,gBAAA,KAAK,KAAK;oBACR,IAAI,CAAC,iBAAiB,EAAE;oBACxB;AAEF,gBAAA;;oBAEE;AACH;AACH,QAAA,CAAC,CAAC;IACN;;IAGQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,YAAY,EAAE;IACrB;;IAGQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,WAAW,EAAE;IACpB;AAES,IAAA,IAAI;IACX,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3G,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB;;;;;;gBAMlD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAC7C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;;QAEH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IAEA,SAAS,GAAK,EAAE;IACd,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAC9C,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnC,CAAC,EAAE,GAAG,CAAC;;AAER,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,SAAgB,EAAA;QAC1B,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC;gBAC/D;AACD,YAAA;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,YAAA;YAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC7C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3B,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACnB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBACxB,OAAO,EAAE,GAAG,CAAC,GAAG;gBAChB,CAAC,EAAE,GAAG,CAAC;AACR,aAAA,CAAC,CACH;YAED,MAAM,IAAI,GAAgB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;gBACtD,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,sBAAsB,EAAE,IAAI,CAAC,wBAAwB;gBACrD,wBAAwB,EAAE,IAAI,CAAC;AAChC,aAAA,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACnD,gBAAA,iBAAiB,EAAE,GAAG;AACtB,gBAAA,eAAe,EAAE,GAAG;AACpB,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AACvC,aAAA,CAAC,CACH;AAED,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;AAEF,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAEvB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3C,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC7B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3C,oBAAA,aAAa,EAAE;iBAChB;AACF,aAAA,CAAC,CACH;;AAGD,YAAA,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,SAA0B,KAAU;AACpE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjE,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,WAAW,EAAE,SAAS;AACtB,oBAAA,cAAc,EAAE;AACjB,iBAAA,CAAC,CAAC;AAEH,gBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,aAAa,EAAE;AAChB,iBAAA,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACxB,MAAM,CAAC,MAAM,EAAE;AAEf,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;oBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,wBAAA,SAAS,EAAE,CAAC;wBACZ,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,4BAAA,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtD,4BAAA,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,4BAAA,YAAY,EAAE;yBACf;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,YAAA,CAAC;AAED,YAAA,UAAU,CAAC,kCAAkC,EAAE,wBAAwB,CAAC;AACxE,YAAA,UAAU,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;AAE5D,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC;YACzD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,YAAY,GAAA;AACV,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,yBAAyB,CAAC;YAClE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,SAAS,GAAK,EAAE;IAChB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,YAAY;gBAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,YAAY;;;YAGzB,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,aAAa,GAAG,KAAK;IACrB,YAAY,GAAG,CAAC;IAChB,WAAW,GAAG,CAAC;IACf,YAAY,GAAM,EAAE;AACpB,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,SAAS,GAAK,EAAE;IAChB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAC;SACR;QAED,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE;gBACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,wBAAwB;gBACzD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK;gBAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAClG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,uBAAuB,CAAC;YAChE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IAEA,SAAS,GAAK,EAAE;IAChB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAC;SACR;QAED,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACrH,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE;gBACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI;gBACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAC;SACR;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,2BAA2B,CAAC;YACpE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;wGA5fS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAZ,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,iGCdlC,283CA4xBM,EAAA,MAAA,EAAA,CAAA,ivLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAP,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9wBO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,283CAAA,EAAA,MAAA,EAAA,CAAA,ivLAAA,CAAA,EAAA;yKAsBlB,WAAW,EAAA,CAAA;sBAApB;;;MEnBU,iCAAiC,CAAA;AAOxB,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;IAN7H,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACtC,IAAA,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAA;QAA5H,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;IAEnJ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,CAAC,CAAC;IACA;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAC7C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;wGAnEW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,sECZ9C,kpKAiGM,EAAA,MAAA,EAAA,CAAA,6pCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDrFO,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,kpKAAA,EAAA,MAAA,EAAA,CAAA,6pCAAA,CAAA,EAAA;;;MEU/B,6BAA6B,CAAA;AA4B9B,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,EAAA;AAAgC,IAAA,WAAA;AAChC,IAAA,aAAA;AA9BV,IAAA,SAAS;IACT,QAAQ,GAAsB,OAAO;AAC5B,IAAA,UAAU;AACnB,IAAA,UAAU;IAEV,aAAa,GAAY,IAAI;IAE7B,YAAY,GAAW,EAAE;IACzB,SAAS,GAAW,CAAC;IAErB,UAAU,GAAW,EAAE;IAEvB,KAAK,GAAW,EAAE;IAClB,MAAM,GAAW,CAAC;IAClB,UAAU,GAAW,CAAC;IACtB,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAE9B,wBAAwB,GAAU,EAAE;IACpC,wBAAwB,GAIlB,EAAE;AAEA,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IAEtC,WAAA,CACU,MAAc,EACd,KAAmB,EACnB,EAAsB,EAAU,WAAwB,EACxD,aAA4B,EAAA;QAH5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,WAAW,GAAX,WAAW;QAC3C,IAAA,CAAA,aAAa,GAAb,aAAa;IACnB;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YAC9B,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;AACb,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;gBAC7B,IAAI,CAAC,2BAA2B,EAAE;AACnC,YAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,2BAA2B,EAAE;AACnC,YAAA;AACH,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,UAAU,CAAC,IAAuB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC7B,IAAI,CAAC,2BAA2B,EAAE;AACnC,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,2BAA2B,EAAE;AACnC,QAAA;IACH;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC5D,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;oBAC5D,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,wBAAwB;oBACtE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/C,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACpB,gBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;oBACxB,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,gBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,gBAAA;AAED,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC5B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC;YAC7D;AACD,SAAA,CAAC;IACJ;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AAC1G,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AACrC,YAAA,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACvD,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,gBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;oBAC7C,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB;AACjE,oBAAA,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACpD,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AACnC,gBAAA;AACD,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC5B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IAEA,eAAe,GAAA;QACb,IAAI;YACF,IAAI,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO;YAE3B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACrD,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAElE,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;AACxE,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,YAAY,EAAE;AACf,aAAA,CAAC,CAAC;AAEJ,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC;AAClD,QAAA;IACH;AAEA,IAAA,eAAe,CAAC,IAAS,EAAA;QACvB,IAAI,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACjD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAEvD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAmB;AAC9E,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAE/C,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACjC,YAAA;AAAM,iBAAA;gBACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACnC,YAAA;AAEF,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC;AAClD,QAAA;IACH;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,KAAK,CAC1B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;AAEnC,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,EAAE;AAC7C,YAAA,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACjD,SAAA,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE;SACT;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAEjF,QAAA,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,OAAO;AACrD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,QAAQ,GAAG,yBAAyB;AAExC,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;AAClE,oBAAA,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAA,CAAE;AAC3D,gBAAA;AAAM,qBAAA;oBACL,QAAQ,GAAG,GAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;AAC3F,gBAAA;gBAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;YACnD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IAEN;AAEA,IAAA,mBAAmB,CAAC,IAAW,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,EAAE;AAEjB,QAAA,SAAS,QAAQ,CAAC,IAAS,EAAE,EAAO,EAAE,OAAY,EAAA;YAChD,IAAI,IAAI,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;AAC5B,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;AAEnC,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEjB,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACnB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACtC,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;AACnC,wBAAA,OAAO,IAAI;AACZ,oBAAA;AACF,gBAAA;AACF,YAAA;AAED,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACpB,YAAA,OAAO,KAAK;QACd;QAEA,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;YACtC,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE;gBACjC;AACD,YAAA;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AACpB,YAAA;YACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA;AAED,QAAA,OAAO,MAAM;IACf;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QAEf,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,WAAW,CAAC,MAAc,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/C,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AACnB,QAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QAEf,IAAI,CAAC,2BAA2B,EAAE;IACpC;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;IAC5D;AAEA,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,YAAY,CAAC,UAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QAChC,IAAI,CAAC,2BAA2B,EAAE;IACpC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;IAC3B;IACF,gBAAgB,GAAO,EAAE;IACzB,KAAK,GAAO,EAAE;IACZ,cAAc,GAAA;AACZ,QAAA,IAAI,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;SACnC;QACP,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAChD,YAAA,IAAI,EAAC,CAAC,GAAO,KAAG;;AAEf,gBAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,IAAI;YACjC,CAAC;AACD,YAAA,KAAK,EAAC,CAAC,GAAO,KAAG;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC;YAChD;AACD,SAAA,CAAC;IACF;IACA,cAAc,GAAE,IAAI;IACpB,iBAAiB,GAAA;AACb,QAAA,IAAI,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC9D,YAAA,MAAM,EAAG,KAAK;SACb;QACT,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AACnD,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC;gBACtC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;oBAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;AACpC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAChB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACvC,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;YACnC;AACD,SAAA,CAAC;IACF;IACA,gBAAgB,GAAA;AACd,QAAA,IAAI,MAAM,GAAG;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;SACzC;QACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAC/C,YAAA,IAAI,EAAC,CAAC,GAAO,KAAG;gBACf,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;gBACzC,IAAI,CAAC,UAAU,EAAE;YAClB,CAAC;AACD,YAAA,KAAK,EAAC,CAAC,GAAO,KAAG;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC;YAChD;AACD,SAAA,CAAC;IACF;IACC,QAAQ,GAAO,EAAE;IAEhB,aAAa,GAAU,EAAE;IACzB,YAAY,GAAG,KAAK;IACpB,UAAU,GAAG,EAAE;IACjB,cAAc,GAAU,EAAE;IACxB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;IAEF,aAAa,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACnC,CAAC,IAAS,KACR,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YACnE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CACrE;;AAGD,QAAA,OAAO,QAAQ;IACjB;AAEE,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACrB,QAAA;IACH;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IACF,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IACE,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;YACnC,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA;IACH;IACA,QAAQ,GAAA;AACL,QAAA,IAAI,MAAM,GAAG;AACX,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC9D,YAAA,MAAM,EAAG,IAAI;SACZ;QACP,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAC3D,YAAA,IAAI,EAAC,CAAC,GAAO,KAAG;AACd,gBAAA,IAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAC;oBAChE,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;oBACvE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,gBAAA;AAAM,qBAAA;oBACP,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,GAAC,GAAG,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;oBACxG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,gBAAA;YACL,CAAC;AACF,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AACnB,gBAAA,MAAM,QAAQ,GACZ,GAAG,EAAE,KAAK,EAAE,OAAO;oBACnB,GAAG,EAAE,KAAK,EAAE,KAAK;AACjB,oBAAA,GAAG,EAAE,OAAO;AACZ,oBAAA,wBAAwB;AAE1B,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;YACpC;AAEG,SAAA,CAAC;IAEF;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC/C;IAEA,YAAY,GAAkB,IAAI;AAEpC,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;AACzB,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB;AAEA,IAAA,MAAM,CAAC,WAAmB,EAAA;QACxB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE;YACnE;AACD,QAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;;QAGzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;;QAG/C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,WAAW,CAAC;AAEtD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,MAAM,IAAI,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAC;AAChE,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;AACvC,QAAA;IACH;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,MAAM,IAAI,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAC;AAChE,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;AACxC,QAAA;IACH;wGA3ea,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,wGCjB1C,i50BAuhBA,EAAA,MAAA,EAAA,CAAA,46GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,EAAAT,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAV,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FDtgBa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,i50BAAA,EAAA,MAAA,EAAA,CAAA,46GAAA,CAAA,EAAA;yLAO7B,UAAU,EAAA,CAAA;sBAAlB;;;MEXU,yBAAyB,CAAA;AAc1B,IAAA,QAAA;AAAiC,IAAA,EAAA;AAA+B,IAAA,WAAA;AAAgC,IAAA,EAAA;IAb1G,OAAO,GAAW,CAAC;AACnB,IAAA,QAAQ;AACR,IAAA,UAAU;IACV,wBAAwB,GAAY,IAAI;IACxC,aAAa,GAAW,EAAE;IAC1B,oBAAoB,GAAG,IAAI;AACV,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAEzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AACA,IAAA,WAAA,CACU,QAAyB,EAAQ,EAAsB,EAAS,WAAuB,EAAS,EAAoB,EAAA;QAApH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAyB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,WAAW,GAAX,WAAW;QAAqB,IAAA,CAAA,EAAE,GAAF,EAAE;IAE5G;AACA,IAAA,UAAU;;IAEV,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;AAC9E,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;QAC5B,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAA,CAAC,CAAC;IACF;IAEA,mBAAmB,GAAY,KAAK;AAEpC,IAAA,wBAAwB,CAAC,OAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO;IACpC;;;;;;IAOE,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC3B,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;AACpF,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;AACpF,SAAA,CAAC;IACJ;IACA,aAAa,GAAA;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM;IACxF;IAEC,sBAAsB,GAAA;AACnB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;SAChC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,YAAY;AACtD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;gBACjC,IAAI,CAAC,wBAAwB,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI;gBACpE,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;AAC/C,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AAED,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;AACnD,gBAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB;AACD,SAAA,CAAC;IACF;wGA/EO,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,8DCTtC,8hGA+DQ,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,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,EAAAe,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDtDK,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,8hGAAA,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA;;;MEOvB,mBAAmB,CAAA;AAKV,IAAA,aAAA;AAAqC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAAgC,IAAA,MAAA;AAAwB,IAAA,cAAA;AAJ1J,IAAA,aAAa;AACb,IAAA,UAAU;AACV,IAAA,iBAAiB;AACT,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,WAAA,CAAoB,aAA4B,EAAS,cAAiC,EAAQ,EAAsB,EAAU,MAAc,EAAU,cAA8B,EAAA;QAApK,IAAA,CAAA,aAAa,GAAb,aAAa;QAAwB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,cAAc,GAAd,cAAc;IAAoB;IAE5L,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAACxB,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC;IACA;IACA,WAAW,GAAA;AAET,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;SAChC;QAED,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CACvF,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAClC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;AACvC,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAErE,YAAA;AAAO,iBAAA;AACN,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACxB,YAAA;AACH,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACvD,QAAA,CAAC,CACF;IACH;wGA5CW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAyB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,uDCZhC,w2LA2GA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FD/Fa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,w2LAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;MEAhB,yBAAyB,CAAA;AACM,IAAA,SAAS;AAE1C,IAAA,QAAQ;AACjB,IAAA,gBAAgB,GAA8D,EAAE,SAAS,EAAE,EAAE,EAAE;IAC/F,iBAAiB,GAAG,CAAC;IAErB,YAAY,GAAG,CAAC;AAEhB,IAAA,WAAA,GAAA,EAAe;IAEf,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;AAGhD,QAAA;IACL;IAEA,eAAe,GAAA;QACb,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAC5E,QAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;IACvD;AAEA,IAAA,aAAa,CACZ,UAAyB,EAAA;AAC1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;QAChF,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAChF,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACD,QAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACG,aAAA;AACF,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACL;wGArDa,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,sNCRtC,6mBAWM,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,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,EAAAA,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,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDHO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,6mBAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA;wDAKQ,SAAS,EAAA,CAAA;sBAAlD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAE/B,QAAQ,EAAA,CAAA;sBAAhB;;;MEQU,qBAAqB,CAAA;AA8CZ,IAAA,IAAA;AAAqB,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,aAAA;AAAsC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAAgC,IAAA,UAAA;AAA+B,IAAA,KAAA;AA7CrO,IAAA,QAAQ;AAChC,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,WAAW,GAAW,EAAE;AACxB,IAAA,UAAU;IACV,KAAK,GAAG,KAAK;IACb,UAAU,GAAY,KAAK;IAC3B,WAAW,GAAY,KAAK;IAC5B,YAAY,GAAY,KAAK;IAC7B,IAAI,GAAW,OAAO;IACtB,cAAc,GAAY,IAAI;IAC9B,aAAa,GAAY,KAAK;IAC9B,QAAQ,GAAW,EAAE;IACrB,YAAY,GAAW,EAAE;IACzB,gBAAgB,GAAQ,EAAE;IAC1B,6BAA6B,GAAQ,EAAE;;IAEvC,cAAc,GAAU,EAAE;IAC1B,8BAA8B,GAAU,EAAE;IAC1C,UAAU,GAAW,CAAC;IACtB,YAAY,GAAY,KAAK;IAC7B,WAAW,GAAQ,EAAE;IACrB,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAW,CAAC;IAClB,aAAa,GAAW,CAAC,CAAC;IAC1B,cAAc,GAAU,EAAE;IAC1B,WAAW,GAAU,EAAE;IACvB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AACnB,IAAA,UAAU;AACV,IAAA,OAAO;IACf,WAAW,CAAM;AACjB,IAAA,SAAS;AACT,IAAA,UAAU;IACV,iBAAiB,GAAG,CAAC;IACrB,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,KAAK;IACjC,iBAAiB,GAAY,IAAI;IACjC,oBAAoB,GAAY,KAAK;IACrC,qBAAqB,GAAY,IAAI;IACrC,eAAe,GAAY,KAAK;IAEhC,YAAY,GAAG,CAAC;AAC0B,IAAA,QAAQ;AACJ,IAAA,YAAY;AAE1D,IAAA,WAAA,CAAoB,IAAY,EAAS,YAAsB,EAAU,EAAe,EAAU,aAA4B,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAU,UAAsB,EAAS,KAAqB,EAAA;QAA/Q,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAiB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,aAAa,GAAb,aAAa;QAAyB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,UAAU,GAAV,UAAU;QAAqB,IAAA,CAAA,KAAK,GAAL,KAAK;IAEnR;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO;YACnB,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AACpB,YAAA;iBACI,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAC,KAAK,CAAC,GAAG,EAAE,EAAE;AACpC,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACrB,YAAA;AACI,iBAAA;AACH,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACtB,YAAA;YAED,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAG;AACxC,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;gBAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE9B,gBAAA;AACH,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,qBAAqB,EAAE;;;;AAK9B,QAAA,CAAC,CAAC;IAEN;IACA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,QAAA;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAE1B;AAEA,IAAA,SAAS,CAAC,OAAe,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;;QAEvB,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,yBAAyB,EAAE;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;IACrC;IACA,qBAAqB,GAAA;;AAEnB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SACjC;QAED,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;YAC/G,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB;AACrD,gBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;oBAE9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ;AAClD,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW;;AAEjC,gBAAA;;;AAGD,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;gBAC1B,IAAI,CAAC,2BAA2B,EAAE;gBAClC,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,IAAI,CAAC,yBAAyB,EAAE;gBAChC,IAAI,CAAC,mBAAmB,EAAE;AAK3B,YAAA;AAAM,iBAAA;;;AAIL,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;AACvC,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;;AAE5B,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACC,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;;AAGlB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CACF;IACH;IACA,gCAAgC,GAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAEzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;;AAExG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC;SAChB;QACD,IAAI,CAAC,aAAa,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC1H,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;;gBAGvC,IAAI,CAAC,6BAA6B,GAAG,QAAQ,CAAC,IAAI,CAAC,8BAA8B;AACjF,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;gBAC1B,UAAU,CAAC,MAAK;oBACd,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,oBAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;gBACnD,CAAC,EAAE,GAAG,CAAC;AAGR,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;;;AAGvC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACC,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;;;;AAIzC,QAAA,CAAC,CACF;IACH;IAEF,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AACxF,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,WAAW;AACvD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,8BAA8B,IAAI,EAAE;AACjE,gBAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI;AAC1C,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,gBAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;oBAC3E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;;AAGpC,oBAAA,IAAI,CAAC,WAAW;wBACd,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACzC,6BAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;oBAG7C,IAAI,CAAC,gCAAgC,EAAE;oBACvC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,oBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,oBAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;AAC1B,gBAAA;YACH,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YAC3B,CAAC;AACF,SAAA,CAAC;IACN;AAGA,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,gCAAgC,EAAE;YACvC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,QAAA;IACH;AAGA,IAAA,UAAU,CAAC,YAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;AACxB,QAAA,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC;AAGE,IAAA,WAAW,CAAC,QAAgB,EAAA;AAE1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,2BAA2B,EAAE;IAEpC;AACA,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACjE,YAAA,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;AACvB,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,GAAG,QAAQ;QAC9C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAEhC,QAAA,CAAC,CAAC;IACJ;IACA,WAAW,GAAA;QACT,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;YAC1D,IAAI,CAAC,QAAQ,EAAE;;gBAEb;AACD,YAAA;YAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;YACD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACnD,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACvC,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5B,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC9B,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACxC,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CACH;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC7B,QAAQ,EAAE,CAAC;AACZ,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB;AACzC,aAAA,CAAC,CACH;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,KAAK;AAElB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3B,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;;AAGpC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;;AAEM,IAAA,eAAe,CAAC,OAAe,EAAA;QACrC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;AAC1F,QAAA;AAED,QAAA,MAAM,eAAe,GAAG,CAAC,CAAS,KAAI;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AACxB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACtD,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,YAAA,OAAO,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,GAAG,EAAE;AAC3B,QAAA,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;IACvC;IAGA,mBAAmB,GAAA;AACjB,QAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AAEpE,QAAA,MAAM,WAAW,GAAG;YAClB,QAAQ;YACR,MAAM;AACN,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AACxF,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AAEvB,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,qBAAqB,IAAI,EAAE;gBAC5D,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC;oBACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,EAAE;oBAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,EAAE;oBAChE,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC;AACzC,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,gBAAA;AACD,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC9B,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACxB,CAAC;AACF,SAAA,CAAC;IACN;IAGE,WAAW,GAAA;QACT,IAAI,IAAI,GAAQ,EAAE;QAClB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,KAAU,KAAI;AACjD,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,YAAA;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;IACA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;;AAI7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACjD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ;AAChD,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;gBAC5B;AACD,YAAA;AACF,QAAA;AAED,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC;;SAEhB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAC9B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB;AACjD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;gBAC9B,MAAM,WAAW,GAAwE,EAAE;gBAC3F,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAyC,EAAE,KAAa,KAAI;oBAC5E,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC/B,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,gBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBAE1B,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;oBACpC,CAAC,EAAE,GAAG,CAAC;;AAER,gBAAA;AAAM,qBAAA;;AAEN,gBAAA;;AAGF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;AAG7B,YAAA;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACzB,QAAA,CAAC,CAAC;IACN;IACA,yBAAyB,GAAA;AACvB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,WAAW;AACrD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CACR,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;YAElC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,0BAA0B;AAEnF,gBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,WAAW;AACtE,gBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS;AACnC,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;;AAEvC,gBAAA;AAAM,qBAAA;;AAEN,gBAAA;AAED,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AACnC,YAAA;AAAM,iBAAA;;AAEL,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACjC,YAAA;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC9B,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACxB,QAAA,CAAC,CACF;IACL;AAEA,IAAA,gBAAgB,CAAC,WAA4E,EAAA;QAC3F,UAAU,CAAC,MAAK;;YAEhB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;;YAGD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,GAAG,CAAC,IAAI;gBACf,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,aAAA,CAAC;;AAGF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;AACvE,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CAAC;;YAGH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClC,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;;AAGF,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,KAAI;gBAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AAClC,oBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;oBACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AAC3B,wBAAA,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;qBACxC;AACF,iBAAA,CAAC;gBAEF,MAAM,CAAC,OAAO,CAAC;AACb,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,EAAE,EAAE,CAAC;AACL,oBAAA,IAAI,EAAE,CAAC;oBACP,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI;AACrC,oBAAA,KAAK,EAAE;AACR,iBAAA,CAAC;AAEF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;;AAGF,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;;AAG/B,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;QAC1B,CAAC,EAAC,GAAG,CAAC;IACN;AACA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnG,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC;AACA,IAAA,aAAa,CACV,UAAyB,EAAA;AAC1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;QAClE,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACI,aAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,6BAA6B,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE;AACvF,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACI,aAAA;AACH,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACP;IAEA,UAAU,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACxE,EAAC,IAAI,EAAE,CAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;IACnC,WAAW,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACzE,EAAC,IAAI,EAAE,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;IAElC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC;YACvC,IAAI,EAAE,CAAC,GAAG;AACV,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC;AACvC,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;wGAxpBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAkB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EA2CH,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACN,UAAU,6BC/D7C,s/vCAilBA,EAAA,MAAA,EAAA,CAAA,4gOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9jBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,s/vCAAA,EAAA,MAAA,EAAA,CAAA,4gOAAA,CAAA,EAAA;6SAKY,QAAQ,EAAA,CAAA;sBAAhD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBA0CG,QAAQ,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAC,IAAI,EAAC,UAAU,EAAC;gBACM,YAAY,EAAA,CAAA;sBAAzD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,IAAI,EAAC,UAAU,EAAC;;;AE5D9C,MAAM,6BAA6B,GAAa;AAC9C,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,IAAA,KAAK,EAAE,IAAI;CACZ;MAQY,uBAAuB,CAAA;AAE1B,IAAA,SAAS;AACT,IAAA,SAAS;AACP,IAAA,UAAU;AACX,IAAA,OAAO;AACP,IAAA,SAAS;AACT,IAAA,KAAK;AACL,IAAA,IAAI;IACH,QAAQ,GAAY,KAAK;IACzB,QAAQ,GAA+B,IAAI;AAC3C,IAAA,UAAU;AAEpB,IAAA,UAAU,CAAC,GAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAwB,KAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAChG;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAE9B;AAEA,IAAA,QAAQ,CAAC,IAAyB,EAAA;QAChC,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC9B;AAGA,IAAA,iBAAiB,CAAC,IAAyB,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAqB;AACjD,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACtB,YAAA;AACF,QAAA;IACH;AAEA,IAAA,kBAAkB,CAAC,aAA0B,EAAA;AAC3C,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa;AACjD,QAAA,IAAI,aAAa,EAAE;YACjB,MAAM,kBAAkB,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC5E,YAAA,IAAI,kBAAkB,EAAE;AACtB,gBAAA,OAAO,IAAI;AACZ,YAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;AAC9C,YAAA;AACF,QAAA;AACD,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;wGAhEpC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EAFvB,CAAC,6BAA6B,CAAC,0BCb5C,68BAiBM,EAAA,MAAA,EAAA,CAAA,6sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDFO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,qBAAqB,EAAA,SAAA,EAGpB,CAAC,6BAA6B,CAAC,EAAA,QAAA,EAAA,68BAAA,EAAA,MAAA,EAAA,CAAA,6sBAAA,CAAA,EAAA;8BAOjC,OAAO,EAAA,CAAA;sBAAf;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBAkCD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;gBAuBhC,WAAW,EAAA,CAAA;sBAApB;;;ME9DU,wBAAwB,CAAA;AA+Bf,IAAA,IAAA;AAAsB,IAAA,KAAA;AAA2B,IAAA,EAAA;AAAyB,IAAA,aAAA;AACpF,IAAA,cAAA;AACD,IAAA,EAAA;AAA8B,IAAA,YAAA;AAC7B,IAAA,MAAA;AAAuB,IAAA,KAAA;AACvB,IAAA,KAAA;AAlCF,IAAA,IAAI;AACJ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACtC,IAAA,IAAI;AACJ,IAAA,aAAa;AACb,IAAA,QAAQ,GAA4C;AAClD,QAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE;AAC/C,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB;KAChD;IAED,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC9B,QAAQ,GAAG,EAAE;IACb,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,WAAW,GAAO,EAAE;IACpB,mBAAmB,GAAU,EAAE;IAC/B,cAAc,GAAY,KAAK;IAC/B,WAAW,GAAU,EAAE;IACvB,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;IAClC,sBAAsB,GAAY,IAAI;IACtC,qBAAqB,GAAY,KAAK;AACtC,IAAA,UAAU;IACV,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAY,IAAI;IAC3B,kBAAkB,GAAmB,IAAI;;AAEzC,IAAA,WAAA,CAAoB,IAAY,EAAU,KAAiB,EAAU,EAAe,EAAU,aAA4B,EAChH,cAAiC,EAClC,EAAsB,EAAQ,YAAsB,EACnD,MAAc,EAAS,KAAqB,EAC5C,KAAmB,EAAA;QAJT,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAkB,IAAA,CAAA,KAAK,GAAL,KAAK;QAAsB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,aAAa,GAAb,aAAa;QACjG,IAAA,CAAA,cAAc,GAAd,cAAc;QACf,IAAA,CAAA,EAAE,GAAF,EAAE;QAA4B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QAAiB,IAAA,CAAA,KAAK,GAAL,KAAK;QAC5B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;IAE9B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAExB,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;IACH;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;IACxB;IAEF,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,aAAa,EAAE,IAAI,CAAC;AACrB,SAAA,CAAC;QACF,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;YAEtB,IAAI,CAAC,uBAAuB,EAAE;;AAEtC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC/C,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,CAAC,kBAAkB,EAAE;AAC3B,QAAA,CAAC,CAAC;IAEA;IACA,KAAK,GAAG,EAAE;IACV,MAAM,GAAG,CAAC;IACV,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AAC1G,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACtB,YAAA,MAAM,EAAE,KAAK;SAChB;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;;AAE1G,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;AAC7C,gBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAChC,gBAAA,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAE/E,YAAA;AAAO,iBAAA;AACN,gBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AAClC,YAAA;AACL,QAAA,CAAC,EAAE,CAAC,KAAS,KAAI;AACf,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;;AAEvC,QAAA,CAAC,CAAC;IACN;IACA,eAAe,GAAA;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE;;YAEX;AACH,QAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI;gBACA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAExD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3E,oBAAA,aAAa,EAAE,MAAM;AACrB,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,UAAU,EAAE,OAAO;AACnB,oBAAA,YAAY,EAAE;AACjB,iBAAA,CAAC,CAAC;AACN,YAAA;AAAC,YAAA,OAAO,KAAK,EAAE;;AAEf,YAAA;AACJ,QAAA;IACH;IAEA,WAAW,CAAC,IAAW,EAAE,aAA4B,EAAA;QACnD,IAAI,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;QAyBjD,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAmB;AACzE,YAAA,IAAI,MAAM,EAAE;;AAER,gBAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,gBAAA;AAAM,qBAAA;;oBAGH,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACrC,gBAAA;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;AACvC,YAAA;AAAM,iBAAA;;AAEN,YAAA;AACJ,QAAA;IACH;AAEA,IAAA,mBAAmB,CAAC,IAAW,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,EAAE;AAEjB,QAAA,SAAS,QAAQ,CAAC,IAAQ,EAAE,EAAM,EAAE,OAAW,EAAA;YAC7C,IAAI,IAAI,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;AAC5B,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;AAEnC,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEjB,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACnB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACtC,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;AACnC,wBAAA,OAAO,IAAI;AACZ,oBAAA;AACF,gBAAA;AACF,YAAA;AAED,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACpB,YAAA,OAAO,KAAK;QACd;QAEA,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;YACtC,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE;gBACjC;AACD,YAAA;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AACpB,YAAA;YACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA;AAED,QAAA,OAAO,MAAM;IACf;IAGE,YAAY,CAAC,MAAW,EAAE,IAAY,EAAA;AACpC,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACrD,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACtB,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ;AACrB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACtB,YAAA,MAAM,EAAE,KAAK;SACd;QAEF,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;AAC/D,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;oBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,wBAAwB;oBACjE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AAC9C,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC/B,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACjB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACnC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC5B,gBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;oBACxB,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,gBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,gBAAA;YAEH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC;YAC7D;AACD,SAAA,CAAC;IACJ;IAEE,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;IAC5D;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,WAAW;AACzD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;;gBAEZ,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACjE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACN;IACA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACvC,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,YAAY,CAAC,UAAe,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,uBAAuB,EAAE;IAChC;IACA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,GAAE,CAAC,IAAI,CAAC,WAAW;AACtC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;;;AAG9B,QAAA;IACA;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;AAC7C,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,EAAE;AAC7C,YAAA,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAC;AACrD,SAAA,CAAC;IAEJ;wGA3VW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,4DCjBrC,4hcAoOM,EAAA,MAAA,EAAA,CAAA,yjGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsB,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDnNO,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,4hcAAA,EAAA,MAAA,EAAA,CAAA,yjGAAA,CAAA,EAAA;;;MEKrB,sBAAsB,CAAA;AAgCd,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,aAAA;AAAsC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAA+B,IAAA,UAAA;IA/BxN,mBAAmB,GAAU,EAAE;IAC/B,kBAAkB,GAAU,EAAE;IAC9B,WAAW,GAAW,EAAE;IACxB,cAAc,GAAY,KAAK;IAC/B,eAAe,GAAY,IAAI;IAC/B,cAAc,GAAY,KAAK;IAC/B,0BAA0B,GAAY,IAAI;IAC1C,yBAAyB,GAAY,KAAK;AAC1C,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;IACzB,IAAI,GAAW,WAAW;IAC1B,SAAS,GAAW,YAAY;;AAGhC,IAAA,eAAe,GAAY,KAAK,CAAC;IACjC,kBAAkB,GAAY,KAAK;AACnC,IAAA,gBAAgB,GAAY,KAAK,CAAC;IAClC,mBAAmB,GAAY,KAAK;IACpC,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,QAAQ,GAAG,CAAC;IACZ,WAAW,GAAG,CAAC;;;;;;AAOE,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,kBAAkB,GAAQ,EAAE;AAC5B,IAAA,WAAA,CAAmB,YAAsB,EAAU,EAAe,EAAU,aAA4B,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAS,UAAsB,EAAA;QAA3N,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,aAAa,GAAb,aAAa;QAAyB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,UAAU,GAAV,UAAU;IAAgB;IAElP,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC1C,QAAA,CAAC,CAAC;IACA;IAEA,WAAW,GAAA;AAET,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAEA,IAAA,qBAAqB,CAAC,QAAgB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,QAAQ;AACpB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;SAC5B;QAED,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAG,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,KAAK,CAAC,EAAC;AAClD,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AAAI,qBAAA;oBACH,IAAI,CAAC,kBAAkB,GAAG,QAAQ,EAAE,IAAI,EAAE,kBAAkB;AAC5D,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC9B,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAChC,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AAClC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,sBAAsB,CAAC,QAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,QAAQ;AACpB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;SAC5B;QAED,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAChH,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;YACvC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAG,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,KAAK,CAAC,EAAC;AACnD,oBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,oBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACtC,gBAAA;AAAI,qBAAA;oBACH,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,IAAI,EAAE,mBAAmB;AAC9D,oBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,oBAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACvC,gBAAA;AAGF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,gBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACvC,QAAA,CAAC,CACF;IACD;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IACvC;AAGA,IAAA,aAAa,CAAC,MAAc,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,MAAM,EAAE;AACtC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7C;AAEA,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA;aAAM,IAAI,IAAI,KAAK,cAAc,EAAE;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA;IACH;AACA,IAAA,eAAe,CAAC,SAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,SAAS,KAAK,YAAY,EAAE;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA;aAAM,IAAI,SAAS,KAAK,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AACvC,QAAA;IACH;AACA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;wGArLW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAApB,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAkB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,0DClBnC,4wYA8OU,EAAA,MAAA,EAAA,CAAA,irFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAG,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FD5NG,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,4wYAAA,EAAA,MAAA,EAAA,CAAA,irFAAA,CAAA,EAAA;;;MEEnB,qBAAqB,CAAA;AA8BtB,IAAA,aAAA;AACA,IAAA,cAAA;AACD,IAAA,EAAA;AAA8B,IAAA,YAAA;AAC7B,IAAA,MAAA;AAAuB,IAAA,KAAA;AACvB,IAAA,KAAA;IAjCV,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,eAAe,GAAS,EAAE;IAC1B,QAAQ,GAAG,EAAE;IACb,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAO,EAAE;IACpB,mBAAmB,GAAU,EAAE;IAC/B,cAAc,GAAY,KAAK;IAC/B,WAAW,GAAU,EAAE;IACvB,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;AAClC,IAAA,UAAU;AACF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;;;;;;;;AAYtC,IAAA,WAAA,CACU,aAA4B,EAC5B,cAAiC,EAClC,EAAsB,EAAQ,YAAsB,EACnD,MAAc,EAAS,KAAqB,EAC5C,KAAmB,EAAA;QAJnB,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,cAAc,GAAd,cAAc;QACf,IAAA,CAAA,EAAE,GAAF,EAAE;QAA4B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QAAiB,IAAA,CAAA,KAAK,GAAL,KAAK;QAC5B,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IAGH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAA,CAAC,CAAC;IAEA;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAG,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC,EAAC;AAC/C,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,gBAAA;AAAI,qBAAA;oBACH,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,IAAI,EAAE,eAAe;oBAC1D,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;oBAC5C,IAAI,CAAC,kBAAkB,EAAE;AACzB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC1B,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,IAAI,EAAE,eAAe;gBAC1D,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;;AAE1C,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,uBAAuB,CAAC;YAClE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACN;IACA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAC,EAAE;QAChB,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,eAAe,EAAE;IACxB;AACA,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,eAAe,EAAE;IAExB;AACA,IAAA,YAAY,CAAC,UAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;QAC7B,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;IACA,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC;wGA3OW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAkB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,yDCflC,6hrBA6RM,EAAA,MAAA,EAAA,CAAA,k3FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAF,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FD9QO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,6hrBAAA,EAAA,MAAA,EAAA,CAAA,k3FAAA,CAAA,EAAA;;;MEAlB,eAAe,CAAA;AAahB,IAAA,QAAA;AAAiC,IAAA,EAAA;AAAgC,IAAA,WAAA;AAAgC,IAAA,EAAA;IAZ3G,OAAO,GAAW,CAAC;AACnB,IAAA,UAAU;IACV,wBAAwB,GAAY,IAAI;IACxC,aAAa,GAAW,EAAE;IAC1B,oBAAoB,GAAG,IAAI;AACV,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAEzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AACA,IAAA,WAAA,CACU,QAAyB,EAAQ,EAAsB,EAAU,WAAuB,EAAS,EAAoB,EAAA;QAArH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAyB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,WAAW,GAAX,WAAW;QAAqB,IAAA,CAAA,EAAE,GAAF,EAAE;IAE7G;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAA,CAAC,CAAC;IACF;IAEE,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC3B,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;AACpF,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;AACpF,SAAA,CAAC;IACJ;IACA,aAAa,GAAA;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;IACrF;IACA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;SAChC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,YAAY;AACtD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;gBACjC,IAAI,CAAC,wBAAwB,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI;gBACpE,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;AAC/C,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AAED,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;AACnD,gBAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;YACvC;AACD,SAAA,CAAC;IACF;wGA5DS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,mDCV5B,w2DAyCA,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,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,EAAAyB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,CAAA;;4FD/Ba,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,w2DAAA,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA;;;AEAzB,MAAM,MAAM,GAAW;AACrB,IAAA;AACE,QAAA,IAAI,EAAC,IAAI;AACT,QAAA,SAAS,EAAC;AACX,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,SAAS,EAAE;AACZ;CACF;MAMY,6BAA6B,CAAA;wGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,0CAF9B,YAAY,CAAA,EAAA,CAAA;yGAEX,6BAA6B,EAAA,OAAA,EAAA,CAH9B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC7B,YAAY,CAAA,EAAA,CAAA;;4FAEX,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACxC,OAAO,EAAE,CAAC,YAAY;AACvB,iBAAA;;;MCVY,2BAA2B,CAAA;AAoBlB,IAAA,aAAA;AAAqC,IAAA,EAAA;AAnBhD,IAAA,SAAS;AACT,IAAA,WAAW;AACX,IAAA,YAAY;AACZ,IAAA,SAAS;AACT,IAAA,OAAO;AACP,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,UAAU;AACnB,IAAA,MAAM;IACN,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;AACd,IAAA,eAAe,GAAG,CAAC,CAAC,CAAC;IACrB,QAAQ,GAAG,CAAC;IACZ,oBAAoB,GAAM,EAAE;AAC5B,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,eAAe;IACf,WAAA,CAAoB,aAA2B,EAAU,EAAqB,EAAA;QAA1D,IAAA,CAAA,aAAa,GAAb,aAAa;QAAwB,IAAA,CAAA,EAAE,GAAF,EAAE;IAE3D;IACF,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAQ,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;QAC7F,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK;QAC3C,IAAI,CAAC,cAAc,EAAE;IACvB;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,cAAc,GAAA;AACd,QAAA,IAAI,GAAG,GAAC;AACJ,YAAA,UAAU,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YACjC,SAAS,EAAE,IAAI,CAAC;SACnB;AACD,QAAA,IAAI,CAAC;aACJ,eAAe,CAAC,GAAG;AACnB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO;AAC/D,gBAAA;YACH;AACC,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,IAAQ,EAAA;QAChB,IAAG,IAAI,KAAI,OAAO,EAAC;YAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc;AACpD,QAAA;aAAM,IAAG,IAAI,KAAK,MAAM,EAAC;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa;AACpD,QAAA;aAAM,IAAG,IAAI,KAAI,OAAO,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB;AAC3D,QAAA;IAEH;wGA5Da,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,wRCVxC,sisBAmTA,EAAA,MAAA,EAAA,CAAA,6kJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FDzSa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,sisBAAA,EAAA,MAAA,EAAA,CAAA,6kJAAA,CAAA,EAAA;+GAK3B,SAAS,EAAA,CAAA;sBAAjB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;;;MEDU,uBAAuB,CAAA;AAiBxB,IAAA,aAAA;AACD,IAAA,EAAA;AACC,IAAA,EAAA;AACA,IAAA,YAAA;AAA+B,IAAA,EAAA;IAnBzC,WAAW,GAAQ,CAAC;AACpB,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,YAAY;AACZ,IAAA,eAAe;IACf,WAAW,GAAG,UAAU;AACxB,IAAA,UAAU;IACV,UAAU,GAAG,IAAI;IACjB,KAAK,GAAG,KAAK;AACb,IAAA,SAAS;AACT,IAAA,IAAI;IACJ,MAAM,GAAW,KAAK;IACtB,OAAO,GAAU,IAAI;AACrB,IAAA,eAAe;AACf,IAAA,YAAY;IACZ,WAAA,CACU,aAA4B,EAC7B,EAAsB,EACrB,EAAqB,EACrB,YAAsB,EAAS,EAAe,EAAA;QAH9C,IAAA,CAAA,aAAa,GAAb,aAAa;QACd,IAAA,CAAA,EAAE,GAAF,EAAE;QACD,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAmB,IAAA,CAAA,EAAE,GAAF,EAAE;QAEzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AACjC,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAEyB,cAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;YACvB,IAAG,IAAI,KAAI,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI,EAAC;AACzC,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;gBAClH,IAAI,CAAC,OAAO,GAAG;oBACb,OAAO,EAAE,IAAI,CAAC;yBACX,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;yBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;oBACrC,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,oBAAA,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;iBAC3C;AACD,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;gBAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAgB;AACjE,gBAAA,IAAI,aAAa,EAAE;AACjB,oBAAA,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;AACrC,gBAAA;gBACD,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA;AACD,QAAA,CAAC,CAAC;IACN;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,cAAc,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;AAC9B,QAAA,IAAI,CAAC;AACF,aAAA,2BAA2B,CAAC,IAAI,CAAC,OAAO;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,IAAI,CAAC,YAAY;oBAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU;oBACnD,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;oBAC3C,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,oBAAA,IAAI,CAAC,MAAM,GAAE,IAAI;AAClB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACD,YAAA,QAAQ,EAAE,MAAK,EAAE,CAAC;AACnB,SAAA,CAAC;IACN;IACA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAE,IAAI;AAClB,QAAA,IAAI,CAAC,MAAM,GAAE,KAAK;AAClB,QAAA,IAAI,CAAC;AACF,aAAA,oBAAoB,CAAC,IAAI,CAAC,OAAO;AACjC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAG,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAC;AAChC,wBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,wBAAA,IAAI,CAAC,MAAM,GAAE,IAAI;AAClB,oBAAA;AAAK,yBAAA;wBACL,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,IAAI,CAAC,YAAY;wBAC7C,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;AAC3C,wBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,wBAAA,IAAI,CAAC,MAAM,GAAE,KAAK;AAClB,wBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACtB,oBAAA;AACF,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,oBAAA,IAAI,CAAC,MAAM,GAAE,IAAI;AAClB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACD,YAAA,QAAQ,EAAE,MAAK,EAAE,CAAC;AACnB,SAAA,CAAC;IACN;IAEA,SAAS,CAAC,KAAU,EAAE,GAAQ,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC5D,IAAI,CAAC,cAAc,EAAE;IACvB;IACA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;AACA,IAAA,aAAa,CAAC,GAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;QACvB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,SAAS,CAAC,GAAQ,EAAC,YAAgB,EAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,2BAA2B,EAAE;AACnE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,iBAAiB,CAAC,SAAS,GAAG,GAAG;QAC1C,QAAQ,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;AACjE,QAAA,QAAQ,CAAC,iBAAiB,CAAC,YAAY,GAAG,YAAY;QACtD,QAAQ,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe;QAC3D,QAAQ,CAAC,iBAAiB,CAAC,OAAO,GAAI,IAAI,CAAC,YAAY;QACvD,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAI,IAAI,CAAC,UAAU;QACxD,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;QACzD,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;AAC/D,QAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI,EAAE,CAAC,CAAC;IAC3C;IAEA,iBAAiB,CAAC,QAAgB,EAAE,MAAc,EAAA;QAChD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAa,EAAE;;AAG9B,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE;AAClD,YAAA,OAAO,SAAS;AACjB,QAAA;;QAGD,IAAI,WAAW,GAAG,KAAK;QACvB,OAAO,WAAW,IAAI,GAAG,EAAE;AACzB,YAAA,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,YAAA,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD,QAAA;AAED,QAAA,OAAO,SAAS;IAClB;;IAGA,gBAAgB,GAAA;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAC7B;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AACA,IAAA,QAAQ,GAAG;AACT,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE;AAC/C,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,QAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,oBAAoB,EAAE;AAC3D,QAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY;KAC3C;IAED,eAAe,GAAA;;QAEb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChC;AACA,IAAA,aAAa,CAAC,UAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,UAAU;YACrC,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAgB;IACpD;wGAjMW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,2DCjBpC,u1bAmMA,EAAA,MAAA,EAAA,CAAA,miEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAO,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA9B,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FDlLa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,u1bAAA,EAAA,MAAA,EAAA,CAAA,miEAAA,CAAA,EAAA;;;MESpB,iCAAiC,CAAA;AAQxB,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;AAA4B,IAAA,EAAA;IAPzJ,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,IAAI;AACJ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAS,EAAc,EAAA;QAAnJ,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;IAAgB;IAE3K,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,CAAC,CAAC;IACA;IACA,WAAW,GAAA;;QAEP,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;;AAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAC5C,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClC,CAAC,EAAE,GAAG,CAAC;;AAER,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,QAAe,EAAA;QACzB,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC;gBAC/D;AACD,YAAA;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,YAAA;YAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC7C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3B,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACnB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBACxB,OAAO,EAAE,GAAG,CAAC,GAAG;gBAChB,CAAC,EAAE,GAAG,CAAC;AACR,aAAA,CAAC,CACH;YAED,MAAM,IAAI,GAAgB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;gBACrD,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,sBAAsB,EAAE,IAAI,CAAC,wBAAwB;gBACrD,wBAAwB,EAAE,IAAI,CAAC;AAChC,aAAA,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACnD,gBAAA,iBAAiB,EAAE,GAAG;AACtB,gBAAA,eAAe,EAAE,GAAG;AACpB,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AACvC,aAAA,CAAC,CACH;AAED,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;AAEF,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAEvB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3C,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC7B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3C,oBAAA,aAAa,EAAE;iBAChB;AACF,aAAA,CAAC,CACH;;AAGD,YAAA,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,SAA0B,KAAU;AACpE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjE,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,WAAW,EAAE,SAAS;AACtB,oBAAA,cAAc,EAAE;AACjB,iBAAA,CAAC,CAAC;AAEH,gBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,aAAa,EAAE;AAChB,iBAAA,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACxB,MAAM,CAAC,MAAM,EAAE;AAEf,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;oBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,wBAAA,SAAS,EAAE,CAAC;wBACZ,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,4BAAA,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtD,4BAAA,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,4BAAA,YAAY,EAAE;yBACf;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,YAAA,CAAC;AAED,YAAA,UAAU,CAAC,kCAAkC,EAAE,wBAAwB,CAAC;AACxE,YAAA,UAAU,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;AAE5D,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC;YACzD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,YAAY,GAAA;AACV,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,yBAAyB,CAAC;YAClE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;wGAlNW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,sECrB9C,y9dAwSA,EAAA,MAAA,EAAA,CAAA,onKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDnRa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAL7C,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,y9dAAA,EAAA,MAAA,EAAA,CAAA,onKAAA,CAAA,EAAA;;;MEN/B,sBAAsB,CAAA;AAOb,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;IAN7H,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACtC,IAAA,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAA;QAA5H,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;IAEnJ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,CAAC,CAAC;IACA;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,YAAY,GAAG,KAAK;IACpB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAO,EAAE;IACpB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,YAAY;gBAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAC7C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,WAAW;;;YAGxB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,WAAW,EAAE;IACpB;wGAjGW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,0DCXnC,2kLAoFU,EAAA,MAAA,EAAA,CAAA,4rCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDzEG,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,2kLAAA,EAAA,MAAA,EAAA,CAAA,4rCAAA,CAAA,EAAA;;;ME6EnB,sBAAsB,CAAA;wGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAnD/B,qBAAqB;YACrB,yBAAyB;YACzB,2BAA2B;YAC3B,yBAAyB;YACzB,0BAA0B;YAC1B,6BAA6B;YAE7B,eAAe;YACf,6BAA6B;YAC7B,mBAAmB;YACnB,qBAAqB;YACrB,uBAAuB;YACvB,2BAA2B;YAC3B,wBAAwB;YACxB,uBAAuB;YACvB,sBAAsB;YACtB,qBAAqB;YACrB,yBAAyB;YACzB,qBAAqB;YACrB,iCAAiC;YACjC,iCAAiC;YACjC,sBAAsB;YACtB,6BAA6B;YAC7B,oBAAoB,CAAA,EAAA,OAAA,EAAA;;;;;;;;;;YAapB,YAAY;YACZ,6BAA6B;YAC7B,oBAAoB;YACpB,WAAW;YACX,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB;YAChB,SAAS;YACT,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,qBAAqB,CAAA,EAAA,CAAA;yGAIZ,sBAAsB,EAAA,OAAA,EAAA;;;;;;;;;;YAf/B,YAAY;YACZ,6BAA6B;YAC7B,oBAAoB;YACpB,WAAW;YACX,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB;YAChB,SAAS;YACT,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,qBAAqB,CAAA,EAAA,CAAA;;4FAIZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArDlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,yBAAyB;wBACzB,2BAA2B;wBAC3B,yBAAyB;wBACzB,0BAA0B;wBAC1B,6BAA6B;wBAE7B,eAAe;wBACf,6BAA6B;wBAC7B,mBAAmB;wBACnB,qBAAqB;wBACrB,uBAAuB;wBACvB,2BAA2B;wBAC3B,wBAAwB;wBACxB,uBAAuB;wBACvB,sBAAsB;wBACtB,qBAAqB;wBACrB,yBAAyB;wBACzB,qBAAqB;wBACrB,iCAAiC;wBACjC,iCAAiC;wBACjC,sBAAsB;wBACtB,6BAA6B;wBAC7B,oBAAoB;AAErB,qBAAA;AACD,oBAAA,OAAO,EAAE;;;;;;;;;;wBAUP,YAAY;wBACZ,6BAA6B;wBAC7B,oBAAoB;wBACpB,WAAW;wBACX,mBAAmB;wBACnB,kBAAkB;wBAClB,gBAAgB;wBAChB,SAAS;wBACT,kBAAkB;wBAClB,kBAAkB;wBAClB,iBAAiB;wBACjB;AACH,qBAAA;AACC,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,gBAAgB;AACnD,iBAAA;;;ACnFD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"tango-app-ui-analyse-zone.mjs","sources":["../../../projects/tango-analyse-zone/src/lib/components/services/zone.service.ts","../../../projects/tango-analyse-zone/src/lib/components/services/zonev2.service.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/overallcards/overallcards.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-journey/zone-journey.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-journey/zone-journey.component.html","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.ts","../../../projects/tango-analyse-zone/src/lib/components/top-performing-zones/top-performing-zones.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-summary-table/zone-summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/concentrationheatmap/concentrationheatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-concentration/zone-concentration.component.html","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.ts","../../../projects/tango-analyse-zone/src/lib/components/segmentation/segmentation.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client459/interation-table-client459.component.html","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.ts","../../../projects/tango-analyse-zone/src/lib/components/customer-journey-chart/customer-journey-chart.component.html","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.ts","../../../projects/tango-analyse-zone/src/lib/components/tango-analyse-zone/tango-analyse-zone.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zones-cards/zones-cards.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/store-heatmap/store-heatmap.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/reactive-select/reactive-select.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/customer-journey/customer-journey.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/top-performing/top-performing.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/summary-table/summary-table.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/zone-v2.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone-routing.module.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory-view/image-directory-view.component.html","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.ts","../../../projects/tango-analyse-zone/src/lib/components/zone-v2/image-directory/image-directory.component.html","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.ts","../../../projects/tango-analyse-zone/src/lib/components/interation-table-client430/interation-table-client430.component.html","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.ts","../../../projects/tango-analyse-zone/src/lib/components/passerby-table/passerby-table.component.html","../../../projects/tango-analyse-zone/src/lib/tango-analyse-zone.module.ts","../../../projects/tango-analyse-zone/src/public-api.ts","../../../projects/tango-analyse-zone/src/tango-app-ui-analyse-zone.ts"],"sourcesContent":["import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError, ReplaySubject } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ZoneService implements OnDestroy {\r\n zoneAnalysisV1Url:any;\r\n trafficApiUrl:any;\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n zoneSegmentation = new BehaviorSubject<any>(null);\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisV1Url = env.zoneAnalysisV1Url;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + 'list'+ EXCEL_EXTENSION);\r\n }\r\n public saveAsExcelFile1(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n\r\n zoneConcentrationTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data)\r\n }\r\n // zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n // return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n // }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapDatas_v1`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneHeatmapAvailableDates_v1`, data)\r\n }\r\n getCardData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/cardsAgeAnalysis_v1`, data)\r\n }\r\n getTopPerformingZonesData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingZones_v1`, data)\r\n }\r\n getTopPerformingStoresTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data)\r\n }\r\n getTopPerformingStoresTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/topPerformingStores_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSummaryTable_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getSegmentationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1`, data)\r\n }\r\n getSegmentationDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentation_v1Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430`, data)\r\n }\r\n getInterationTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInterationTable459Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data)\r\n }\r\n getInterationTable459DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTable_459`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneInteractionTableExport_430( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneInteractionTableExport_430`, data, {responseType: 'arraybuffer'})\r\n }\r\n zoneConcentrationTableDataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneConcentrationTableExport`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n zonesegmentationTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTable_v1`, data)\r\n }\r\n getZoneSegmentationTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zoneSegmentationTableExport_v1`, data, {responseType: 'arraybuffer'})\r\n }\r\n getPasserByTable430Data( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_v1`, data)\r\n }\r\n getPasserByTable430DataExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/zonePasserByTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getInteractionTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_v1`, data)\r\n }\r\n getInteractionTable430Export( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/interactionTable_430Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getZonewiseCustomerFunnelData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_v1`, data)\r\n }\r\n getZonewiseCustomerFunnelExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/ZonewiseCustomerFunnel_Export`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n private zoneNameSubject = new BehaviorSubject<string | null>(null);\r\n\r\n setData(zoneName: string) {\r\n this.zoneNameSubject.next(zoneName);\r\n }\r\n\r\n getData(): string | null {\r\n return this.zoneNameSubject.value; // current value\r\n }\r\n\r\n getData$(): Observable<string | null> {\r\n return this.zoneNameSubject.asObservable(); // stream to subscribe\r\n }\r\n\r\n getHeaderZone(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getZoneAPI_v2`,data)\r\n }\r\n \r\n getNewZoneFF(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneFF_v2`, data)\r\n }\r\n\r\n getSelectedZoneFF(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getSelectedZoneFF_v2`, data)\r\n }\r\n getSelectedZoneFFExport(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getSelectedZoneFF_v2`, data, {responseType: 'arraybuffer'})\r\n }\r\n\r\n\r\n // pant project new services\r\n \r\n getNewHoTColdZoneApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewHoTColdZone_v1`, data)\r\n }\r\n getNewZoneShopperAnalysisApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneShopperAnalysis_v1`, data)\r\n }\r\n getNewZoneShopperAnalysisExportApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneShopperAnalysis_v1`, data,{responseType: 'arraybuffer'})\r\n\r\n }\r\n getNewZoneShopperBubbleChartApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewZoneShopperBubbleChart_v1`, data)\r\n }\r\n getNewCustomerTravelZoneeApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewCustomerTravelZone_v1`, data)\r\n }\r\n getNewAnalysisZoneApi(data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getNewAnalysisZone_v1`, data)\r\n }\r\n getOverallStoreCardsData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisV1Url}/getOverallStoreCards_v1`, data)\r\n }\r\n\r\n getBouncedCardList(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/bouncedCards_v3`, params);\r\n }\r\n\r\n getEngagersCardList(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/engagersCards_v3`, params);\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable, } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { BehaviorSubject, Observable, Subject, takeUntil, catchError, map,throwError } from 'rxjs';\r\nimport * as FileSaver from 'file-saver';\r\nimport * as XLSX from 'xlsx';\r\n\r\n \r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n \r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class Zonev2Service {\r\n zoneAnalysisUrl:any;\r\n trafficApiUrl: any;\r\n private footfallSubject = new BehaviorSubject<number | null>(null); // Initialize with null\r\n footfall$ = this.footfallSubject.asObservable();\r\n private reloadDataSubject = new BehaviorSubject<boolean>(false);\r\n reloadData$ = this.reloadDataSubject.asObservable();\r\n private zonesSubject = new BehaviorSubject<any[]>([]);\r\n zones$ = this.zonesSubject.asObservable();\r\n constructor(private http: HttpClient, private gs: GlobalStateService) {\r\n this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {\r\n if (env) {\r\n this.zoneAnalysisUrl = env.zoneAnalysisUrl;\r\n this.trafficApiUrl = env.trafficApiUrl;\r\n\r\n }\r\n });\r\n }\r\n triggerReload() {\r\n this.reloadDataSubject.next(true);\r\n }\r\n updateFootfall(count: number) {\r\n this.footfallSubject.next(count);\r\n }\r\n public exportAsExcelFile(json: any[], excelFileName: string): void {\r\n const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);\r\n const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAsExcelFile(excelBuffer, excelFileName);\r\n }\r\n \r\n public saveAsExcelFile(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n \r\n public saveAsTemplate(buffer: any, fileName: string): void {\r\n const data: Blob = new Blob([buffer], {\r\n type: EXCEL_TYPE\r\n });\r\n FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);\r\n }\r\n private readonly destroy$ = new Subject();\r\n\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\n // V2 API\r\n getZoneCardsData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zonecards_v2`, data)\r\n }\r\n getTopPerformingZones( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingZones_v2`, data)\r\n }\r\n getTopPerformingStores( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/topPerformingStores_v2`, data)\r\n }\r\n getSummaryTableData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data)\r\n }\r\n getSummaryTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneSummaryTable_v2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getAvailableZoneNames( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/availableZoneNames_v2`, data)\r\n }\r\n getOverallStoreHeatmapDates( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationDates_v2`, data)\r\n }\r\n getOverallStoreConcentrationData( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/overallStoreConcentrationHeatmap_v2`, data)\r\n }\r\n getAnalaysisSummary( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/zoneConcentrationSummary_v2`, data)\r\n }\r\n getTrajectoryAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysis_v2`, data)\r\n }\r\n getFootfallDirectoryFolders(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectoryFolders`,\r\n params\r\n );\r\n }\r\n getFootfallDirectory(params: any): Observable<any> {\r\n return this.http.post<any>(\r\n `${this.trafficApiUrl}/footfallDirectory`,\r\n params\r\n );\r\n }\r\n getStoresActive(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.zoneAnalysisUrl}/getMySubscription`, params);\r\n }\r\n getTrajectoryRateAnalysis( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/trajectoryAnalysisRate_V2`, data)\r\n }\r\n getCustomerJourney( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourney_V2`, data)\r\n }\r\n getCustomerJourneyTable( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data)\r\n }\r\n getCustomerJourneyTableExport( data:any):Observable<any>{\r\n return this.http.post(`${this.zoneAnalysisUrl}/customerJourneyTable_V2`, data, {responseType: 'arraybuffer'})\r\n }\r\n getCheckTodayReportStatus(params: any): Observable<any> {\r\n return this.http.post<any>(`${this.trafficApiUrl}/checkTodayReportStatus`, params);\r\n }\r\n\r\n setZones(zones: any[]) {\r\n this.zonesSubject.next(zones);\r\n}\r\n\r\n private handleError(error: HttpErrorResponse): Observable<never> {\r\n return throwError(\r\n () => new Error(\"Something bad happened; please try again later\")\r\n );\r\n }\r\n\r\n}\r\n\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n} from \"@angular/core\";\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { skip, startWith, takeUntil } from \"rxjs/operators\";\r\nimport { Subject, debounceTime,interval } from \"rxjs\";\r\nimport { ZoneService } from \"../services/zone.service\";\r\nimport { GlobalStateService } from \"tango-app-ui-global\";\r\nimport { ToastService } from \"tango-app-ui-shared\";\r\nimport { Zonev2Service } from \"../services/zonev2.service\";\r\n\r\n@Component({\r\n selector: \"lib-overallcards\",\r\n templateUrl: \"./overallcards.component.html\",\r\n styleUrl: \"./overallcards.component.scss\",\r\n})\r\nexport class OverallcardsComponent implements OnDestroy, OnInit {\r\n cardData: any = {};\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n private genderroot!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n searchInput: any = \"\";\r\n sortColumName: string = \"\";\r\n sortBy: any = \"\";\r\n sortDirection: any = \"\";\r\n getZoneSegmentionData: any = [];\r\n segmentationDataLoading = false;\r\n segmentationNoData = false;\r\n zoneName: any = \"Overall Store\";\r\n clientData: any;\r\n storeIdarray: any;\r\n tableobj: any;\r\n overallStoreCards: any = [];\r\n cardDataTraffic: any = [];\r\n cardNoTrafficData = false;\r\n cardDataTrafficLoading = true;\r\n\r\n constructor(\r\n private zone: NgZone,\r\n private ZoneService: ZoneService,\r\n private zoneV2Service: Zonev2Service,\r\n private cd: ChangeDetectorRef,\r\n public gs: GlobalStateService,\r\n private toast: ToastService,\r\n ) {}\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId);\r\n\r\n // --- ZoneService.getData$() subscription ---\r\n this.ZoneService.getData$()\r\n .pipe(\r\n startWith(null), // 👈 fallback seed emission\r\n skip(1), // skip service's initial seed (keep fallback)\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((res: any) => {\r\n if (res) {\r\n this.zoneName = res;\r\n \r\n this.getCardData();\r\n \r\n } else {\r\n // fallback if no emission\r\n this.getCardData();\r\n this.getAvailableZones();\r\n this.getNewHotClodZone();\r\n this.getCustomPath();\r\n this.dateValue(this.dateType);\r\n }\r\n });\r\n\r\n // --- Client data from localStorage ---\r\n setTimeout(() => {\r\n const clientData: any = JSON.parse(\r\n localStorage.getItem(\"client-details\") || \"{}\"\r\n );\r\n this.clientData = clientData;\r\n }, 100);\r\n\r\n this.cd.detectChanges();\r\n if (this.headerData?.client === \"459\") {\r\n this.getCardDataTraffic();\r\n }\r\n // --- Zone segmentation subscription ---\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(\r\n startWith(null), // 👈 fallback\r\n skip(1), // skip BehaviorSubject initial emission\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((zoneData: any) => {\r\n if (zoneData) {\r\n this.zoneName = zoneData;\r\n this.getZoneSegmentation();\r\n this.getCardData();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getOverallStoreCards() {\r\n this.tableobj = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.storeIdarray,\r\n clientId: this.headerData.client,\r\n dateType: this.dateType,\r\n };\r\n this.ZoneService.getOverallStoreCardsData(this.tableobj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res.code === 200) {\r\n this.overallStoreCards = res?.data?.card;\r\n console.log(\"Overall Store Cards Data:\", this.overallStoreCards);\r\n } else {\r\n this.overallStoreCards = [];\r\n }\r\n },\r\n error: (e) => {\r\n this.overallStoreCards = [];\r\n },\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.autoSlideStop$.next();\r\n this.autoSlideStop$.complete();\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) return;\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n\r\n this.genderroot = am5.Root.new(\"genderchartdiv\");\r\n\r\n\r\n const wrapper = this.genderroot.container.children.push(\r\n am5.Container.new(this.genderroot, {\r\n width: am5.percent(100),\r\n height: am5.percent(100),\r\n layout: this.genderroot.horizontalLayout\r\n })\r\n );\r\n\r\n\r\n const chart = wrapper.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60),\r\n width: am5.percent(45),\r\n height: am5.percent(100)\r\n })\r\n );\r\n\r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: \"value\",\r\n categoryField: \"category\",\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n\r\n\r\n series.labels.template.setAll({\r\n visible: false\r\n });\r\n\r\n \r\n series.ticks.template.setAll({\r\n visible: false\r\n });\r\n\r\n\r\n series.data.setAll(this.genderAnalysis);\r\n\r\n const legend = wrapper.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n width: am5.percent(50),\r\n paddingTop: 20,\r\n layout: this.genderroot.verticalLayout\r\n })\r\n );\r\n\r\n legend.itemContainers.template.setAll({\r\n width: am5.percent(100)\r\n });\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n width: am5.percent(100)\r\n });\r\n\r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n textAlign: \"right\",\r\n width: am5.percent(100)\r\n });\r\n\r\n legend.data.setAll(series.dataItems);\r\n series.appear(1000, 100);\r\n\r\n }, 100);\r\n}\r\n genderchart1() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv1\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv1');\r\n \r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n \r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n \r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n \r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis); \r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(95),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n \r\n });\r\n \r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n legend.itemContainers.template.events.on(\"click\", (ev:any) => { ev.stopPropagation(); });\r\n legend.data.setAll(series.dataItems);\r\n \r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n}\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName ? this.zoneName : \"Overall Store\",\r\n };\r\n\r\n this.ZoneService.getCardData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.card;\r\n this.genderAnalysis = response.data.genderAnalysis;\r\n this.genderAnalysis.forEach((item: any) => {\r\n item.value = Math.round(item.value);\r\n });\r\n this.ageAnalysis = response.data.ageAnalysis;\r\n setTimeout(() => {\r\n if(this.headerData?.client ==='478')\r\n this.genderchart(); // Call this method after data is set\r\n else \r\n this.genderchart1();\r\n }, 200);\r\n\r\n this.cardDataLoading = false;\r\n this.cardNoData = false;\r\n } else {\r\n this.cardData = [];\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n (error) => {\r\n this.cardData = [];\r\n this.cd.detectChanges();\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneSegmentation();\r\n }\r\n\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.getZoneSegmentation();\r\n }\r\n\r\n getZoneSegmentation() {\r\n this.segmentationDataLoading = true;\r\n this.segmentationNoData = false;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId: this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n // };\r\n this.ZoneService.zonesegmentationTable(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res.code === 200) {\r\n this.getZoneSegmentionData = res?.data?.zoneConcentrationData;\r\n this.segmentationDataLoading = false;\r\n this.segmentationNoData = false;\r\n } else {\r\n this.segmentationDataLoading = false;\r\n this.segmentationNoData = true;\r\n }\r\n },\r\n error: (e) => {\r\n this.segmentationDataLoading = false;\r\n this.segmentationNoData = true;\r\n },\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n zoneName: this.zoneName,\r\n clientId: this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: true,\r\n };\r\n this.ZoneService.getZoneSegmentationTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, \"Zone Segmentation \");\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast(\"Something went Wrong..\");\r\n },\r\n });\r\n }\r\n\r\n getCardDataTraffic(): void {\r\n this.cardDataTrafficLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n\r\n this.ZoneService.getSegmentationData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.cardDataTrafficLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if (response?.data?.segmentationAnalysis?.length) {\r\n this.cardDataTraffic = response.data.segmentationAnalysis;\r\n // this.cardData = response.data.segmentationAnalysis.map((item: any) => ({\r\n // name: item.category,\r\n // value: item.value,\r\n // concentrationRate: item.concentrationRate\r\n // }));\r\n this.cardNoTrafficData = this.cardDataTraffic.length === 0;\r\n } else {\r\n this.cardDataTraffic = [];\r\n this.cardNoTrafficData = true;\r\n }\r\n } else {\r\n this.cardDataTraffic = [];\r\n this.cardNoTrafficData = true;\r\n }\r\n // this.dataEmitter.emit(this.cardData?.length);\r\n },\r\n (error) => {\r\n this.cardDataTraffic = [];\r\n this.cardNoData = true;\r\n this.cd.detectChanges();\r\n }\r\n );\r\n }\r\n onExportTraffic() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getSegmentationDataExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, \"TrafficSegmentation\");\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast(\"Something went Wrong..\");\r\n },\r\n });\r\n }\r\n\r\n getHotColdZoneData: any;\r\n getNewHotClodZone() {\r\n let obj = {\r\n clietId: this.headerData.client,\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n };\r\n this.ZoneService.getNewHoTColdZoneApi(obj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res?.code === 200) {\r\n this.getHotColdZoneData = res?.data;\r\n } else {\r\n this.getHotColdZoneData = [];\r\n }\r\n },\r\n error: (e) => {\r\n this.getHotColdZoneData = [];\r\n },\r\n });\r\n }\r\n getEngagersCardData: any;\r\n getBouncedCardData: any;\r\n getBouncedCard() {\r\n this.tableobj.dateType = this.dateType;\r\n this.ZoneService.getBouncedCardList(this.tableobj)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.getBouncedCardData = res?.data;\r\n } else {\r\n this.getBouncedCardData = [];\r\n }\r\n },\r\n error: (err: any) => {\r\n this.getBouncedCardData = [];\r\n this.cd.detectChanges();\r\n },\r\n });\r\n }\r\n engagersNodata = false;\r\n getEngagersCard() {\r\n this.tableobj.dateType = this.dateType;\r\n this.ZoneService.getEngagersCardList(this.tableobj)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.getEngagersCardData = res?.data;\r\n } else {\r\n this.getEngagersCardData = [];\r\n }\r\n },\r\n error: (err: any) => {\r\n this.getEngagersCardData = [];\r\n this.cd.detectChanges();\r\n },\r\n });\r\n }\r\n dateType: any = \"daily\";\r\n dateValue(type: any) {\r\n this.dateType = type;\r\n this.getOverallStoreCards();\r\n this.getBouncedCard();\r\n this.getEngagersCard();\r\n }\r\n customerTravelPath: any = [];\r\n\r\npaths: any[] = [];\r\nactivePathIndex = 0;\r\n\r\npathLoading = true;\r\npathNoData = false;\r\n\r\nprivate autoSlideStop$ = new Subject<void>();\r\n\r\n/* ---------------- API ---------------- */\r\n\r\ngetCustomPath() {\r\n this.pathLoading = true;\r\n this.pathNoData = false;\r\n this.autoSlideStop$.next();\r\n\r\n const obj = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((s: any) => s.checked)\r\n .map((s: any) => s.storeId),\r\n clietId: this.headerData.client,\r\n nPaths: 5\r\n };\r\n\r\n this.ZoneService.getNewCustomerTravelZoneeApi(obj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.pathLoading = false;\r\n\r\n if (!res?.data?.customer_travel_path?.length) {\r\n this.paths = [];\r\n this.pathNoData = true;\r\n return;\r\n }\r\n\r\n const travelPathObj = res.data.customer_travel_path[0];\r\n\r\n this.paths = Object.keys(travelPathObj).map(key => ({\r\n label: key,\r\n percent: travelPathObj[key].percent,\r\n path: travelPathObj[key].path\r\n }));\r\n\r\n this.activePathIndex = 0;\r\n this.pathNoData = false;\r\n\r\n // 🔥 START AUTO CAROUSEL (ONLY HERE)\r\n this.startAutoCarousel();\r\n },\r\n\r\n error: () => {\r\n this.paths = [];\r\n this.pathNoData = true;\r\n this.pathLoading = false;\r\n }\r\n });\r\n}\r\n\r\n\r\nnext() {\r\n this.activePathIndex =\r\n (this.activePathIndex + 1) % this.paths.length;\r\n}\r\n\r\nprev() {\r\n this.activePathIndex =\r\n (this.activePathIndex - 1 + this.paths.length) % this.paths.length;\r\n}\r\n\r\ngoTo(index: number) {\r\n this.activePathIndex = index;\r\n}\r\n\r\n\r\nstartAutoCarousel() {\r\n if (this.paths.length <= 1) return;\r\n\r\n interval(3000) // ⏱ 3 seconds\r\n .pipe(takeUntil(this.autoSlideStop$), takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.activePathIndex =\r\n (this.activePathIndex + 1) % this.paths.length;\r\n this.cd.detectChanges();\r\n });\r\n}\r\n\r\n\r\n\r\navailableZones:any = [];\r\nselectedZone:any = '';\r\n\r\n getAvailableZones(){\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, \r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.zoneV2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res: any) => {\r\n if (res && res?.code === 200) {\r\n this.availableZones = (res.data.availableZoneData || []).filter(\r\n (zone: any) => zone.zoneName?.toLowerCase() !== 'overall store'\r\n);\r\n // this.zoneV2Service.setZones(this.availableZones);\r\n this.cd.detectChanges();\r\nif (this.availableZones.length) {\r\n this.selectedZone = this.availableZones[0].zoneName;\r\n this.getAnalyseZone();\r\n}\r\n } else {\r\n this.availableZones = [];\r\n }\r\n },\r\n error: (err: any) => {\r\n this.availableZones = [];\r\n }\r\n }\r\n );\r\n }\r\nonZoneChange(event:any){\r\n this.selectedZone = event.target.value;\r\n this.getAnalyseZone();\r\n}\r\ngetAnalyseZoneData: any;\r\n getAnalyseZone() {\r\n let obj = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zone:this.selectedZone\r\n }\r\n this.ZoneService.getNewAnalysisZoneApi(obj)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n if (res && res?.code === 200) {\r\n this.getAnalyseZoneData = res?.data?.analysisData;\r\n console.log(\"Analyse Zone Data:\", this.getAnalyseZoneData);\r\n } else {\r\n this.getAnalyseZoneData = [];\r\n }\r\n },\r\n error: (e) => {\r\n this.getAnalyseZoneData = [];\r\n },\r\n });\r\n\r\n\r\n }\r\n}\r\n","<div class=\"row\">\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"col-lg-4 h-auto\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ overallStoreCards?.overallFootfall?.count !== null &&\r\n overallStoreCards?.overallFootfall?.count !== undefined\r\n ? overallStoreCards?.overallFootfall?.count\r\n : '--'\r\n }}</div>\r\n\r\n <div class=\"subtext\">Overall Store Footfall</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"overallStoreCards?.overallFootfall?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!overallStoreCards?.overallFootfall?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{ overallStoreCards?.overallFootfall?.PreviousData}}%</span> vs\r\n previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"mt-1 cursor-pointer fs-5 mx-1\"\r\n [ngClass]=\"dateType ==='daily' ? 'text-primary' :'text-normal'\" (click)=\"dateValue('daily')\">1D\r\n </div>\r\n <div class=\"mt-1 cursor-pointer fs-5 mx-1\"\r\n [ngClass]=\"dateType ==='weekly' ? 'text-primary' :'text-normal'\" (click)=\"dateValue('weekly')\">1W\r\n </div>\r\n <div class=\"mt-1 cursor-pointer fs-5 mx-1\"\r\n [ngClass]=\"dateType ==='monthly' ? 'text-primary' :'text-normal'\" (click)=\"dateValue('monthly')\">\r\n 1M</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ getBouncedCardData?.card?.bounced?.rate !== null &&\r\n getBouncedCardData?.card?.bounced?.rate !== undefined\r\n ? getBouncedCardData?.card?.bounced?.rate.toLocaleString('en-US', {\r\n minimumFractionDigits: 0\r\n })\r\n : '--'\r\n }}\r\n %</div>\r\n\r\n <div class=\"subtext\">Bounced Rate</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"getBouncedCardData?.data?.bounced?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!getBouncedCardData?.data?.bounced?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{getBouncedCardData?.data?.bounced?.PreviousData}}%</span>\r\n vs previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ getEngagersCardData?.card?.engagers?.rate !== null &&\r\n getEngagersCardData?.card?.engagers?.rate !== undefined\r\n ? getEngagersCardData?.card?.engagers?.rate.toLocaleString('en-US', {\r\n minimumFractionDigits: 0\r\n })\r\n : '--'\r\n }}\r\n %</div>\r\n\r\n <div class=\"subtext\">Engagers Rate</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"getEngagersCardData?.data?.engagers?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!getEngagersCardData?.data?.engagers?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\">\r\n <span class=\"percent-value\">{{getEngagersCardData?.data?.engagers?.PreviousData}}%</span> vs previous\r\n {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ overallStoreCards?.avgDwellTime?.count !== null && overallStoreCards?.avgDwellTime?.count !== undefined ? overallStoreCards?.avgDwellTime?.count : '--' }} Mins</div>\r\n\r\n <div class=\"subtext\">Average Dwell Time</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"overallStoreCards?.avgDwellTime?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!overallStoreCards?.avgDwellTime?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{ overallStoreCards?.avgDwellTime?.PreviousData}}%</span>\r\n vs previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card card-border\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{ overallStoreCards?.impressionRate?.rate !== null && overallStoreCards?.impressionRate?.rate !== undefined ? overallStoreCards?.impressionRate?.rate.toLocaleString('en-US', {\r\n minimumFractionDigits: 0\r\n }) : '--' }}%</div>\r\n\r\n <div class=\"subtext\">Impression rate</div>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title my-0 align-items-start flex-column\">\r\n <span><svg *ngIf=\"overallStoreCards?.impressionRate?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\" stroke=\"#039855\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><svg *ngIf=\"!overallStoreCards?.impressionRate?.PreviousVariation\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146444)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\" stroke=\"#D92D20\"\r\n stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146444\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"week-font ms-2\"><span class=\"percent-value\">{{ overallStoreCards?.impressionRate?.PreviousData}}%</span>\r\n vs previous {{dateType ==='weekly' ? 'week' : dateType === 'monthly' ? 'month' : 'daily'}}</span> </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <!-- <div class=\"card\">\r\n <div class=\"card-header py-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"subtext\">Overall Store Footfall <span\r\n ngbTooltip=\"Unique Store Footfall Walk-ins\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"headcount\">{{ cardData.oveallZoneFootfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.bounced?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Bounced Footfall Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent less than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value :clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.engagers?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Engagers Rate <span\r\n [ngbTooltip]=\"'Percentage of walk-ins who spent more than ' + (clientData?.bouncedLimit?.value ? clientData?.bouncedLimit?.value : clientData?.bouncedLimitValue || '') + ' mins'\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div>\r\n <div class=\"row my-2 justify-content-evenly\">\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} Mins</div>\r\n <div class=\"subtext mt-3\">Average Dwell Time <span\r\n ngbTooltip=\"Avg time spent by the engagers inside the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-6 ratecards\">\r\n <div class=\"headcount\">{{ cardData.concentration?.rate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div>\r\n <div class=\"subtext mt-3\">Concentration Rate <span\r\n ngbTooltip=\"The proportion of walk-ins remaining in key areas\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n </div> -->\r\n </div>\r\n <div [ngClass]=\"headerData?.client === '478' ? 'col-3':'col-4'\" class=\"h-300px\">\r\n \r\n <section *ngIf=\"headerData?.client === '478'\">\r\n\r\n <div *ngIf=\"storeIdarray?.length === 1\" class=\"card\">\r\n \r\n \r\n <div class=\"headtext px-3 pt-3\">Demographics</div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Demographics Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Age Range</th>\r\n <th>Percentage of FF</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.category }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\"\r\n [value]=\"item.value\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--'}}%\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray?.length > 1\" class=\"card px-3 py-2\">\r\n <div class=\"analysis-header d-flex align-items-center gap-2\">\r\n <select class=\"form-select analysis-select\" [(ngModel)]=\"selectedZone\" (change)=\"onZoneChange($event)\">\r\n <option *ngFor=\"let zone of availableZones\" [value]=\"zone.zoneName\">\r\n {{ zone.zoneName | titlecase }}\r\n </option>\r\n </select>\r\n <h4 class=\"analysis-title\">Analysis</h4>\r\n </div>\r\n <div class=\"ellipse1 border-0 p-3 py-5\">\r\n <div class=\"headcount\">{{getAnalyseZoneData?.zoneTotal ?? '--'}} <span class=\"text-normal fs-5\">({{getAnalyseZoneData?.zonePercentage}}%)</span></div>\r\n \r\n <div class=\"subtext\">Trial Zone Footfall</div>\r\n </div>\r\n <div class=\"gender-cards py-3 mt-1\">\r\n <!-- Male -->\r\n <div class=\"gender-card\">\r\n <h3>{{getAnalyseZoneData?.male ?? '--'}} <span>({{getAnalyseZoneData?.malePercentage ?? '--'}}%)</span></h3>\r\n <p>Male</p>\r\n <span class=\"age-pill me-2\">{{getAnalyseZoneData?.age | titlecase}} <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"8\" viewBox=\"0 0 10 8\" fill=\"none\">\r\n <path d=\"M1.38203 3.4875L1.06953 2.8125L0.394531 2.5L1.06953 2.1875L1.38203 1.5125L1.69453 2.1875L2.36953 2.5L1.69453 2.8125L1.38203 3.4875ZM6.88203 3L6.40703 1.975L5.38203 1.5L6.40703 1.025L6.88203 0L7.35703 1.025L8.38203 1.5L7.35703 1.975L6.88203 3Z\" fill=\"#009BF3\"/>\r\n <path d=\"M0.507812 7.125L2.3867 5.15377C2.76593 4.7559 3.39518 4.73868 3.7956 5.11522L4.51482 5.79154C4.88735 6.14184 5.46413 6.15466 5.85186 5.82126L9.13281 3\" stroke=\"#009BF3\" stroke-width=\"1.4\"/>\r\n <circle cx=\"2.94531\" cy=\"4.3125\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"5.19531\" cy=\"6.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"0.695312\" cy=\"6.9375\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"8.94531\" cy=\"3.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n </svg></span>\r\n <span class=\"age-value\">{{getAnalyseZoneData?.agePercentage ?? '--'}}%</span>\r\n </div>\r\n \r\n <!-- Female -->\r\n <div class=\"gender-card\">\r\n <h3>{{getAnalyseZoneData?.female ?? '--'}} <span>({{getAnalyseZoneData?.femalePercentage ?? '--'}}%)</span></h3>\r\n <p>Female</p>\r\n <span class=\"age-pill me-2\">{{getAnalyseZoneData?.age | titlecase}} <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"8\" viewBox=\"0 0 10 8\" fill=\"none\">\r\n <path d=\"M1.38203 3.4875L1.06953 2.8125L0.394531 2.5L1.06953 2.1875L1.38203 1.5125L1.69453 2.1875L2.36953 2.5L1.69453 2.8125L1.38203 3.4875ZM6.88203 3L6.40703 1.975L5.38203 1.5L6.40703 1.025L6.88203 0L7.35703 1.025L8.38203 1.5L7.35703 1.975L6.88203 3Z\" fill=\"#009BF3\"/>\r\n <path d=\"M0.507812 7.125L2.3867 5.15377C2.76593 4.7559 3.39518 4.73868 3.7956 5.11522L4.51482 5.79154C4.88735 6.14184 5.46413 6.15466 5.85186 5.82126L9.13281 3\" stroke=\"#009BF3\" stroke-width=\"1.4\"/>\r\n <circle cx=\"2.94531\" cy=\"4.3125\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"5.19531\" cy=\"6.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"0.695312\" cy=\"6.9375\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n <circle cx=\"8.94531\" cy=\"3.1875\" r=\"0.5625\" fill=\"#33B5FF\"/>\r\n </svg></span>\r\n <span class=\"age-value\">{{getAnalyseZoneData?.agePercentage ?? '--'}}%</span>\r\n </div>\r\n </div>\r\n <div class=\"card-border h-100 py-2 mb-3 mt-1\">\r\n <div class=\"ellipse1 border-0 mb-3 p-3 py-5\">\r\n <div class=\"headcount\">{{getAnalyseZoneData?.conversionCount ?? '--'}} <span class=\"text-normal fs-5\">({{getAnalyseZoneData?.conversionCountPercentage ?? '--'}}%)</span></div>\r\n \r\n <div class=\"subtext\">Trial <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M3.33203 7.99967H12.6654M12.6654 7.99967L7.9987 3.33301M12.6654 7.99967L7.9987 12.6663\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> Footfall</div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n <section *ngIf=\"headerData?.client !== '478'\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Gender Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n \r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\"> \r\n <div class=\"col-lg-12 my-18\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv1\"></div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div [ngClass]=\"headerData?.client === '478' ? 'col-5':'col-4'\" class=\"h-300px\">\r\n <div *ngIf=\"headerData?.client !== '478'\">\r\n <div class=\"card\">\r\n <div class=\"headtext p-3\">Age Analysis</div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll2\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Age Range</th>\r\n <th>Percentage of FF</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.category }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\"\r\n [value]=\"item.value\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--'}}%\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n \r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\"> \r\n <div class=\"col-lg-12 my-18\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <section *ngIf=\"headerData?.client === '478'\">\r\n\r\n <div class=\"card min-h-400px max-h-auto px-3\">\r\n <div class=\"my-3\">\r\n <h3 class=\"title pt-3\">Most Travelled Path</h3>\r\n <div *ngIf=\"!pathLoading && !pathNoData\" class=\"path-wrapper border border-1\">\r\n <div class=\"ellipse1 border-0 p-3\">\r\n <!-- SLIDE -->\r\n <div class=\"path-slide\">\r\n <span class=\"badge\">\r\n {{ paths[activePathIndex]?.label }}\r\n </span>\r\n \r\n <span class=\"percent\">\r\n {{ paths[activePathIndex]?.percent }}% of Customers Travel Path\r\n </span>\r\n \r\n <div class=\"path-text\">\r\n <ng-container *ngFor=\"let step of paths[activePathIndex]?.path; let last = last\">\r\n <span class=\"step\">{{ step | titlecase}}</span>\r\n <span class=\"arrowpath\" *ngIf=\"!last\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33203 7.99967H12.6654M12.6654 7.99967L7.9987 3.33301M12.6654 7.99967L7.9987 12.6663\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n \r\n \r\n <!-- DOTS -->\r\n <div class=\"dots col-6 mt-7\">\r\n <span *ngFor=\"let _ of paths; let i = index\" [class.active]=\"activePathIndex === i\"\r\n (click)=\"goTo(i)\">\r\n </span>\r\n </div>\r\n \r\n <!-- ARROWS -->\r\n <div class=\"mt-1 col-6 text-end\">\r\n <span class=\"cursor-pointer\" (click)=\"prev()\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"42\" height=\"42\" viewBox=\"0 0 42 42\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15064_157019)\">\r\n <path\r\n d=\"M26.832 21.0003H15.1654M15.1654 21.0003L20.9987 15.167M15.1654 21.0003L20.9987 26.8337\"\r\n stroke=\"#344054\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15064_157019\" x=\"-2\" y=\"-1\" width=\"46\" height=\"46\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15064_157019\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_15064_157019\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n <span class=\"cursor-pointer\" (click)=\"next()\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"42\" height=\"42\" viewBox=\"0 0 42 42\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15064_157023)\">\r\n <path\r\n d=\"M15.168 21.0003H26.8346M26.8346 21.0003L21.0013 15.167M26.8346 21.0003L21.0013 26.8337\"\r\n stroke=\"#344054\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15064_157023\" x=\"-2\" y=\"-1\" width=\"46\" height=\"46\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15064_157023\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_15064_157023\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n <ng-container *ngIf=\"pathLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"pathNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center p-5 flex-column\">\r\n <img class=\"img-src2\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Travelled Paths</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"my-3\">\r\n <div class=\"row\">\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card-border h-100\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{getHotColdZoneData?.hotZone | titlecase}}</div>\r\n \r\n <div class=\"subtext\">Hot Zone <span class=\"mx-2\"><svg placement=\"top\"\r\n [ngbTooltip]=\"hotZoneTooltip\"\r\n container=\"body\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M7.9987 10.6663V7.99967M7.9987 5.33301H8.00536M14.6654 7.99967C14.6654 11.6816 11.6806 14.6663 7.9987 14.6663C4.3168 14.6663 1.33203 11.6816 1.33203 7.99967C1.33203 4.31778 4.3168 1.33301 7.9987 1.33301C11.6806 1.33301 14.6654 4.31778 14.6654 7.99967Z\"\r\n stroke=\"#344054\" stroke-width=\"1.3\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <ng-template #hotZoneTooltip>\r\n <div class=\"tooltip-title text-start ms-3\">Hot Zone</div>\r\n <div class=\"tooltip-desc\">\r\n Zone with the highest dwell time compared to all other zones\r\n </div>\r\n </ng-template>\r\n </div>\r\n \r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"text-font ms-2\">{{getHotColdZoneData?.hotZoneDwell ?? '--'}} mins\r\n higher </span><span class=\"week-font ms-2\">vs Other Zones</span> </span>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6 px-2\">\r\n <div class=\"card-border h-100\">\r\n <div class=\"ellipse1 px-5 py-3\">\r\n <div class=\"headcount\">{{getHotColdZoneData?.coldZone | titlecase}}</div>\r\n \r\n <div class=\"subtext\">Cold Zone <span class=\"mx-2\"><svg placement=\"top\" \r\n [ngbTooltip]=\"coldZoneTooltip\"\r\n container=\"body\" \r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M7.9987 10.6663V7.99967M7.9987 5.33301H8.00536M14.6654 7.99967C14.6654 11.6816 11.6806 14.6663 7.9987 14.6663C4.3168 14.6663 1.33203 11.6816 1.33203 7.99967C1.33203 4.31778 4.3168 1.33301 7.9987 1.33301C11.6806 1.33301 14.6654 4.31778 14.6654 7.99967Z\"\r\n stroke=\"#344054\" stroke-width=\"1.3\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <ng-template #coldZoneTooltip>\r\n <div class=\"tooltip-title text-start ms-3\">Cold Zone</div>\r\n <div class=\"tooltip-desc\">\r\n Zone with the lowest dwell time compared to all other zones\r\n </div>\r\n </ng-template>\r\n </div>\r\n <div class=\"card-header min-h-30px border-0 px-3\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15147_146424)\">\r\n <path d=\"M11.5 3L6.75 7.75L4.25 5.25L0.5 9M11.5 3H8.5M11.5 3V6\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15147_146424\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"text-font ms-2\">{{getHotColdZoneData?.coldZoneDwell ?? '--'}} Sec\r\n higher </span><span class=\"week-font ms-2\">vs Other Zones</span> </span>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div *ngIf=\"getZoneSegmentionData?.length > 0\" class=\"col-4 h-auto\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 ps-3 pe-0 min-h-50px\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <div class=\"headtext\">Zone Segmentation</div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button *ngIf=\"!segmentationNoData && !segmentationDataLoading\" type=\"button\"\r\n (click)=\"onExport()\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader me-4\"\r\n [disabled]=\"!getZoneSegmentionData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"headtext p-3\">Zone Segmentation</div> -->\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-1 table-responsive agerangescroll1\">\r\n <table *ngIf=\"!segmentationDataLoading && !segmentationNoData\"\r\n class=\"table bottom-border text-nowrap\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg.Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('Trolley')\">\r\n Trolley\r\n <svg [ngClass]=\"sortColumName === 'Trolley' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Trolley' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('Basket')\">\r\n Basket\r\n <svg [ngClass]=\"sortColumName === 'Basket' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Basket' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"h-45px\">\r\n <tr *ngFor=\"let item of getZoneSegmentionData\">\r\n <td>\r\n <div class=\"table-title-primary\">{{ item.zoneName }}</div>\r\n </td>\r\n <td>\r\n {{ item.footfallCount }}\r\n </td>\r\n <td>\r\n {{ item.avgDwellTime }} mins\r\n </td>\r\n <td>\r\n {{ item.Trolley }}%\r\n </td>\r\n <td>\r\n {{ item.Basket }}%\r\n </td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"segmentationDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"segmentationNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Segmentation</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"col-md-4 mt-2\"\r\n *ngIf=\"!cardNoTrafficData && headerData?.client === '459' && (storeIdarray[0] ==='459-4' || storeIdarray[0] ==='459-2')\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Traffic Segmentation <span class=\"ms-1\"\r\n ngbTooltip=\"Entrance level traffic segmentation\" placement=\"right\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExportTraffic()\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader me-4\"\r\n [disabled]=\"!cardDataTraffic?.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body mb-18 p-0\">\r\n <div class=\"mx-3 h-188px\">\r\n <table *ngIf=\"!cardDataTrafficLoading && !cardNoTrafficData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Entrance</th>\r\n <th>Entrance wise footfall</th>\r\n <th *ngIf=\"headerData?.client === '463'\">Concentration Rate</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardDataTraffic\">\r\n <td>{{ item.category }}</td>\r\n <td>{{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </td>\r\n <td *ngIf=\"headerData?.client === '463'\">{{\r\n item.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) ||\r\n '--' }} %</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataTrafficLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoTrafficData && !cardDataTrafficLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </div>","import { Component,ChangeDetectorRef, OnInit ,Input, OnChanges,OnDestroy,SimpleChanges, AfterViewInit, ViewChild, ElementRef, HostListener} from '@angular/core';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5flow from '@amcharts/amcharts5/flow';\r\nimport am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Router } from \"@angular/router\";\r\nimport { Zonev2Service } from '../services/zonev2.service';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n@Component({\r\n selector: 'lib-zone-journey',\r\n templateUrl: './zone-journey.component.html',\r\n styleUrl: './zone-journey.component.scss'\r\n})\r\nexport class ZoneJourneyComponent implements OnDestroy,OnChanges {\r\n private root!: am5.Root;\r\n @Input() headerData :any;\r\n @Input() clientData :any;\r\n private destroy$ = new Subject<void>();\r\n constructor(private service:ZoneService,private zoneV2Service:Zonev2Service,private cd:ChangeDetectorRef,private router:Router,private ts:ToastService) { }\r\nngOnChanges(changes: SimpleChanges): void {\r\n if (changes['headerData']?.currentValue) {\r\n this.headerData = changes['headerData'].currentValue;\r\n }\r\n if (changes['clientData']?.currentValue) {\r\n this.clientData = changes['clientData'].currentValue;\r\n }\r\n this.getAvailableZones();\r\n this.cd.detectChanges();\r\n}\r\n\r\n\r\nzoneShopperAnalysis:any;\r\nbubbleChartData:any;\r\nobject:any;\r\nobject1:any;\r\nzoneSearchText:string='';\r\n\r\nshowDropdown = false;\r\nsearchText = '';\r\nzoneList:any=[];\r\nfilteredZones:any=[];\r\n\r\n\r\nzonesInitialized = false;\r\ntempZoneList: any[] = [];\r\ntempFilteredZones: any[] = [];\r\ndropdownSearchText = '';\r\navailableZones:any[] = [];\r\n getAvailableZones(){\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, \r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.zoneV2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res: any) => {\r\n if (res && res?.code === 200) {\r\n this.availableZones = (res.data.availableZoneData || []).filter(\r\n (zone: any) => zone.zoneName?.toLowerCase() !== 'overall store'\r\n);\r\n this.zoneList = this.availableZones.map(z => ({\r\n name: z.zoneName,\r\n checked: true\r\n }));\r\n this.zonesInitialized = true;\r\n this.getZoneJourney([]);\r\n this.getBubble([]);\r\n this.cd.detectChanges();\r\n\r\n } else {\r\n this.availableZones = [];\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.availableZones = [];\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n }\r\n );\r\n }\r\n\r\n// getAvailableZones() {\r\n// this.zoneV2Service.zones$\r\n// .pipe(takeUntil(this.destroy$))\r\n// .subscribe((zones) => {\r\n \r\n// this.availableZones = zones;\r\n\r\n// if (!this.zonesInitialized) {\r\n// this.zoneList = zones.map(z => ({\r\n// name: z.zoneName,\r\n// checked: true\r\n// }));\r\n\r\n// this.zonesInitialized = true;\r\n// if(this.zoneList.length){\r\n// console.log('available zones in zone journey', this.zoneList); \r\n// this.getZoneJourney([]);\r\n// this.getBubble([]);\r\n// } else {\r\n// console.log('available zones in zone journey', this.zoneList);\r\n// this.zoneChartNoData = true;\r\n// this.zoneChartLoading = false;\r\n// this.zoneCardNoData = true;\r\n// this.zoneCardLoading = false;\r\n// this.getZoneJourney([]);\r\n// this.getBubble([]);\r\n// }\r\n \r\n// }\r\n// });\r\n// }\r\n\r\n@ViewChild('zoneDropdown') zoneDropdown!: ElementRef;\r\n\r\n\r\n/* OPEN / TOGGLE */\r\ntoggleDropdown(event: MouseEvent) {\r\n event.stopPropagation(); \r\n this.showDropdown = !this.showDropdown;\r\n\r\n if (this.showDropdown) {\r\n this.tempZoneList = this.zoneList.map((z:any) => ({ ...z }));\r\n this.tempFilteredZones = [...this.tempZoneList];\r\n }\r\n}\r\n\r\n/* 🔥 OUTSIDE CLICK HANDLER */\r\n@HostListener('document:click', ['$event'])\r\nonDocumentClick(event: MouseEvent) {\r\n if (!this.showDropdown) return;\r\n\r\n const clickedInside =\r\n this.zoneDropdown?.nativeElement.contains(event.target);\r\n\r\n if (!clickedInside) {\r\n this.showDropdown = false;\r\n }\r\n}\r\ntoggleSelectAll(event: any) {\r\n const checked = event.target.checked;\r\n\r\n // Apply to full temp list\r\n this.tempZoneList = this.tempZoneList.map(z => ({\r\n ...z,\r\n checked\r\n }));\r\n\r\n // Re-apply search filter so UI updates correctly\r\n this.filterZones();\r\n}\r\nisAllSelected(): boolean {\r\n return (\r\n this.tempZoneList.length > 0 &&\r\n this.tempZoneList.every(z => z.checked)\r\n );\r\n}\r\n\r\nfilterZones() {\r\n const text = this.dropdownSearchText.toLowerCase();\r\n this.tempFilteredZones = this.tempZoneList.filter(z =>\r\n z.name.toLowerCase().includes(text)\r\n );\r\n}\r\n\r\napplyZones() {\r\n this.zoneList = this.tempZoneList.map(z => ({ ...z }));\r\n\r\n const hiddenZones = this.zoneList\r\n .filter((z: any) => !z.checked)\r\n .map((z: any) => z.name);\r\n\r\n this.getZoneJourney(hiddenZones);\r\n this.getBubble(hiddenZones);\r\n this.cd.detectChanges();\r\n this.dropdownSearchText = '';\r\n this.showDropdown = false;\r\n}\r\n\r\nresetZones() {\r\n // Reset applied state\r\n this.zoneList = this.zoneList.map((z:any) => ({\r\n ...z,\r\n checked: true\r\n }));\r\n\r\n // Sync temp state\r\n this.tempZoneList = this.zoneList.map((z:any) => ({ ...z }));\r\n this.tempFilteredZones = [...this.tempZoneList];\r\n\r\n this.dropdownSearchText = '';\r\n\r\n // Apply immediately\r\n this.getZoneJourney([]);\r\n this.getBubble([]);\r\n\r\n this.showDropdown = false;\r\n}\r\ngetZoneJourneyExport() {\r\n this.object1 = {\r\n clientId: this.headerData?.client,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n nob: this.clientData?.isNOB,\r\n hideZones: this.zoneList.filter((z: any) => !z.checked).map((z: any) => z.name),\r\n search: this.searchZoneText || '',\r\n export : true\r\n };\r\n\r\n this.service.getNewZoneShopperAnalysisExportApi(this.object1).subscribe({\r\n next: (res) => {\r\n if(this.headerData.date.startDate == this.headerData.date.endDate){\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate;\r\n this.service.saveAsExcelFile1(res, fileName);\r\n } else {\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate+'_'+this.headerData.date.endDate;\r\n this.service.saveAsExcelFile1(res, fileName);\r\n }\r\n },\r\n error: ((e:any) => {\r\n let errorMsg = 'Something went Wrong..';\r\n if (e && e.error && e.error.error) {\r\n errorMsg = e.error.error;\r\n } \r\n this.ts.getErrorToast(errorMsg)\r\n })\r\n });\r\n}\r\nzoneCardNoData = false;\r\n zoneCardLoading = true;\r\ngetZoneJourney(hiddenZones: any[] = []) {\r\n this.zoneCardLoading = true;\r\n this.zoneCardNoData = false;\r\n this.object1 = {\r\n clientId: this.headerData?.client,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n nob: this.clientData?.isNOB,\r\n hideZones: hiddenZones, // ✅ always correct\r\n search: this.searchZoneText || '',\r\n export : false\r\n };\r\n\r\n this.service.getNewZoneShopperAnalysisApi(this.object1).subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.zoneShopperAnalysis = res.data;\r\n this.zones = this.zoneShopperAnalysis?.zoneShopperAnalysis || [];\r\n this.zoneCardNoData = false;\r\n this.zoneCardLoading = false;\r\n this.cd.detectChanges();\r\n } else {\r\n this.zoneShopperAnalysis = null;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n },\r\n error: () => {\r\n this.zoneShopperAnalysis = null;\r\n this.zoneCardNoData = true;\r\n this.zoneCardLoading = false;\r\n }\r\n });\r\n}\r\n\r\nzoneChartNoData = false;\r\n zoneChartLoading = true;\r\ngetBubble(hiddenZones: any[] = []) {\r\n this.zoneChartLoading = true;\r\n this.zoneChartNoData = false;\r\n this.object = {\r\n clientId: this.headerData?.client,\r\n storeId: this.headerData?.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n nob: this.clientData?.isNOB,\r\n hideZones: hiddenZones,\r\n\r\n };\r\nthis.service.getNewZoneShopperBubbleChartApi(this.object).subscribe({\r\n next: (res:any)=>{\r\n if(res && res.code === 200){\r\n this.bubbleChartData = res.data;\r\n this.createChart();\r\n this.zoneChartNoData = false;\r\n this.zoneChartLoading = false;\r\n this.cd.detectChanges();\r\n } else {\r\n this.bubbleChartData = null;\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n }\r\n },\r\n error: (err:any)=>{\r\n this.bubbleChartData = null;\r\n this.zoneChartNoData = true;\r\n this.zoneChartLoading = false;\r\n // console.log('zone journey bubble chart error',err);\r\n }\r\n });\r\n \r\n}\r\n\r\ncreateChart() {\r\n setTimeout(() => {\r\n // Dispose old chart\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n\r\n // Root\r\n this.root = am5.Root.new('chartdiv');\r\n this.root.setThemes([am5themes_Animated.new(this.root)]);\r\n\r\n // Arc Diagram Series\r\n const series = this.root.container.children.push(\r\n am5flow.ArcDiagram.new(this.root, {\r\n sourceIdField: 'from',\r\n targetIdField: 'to',\r\n valueField: 'value',\r\n orientation: 'horizontal'\r\n })\r\n );\r\n\r\n // --------------------------------------------------\r\n // TOOLTIP (HTML)\r\n // --------------------------------------------------\r\n const tooltip = am5.Tooltip.new(this.root, {\r\n getFillFromSprite: false,\r\n getStrokeFromSprite: false,\r\n autoTextColor: false,\r\n keepTargetHover: true,\r\n pointerOrientation: 'horizontal'\r\n });\r\n\r\n tooltip.get('background')?.setAll({\r\n fill: am5.color(0xffffff),\r\n stroke: am5.color(0xe5e7eb),\r\n shadowColor: am5.color(0xf7f7f7),\r\n shadowBlur: 10,\r\n shadowOffsetY: 4\r\n });\r\n\r\n // Attach tooltip to links\r\n series.links.template.set('tooltip', tooltip);\r\n series.links.template.set('tooltipHTML', '');\r\nseries.links.template.setAll({\r\n strokeWidth: 2, // visible line\r\n interactive: true,\r\n tooltip: tooltip\r\n});\r\n\r\n// Add a larger invisible hit area\r\nseries.links.template.states.create(\"hover\", {\r\n strokeWidth: 3\r\n});\r\n\r\n // Adapter for HTML content\r\n series.links.template.adapters.add('tooltipHTML', (_html, target) => {\r\n const dataItem = target.dataItem;\r\n if (!dataItem) return '';\r\n\r\n const dc: any = dataItem.dataContext;\r\n\r\n return `\r\n <div class=\"am-tooltip\">\r\n <div class=\"am-tooltip-header\">\r\n ${dc.from} → ${dc.to}\r\n </div>\r\n <table class=\"am-tooltip-table\">\r\n <tr>\r\n <td>Footfall</td>\r\n <td class=\"value\">${dc.value ?? '--'}</td>\r\n </tr>\r\n <tr>\r\n <td>NoB</td>\r\n <td class=\"value\">${dc.NoB ?? '--'}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n `;\r\n });\r\n\r\n // --------------------------------------------------\r\n // NODE LABELS\r\n // --------------------------------------------------\r\n series.nodes.labels.template.setAll({\r\n text: '{id}\\n{total}',\r\n centerX: am5.percent(50),\r\n centerY: am5.percent(50),\r\n textAlign: 'center',\r\n fontSize: 11,\r\n fill: am5.color(0x000000),\r\n maxWidth: 90\r\n });\r\n\r\n // --------------------------------------------------\r\n // FLOW BULLETS\r\n // --------------------------------------------------\r\n series.bullets.push((_root, _series, dataItem) => {\r\n const bullet = am5.Bullet.new(this.root, {\r\n locationY: Math.random(),\r\n sprite: am5.Circle.new(this.root, {\r\n radius: 2,\r\n fill: dataItem.get('source').get('fill')\r\n })\r\n });\r\n\r\n bullet.animate({\r\n key: 'locationY',\r\n from: 0,\r\n to: 1,\r\n duration: Math.random() * 1000 + 2000\r\n });\r\n\r\n return bullet;\r\n });\r\n\r\n // --------------------------------------------------\r\n // DATA + ORDERING\r\n // --------------------------------------------------\r\n const nodeOrder = (name: string) => {\r\n if (name === 'Entry') return 0;\r\n if (name === 'Exit') return 999;\r\n return 1;\r\n };\r\n\r\n series.data.setAll(this.bubbleChartData?.zoneBubbleChartMetrics);\r\n\r\n Array.from(series.nodes.children).sort((a: any, b: any) => {\r\n return (\r\n nodeOrder(a.dataItem?.dataContext?.id) -\r\n nodeOrder(b.dataItem?.dataContext?.id)\r\n );\r\n });\r\n\r\n series.appear(1000, 100);\r\n }, 500);\r\n}\r\n\r\n\r\n\r\n\r\n ngOnDestroy(): void {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n // this.stopAutoSlide();\r\n }\r\n \r\n zones:any = [];\r\n\r\nactiveIndex: number | null = 0;\r\n\r\ntoggle(index: number) {\r\n this.activeIndex = this.activeIndex === index ? null : index;\r\n}\r\nsearchNewOpen =false;\r\nsearchOpen(){\r\n this.searchNewOpen = !this.searchNewOpen;\r\nif(!this.searchNewOpen){\r\n this.searchZoneText ='';\r\n this.getZoneJourney([]);\r\n}\r\n}\r\n\r\nsearchZoneText:string ='';\r\nSearchZones(){\r\n this.getZoneJourney([]);\r\n}\r\nisMinimized = false;\r\n\r\n// drag support\r\ndragging = false;\r\noffsetX = 0;\r\noffsetY = 0;\r\n\r\nfloatingPos = {\r\n top: 120,\r\n left: window.innerWidth - 380\r\n};\r\n\r\nexpandClose() {\r\n this.isMinimized = !this.isMinimized;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nstartDrag(event: MouseEvent) {\r\n if (!this.isMinimized) return;\r\n\r\n this.dragging = true;\r\n this.offsetX = event.clientX - this.floatingPos.left;\r\n this.offsetY = event.clientY - this.floatingPos.top;\r\n\r\n document.addEventListener('mousemove', this.onDrag);\r\n document.addEventListener('mouseup', this.stopDrag);\r\n}\r\n\r\nonDrag = (event: MouseEvent) => {\r\n if (!this.dragging) return;\r\n\r\n this.floatingPos.left = event.clientX - this.offsetX;\r\n this.floatingPos.top = event.clientY - this.offsetY;\r\n};\r\n\r\nstopDrag = () => {\r\n this.dragging = false;\r\n document.removeEventListener('mousemove', this.onDrag);\r\n document.removeEventListener('mouseup', this.stopDrag);\r\n};\r\n\r\n nobUpload(){\r\n this.router.navigate([\"/manage/traffic/nob\"]); \r\n }\r\n}\r\n","<!-- zone-journey.component.html -->\r\n<div class=\"card my-card mx-1 my-2\">\r\n <div class=\"card-header px-0 mx-5 border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-1\">Zone-Based Shopper Analysis </span>\r\n <span class=\"text-sub mb-1\">Understand your Shoppers journey from one zone to another\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n<div class=\"zone-dropdown me-2\" #zoneDropdown\r\n (click)=\"$event.stopPropagation()\">\r\n\r\n <!-- BUTTON -->\r\n <button [disabled]=\"!zoneShopperAnalysis\"\r\n class=\"btn btn-outline w-100 me-2 d-flex justify-content-between\"\r\n (click)=\"toggleDropdown($event)\"\r\n >\r\n Show / Hide Zone\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"7\" viewBox=\"0 0 12 7\" fill=\"none\">\r\n<path d=\"M1 1L6 6L11 1\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg></span>\r\n </button>\r\n\r\n <!-- DROPDOWN -->\r\n <div *ngIf=\"showDropdown\" class=\"dropdown-panel h-300px d-flex flex-column\">\r\n\r\n <!-- HEADER (fixed) -->\r\n <div class=\"dropdown-header px-2 pb-2\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search Zone\"\r\n [(ngModel)]=\"dropdownSearchText\"\r\n (input)=\"filterZones()\"\r\n />\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2 mb-2 px-2\">\r\n <span class=\"mx-1\"><input\r\n type=\"checkbox\"\r\n [checked]=\"isAllSelected()\"\r\n (change)=\"toggleSelectAll($event)\"\r\n /></span>\r\n <span class=\"ms-2\">Select All</span>\r\n </div>\r\n <!-- BODY (scrollable list) -->\r\n <div class=\"dropdown-body flex-grow-1 overflow-auto px-2\">\r\n <div\r\n class=\"zone-item\"\r\n *ngFor=\"let zone of tempFilteredZones\"\r\n >\r\n <span class=\"mx-1\"><input\r\n type=\"checkbox\"\r\n [(ngModel)]=\"zone.checked\"\r\n /></span>\r\n <span class=\"ms-2\">{{ zone.name }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- FOOTER (fixed) -->\r\n <div class=\"dropdown-footer d-flex justify-content-end gap-2 p-2 border-top\">\r\n <button class=\"btn btn-sm btn-outline w-50\" (click)=\"resetZones()\">\r\n Reset\r\n </button>\r\n <button class=\"btn btn-sm btn-primary w-50\" (click)=\"applyZones()\">\r\n Apply\r\n </button>\r\n </div>\r\n\r\n</div>\r\n\r\n</div>\r\n\r\n\r\n <button type=\"button\" (click)=\"getZoneJourneyExport()\" [disabled]=\"!zoneShopperAnalysis\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader me-4\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-3 mx-3\">\r\n <div class=\"bordered-box w-50 me-2 py-1\">\r\n <div class=\"group d-flex justify-content-between pt-1 px-3\">\r\n <span class=\"text-title py-2\"><svg class=\"mx-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"21\" viewBox=\"0 0 19 21\" fill=\"none\">\r\n <path\r\n d=\"M0.5 16.3258H6V17.5758C6 18.3051 5.71027 19.0046 5.19454 19.5203C4.67882 20.036 3.97935 20.3258 3.25 20.3258C2.52065 20.3258 1.82118 20.036 1.30546 19.5203C0.789731 19.0046 0.5 18.3051 0.5 17.5758V16.3258ZM4.5 4.44576C6.5 4.44576 7.5 7.32576 7.5 9.32576C7.5 10.3258 7 11.3258 6.5 12.8258L6 14.3258H0.5C0.5 13.3258 0 11.8258 0 9.32576C0 6.82576 1.998 4.44576 4.5 4.44576ZM16.554 12.4238L16.337 13.6548C16.2023 14.3654 15.7931 14.9943 15.198 15.4054C14.6029 15.8165 13.8698 15.9765 13.1576 15.8509C12.4453 15.7254 11.8111 15.3242 11.3925 14.7344C10.9739 14.1446 10.8045 13.4136 10.921 12.6998L11.137 11.4698L16.554 12.4238ZM14.678 0.0307624C17.142 0.464762 18.696 3.15576 18.262 5.61776C17.828 8.07976 17.075 9.46976 16.902 10.4548L11.485 9.49976L11.253 7.93576C11.021 6.37176 10.703 5.29976 10.876 4.31576C11.223 2.34576 12.708 -0.316238 14.678 0.0307624Z\"\r\n fill=\"#1D2939\" />\r\n </svg>Overall Footfall :</span>\r\n <span><span class=\"text-val\">{{zoneShopperAnalysis?.OverallFootfall ?? '--'}}</span> <span class=\"text-perc ms-1\">({{zoneShopperAnalysis?.ConversionPercent ?? '--'}} %)</span></span>\r\n </div>\r\n </div>\r\n <div class=\"bordered-box w-50 py-1\">\r\n <div class=\"group d-flex justify-content-between pt-1 px-3\">\r\n <span *ngIf=\"this.clientData?.isNOB\" class=\"text-title py-2\"><svg class=\"mx-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 11H15M9 15H15M9 7H15M5 3C5 2.73478 5.10536 2.48043 5.29289 2.29289C5.48043 2.10536 5.73478 2 6 2H18C18.2652 2 18.5196 2.10536 18.7071 2.29289C18.8946 2.48043 19 2.73478 19 3V22L15.5 19.5L12 22L8.5 19.5L5 22V3Z\"\r\n stroke=\"#1D2939\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> NoB :</span>\r\n <span *ngIf=\"!this.clientData?.isNOB\" class=\"text-title py-2\"><svg class=\"mx-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M9 11H15M9 15H15M9 7H15M5 3C5 2.73478 5.10536 2.48043 5.29289 2.29289C5.48043 2.10536 5.73478 2 6 2H18C18.2652 2 18.5196 2.10536 18.7071 2.29289C18.8946 2.48043 19 2.73478 19 3V22L15.5 19.5L12 22L8.5 19.5L5 22V3Z\"\r\n stroke=\"#1D2939\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Conversion :</span>\r\n <span class=\"text-val\">{{zoneShopperAnalysis?.Nob ?? '--'}} <span *ngIf=\"this.clientData?.isNOB\" class=\"px-0 cursor-pointer\" (click)=\"nobUpload()\"><svg placement=\"top\" ngbTooltip=\"Upload NoB\" xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"\r\n viewBox=\"0 0 40 40\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15106_106090)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"#EAF8FF\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#EAF8FF\" />\r\n <path\r\n d=\"M23.3326 22.3332L19.9992 18.9999M19.9992 18.9999L16.6659 22.3332M19.9992 18.9999V26.4999M26.9909 24.3249C27.8037 23.8818 28.4458 23.1806 28.8158 22.3321C29.1858 21.4835 29.2627 20.5359 29.0344 19.6388C28.8061 18.7417 28.2855 17.9462 27.5548 17.3778C26.8241 16.8094 25.925 16.5005 24.9992 16.4999H23.9492C23.697 15.5243 23.2269 14.6185 22.5742 13.8507C21.9215 13.0829 21.1033 12.4731 20.181 12.0671C19.2587 11.661 18.2564 11.4694 17.2493 11.5065C16.2423 11.5436 15.2568 11.8085 14.3669 12.2813C13.477 12.7541 12.7058 13.4225 12.1114 14.2362C11.517 15.05 11.1148 15.9879 10.9351 16.9794C10.7553 17.9709 10.8027 18.9903 11.0736 19.961C11.3445 20.9316 11.8319 21.8281 12.4992 22.5832\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15106_106090\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15106_106090\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_15106_106090\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row gx-0 p-3\">\r\n <div [ngClass]=\"isMinimized ? 'col-12' : 'col-8'\"\r\n [style.height.px]=\"zoneChartNoData ? 300 : (isMinimized ? 650 : 550)\">\r\n <ng-container *ngIf=\"zoneChartLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zoneChartNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Based Shopper Analysis Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!zoneChartNoData && !zoneChartLoading\" id=\"chartdiv\" style=\"width: 100%; height: 100%;\"></div>\r\n </div>\r\n\r\n <div [ngClass]=\"isMinimized ? 'zone-floating' : 'col-4'\" [style.top.px]=\"isMinimized ? floatingPos.top : null\"\r\n [style.left.px]=\"isMinimized ? floatingPos.left : null\" (mousedown)=\"startDrag($event)\">\r\n <!-- (mousedown)=\"startDrag($event)\" -->\r\n <ng-container *ngIf=\"zoneCardLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zoneCardNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Based Shopper Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-conatiner *ngIf=\"!zoneCardNoData && !zoneCardLoading\" class=\"card \">\r\n <div class=\"card-header border-0 px-4\"\r\n [ngClass]=\"isMinimized ?'bg-secondary min-h-30px': 'bg-light-primary min-h-45px mb-2'\">\r\n <div class=\"card-title align-items-start\"><span *ngIf=\"isMinimized\" class=\"me-2 mb-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path\r\n d=\"M9 20C8.45 20 7.97917 19.8042 7.5875 19.4125C7.19583 19.0208 7 18.55 7 18C7 17.45 7.19583 16.9792 7.5875 16.5875C7.97917 16.1958 8.45 16 9 16C9.55 16 10.0208 16.1958 10.4125 16.5875C10.8042 16.9792 11 17.45 11 18C11 18.55 10.8042 19.0208 10.4125 19.4125C10.0208 19.8042 9.55 20 9 20ZM15 20C14.45 20 13.9792 19.8042 13.5875 19.4125C13.1958 19.0208 13 18.55 13 18C13 17.45 13.1958 16.9792 13.5875 16.5875C13.9792 16.1958 14.45 16 15 16C15.55 16 16.0208 16.1958 16.4125 16.5875C16.8042 16.9792 17 17.45 17 18C17 18.55 16.8042 19.0208 16.4125 19.4125C16.0208 19.8042 15.55 20 15 20ZM9 14C8.45 14 7.97917 13.8042 7.5875 13.4125C7.19583 13.0208 7 12.55 7 12C7 11.45 7.19583 10.9792 7.5875 10.5875C7.97917 10.1958 8.45 10 9 10C9.55 10 10.0208 10.1958 10.4125 10.5875C10.8042 10.9792 11 11.45 11 12C11 12.55 10.8042 13.0208 10.4125 13.4125C10.0208 13.8042 9.55 14 9 14ZM15 14C14.45 14 13.9792 13.8042 13.5875 13.4125C13.1958 13.0208 13 12.55 13 12C13 11.45 13.1958 10.9792 13.5875 10.5875C13.9792 10.1958 14.45 10 15 10C15.55 10 16.0208 10.1958 16.4125 10.5875C16.8042 10.9792 17 11.45 17 12C17 12.55 16.8042 13.0208 16.4125 13.4125C16.0208 13.8042 15.55 14 15 14ZM9 8C8.45 8 7.97917 7.80417 7.5875 7.4125C7.19583 7.02083 7 6.55 7 6C7 5.45 7.19583 4.97917 7.5875 4.5875C7.97917 4.19583 8.45 4 9 4C9.55 4 10.0208 4.19583 10.4125 4.5875C10.8042 4.97917 11 5.45 11 6C11 6.55 10.8042 7.02083 10.4125 7.4125C10.0208 7.80417 9.55 8 9 8ZM15 8C14.45 8 13.9792 7.80417 13.5875 7.4125C13.1958 7.02083 13 6.55 13 6C13 5.45 13.1958 4.97917 13.5875 4.5875C13.9792 4.19583 14.45 4 15 4C15.55 4 16.0208 4.19583 16.4125 4.5875C16.8042 4.97917 17 5.45 17 6C17 6.55 16.8042 7.02083 16.4125 7.4125C16.0208 7.80417 15.55 8 15 8Z\"\r\n fill=\"#667085\" />\r\n </svg></span> Zone Journey </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span *ngIf=\"!isMinimized\" (click)=\"searchOpen()\" class=\"me-3\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M19 19L14.65 14.65M17 9C17 13.4183 13.4183 17 9 17C4.58172 17 1 13.4183 1 9C1 4.58172 4.58172 1 9 1C13.4183 1 17 4.58172 17 9Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"cursor-pointer\" *ngIf=\"!isMinimized\"\r\n (click)=\"expandClose(); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path d=\"M5 12H19\" stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span class=\"cursor-pointer\" *ngIf=\"isMinimized\"\r\n (click)=\"expandClose(); $event.stopPropagation()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <path d=\"M15 3H21M21 3V9M21 3L14 10M9 21H3M3 21V15M3 21L10 14\" stroke=\"#667085\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isMinimized\" class=\"card-body h-500px overflow-auto px-0 py-2\">\r\n \r\n<div *ngIf=\"searchNewOpen\" class=\"px-2 pb-2\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Search Zone\"\r\n [(ngModel)]=\"searchZoneText\"\r\n (change)=\"SearchZones()\"\r\n />\r\n </div>\r\n <div class=\"zone-card mx-3 \" *ngFor=\"let zone of zones;let i = index\">\r\n\r\n <!-- HEADER -->\r\n <div [ngClass]=\"activeIndex === i ? 'zone-header':'zone-default'\" (click)=\"toggle(i)\">\r\n <div [ngClass]=\"activeIndex === i ? 'zone-title':'zone-notitle'\">{{ zone.fromZone |\r\n titlecase}}\r\n </div>\r\n\r\n <div class=\"zone-metrics\">\r\n <span class=\"badge badge-light-primary px-2\" placement=\"top\" ngbTooltip=\"Footfall (Engagers)\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\"\r\n viewBox=\"0 0 10 11\" fill=\"none\">\r\n <path\r\n d=\"M0.25 8.16288H3V8.78788C3 9.15255 2.85513 9.50229 2.59727 9.76015C2.33941 10.018 1.98967 10.1629 1.625 10.1629C1.26033 10.1629 0.910591 10.018 0.652728 9.76015C0.394866 9.50229 0.25 9.15255 0.25 8.78788V8.16288ZM2.25 2.22288C3.25 2.22288 3.75 3.66288 3.75 4.66288C3.75 5.16288 3.5 5.66288 3.25 6.41288L3 7.16288H0.25C0.25 6.66288 0 5.91288 0 4.66288C0 3.41288 0.999 2.22288 2.25 2.22288ZM8.277 6.21188L8.1685 6.82738C8.10117 7.18269 7.89656 7.49717 7.59901 7.70271C7.30146 7.90824 6.93492 7.98827 6.57878 7.92547C6.22263 7.86268 5.90557 7.6621 5.69626 7.3672C5.48695 7.07229 5.40225 6.7068 5.4605 6.34988L5.5685 5.73488L8.277 6.21188ZM7.339 0.0153812C8.571 0.232381 9.348 1.57788 9.131 2.80888C8.914 4.03988 8.5375 4.73488 8.451 5.22738L5.7425 4.74988L5.6265 3.96788C5.5105 3.18588 5.3515 2.64988 5.438 2.15788C5.6115 1.17288 6.354 -0.158119 7.339 0.0153812Z\"\r\n fill=\"#009BF3\" />\r\n </svg></span> {{ zone.fromZoneFootfallCount ?? '--' }}\r\n </span>\r\n <span class=\"badge badge-light-default px-2\" placement=\"top\"\r\n [ngbTooltip]=\"clientData?.isNOB ? 'NoB' : 'Conversion'\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\"\r\n viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M4.5 5.5H7.5M4.5 7.5H7.5M4.5 3.5H7.5M2.5 1.5C2.5 1.36739 2.55268 1.24021 2.64645 1.14645C2.74021 1.05268 2.86739 1 3 1H9C9.13261 1 9.25979 1.05268 9.35355 1.14645C9.44732 1.24021 9.5 1.36739 9.5 1.5V11L7.75 9.75L6 11L4.25 9.75L2.5 11V1.5Z\"\r\n stroke=\"#344054\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span> {{ zone.fromZoneNobCount ?? '--' }}\r\n </span>\r\n\r\n <span class=\"arrow cursor-pointer\"><svg *ngIf=\"activeIndex === i\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"7\" viewBox=\"0 0 12 7\"\r\n fill=\"none\">\r\n <path d=\"M0.832031 5.83301L5.83203 0.833008L10.832 5.83301\" stroke=\"#33B5FF\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"activeIndex !== i\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\"\r\n height=\"7\" viewBox=\"0 0 12 7\" fill=\"none\">\r\n <path d=\"M0.832031 0.833008L5.83203 5.83301L10.832 0.833008\" stroke=\"#667085\"\r\n stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- BODY -->\r\n <div class=\"zone-body max-h-200px min-h-auto overflow-auto\" *ngIf=\"activeIndex === i\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table text-nowrap bottom-border \">\r\n <thead>\r\n\r\n <tr>\r\n <th class=\"w-50\">To Zone</th>\r\n <th>Footfall (Engagers)</th>\r\n <th ><span class=\"me-2\" *ngIf=\"this.clientData?.isNOB\">NoB</span> <span class=\"me-2\" *ngIf=\"!this.clientData?.isNOB\">Conversion</span> \r\n <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15320_82488)\">\r\n <path\r\n d=\"M7.9987 10.6663V7.99967M7.9987 5.33301H8.00536M14.6654 7.99967C14.6654 11.6816 11.6806 14.6663 7.9987 14.6663C4.3168 14.6663 1.33203 11.6816 1.33203 7.99967C1.33203 4.31778 4.3168 1.33301 7.9987 1.33301C11.6806 1.33301 14.6654 4.31778 14.6654 7.99967Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15320_82488\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg> -->\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of zone.toZoneData\">\r\n <td>{{ row.toZone | titlecase}}</td>\r\n <td>{{ row.footfall ?? '--' }} ({{ row.engagerPercent }}%)</td>\r\n <td>{{ row.nob ?? '--' }} ({{ row.nobPercent }}%)</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-conatiner>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n</div>","import { ChangeDetectorRef, Component, ElementRef, Input, NgZone, OnChanges, OnDestroy, OnInit,SimpleChanges } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-top-performing-zones',\r\n templateUrl: './top-performing-zones.component.html',\r\n styleUrl: './top-performing-zones.component.scss'\r\n})\r\nexport class TopPerformingZonesComponent implements OnInit,OnDestroy,OnChanges{\r\n private zoneroot: am5.Root;\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,private router: Router,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones();\r\n this.getTopPerformingStores();\r\n // this.zonefootfall();\r\n})\r\n\r\n }\r\n @Input() clientData :any;\r\nngOnChanges(changes: SimpleChanges): void {\r\n if (changes['clientData']?.currentValue) {\r\n this.clientData = changes['clientData'].currentValue;\r\n }\r\n}\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n // });\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n };\r\n \r\n this.ZoneService.getTopPerformingZonesData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingZones = response.data.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n setTimeout(() => {\r\n this.zonefootfall(); \r\n }, 500);\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n zonefootfall() {\r\n // setTimeout(() => {\r\n const chartDiv = document.getElementById(\"zonechartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `zonechartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.zoneroot) {\r\n this.zoneroot.dispose();\r\n }\r\n \r\n this.zoneroot = am5.Root.new(\"zonechartdiv\");\r\n \r\n // Create chart\r\n const chart = this.zoneroot.container.children.push(am5xy.XYChart.new(this.zoneroot, {\r\n panX: true,\r\n panY: true,\r\n wheelX: \"none\",\r\n wheelY: \"none\",\r\n paddingLeft: 0\r\n }));\r\n \r\n // Hide zoom-out button\r\n chart.zoomOutButton.set(\"forceHidden\", true);\r\n \r\n // Create axes\r\n const xRenderer = am5xy.AxisRendererX.new(this.zoneroot, {\r\n minGridDistance: 30,\r\n minorGridEnabled: true\r\n });\r\n xRenderer.labels.template.setAll({\r\n rotation: -45,\r\n centerY: am5.p100,\r\n centerX: am5.p50,\r\n paddingRight: 15,\r\n textAlign: \"center\"\r\n });\r\n xRenderer.grid.template.set(\"visible\", false);\r\n \r\n const xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(this.zoneroot, {\r\n maxDeviation: 0.3,\r\n categoryField: \"zoneName\", // Change from \"country\" to \"zoneName\"\r\n renderer: xRenderer\r\n }));\r\n \r\n const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(this.zoneroot, {\r\n maxDeviation: 0.1,\r\n min: 0,\r\n renderer: am5xy.AxisRendererY.new(this.zoneroot, {})\r\n }));\r\n \r\n yAxis.children.unshift(am5.Label.new(this.zoneroot, {\r\n rotation: -90,\r\n text: 'Footfall',\r\n y: am5.p50,\r\n centerX: am5.p50\r\n }));\r\n \r\n // Add series\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.zoneroot, {\r\n name: \"Footfall\",\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: \"value\",\r\n categoryXField: \"zoneName\" // Change from \"country\" to \"zoneName\"\r\n }));\r\n \r\n // Rounded corners for columns\r\n series.columns.template.setAll({\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n // Add Label bullet\r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.zoneroot, {\r\n locationY: 1,\r\n sprite: am5.Label.new(this.zoneroot, {\r\n text: \"{valueYWorking.formatNumber('#.')}\",\r\n fill: this.zoneroot.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n series.columns.template.setAll({\r\n tooltipText: \"{categoryX}: {valueYWorking.formatNumber('#.')}\",\r\n tooltipY: am5.p50\r\n });\r\n if (this.topPerformingZones && this.topPerformingZones.length > 0) {\r\n xAxis.data.setAll(this.topPerformingZones);\r\n series.data.setAll(this.topPerformingZones);\r\n \r\n } else {\r\n // console.error(\"No data available for top performing zones\");\r\n }\r\n // }, 0);\r\n }\r\n\r\n getTopPerformingStores(): void {\r\n this.searchDisabled = true;\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.getTopPerformingStoresTableExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TopPerformingStores');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n searchField(e:any) {\r\n this.searchInput = e.target.value;\r\n this.getTopPerformingStores()\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores()\r\n }\r\n // storeView(data:any){\r\n // const datavalue: any = JSON.parse(\r\n // localStorage.getItem(\"header-filters\") || \"{}\"\r\n // );\r\n // datavalue.store = data;\r\n // localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n // this.changeDetector.detectChanges()\r\n // this.gs.dataRangeValue.next(datavalue)\r\n // this.router.navigate([\"/manage/stores/cameras\"], {\r\n // queryParams: { storeId: data},\r\n // });\r\n\r\n // }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n\r\n}\r\n\r\n","<div class=\"row\">\r\n <div class=\"col-lg-5\">\r\n <div class=\"card\">\r\n <div class=\"card-header p-4 border-0\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Zones based on by the highest footfall\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span> </span>\r\n <span class=\"subratetext mt-2\">Based on Zone Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div *ngIf=\"!analysisLoading && !analysisNoData\" id=\"zonechartdiv\"></div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"h-100 card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Stores ranked based on the highest concentration rate\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">Based on Concentration Rate</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\" fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input type=\"text\" class=\"form-control ps-14 me-4 invoicesearch\" placeholder=\"Search...\" autocomplete=\"off\" \r\n (keyup.enter)=\"searchField($event)\" />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">Zone Name <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">Concentration <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">Avg Dwell Time <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('overallFootfall')\">Overall Footfall <svg [ngClass]=\"sortColumName === 'overallFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'overallFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('zoneFootfall')\">Zone Footfall<svg [ngClass]=\"sortColumName === 'zoneFootfall' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer mb-2\" (click)=\"storeView(store.storeId)\">{{ store?.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneName || '--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} %</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}} mins</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.overallFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store?.zoneFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mt-18\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> \r\n</div>\r\n\r\n<section *ngIf=\"headerData.client ==='478'\">\r\n <lib-zone-journey *ngIf=\"headerData\" [headerData]=\"headerData\" [clientData]=\"clientData\"></lib-zone-journey>\r\n</section>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'lib-zone-summary-table',\r\n templateUrl: './zone-summary-table.component.html',\r\n styleUrl: './zone-summary-table.component.scss'\r\n})\r\nexport class ZoneSummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private ZoneService: ZoneService,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.ZoneService.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response.data.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.ZoneService.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneSummaryTable');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable1()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th *ngIf=\"headerData?.client ==='478'\"><div class=\"cursor-pointer\" (click)=\"sortData('storefootfallCount')\">\r\n Store FF\r\n <svg [ngClass]=\"sortColumName === 'storefootfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storefootfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th *ngIf=\"headerData?.client ==='478'\"><div class=\"cursor-pointer\" (click)=\"sortData('nob')\">\r\n Zone Wise NoB\r\n <svg [ngClass]=\"sortColumName === 'nob' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'nob' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Zone Conc.Rate\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><div class=\"table-title\">{{ store?.date ? (store.date | date: 'd MMM, y') : '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td *ngIf=\"store?.storefootfallCount !== null && store?.storefootfallCount !== undefined\"><div class=\"table-title\">{{store.storefootfallCount}}</div></td>\r\n <td *ngIf=\"store?.nob !== null && store?.nob !== undefined\"><div class=\"table-title\">{{store.nob}}</div></td>\r\n <td><div class=\"table-title\">{{ store.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.below12?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above']?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\nimport { NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-concentrationheatmap',\r\n templateUrl: './concentrationheatmap.component.html',\r\n styleUrl: './concentrationheatmap.component.scss'\r\n})\r\nexport class ConcentrationheatmapComponent {\r\n @Input() imageURLV1: [];\r\n currentSlideIndex = 0;\r\n currentSlide = 0;\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURLV1) {\r\n this.overallStoreData.ImageURLs = this.imageURLV1; \r\n }\r\n\r\n \r\n\r\n}\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\n \r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n<ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs; let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, importProvidersFrom, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarouselConfig, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport { ConcentrationheatmapComponent } from './concentrationheatmap/concentrationheatmap.component';\r\n\r\n@Component({\r\n selector: 'lib-zone-concentration',\r\n templateUrl: './zone-concentration.component.html',\r\n styleUrl: './zone-concentration.component.scss',\r\n providers: [NgbCarouselConfig],\r\n})\r\nexport class ZoneConcentrationComponent implements OnInit,OnDestroy {\r\n dayjs = dayjs;\r\n searchInput: any =\"\";\r\n searchDisabled: any = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n zoneConcentrationData: any[] = [];\r\n overallStoreData: any = {};\r\n type: string = 'daily'; \r\n overallStoreConcentrationDates: any[] = [];\r\n selectedDate: string = '';\r\n periodzone: number = 1; \r\n customOption: boolean = false; \r\n timer_active: boolean = false; \r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n zoneName: string = '';\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n customArrow: boolean = false;\r\n isExport: boolean = false;\r\n currentSlide = 0;\r\n currentSlideIndex = 0;\r\n // startIndex: number = 0;\r\n // datesPerPage: number = 5;\r\n // visibleDates: any[] = [];\r\n // timer_active = 0;\r\n // periodzone = 1;\r\n // customOption: boolean = false;\r\n // overallStoreConcentrationDates: Array<{ zoneDate: string }> = [];\r\n private readonly destroy$ = new Subject();\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n storeIdarray: any =[];\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private ZoneService: ZoneService, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store: any) => store.checked).map((store: any) => store.storeId)\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.type = 'daily';\r\n // if(eDate.diff(sDate,'day') < 7) {\r\n // this.disableWeek = true;\r\n // this.disableMonth = true;\r\n // // this.type = 'daily';\r\n // }\r\n // else if(eDate.diff(sDate,'day') < 27) {\r\n // this.disableMonth = true;\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // // this.type = 'weekly';\r\n // }\r\n // else {\r\n // this.disableDay = false;\r\n // this.disableWeek = false;\r\n // this.disableMonth = false;\r\n // // this.type = 'monthly';\r\n // }\r\n this.getZoneConcentrationData();\r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n})\r\n \r\n }\r\n\r\n getZoneConcentrationData(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.ZoneService.setData(this.zoneName);\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.searchDisabled = false;\r\n this.getOverallStoreHeatmapDates();\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n export: true,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n };\r\n\r\n this.ZoneService.zoneConcentrationTableDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'ZoneConcentrationSummary');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getZoneConcentrationData();\r\n }\r\n\r\n searchField(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"218-2\"],\r\n clientId:this.headerData.client,\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n export: false,\r\n };\r\n\r\n\r\n this.ZoneService.zoneConcentrationTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.zoneConcentrationData = response.data.zoneConcentrationData;\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.zoneConcentrationData.length ? this.zoneConcentrationData[0].zoneName : '';\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n // this.zoneConcentrationData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.zoneConcentrationData = []\r\n this.overallStoreData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.zoneConcentrationData = []\r\n this.overallStoreConcentrationDates = []\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n \r\n }\r\n\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.ZoneService.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n } else {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n // this.zoneConcentrationData = []\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n getOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = []\r\n this.overallStoreData =[]\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId:this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type\r\n };\r\n\r\n this.ZoneService.getOverallStoreHeatmapDates(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if(response && response.data){\r\n this.overallStoreConcentrationDates = response.data.overallStoreConcentrationDates;\r\n this.selectedDate = this.overallStoreConcentrationDates[0].zoneDate; \r\n if (response?.code === 200 && response?.status === \"success\" && response.data.overallStoreConcentrationDates.length) {\r\n \r\n // if(['weekly','monthly'].includes(this.type)) {\r\n // let lastDigit = this.overallStoreConcentrationDates[this.overallStoreConcentrationDates.length -1].zoneDate;\r\n // let lastSplit = lastDigit.split('-')[1];\r\n // lastSplit = lastSplit +' '+ this.dayjs().format('YYYY');\r\n // if(this.dayjs(lastSplit,'MMM DD YYYY').format('YYYY-MM-DD') > this.dayjs(this.headerData.date.endDate).format('YYYY-MM-DD'))\r\n // this.overallStoreConcentrationDates.splice(this.overallStoreConcentrationDates.length-1,1);\r\n // }\r\n if (this.type === 'daily') {\r\n if (this.overallStoreConcentrationDates.length > 7) {\r\n this.customArrow = true;\r\n }\r\n } else if (this.type === 'weekly') {\r\n if (this.overallStoreConcentrationDates.length > 4) {\r\n this.customArrow = true;\r\n }\r\n } else { \r\n }\r\n this.getOverallStoreConcentrationData();\r\n // this.heatmapLoading = false;\r\n // this.heatmapNoData = false;\r\n } else {\r\n \r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n }else{\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreData =[]\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\n onDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n }\r\n }\r\n\r\n selectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates(); \r\n // this.getOverallStoreConcentrationData();\r\n}\r\n\r\nonZoneClick(zoneName: string): void {\r\n this.zoneName = zoneName; \r\n this.getOverallStoreHeatmapDates();\r\n this.ZoneService.zoneSegmentation.next(zoneName)\r\n // this.getZoneSegmentation(zoneName) \r\n}\r\nconcentrationHeatmap(imageURLV1: string) {\r\n const modalRef = this.modalService.open(ConcentrationheatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURLV1 = imageURLV1;\r\n modalRef.result.then((result) => {\r\n \r\n });\r\n}\r\n\r\nscrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\nscrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreData?.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n\r\n\r\n}\r\n\r\n","<div class=\"card\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-5 right-border my-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header ps-3 pe-1\">\r\n <h3 class=\"card-title align-items-start flex-column ms-1\">\r\n <span class=\"headtext\">Concentration Summary <span\r\n ngbTooltip=\"Summary of overall zones at the store\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span> \r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-10 invoicesearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader ms-2\" [disabled]=\"!zoneConcentrationData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <!-- <span class=\"ms-2\">Export</span> -->\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div *ngIf=\"!zonesummaryNoData && !zonesummaryLoading\" class=\"table-container m-4\">\r\n <table class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Footfall <br>(Actuals)\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n \r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Dwell Time <br>(Average)\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"conc cursor-pointer\" (click)=\"sortData('concentrationRate')\">\r\n Concentration\r\n <svg [ngClass]=\"sortColumName === 'concentrationRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'concentrationRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table-responsive\">\r\n <tr *ngFor=\"let zone of zoneConcentrationData\">\r\n <td>\r\n <div class=\"table-title-primary overallstore mb-2\">\r\n <span\r\n class=\"text-capitalize cursor-pointer\"><a (click)=\"onZoneClick(zone.zoneName)\">{{ zone.zoneName || '--' }}</a>\r\n </span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.footfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n {{ zone.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody> \r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-18\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Concentration Summary</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-7\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ zoneName || '' }} Concentration Heatmap <span\r\n ngbTooltip=\"Density heatmap\"\r\n placement=\"top\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n </h3>\r\n\r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\"\r\n (click)=\"selectPlan('daily')\"\r\n [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\"\r\n (click)=\"selectPlan('weekly')\" [disabled]=\"disableWeek\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\"\r\n (click)=\"selectPlan('monthly')\" [disabled]=\"disableMonth\">\r\n Month\r\n </button>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-lg-8 mb-6\">\r\n \r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n \r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n \r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreData?.ImageURLs)\" [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n <button *ngIf=\"image?.downtime !== null\" class=\"minsbadge position-absolute top-0 end-0 m-3 me-18\">\r\n <span class=\"minsbadgeprimary mt-2 mb-2 \">{{image.downtime}} mins<span class=\"ms-1\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 12 10\" fill=\"none\">\r\n <path d=\"M7.14063 0.000488281C7.79785 0.000488281 8.42578 0.135108 8.99902 0.379231C9.59375 0.632395 10.1289 1.0041 10.5771 1.46523C11.0244 1.92534 11.3857 2.47588 11.6318 3.0897C11.8691 3.67941 12 4.32538 12 5.00049C12 5.6766 11.8691 6.32257 11.6318 6.91228C11.3857 7.5241 11.0244 8.07463 10.5762 8.53575C10.1289 8.99587 9.59375 9.36758 8.99707 9.62074C8.42383 9.86487 7.7959 9.99949 7.13965 9.99949C6.48242 9.99949 5.85449 9.86487 5.28125 9.62074C4.68652 9.36758 4.15137 8.99587 3.7041 8.53575L3.70312 8.53475C3.25488 8.07363 2.89453 7.52309 2.64844 6.91228C2.57227 6.72241 2.50684 6.52751 2.45312 6.32759C2.55469 6.33764 2.6582 6.34266 2.7627 6.34266C2.96094 6.34266 3.1543 6.32458 3.34277 6.28942C3.37402 6.38586 3.4082 6.4813 3.44531 6.57473C3.64746 7.07704 3.94434 7.52912 4.31348 7.90887C4.68262 8.28862 5.12305 8.59402 5.61035 8.80198C6.08008 9.0019 6.59668 9.11341 7.13965 9.11341C7.68262 9.11341 8.19824 9.0029 8.66895 8.80198C9.15723 8.59402 9.59668 8.28862 9.96582 7.90887C10.335 7.52912 10.6318 7.07604 10.834 6.57473C11.0283 6.09151 11.1367 5.56006 11.1367 5.00149C11.1367 4.44292 11.0293 3.91248 10.834 3.42826C10.6318 2.92595 10.335 2.47387 9.96582 2.09412C9.59668 1.71437 9.15625 1.40897 8.66895 1.20101C8.19922 1.00109 7.68262 0.889578 7.13965 0.889578C6.59668 0.889578 6.08106 1.00009 5.61035 1.20101C5.56836 1.21909 5.52637 1.23818 5.48535 1.25727C5.3252 0.998077 5.13184 0.762996 4.91016 0.559058C5.03125 0.494762 5.15527 0.435489 5.28125 0.38124C5.85645 0.135108 6.4834 0.000488281 7.14063 0.000488281ZM6.58301 2.62355C6.58301 2.50099 6.63184 2.39048 6.70898 2.31011C6.78711 2.22974 6.89453 2.18052 7.01367 2.18052C7.13281 2.18052 7.24023 2.22974 7.31836 2.31011C7.39648 2.39048 7.44434 2.50099 7.44434 2.62355V4.95629L9.13867 5.99004C9.24023 6.05233 9.30859 6.15178 9.33594 6.26129C9.36328 6.37079 9.35059 6.49135 9.29004 6.59583V6.59683C9.22949 6.70131 9.13281 6.77164 9.02637 6.79977C8.91992 6.8279 8.80273 6.81484 8.70117 6.75255H8.7002L6.80469 5.59623C6.73926 5.55906 6.68555 5.50481 6.64648 5.44051C6.60645 5.3732 6.58301 5.29384 6.58301 5.20945V2.62355Z\" fill=\"#009BF3\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.63477 0.265717C4.08984 0.265717 5.26953 1.4793 5.26953 2.97618C5.26953 4.47307 4.08984 5.68665 2.63477 5.68665C1.17969 5.68665 0 4.47307 0 2.97618C0 1.4793 1.17969 0.265717 2.63477 0.265717ZM2.63477 4.53033L4.04883 2.73206H3.1709V1.77566H2.09863V2.73206H1.2207L2.63477 4.53033Z\" fill=\"#F04438\"/>\r\n </svg></span></span>\r\n </button>\r\n <a [href]=\"image.URL\" download><svg\r\n id=\"download-icon\"\r\n width=\"44\"\r\n height=\"44\"\r\n viewBox=\"0 0 44 44\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\"\r\n >\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_d_3822_19479\"\r\n x=\"0\"\r\n y=\"0\"\r\n width=\"44\"\r\n height=\"44\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\"\r\n />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-4\">\r\n <div class=\"body me-4\">\r\n <div class=\"pt-10 m-6\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Total Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{overallStoreData?.totalFootfall?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Concentration %\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ overallStoreData?.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Bounced Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.bouncedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div></div>\r\n <div></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client !== '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Engagers\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.engagersCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-4\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg. Dwell Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.avgDwellTime?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} mins\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Age Range\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.ageRange?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Male Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.maleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"storeIdarray[0] !=='459-2' && storeIdarray[0] !=='459-4'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Female Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.femaleRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Trolley\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.trolleyRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n <!-- <div *ngIf=\"headerData?.client == '459'\" class=\"borderdashed my-4\"></div>\r\n <div *ngIf=\"headerData?.client == '459'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Basket\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ overallStoreData?.basketRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}%\r\n </span>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, skip, startWith, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\n\r\n@Component({\r\n selector: 'lib-segmentation',\r\n templateUrl: './segmentation.component.html',\r\n styleUrl: './segmentation.component.scss'\r\n})\r\n\r\nexport class SegmentationComponent implements OnInit, OnDestroy{\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n cardDataLoading1: boolean = true;\r\n cardNoData1: boolean = false;\r\n cardDataLoading3: boolean = true;\r\n cardNoData3: boolean = false;\r\n cardDataLoading4: boolean = true;\r\n cardNoData4: boolean = false;\r\n cardDataLoading5: boolean = true;\r\n cardNoData5: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n zoneName:any='Overall Store';\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n @Output() dataEmitter = new EventEmitter<string>();\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n\r\n switch (this.headerData?.client) {\r\n case '430':\r\n // First source: getData$\r\n this.ZoneService.getData$()\r\n .pipe(\r\n startWith(null), // 👈 fallback seed emission\r\n skip(1), // skip service's initial seed (keep fallback)\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe((res: any) => {\r\n if (res) {\r\n this.zoneName = res;\r\n this.loadClient430Data();\r\n } else {\r\n \r\n this.loadClient430Data();\r\n }\r\n })\r\n\r\n // Second source: zoneSegmentation\r\n if (this.ZoneService?.zoneSegmentation) {\r\n this.ZoneService.zoneSegmentation\r\n .pipe(skip(1), takeUntil(this.destroy$))\r\n .subscribe((zoneData: any) => {\r\n this.zoneName = zoneData;\r\n this.getCardData4();\r\n this.getCardData5();\r\n });\r\n }\r\n break;\r\n\r\n case '463':\r\n this.loadClient463Data();\r\n break;\r\n\r\n default:\r\n // handle other clients if needed\r\n break;\r\n }\r\n });\r\n}\r\n\r\n// Helper for client=430\r\nprivate loadClient430Data() {\r\n this.getCardData1();\r\n this.getCardData3();\r\n this.getCardData();\r\n this.getCardData4();\r\n this.getCardData5();\r\n}\r\n\r\n// Helper for client=463\r\nprivate loadClient463Data() {\r\n this.getCardData();\r\n}\r\n\r\n private root!: am5.Root;\r\n ngOnDestroy(): void {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getSegmentationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.segmentationAnalysis\r\n // this.cardData = response.data.segmentationAnalysis.map((item: any) => ({\r\n // name: item.category,\r\n // value: item.value,\r\n // concentrationRate: item.concentrationRate\r\n // }));\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n // this.dataEmitter.emit(this.cardData?.length);\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getSegmentationDataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'TrafficSegmentation');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData1:any=[];\r\n getCardData1(): void {\r\n this.cardDataLoading1 = true;\r\n this.cardNoData1 = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading1 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData1 = response.data.data\r\n this.cardNoData1 = this.cardData1.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData1); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData1 = [];\r\n this.cardNoData1 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n \r\n createChart(cardData1: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData1.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport1() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n cardData3:any=[]\r\n getCardData3(): void {\r\n this.cardDataLoading3 = true;\r\n this.cardNoData3 = true;\r\n const requestData = {\r\n search: this.searchInput3,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading3 = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData3 = response?.data?.passerByData\r\n this.cardNoData3 = this.cardData3.length === 0;\r\n } else {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData3 = [];\r\n this.cardNoData3 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport3() {\r\n const requestData = {\r\n search: this.searchInput3,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage3,\r\n offset: this.currentPage3,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n itemsPerPage3 = 10000\r\n currentPage3 = 0\r\n totalItems3 = 0\r\n searchInput3:any =''\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData3();\r\n }\r\n\r\n cardData4:any=[]\r\n getCardData4(): void {\r\n this.cardDataLoading4 = true;\r\n this.cardNoData4 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getInteractionTableData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading4 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData4 = response?.data?.customerinteraction_data;\r\n this.cardData4.total = response?.data?.total;\r\n this.cardNoData4 = this.cardData4.length === 0;\r\n } else {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData4 = [];\r\n this.cardNoData4 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport4() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export: true,\r\n };\r\n \r\n this.ZoneService.getInteractionTable430Export(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Interaction Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n cardData5:any=[];\r\n getCardData5(): void {\r\n this.cardDataLoading5 = true;\r\n this.cardNoData5 = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:false\r\n };\r\n \r\n this.ZoneService.getZonewiseCustomerFunnelData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading5 = false;\r\n if (response?.code === 200 && response) {\r\n this.cardData5 = response?.data?.data;\r\n this.cardNoData5 = this.cardData5.length === 0;\r\n } else {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n }\r\n },\r\n error => {\r\n this.cardData5 = [];\r\n this.cardNoData5 = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n\r\n onExport5() {\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n zoneName: this.zoneName,\r\n export:true\r\n };\r\n \r\n \r\n this.ZoneService.getZonewiseCustomerFunnelExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Zonewise Customer Funnel ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n","<div class=\"row\" >\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData && (headerData?.client === '430') || (!cardNoData && headerData?.client === '463')\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Traffic Segmentation <span class=\"ms-1\"\r\n ngbTooltip=\"Entrance level traffic segmentation\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-18 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Entrance</th>\r\n <th>Entrance wise footfall</th>\r\n <th *ngIf=\"headerData?.client === '463'\">Concentration Rate</th>\r\n \r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>{{ item.category }}</td>\r\n <td>{{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td *ngIf=\"headerData?.client === '463'\">{{ item.concentrationRate?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }} %</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Age Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport1()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData1.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData1\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.assist_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate :'--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n \r\n\r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData5 && headerData?.client === '430'\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Zonewise Customer Funnel <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of walk-in behaviour from passerby to conversion at the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport5()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData5.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading5 && !cardNoData5\" class=\"body me-4 mb-8\">\r\n <div *ngFor=\"let item of cardData5\" class=\"m-4 agerangescroll\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ ((item.greeting_count / item.footfall) * 100).toFixed(1) || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Interacted\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Taken to Assist a Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time_string || '--' }}\r\n <!-- {{ convertSecondsToMinSec(item.avg_time_taken) }} -->\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Time Spent with Customer\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n <!-- {{ convertSecondsToMinSec(item.avg_interaction_time) }} -->\r\n {{ item.assist_time_string || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone !== null ? item.footfall_overamin_inzone : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"borderdashed my-2\"></div>\r\n <div *ngIf=\"zoneName ==='Overall Store'\" class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate !== null ? item.billing_conversion_rate + '%' : '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading5\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData5 && !cardDataLoading5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData1 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction vs Conversion <span class=\"ms-1\"\r\n ngbTooltip=\"Comparison of engaged walk-in vs potential conversion in the store\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading1 && !cardNoData1\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading1\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData1 && !cardDataLoading1\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData3 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Passer-by Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Summary of camera wise passerby count\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport3()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData3.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading3 && !cardNoData3\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData3\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading3\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData3 && !cardDataLoading3\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"col-md-4 mt-2\" *ngIf=\"!cardNoData4 && headerData?.client === '430'\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start headtext p-3\">Interaction Analysis <span class=\"ms-1\"\r\n ngbTooltip=\"Time-series analysis of customer interactions\"\r\n placement=\"right\" triggers=\"mouseenter:mouseleave\"\r\n tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\" stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport4()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData4.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading4 && !cardNoData4\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Category</th>\r\n <th>Value</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData4\">\r\n <td>\r\n {{ item.category }}\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"10px\" type=\"primary\" [value]=\"item?.value\" [max]=\"cardData4?.total\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item?.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"cardDataLoading4\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> -->\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData4 && !cardDataLoading4\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interaction Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client459',\r\n templateUrl: './interation-table-client459.component.html',\r\n styleUrl: './interation-table-client459.component.scss'\r\n})\r\n\r\nexport class InterationTableClient459Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable459Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable459DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'QueueManagement');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n}","<div *ngIf=\"!cardNoData\" class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-4\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Queue Management</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store ID</th>\r\n <th>Date</th>\r\n <th>Zone Name</th>\r\n <th>Hour</th>\r\n <th>Footfall</th>\r\n <th>Avg Time Spent (Mins)</th>\r\n <!-- <th>Min Time Spent</th>\r\n <th>Max Time Spent</th> -->\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.store_id ? item.store_id :'--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.date ? item.date :'--'}}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zone_name ? item.zone_name: '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.hour ? item.hour : '0' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.Footfall && item.Footfall !== 0 ? item.Footfall.toFixed(0) : '--' }}\r\n </div>\r\n</td>\r\n\r\n<td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.avg_time_spent && item.avg_time_spent !== 0 ? item.avg_time_spent : '--' }}\r\n </div>\r\n</td>\r\n\r\n \r\n <!-- <td>\r\n <div class=\"table-title subscribedtext\">{{ item.min_time_spent || '--' }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.max_time_spent || '--' }}</div>\r\n </td> -->\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { AfterViewInit, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { Router } from '@angular/router';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { Zonev2Service } from '../services/zonev2.service';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey-chart',\r\n templateUrl: './customer-journey-chart.component.html',\r\n styleUrl: './customer-journey-chart.component.scss'\r\n})\r\nexport class CustomerJourneyChartComponent implements OnInit, AfterViewInit, OnDestroy {\r\n chartRoot: am5.Root;\r\n viewMode: 'chart' | 'table' = 'chart';\r\n @Input() clientData: any;\r\n headerData: any;\r\n\r\n isPageLoading: boolean = true;\r\n\r\n sortedColumn: string = '';\r\n sortOrder: number = 1;\r\n\r\n searchTerm: string = '';\r\n\r\n limit: number = 10;\r\n offset: number = 1;\r\n totalItems: number = 0;\r\n paginationSizes = [10, 20, 30];\r\n\r\n customerJourneyTableData: any[] = [];\r\n customerJourneyChartData: {\r\n from: string,\r\n to: string,\r\n value: number\r\n }[] = [];\r\n\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private router: Router,\r\n private toast: ToastService,\r\n private gs: GlobalStateService, private zoneService: ZoneService,\r\n private zoneV2Service: Zonev2Service\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\nthis.getheaderZoneApi();\r\nthis.getNewZoneData();\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n })\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initializeChart()\r\n }\r\n\r\n toggleView(view: 'chart' | 'table') {\r\n if (this.viewMode === view) return;\r\n this.viewMode = view;\r\n this.searchTerm = '';\r\n if (this.viewMode === 'chart') {\r\n this.getCustomerJourneyChartData();\r\n } else {\r\n this.getCustomerJourneyTableData();\r\n }\r\n }\r\n\r\n getCustomerJourneyTableData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyTableData = []\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourneyTable(payload).subscribe({\r\n next: (response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.customerJourneyTableData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data['total_count']\r\n } else {\r\n this.customerJourneyTableData = []\r\n this.totalItems = 0\r\n }\r\n\r\n if (this.totalItems < 10) {\r\n this.paginationSizes = [this.totalItems]\r\n } else {\r\n this.paginationSizes = [10, 20, 30]\r\n }\r\n\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyTableData = [];\r\n this.isPageLoading = false;\r\n console.log(\"@@ ~ getCustomerJourneyTableData [ERR]:\", err);\r\n }\r\n })\r\n }\r\n\r\n getCustomerJourneyChartData() {\r\n this.isPageLoading = true;\r\n this.customerJourneyChartData = []\r\n const payload = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sortType: 'bottom',\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n }\r\n\r\n this.zoneV2Service.getCustomerJourney(payload).subscribe({\r\n next: (response: any) => {\r\n if (response && response.status === 'success') {\r\n this.customerJourneyChartData = response.data.customerJourneyData;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChartData(this.customerJourneyChartData);\r\n } else {\r\n this.customerJourneyChartData = []\r\n }\r\n this.isPageLoading = false;\r\n },\r\n error: (err) => {\r\n this.customerJourneyChartData = []\r\n this.isPageLoading = false;\r\n console.log('@@ getFixtureSizesList [ERR]: ', err)\r\n }\r\n })\r\n }\r\n\r\n initializeChart() {\r\n try {\r\n if (this.chartRoot) return; // Exit if already initialized.\r\n\r\n this.chartRoot = am5.Root.new('customerJourneyChart');\r\n this.chartRoot.setThemes([am5themes_Animated.new(this.chartRoot)]);\r\n\r\n this.chartRoot.container.children.push(am5flow.Sankey.new(this.chartRoot, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 30\r\n }));\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ initializeChart [ERR]:\", error);\r\n }\r\n }\r\n\r\n updateChartData(data: any) {\r\n let filteredData = this.removeCircularLinks(data);\r\n try {\r\n if (!this.chartRoot) throw new Error('Chart not found');\r\n\r\n const series = this.chartRoot.container.children.getIndex(0) as am5flow.Sankey;\r\n if (!series) throw new Error('Chart not found');\r\n\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData);\r\n } else {\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n } catch (error) {\r\n console.log(\"@@ ~ updateChartData [ERR]:\", error);\r\n }\r\n }\r\n\r\n addNewZone() {\r\n const data: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n data.store = data.stores[0].storeId;\r\n\r\n localStorage.setItem(\"header-filters\", JSON.stringify(data));\r\n this.gs.dataRangeValue.next(data)\r\n\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: data.stores[0].storeId },\r\n });\r\n }\r\n\r\n export() {\r\n const payload = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n search: this.searchTerm.toLowerCase(),\r\n sort: this.sortedColumn,\r\n sortBy: this.sortOrder,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n console.log(\"@@ ~ this.headerData.date.startDate:\", this.headerData.date.endDate);\r\n\r\n this.zoneV2Service.getCustomerJourneyTableExport(payload)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n let fileName = 'Customer_Journey_Export';\r\n\r\n if (this.headerData.date.startDate == this.headerData.date.endDate) {\r\n fileName = `${fileName}_${this.headerData.date.startDate}`\r\n } else {\r\n fileName = `${fileName}_${this.headerData.date.startDate}_${this.headerData.date.endDate}`\r\n }\r\n\r\n this.zoneV2Service.saveAsExcelFile(res, fileName);\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n\r\n }\r\n\r\n removeCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from: any, to: any, visited: any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n onSearch(): void {\r\n this.sortedColumn = '';\r\n this.sortOrder = 1\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n onSortTable(column: string): void {\r\n if (this.sortedColumn === column) {\r\n this.sortOrder = this.sortOrder === 1 ? -1 : 1;\r\n } else {\r\n this.sortedColumn = column;\r\n this.sortOrder = 1;\r\n }\r\n this.offset = 1;\r\n this.limit = 10;\r\n\r\n this.getCustomerJourneyTableData();\r\n }\r\n\r\n paginationSize(): number {\r\n return this.totalItems < 10 ? this.totalItems : this.limit;\r\n }\r\n\r\n onPageSizeChange(pageSize: number) {\r\n this.offset = 1;\r\n this.limit = Number(pageSize);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n onPageChange(pageOffset: any) {\r\n this.offset = Number(pageOffset);\r\n this.getCustomerJourneyTableData()\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.chartRoot?.dispose();\r\n }\r\ngetNewZoneFFData:any = [];\r\nzones:any= [];\r\n getNewZoneData() {\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n }\r\n this.zoneService.getNewZoneFF(object).subscribe({\r\n next:(res:any)=>{\r\n // console.log('@@ getNewZoneFF ~ res:', res);\r\n this.getNewZoneFFData = res.data;\r\n },\r\n error:(err:any)=>{\r\n console.log('@@ getheaderZoneApi ~ err:', err);\r\n }\r\n})\r\n}\r\nnoSelectedData =true;\r\ngetSelectedZoneFF(){\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n zoneList: this.selectedZones.map((zone: any) => zone.zoneName),\r\n export : false,\r\n }\r\nthis.zoneService.getSelectedZoneFF(object).subscribe({\r\n next: (res: any) => {\r\n console.log('Response received:', res);\r\n if (res?.data?.data?.zoneData?.length > 0) {\r\n this.noSelectedData = false;\r\n this.zones = res.data.data.zoneData;\r\n } else {\r\n this.noSelectedData = true;\r\n this.zones = [];\r\n }\r\n },\r\n error: (err) => {\r\n console.error('Error from API:', err);\r\n },\r\n complete: () => {\r\n console.log('API call completed');\r\n }\r\n});\r\n}\r\ngetheaderZoneApi() {\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n }\r\nthis.zoneService.getHeaderZone(object).subscribe({\r\n next:(res:any)=>{\r\n this.allZones = res?.data?.data?.zoneData;\r\n this.applyZones();\r\n },\r\n error:(err:any)=>{\r\n console.log('@@ getheaderZoneApi ~ err:', err);\r\n }\r\n})\r\n}\r\n allZones:any = [];\r\n\r\n selectedZones: any[] = [];\r\n dropdownOpen = false;\r\n searchText = '';\r\ncomparisonData: any[] = [];\r\n toggleDropdown() {\r\n this.dropdownOpen = !this.dropdownOpen;\r\n this.searchText = '';\r\n }\r\n\r\nfilteredZones(): any[] {\r\n const filtered = this.allZones.filter(\r\n (zone: any) =>\r\n zone.zoneName.toLowerCase().includes(this.searchText.toLowerCase()) &&\r\n !this.selectedZones.some((z: any) => z.zoneName === zone.zoneName)\r\n );\r\n\r\n // console.log('@@ ~ filteredZones:', filtered);\r\n return filtered;\r\n}\r\n\r\n selectZone(zone: string) {\r\n if (this.selectedZones.length < 3) {\r\n this.selectedZones.push(zone);\r\n this.dropdownOpen = false;\r\n this.searchText = '';\r\n }\r\n }\r\n\r\n removeZone(index: number) {\r\n this.selectedZones.splice(index, 1);\r\n this.getSelectedZoneFF();\r\n }\r\nclearZones() {\r\n this.selectedZones = [];\r\n this.dropdownOpen = false;\r\n this.searchText = '';\r\n this.getSelectedZoneFF();\r\n}\r\n applyZones() {\r\n if (this.selectedZones.length >= 1) {\r\n this.getSelectedZoneFF();\r\n }\r\n }\r\n onExport() {\r\n let object = {\r\n clientId: this.headerData.client,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n zoneList: this.selectedZones.map((zone: any) => zone.zoneName),\r\n export : true,\r\n }\r\n this.zoneService.getSelectedZoneFFExport(object).subscribe({\r\n next:(res:any)=>{\r\n if(this.headerData.date.startDate == this.headerData.date.endDate){\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate;\r\n this.zoneService.saveAsExcelFile1(res, fileName);\r\n } else {\r\n let fileName = 'Shopper Journey_Export_'+this.headerData.date.startDate+'_'+this.headerData.date.endDate;\r\n this.zoneService.saveAsExcelFile1(res, fileName);\r\n }\r\n }, \r\n error: (err: any) => {\r\n const errorMsg =\r\n err?.error?.message ||\r\n err?.error?.error ||\r\n err?.message ||\r\n 'Something went wrong..';\r\n\r\n this.toast.getErrorToast(errorMsg);\r\n}\r\n\r\n })\r\n \r\n }\r\n\r\n nobUpload(){\r\n this.router.navigate([\"/manage/traffic/nob\"]); \r\n }\r\n\r\n draggedIndex: number | null = null;\r\n\r\nonDragStart(index: number) {\r\n this.draggedIndex = index;\r\n}\r\n\r\nonDragOver(event: DragEvent) {\r\n event.preventDefault(); // REQUIRED to allow drop\r\n}\r\n\r\nonDrop(targetIndex: number) {\r\n if (this.draggedIndex === null || this.draggedIndex === targetIndex) {\r\n return;\r\n }\r\n\r\n const draggedItem = this.selectedZones[this.draggedIndex];\r\n\r\n // Remove from old position\r\n this.selectedZones.splice(this.draggedIndex, 1);\r\n\r\n // Insert at new position\r\n this.selectedZones.splice(targetIndex, 0, draggedItem);\r\n\r\n this.draggedIndex = null;\r\n}\r\n\r\nenableDrag(event: MouseEvent) {\r\n const chip = (event.target as HTMLElement).closest('.zone-chip');\r\n if (chip) {\r\n chip.setAttribute('draggable', 'true');\r\n }\r\n}\r\n\r\ndisableDrag(event: MouseEvent) {\r\n const chip = (event.target as HTMLElement).closest('.zone-chip');\r\n if (chip) {\r\n chip.setAttribute('draggable', 'false');\r\n }\r\n}\r\n\r\n}\r\n","<!-- <section id=\"customer-journey-chart\" class=\"card p-5\"> -->\r\n <!-- ---------HEADER---------- -->\r\n <!-- <div class=\"d-flex justify-content-between mb-3\">\r\n <div class=\"d-flex align-items-center justify-content-center gap-3\">\r\n <h3>Customer Journey</h3>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_13146_67458)\">\r\n <path\r\n d=\"M6.06065 6.91667C6.21739 6.47111 6.52675 6.0954 6.93395 5.85609C7.34116 5.61677 7.81991 5.52929 8.28544 5.60914C8.75096 5.68899 9.1732 5.93102 9.47737 6.29235C9.78154 6.65369 9.94802 7.11101 9.94732 7.58333C9.94732 8.91667 7.94732 9.58333 7.94732 9.58333M8.00065 12.25H8.00732M14.6673 8.91667C14.6673 12.5986 11.6826 15.5833 8.00065 15.5833C4.31875 15.5833 1.33398 12.5986 1.33398 8.91667C1.33398 5.23477 4.31875 2.25 8.00065 2.25C11.6826 2.25 14.6673 5.23477 14.6673 8.91667Z\"\r\n stroke=\"#98A2B3\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_13146_67458\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0 0.916016)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-5\">\r\n <div style=\"position: relative\" [hidden]=\"viewMode === 'chart'\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n (change)=\"onSearch()\"\r\n style=\"padding: 0.68rem 3rem\"\r\n class=\"form-control\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\" class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n ></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div id=\"segment-btn\">\r\n <div [class.active]=\"viewMode === 'chart'\" class=\"segment chart-btn\" (click)=\"toggleView('chart')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M15 17.5833V9.25M10 17.5833V4.25M5 17.5833V12.5833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div [class.active]=\"viewMode === 'table'\" class=\"segment table-btn\" (click)=\"toggleView('table')\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <path\r\n d=\"M6.66667 5.91602H17.5M6.66667 10.916H17.5M6.66667 15.916H17.5M2.5 5.91602H2.50833M2.5 10.916H2.50833M2.5 15.916H2.50833\"\r\n stroke=\"#344054\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"25\" viewBox=\"0 0 24 25\" fill=\"none\">\r\n <path\r\n d=\"M12 13.916C12.5523 13.916 13 13.4683 13 12.916C13 12.3637 12.5523 11.916 12 11.916C11.4477 11.916 11 12.3637 11 12.916C11 13.4683 11.4477 13.916 12 13.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 6.91602C12.5523 6.91602 13 6.4683 13 5.91602C13 5.36373 12.5523 4.91602 12 4.91602C11.4477 4.91602 11 5.36373 11 5.91602C11 6.4683 11.4477 6.91602 12 6.91602Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 20.916C12.5523 20.916 13 20.4683 13 19.916C13 19.3637 12.5523 18.916 12 18.916C11.4477 18.916 11 19.3637 11 19.916C11 20.4683 11.4477 20.916 12 20.916Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li>\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M6.00065 1.33398V10.6673M1.33398 6.00065H10.6673\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"addNewZone()\"> Add New Zone </a>\r\n </span>\r\n </li>\r\n <li [hidden]=\"viewMode === 'chart'\">\r\n <span class=\"dropdown-item cursor-pointer d-flex justify-content-start align-items-center\">\r\n <svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M14 10V12.6667C14 13.0203 13.8595 13.3594 13.6095 13.6095C13.3594 13.8595 13.0203 14 12.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V10M11.3333 5.33333L8 2M8 2L4.66667 5.33333M8 2V10\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <a (click)=\"export()\"> Export </a>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- <div [hidden]=\"!isPageLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <!-- <div [hidden]=\"isPageLoading\"> -->\r\n <!-- ---------CHART---------- -->\r\n <!-- <div [hidden]=\"viewMode === 'table'\">\r\n <div [hidden]=\"customerJourneyChartData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyChartData.length === 0\">\r\n <div id=\"customerJourneyChart\"></div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- ---------TABLE---------- -->\r\n <!-- <div [hidden]=\"viewMode === 'chart'\">\r\n <div [hidden]=\"customerJourneyTableData.length !== 0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [hidden]=\"customerJourneyTableData.length === 0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneName')\">\r\n Zone Name\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneName' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('noOfStores')\">\r\n No. of stores\r\n <svg\r\n [ngClass]=\"sortedColumn === 'noOfStores' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'noOfStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('zoneFF')\">\r\n Zone FF\r\n <svg\r\n [ngClass]=\"sortedColumn === 'zoneFF' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'zoneFF' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('impressions')\">\r\n Concentration\r\n <svg\r\n [ngClass]=\"sortedColumn === 'impressions' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'impressions' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"onSortTable('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg\r\n [ngClass]=\"sortedColumn === 'AvgDwellTime' && sortOrder === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'AvgDwellTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyTableData\">\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.noOfStores || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFF || \"--\" }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressions || 0 }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.AvgDwellTime || 0 }} Mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n \r\n <lib-pagination\r\n class=\"text-start\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n ></lib-pagination>\r\n </div>\r\n </div> -->\r\n <!-- </div>\r\n</section> -->\r\n\r\n<div class=\"card mt-3\">\r\n <div class=\"card-header border-bottom-0 d-flex justify-content-between align-items-center\">\r\n <h3 class=\"card-title\">Zone-Based Shopper Journey </h3>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" *ngIf=\"selectedZones.length >= 1\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n</div>\r\n<div class=\"card-body pt-1\">\r\n <div class=\"row bordered-box\">\r\n <div class=\"col-md-3\">\r\n <div class=\"compare-card\">\r\n <h3>Select Zones to Compare</h3>\r\n\r\n <!-- Selected Zones List -->\r\n <div class=\"selected-zones\">\r\n <div *ngFor=\"let zone of selectedZones; let i = index\" class=\"zone-chip\" draggable=\"true\"\r\n (dragstart)=\"onDragStart(i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop(i)\">\r\n <span class=\"drag-icon\" (mousedown)=\"enableDrag($event)\"\r\n (mouseup)=\"disableDrag($event)\">☰</span>\r\n <span>{{ zone.zoneName | titlecase}}</span>\r\n <button class=\"remove-btn\" (click)=\"removeZone(i)\">✕</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Select Dropdown -->\r\n <div class=\"select-zone\" *ngIf=\"selectedZones.length < 3\">\r\n <div class=\"dropdown-container\" (click)=\"toggleDropdown()\">\r\n <span>+ Select Zone</span>\r\n </div>\r\n\r\n <div class=\"dropdown\" *ngIf=\"dropdownOpen\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search zones...\"\r\n [(ngModel)]=\"searchText\"\r\n class=\"dropdown-search\"\r\n />\r\n <ul class=\"dropdown-list\">\r\n <li\r\n *ngFor=\"let zone of filteredZones()\"\r\n (click)=\"selectZone(zone)\"\r\n [class.disabled]=\"selectedZones.includes(zone)\"\r\n >\r\n {{ zone?.zoneName | titlecase}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <!-- Info Text -->\r\n <p class=\"hint-text mt-20\">\r\n {{ selectedZones.length < 1\r\n ? 'Choose minimum 2, max 3 Zones to compare'\r\n : 'Maximum 3 Zones to compare' }}\r\n </p>\r\n\r\n <!-- Apply Button -->\r\n <div class=\"button-group\">\r\n <!-- Reset button: show only when 3 zones selected -->\r\n <button\r\n *ngIf=\"selectedZones.length >= 1\"\r\n class=\"btn btn-outline reset-btn w-100\"\r\n (click)=\"clearZones()\"\r\n >\r\n Reset\r\n </button>\r\n\r\n <!-- Apply button: always visible -->\r\n <button\r\n class=\"apply-btn w-100\"\r\n [class.active]=\"selectedZones.length >= 1\"\r\n [disabled]=\"selectedZones.length < 1\"\r\n (click)=\"applyZones()\"\r\n >\r\n Apply\r\n </button>\r\n</div>\r\n\r\n</div>\r\n </div>\r\n <div class=\"col-md-9\">\r\n <div class=\"card-header ellipse1 border-0 px-3 mb-2\">\r\n <h3 class=\"card-title align-items-start flex-column\"><span class=\"card-label header\">Based on Overall\r\n Footfall</span><span class=\"sub-header\">Tells you the percentage of total store footfall attributed to each zone\r\n </span></h3>\r\n </div>\r\n<div class=\"d-flex justify-content-between mt-3\" >\r\n <div class=\"bordered-box w-50 me-2 py-3\">\r\n <div class=\"group d-flex justify-content-between px-3\">\r\n <span class=\"text-title py-2\">Overall Footfall :</span>\r\n <span><span class=\"text-val\">{{getNewZoneFFData?.overallFootfall ? getNewZoneFFData?.overallFootfall :'--'}}</span> <span class=\"text-perc ms-1\">({{getNewZoneFFData?.overallFootfallPercentage ? getNewZoneFFData?.overallFootfallPercentage :'--'}})</span></span>\r\n </div>\r\n </div>\r\n <div class=\"bordered-box w-50 py-3\">\r\n <div class=\"group d-flex justify-content-between px-3\">\r\n <span class=\"text-title py-2\">NoB :</span>\r\n <span class=\"text-val\">{{getNewZoneFFData?.nobCount ?? '0'}} <span *ngIf=\"this.clientData?.isNOB\" class=\"px-0 cursor-pointer\" (click)=\"nobUpload()\"><svg placement=\"top\" ngbTooltip=\"Upload NoB\" xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\"\r\n viewBox=\"0 0 40 40\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_15106_106090)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"#EAF8FF\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#EAF8FF\" />\r\n <path\r\n d=\"M23.3326 22.3332L19.9992 18.9999M19.9992 18.9999L16.6659 22.3332M19.9992 18.9999V26.4999M26.9909 24.3249C27.8037 23.8818 28.4458 23.1806 28.8158 22.3321C29.1858 21.4835 29.2627 20.5359 29.0344 19.6388C28.8061 18.7417 28.2855 17.9462 27.5548 17.3778C26.8241 16.8094 25.925 16.5005 24.9992 16.4999H23.9492C23.697 15.5243 23.2269 14.6185 22.5742 13.8507C21.9215 13.0829 21.1033 12.4731 20.181 12.0671C19.2587 11.661 18.2564 11.4694 17.2493 11.5065C16.2423 11.5436 15.2568 11.8085 14.3669 12.2813C13.477 12.7541 12.7058 13.4225 12.1114 14.2362C11.517 15.05 11.1148 15.9879 10.9351 16.9794C10.7553 17.9709 10.8027 18.9903 11.0736 19.961C11.3445 20.9316 11.8319 21.8281 12.4992 22.5832\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_15106_106090\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_15106_106090\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_15106_106090\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span></span>\r\n </div>\r\n </div>\r\n </div>\r\n <table *ngIf=\"!noSelectedData\" class=\"table bottom-border mt-3\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th class=\"w-50\">Zones</th>\r\n <th class=\"w-50\">Footfall Count (Concentration %)</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of zones\">\r\n <td>\r\n <div class=\"table-title subscribedtext\">\r\n {{ item.zoneName | titlecase}}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row\">\r\n <div class=\"col-6 mt-2\">\r\n <ngb-progressbar class=\"mb-3\" height=\"5px\" type=\"primary\" [value]=\"item.percentage\" />\r\n </div>\r\n <div class=\"col-6\">\r\n {{ item.footfall }} ({{ item.percentage }}%)\r\n <!-- {{ item.value?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--'}}% -->\r\n \r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n\r\n\r\n <div *ngIf=\"noSelectedData\" class=\"row\">\r\n <div class=\"card-body pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"footimg-nodata1\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title mb-3\">Select Zones to Compare</div>\r\n <!-- <div class=\"nodata-sub\">There is no result for this conversion funnel</div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n@Component({\r\n selector: 'lib-tango-analyse-zone',\r\n templateUrl: './tango-analyse-zone.component.html',\r\n styleUrl: './tango-analyse-zone.component.scss',\r\n})\r\nexport class TangoAnalyseZoneComponent implements OnInit,OnDestroy {\r\n storeId: number = 0;\r\n clientId: number; \r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService,private zoneService:ZoneService,private cd:ChangeDetectorRef,\r\n ) {\r\n }\r\n clientData: any;\r\n // receivedData: any = '';\r\n ngOnInit(): void {\r\n this.setPageData();\r\n const userData: any = JSON.parse(localStorage.getItem(\"client-details\") || \"{}\");\r\n this.clientData = userData;\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId() \r\n this.checkTodayReportStatus() \r\n})\r\n}\r\n\r\nhasSegmentationData: boolean = false;\r\n\r\nupdateSegmentationStatus(hasData: boolean) {\r\n this.hasSegmentationData = hasData;\r\n}\r\n// receiveData(data: any) {\r\n// this.receivedData = data;\r\n// console.log(data)\r\n// this.cd.detectChanges();\r\n// }\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData?.stores?.filter((store: any) => store?.checked).length;\r\n }\r\n\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n this.dataProcessedLoading = false;\r\n this.cd.detectChanges();\r\n }\r\n });\r\n }\r\n}\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<div *ngIf=\"storeId === 1\">\r\n<lib-zone-concentration></lib-zone-concentration>\r\n</div>\r\n<div class=\"mt-4\" *ngIf=\"!(storeId > 1 && headerData?.client === '459')\">\r\n <lib-overallcards></lib-overallcards>\r\n</div>\r\n<div *ngIf=\"storeId === 1\">\r\n <lib-segmentation></lib-segmentation>\r\n</div>\r\n <!-- <ng-container *ngIf=\"hasSegmentationData === true\"> -->\r\n \r\n <!-- </ng-container> -->\r\n <!-- <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-8\">\r\n <lib-interation-table-client430></lib-interation-table-client430>\r\n </div>\r\n <div *ngIf=\"storeId === 1 && headerData?.client === '430'\" class=\"col-4\">\r\n <lib-passerby-table></lib-passerby-table>\r\n </div>\r\n </div> -->\r\n\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId === 1 && headerData?.client === '459'\">\r\n<lib-interation-table-client459></lib-interation-table-client459>\r\n</div>\r\n<div class=\"mt-2\" *ngIf=\"storeId > 1\">\r\n <div *ngIf=\"headerData?.client !== '459'\">\r\n <lib-top-performing-zones *ngIf=\"clientData\" [clientData]=\"clientData\"></lib-top-performing-zones>\r\n </div>\r\n</div>\r\n\r\n<div class=\"mt-2\" *ngIf=\"storeId === 1 && headerData?.client === '478'\">\r\n <lib-customer-journey-chart *ngIf=\"clientData\" [clientData]=\"clientData\"></lib-customer-journey-chart>\r\n</div>\r\n\r\n<div class=\"mt-4\" *ngIf=\"storeId > 1\">\r\n <lib-zone-summary-table *ngIf=\"clientData\" [clientData]=\"clientData\"></lib-zone-summary-table>\r\n</div>\r\n</div>\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> ","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime} from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'lib-zones-cards',\r\n templateUrl: './zones-cards.component.html',\r\n styleUrl: './zones-cards.component.scss'\r\n})\r\nexport class ZonesCardsComponent {\r\n zoneCardsData: any;\r\n headerData: any;\r\n zoneCardsFootfall: number | undefined;\r\n private destroy$ = new Subject<void>();\r\n constructor(private Zonev2Service: Zonev2Service,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService, private router: Router, private ActivatedRoute: ActivatedRoute,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getZoneCards();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getZoneCards(): void {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getZoneCardsData(requestData).pipe(takeUntil(this.destroy$)).subscribe(\r\n (response: any) => {\r\n if (response?.status === 'success') {\r\n this.zoneCardsData = response.data.card;\r\n this.Zonev2Service.updateFootfall(response.data.card.footfall.count);\r\n \r\n } else {\r\n this.zoneCardsData = []\r\n }\r\n },\r\n (error) => {\r\n this.zoneCardsData = []\r\n console.error('Error fetching zone card data', error);\r\n }\r\n );\r\n }\r\n\r\n// redirectToHeatmap(zoneName: string): void {\r\n// if (zoneName) {\r\n// this.router.navigate([], {\r\n// relativeTo: this.ActivatedRoute,\r\n// queryParams: { zoneName } });\r\n// const heatmapElement = document.querySelector(`#heatmapscroll`);\r\n// console.log(\"heatmapElement\", heatmapElement)\r\n// if (heatmapElement) {\r\n \r\n// heatmapElement.scrollIntoView({ block: 'center', behavior: 'smooth' });\r\n// }\r\n// }\r\n// }\r\n\r\n}\r\n","<div class=\"col-md-12\">\r\n <div class=\"row d-flex justify-content-between align-items-stretch\">\r\n\r\n <!-- Total Store Footfall Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.footfall?.count ? zoneCardsData?.footfall?.count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</span>\r\n <span class=\"cardtext\">Total Store Footfall</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.footfall?.zoneName ? (zoneCardsData?.footfall?.zoneName | titlecase) : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Footfall <span class=\"subcount\">- {{zoneCardsData?.footfall?.zoneFootfallCount ? zoneCardsData?.footfall?.zoneFootfallCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--'}}</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Highest Impression Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.impression?.rate ? zoneCardsData?.impression?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Highest Store impression</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.impression?.zoneName ?(zoneCardsData?.impression?.zoneName | titlecase) : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with <span class=\"subcount\">{{zoneCardsData?.impression?.zoneImpressionRate ? zoneCardsData?.impression?.zoneImpressionRate + '%' : '--'}}</span> <br> impression</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Total Bounced Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.bounced?.rate ? zoneCardsData?.bounced?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Zone Bounced Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.bounced?.zoneName ? zoneCardsData?.bounced?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Bounced rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Engagers Rate Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.engagers?.rate ? zoneCardsData?.engagers?.rate + '%' : '--'}}</span>\r\n <span class=\"cardtext\">Top Engagers Zone Rate</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">\r\n \r\n {{zoneCardsData?.engagers?.zoneName ? zoneCardsData?.engagers?.zoneName : '--'}}\r\n \r\n </div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Engager Rate</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Average Dwell Time Card -->\r\n <div class=\"col px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">{{zoneCardsData?.avgDwellTime?.rate ? zoneCardsData?.avgDwellTime?.rate + ' Mins' : '--'}}</span>\r\n <span class=\"cardtext\">Average Top Zone Dwell Time</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-auto py-3 px-3\">\r\n <div class=\"cardcount my-2\">{{zoneCardsData?.avgDwellTime?.zoneName ? zoneCardsData?.avgDwellTime?.zoneName : '--'}}</div>\r\n <div class=\"cardtext\">Zone with the <br> Highest Dwell Time</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { AfterViewInit, Component, Input, ViewChild } from '@angular/core';\r\nimport { NgbCarousel, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'lib-store-zoom-heatmap',\r\n templateUrl: './store-zoom-heatmap.component.html',\r\n styleUrl: './store-zoom-heatmap.component.scss'\r\n})\r\nexport class StoreZoomHeatmapComponent implements AfterViewInit {\r\n @ViewChild('carousel1', { static: true }) carousel1!: NgbCarousel;\r\n \r\n @Input() imageURL: [];\r\n overallStoreData: { ImageURLs: Array<{ URL: string, streamName: string }> } = { ImageURLs: [] };\r\n currentSlideIndex = 0;\r\n\r\n currentSlide = 0;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.imageURL) {\r\n this.overallStoreData.ImageURLs = this.imageURL; \r\n \r\n \r\n }\r\n}\r\n\r\nngAfterViewInit(): void {\r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n prevElement?.setAttribute('style',\"display:none\")\r\n}\r\n\r\nonSlideChange\r\n(slideEvent: NgbSlideEvent) {\r\nconst\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.modal-dialog .carousel-control-prev');\r\n let nextElement = document.querySelector('.modal-dialog .carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n if(this.currentSlide === this.overallStoreData.ImageURLs.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else{\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n}\r\n}\r\n","<div class=\"modal-body\">\r\n <ngb-carousel #carousel1=\"ngbCarousel\" [interval]=\"0\" (slide)=\"onSlideChange($event)\" [pauseOnHover]=\"true\" *ngIf=\"overallStoreData?.ImageURLs?.length\">\r\n <ng-container *ngFor=\"let image of overallStoreData.ImageURLs;let i= index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container\">\r\n <img [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n ","import { ChangeDetectorRef, Component, ElementRef, NgZone, AfterViewInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { NgbCarousel, NgbModal, NgbSlideEvent } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport dayjs from 'dayjs';\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5percent from '@amcharts/amcharts5/percent';\r\nimport * as am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { StoreZoomHeatmapComponent } from './store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { ActivatedRoute } from '@angular/router';\r\n@Component({\r\n selector: 'lib-store-heatmap',\r\n templateUrl: './store-heatmap.component.html',\r\n styleUrl: './store-heatmap.component.scss'\r\n})\r\nexport class StoreHeatmapComponent {\r\n @ViewChild('carousel', { static: true }) carousel!: NgbCarousel;\r\n private readonly destroy$ = new Subject();\r\n selectedTab: string = '';\r\n headerData: any;\r\n dayjs = dayjs;\r\n disableDay: boolean = false;\r\n disableWeek: boolean = false;\r\n disableMonth: boolean = false;\r\n type: string = 'daily';\r\n heatmapLoading: boolean = true;\r\n heatmapNoData: boolean = false;\r\n zoneName: string = '';\r\n selectedDate: string = '';\r\n overallStoreData: any = {};\r\n overallStoreconcentrationData: any = {}\r\n // zoneConcentrationData: any[] = [];\r\n availableZones: any[] = [];\r\n overallStoreConcentrationDates: any[] = [];\r\n periodzone: number = 1;\r\n customOption: boolean = false;\r\n searchInput: any = \"\";\r\n sortColumName: string = '';\r\n sortBy: number = 1;\r\n sortDirection: number = -1;\r\n genderAnalysis: any[] = [];\r\n ageAnalysis: any[] = [];\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n private genderroot!: am5.Root;\r\n private arcroot!: am5.Root;\r\n currentZone: any; // Declare as 'any' or use a specific type if known\r\n otherZone: any;\r\n arcDiagram: any;\r\n currentSlideIndex = 0;\r\n customArrow: boolean = false;\r\n trajectoryNoData: boolean = false;\r\n trajectoryLoading: boolean = true;\r\n trajectoryRateNoData: boolean = false;\r\n trajectoryRateLoading: boolean = true;\r\n cardcustomArrow: boolean = false;\r\n\r\n currentSlide = 0;\r\n @ViewChild('dateList', {read:ElementRef}) dateList!:ElementRef;\r\n @ViewChild('zoneNameList', {read:ElementRef}) zoneNameList!:ElementRef;\r\n\r\n constructor(private zone: NgZone, public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService, private elementRef: ElementRef,private route: ActivatedRoute) { \r\n \r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n let sDate = this.dayjs(this.headerData.date.startDate);\r\n let eDate = this.dayjs(this.headerData.date.endDate);\r\n this.customArrow = false;\r\n this.cardcustomArrow = false;\r\n this.type = 'daily';\r\n if(eDate.diff(sDate,'day') < 6) {\r\n this.disableWeek = true;\r\n this.disableMonth = true;\r\n this.type = 'daily';\r\n }\r\n else if(eDate.diff(sDate,'day') < 27) {\r\n this.disableMonth = true;\r\n this.disableDay = false;\r\n this.disableWeek = false;\r\n this.type = 'weekly';\r\n }\r\n else {\r\n this.disableDay = false;\r\n this.disableWeek = false;\r\n this.disableMonth = false;\r\n this.type = 'monthly';\r\n }\r\n\r\n this.route.queryParams.subscribe(params => {\r\n this.zoneName = params['zoneName'];\r\n if (this.zoneName) {\r\n this.changeTab(this.zoneName);\r\n\r\n }\r\n });\r\n \r\n this.getAvailableZoneNames();\r\n // this.getTrajectoryAnalysis();\r\n \r\n // this.getOverallStoreConcentrationData();\r\n // this.getOverallStoreHeatmapDates();\r\n })\r\n\r\n }\r\n ngOnDestroy(): void {\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n if (this.arcroot) {\r\n this.arcroot.dispose();\r\n }\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n\r\n }\r\n\r\n changeTab(tabName: string) {\r\n this.selectedTab = tabName;\r\n this.zoneName = tabName;\r\n // this.type = 'daily';\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.changeDetector.detectChanges(); \r\n }\r\n getAvailableZoneNames(): void {\r\n // this.cardcustomArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = true;\r\n this.overallStoreData = [];\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate, // Adjust based on your date selection mechanism\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n };\r\n\r\n this.Zonev2Service.getAvailableZoneNames(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.availableZones = response.data.availableZoneData;\r\n if (this.availableZones.length) {\r\n\r\n this.selectedTab = this.availableZones[0].zoneName;\r\n this.zoneName = this.selectedTab;\r\n // this.changeTab(this.selectedTab);\r\n }\r\n // this.zoneName = response.data.zoneConcentrationData[0].zoneName;\r\n // this.zoneName = this.availableZones.length ? this.availableZones[0].zoneName : '';\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = false;\r\n this.getOverallStoreHeatmapDates();\r\n this.getTrajectoryAnalysis();\r\n this.getTrajectoryRateAnalysis();\r\n this.getAnalaysisSummary()\r\n \r\n\r\n\r\n\r\n } else {\r\n // this.zonesummaryLoading = false;\r\n // this.zonesummaryNoData = true;\r\n\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n\r\n this.availableZones = [];\r\n this.overallStoreConcentrationDates = [];\r\n this.overallStoreconcentrationData = [];\r\n this.cardNoData = true;\r\n this.cardDataLoading = false;\r\n // this.overallStoreData = []\r\n this.zoneName = \"\"\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.availableZones = [];\r\n this.zoneName = \"\"\r\n // this.headerData.date.startDate = null;\r\n // this.headerData.date.endDate = null;\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n getOverallStoreConcentrationData(): void {\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n // this.cardDataLoading = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n // storeId: [\"11-1176\"],\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n zoneDate: this.selectedDate\r\n };\r\n this.Zonev2Service.getOverallStoreConcentrationData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.heatmapLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.formatDateInput(this.selectedDate);\r\n \r\n // this.overallStoreData = response.data.overallStoreConcentrationDatas;\r\n this.overallStoreconcentrationData = response.data.overallStoreConcentrationDatas;\r\n this.heatmapNoData = false;\r\n setTimeout(() => {\r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n prevElement?.setAttribute('style','display:none');\r\n }, 200);\r\n \r\n \r\n } else {\r\n this.overallStoreconcentrationData = [];\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.overallStoreconcentrationData = []\r\n // this.zoneConcentrationData = []\r\n // this.availableZones = [];\r\n // console.error('API call failed', error);\r\n }\r\n );\r\n }\r\n\r\ngetOverallStoreHeatmapDates(): void {\r\n this.overallStoreConcentrationDates = [];\r\n this.customArrow = false;\r\n this.heatmapLoading = true;\r\n this.heatmapNoData = true;\r\n\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((s: any) => s.checked).map((s: any) => s.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n dateType: this.type,\r\n };\r\n\r\n this.Zonev2Service.getOverallStoreHeatmapDates(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: any) => {\r\n const data = response?.data?.overallStoreConcentrationDates || [];\r\n this.overallStoreConcentrationDates = data;\r\n this.heatmapLoading = false;\r\n\r\n if (response?.code === 200 && response?.status === 'success' && data.length) {\r\n this.selectedDate = data[0].zoneDate;\r\n\r\n // Show arrows based on count\r\n this.customArrow =\r\n (this.type === 'daily' && data.length > 7) ||\r\n (this.type === 'weekly' && data.length > 5);\r\n\r\n // ✅ Load dependent data\r\n this.getOverallStoreConcentrationData();\r\n this.getAnalaysisSummary();\r\n } else {\r\n this.heatmapNoData = true;\r\n this.cardNoData = true;\r\n this.overallStoreConcentrationDates = [];\r\n this.overallStoreData =[];\r\n }\r\n },\r\n error: () => {\r\n this.heatmapLoading = false;\r\n this.heatmapNoData = true;\r\n },\r\n });\r\n}\r\n\r\n\r\nonDateChange(date: string): void {\r\n if (this.selectedDate !== date) {\r\n this.selectedDate = date;\r\n this.getOverallStoreConcentrationData();\r\n this.getAnalaysisSummary();\r\n }\r\n}\r\n\r\n\r\nselectPlan(selectedType: string): void {\r\n this.type = selectedType;\r\n this.getOverallStoreHeatmapDates(); // auto handles everything\r\n}\r\n\r\n\r\n onZoneClick(zoneName: string): void {\r\n \r\n this.zoneName = zoneName;\r\n this.getOverallStoreHeatmapDates();\r\n \r\n }\r\n concentrationHeatmap(imageURL: string) {\r\n const modalRef = this.modalService.open(StoreZoomHeatmapComponent, {\r\n centered: true, size: 'xl'\r\n });\r\n modalRef.componentInstance.imageURL = imageURL;\r\n modalRef.result.then((result) => {\r\n\r\n });\r\n }\r\n genderchart() {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"genderchartdiv\");\r\n if (!chartDiv) {\r\n // console.error(\"Could not find HTML element with id `genderchartdiv`\");\r\n return;\r\n }\r\n\r\n if (this.genderroot) {\r\n this.genderroot.dispose();\r\n }\r\n this.genderroot = am5.Root.new('genderchartdiv');\r\n\r\n const chart = this.genderroot.container.children.push(\r\n am5percent.PieChart.new(this.genderroot, {\r\n endAngle: 270,\r\n innerRadius: am5.percent(60)\r\n })\r\n );\r\n\r\n const series = chart.series.push(\r\n am5percent.PieSeries.new(this.genderroot, {\r\n valueField: 'value',\r\n categoryField: 'category',\r\n endAngle: 270,\r\n alignLabels: false\r\n })\r\n );\r\n\r\n series.states.create('hidden', {\r\n endAngle: -90\r\n });\r\n\r\n series.labels.template.setAll({\r\n textType: 'circular',\r\n visible: false,\r\n centerX: 0,\r\n centerY: 0\r\n });\r\n\r\n series.data.setAll(this.genderAnalysis);\r\n const legend = this.genderroot.container.children.push(\r\n am5.Legend.new(this.genderroot, {\r\n x: am5.percent(50),\r\n centerX: am5.percent(50),\r\n y: am5.percent(95),\r\n layout: this.genderroot.horizontalLayout,\r\n })\r\n );\r\n\r\n legend.labels.template.setAll({\r\n text: \"{category}: {value}%\",\r\n fill: am5.color(\"#464E5F\"),\r\n fontFamily: \"Inter\",\r\n fontSize: \"16px\",\r\n fontWeight: \"400\",\r\n\r\n });\r\n\r\n legend.valueLabels.template.setAll({\r\n text: \"{value}%\",\r\n fontWeight: \"700\",\r\n fontFamily: \"Inter\",\r\n fontSize: \"14px\",\r\n fill: am5.color(\"#464E5F\"),\r\n });\r\n\r\n legend.data.setAll(series.dataItems);\r\n\r\n // Animation\r\n series.appear(1000, 100);\r\n }, 100);\r\n }\r\n// --- Utility: format date string (single or range)\r\nprivate formatDateInput(dateStr: string): { fromDate: string; toDate: string } {\r\n if (!dateStr) {\r\n return { fromDate: this.headerData.date.startDate, toDate: this.headerData.date.endDate };\r\n }\r\n\r\n const formatLocalDate = (d: string) => {\r\n const date = new Date(d);\r\n const y = date.getFullYear();\r\n const m = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n return `${y}-${m}-${day}`;\r\n };\r\n\r\n const parts = dateStr.split(' - ').map(p => p.trim());\r\n const from = formatLocalDate(parts[0]);\r\n const to = formatLocalDate(parts[1] || parts[0]);\r\n return { fromDate: from, toDate: to };\r\n}\r\n\r\n\r\ngetAnalaysisSummary(): void {\r\n const { fromDate, toDate } = this.formatDateInput(this.selectedDate);\r\n\r\n const requestData = {\r\n fromDate,\r\n toDate,\r\n storeId: this.headerData.stores.filter((s: any) => s.checked).map((s: any) => s.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n\r\n this.cardDataLoading = true;\r\n this.cardNoData = false;\r\n\r\n this.Zonev2Service.getAnalaysisSummary(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: any) => {\r\n const zoneData = response?.data?.zoneConcentrationData || [];\r\n if (zoneData.length) {\r\n this.overallStoreData = zoneData[0];\r\n this.ageAnalysis = this.overallStoreData.ageAnalysis || [];\r\n this.genderAnalysis = this.overallStoreData.genderAnalysis || [];\r\n setTimeout(() => this.genderchart(), 200);\r\n this.cardNoData = false;\r\n } else {\r\n this.overallStoreData = [];\r\n this.cardNoData = true;\r\n }\r\n this.cardDataLoading = false;\r\n },\r\n error: () => {\r\n this.overallStoreData = [];\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n },\r\n });\r\n}\r\n\r\n\r\n getAgeArray() {\r\n let data: any = [];\r\n this.ageAnalysis.forEach((item: any, index: any) => {\r\n if (index % 2 == 0) {\r\n data.push(index);\r\n }\r\n })\r\n\r\n return data;\r\n }\r\n getTrajectoryAnalysis(): void {\r\n this.trajectoryLoading = true;\r\n this.trajectoryNoData = false;\r\n // this.cardDataLoading = true;\r\n // this.cardNoData = true;\r\n\r\n if (!this.zoneName || this.zoneName.trim() === '') {\r\n if (this.availableZones && this.availableZones.length > 0) {\r\n this.zoneName = this.availableZones[0].zoneName;\r\n } else {\r\n this.trajectoryLoading = false;\r\n this.trajectoryNoData = true;\r\n return; \r\n }\r\n }\r\n \r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName\r\n // zoneName: \"Fresh\", // Fixed as per your current implementation\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.trajectoryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const data = response.data.trajectoryAnalysisData;\r\n const zoneList = data.zoneList;\r\n const diagramData: Array<{ from: string; to: string; value: number; fill: am5.Color }> = [];\r\n zoneList.forEach((zone: { from: any; to: any; value: any; }, index: number) => {\r\n diagramData.push({\r\n from: zone.from,\r\n to: zone.to,\r\n value: zone.value, // Use the value from the API response\r\n fill: this.getZoneColor(index) // Custom function to get a color for the zone\r\n });\r\n });\r\n this.trajectoryNoData = false;\r\n if (diagramData.length > 0) {\r\n \r\n setTimeout(() => {\r\n this.createArcDiagram(diagramData);\r\n }, 200);\r\n // this.trajectoryNoData = false;\r\n } else {\r\n // this.trajectoryNoData = true;\r\n }\r\n \r\n // this.cardNoData = false;\r\n } else {\r\n this.trajectoryNoData = true; \r\n // this.cardDataLoading = false;\r\n // this.cardNoData = true; // Set no data flag if response is unsuccessful\r\n }\r\n this.cardDataLoading = false; // Stop loading spinner after data is processed\r\n },\r\n error => {\r\n this.trajectoryLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true; // Set no data flag on error\r\n });\r\n }\r\n getTrajectoryRateAnalysis(): void {\r\n this.trajectoryRateLoading = true;\r\n this.trajectoryRateNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n zoneName: this.zoneName,\r\n };\r\n \r\n this.Zonev2Service.getTrajectoryRateAnalysis(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(\r\n (response: any) => {\r\n this.trajectoryRateLoading = false;\r\n \r\n if (response?.code === 200 && response?.status === \"success\") {\r\n const zoneData = response.data.zoneConcentrationData[0]?.trajectoryAnalysisRateData;\r\n \r\n this.currentZone = response.data.zoneConcentrationData[0]?.currentZone;\r\n this.otherZone = zoneData.otherZone;\r\n if (this.currentZone && this.otherZone) {\r\n // this.currentZone.impressionRate, this.otherZone.ageGenderRate, etc.\r\n } else {\r\n // this.trajectoryRateNoData = true;\r\n }\r\n \r\n this.trajectoryRateNoData = false; // Data exists\r\n } else {\r\n // response.data.zoneConcentrationData = []\r\n this.trajectoryRateNoData = true;\r\n }\r\n this.cardDataLoading = false;\r\n },\r\n (error) => {\r\n this.trajectoryRateLoading = false;\r\n this.cardDataLoading = false;\r\n this.cardNoData = true;\r\n }\r\n );\r\n }\r\n \r\n createArcDiagram(diagramData: { from: string; to: string; value: number; fill: am5.Color; }[]): void {\r\n setTimeout(() => {\r\n // Dispose previous diagram if it exists\r\n if (this.arcDiagram) {\r\n this.arcDiagram.dispose();\r\n }\r\n\r\n // Create root element\r\n const root = am5.Root.new(\"arcDiagramDiv\");\r\n root.container.setAll({\r\n width: am5.p100, // 100% width\r\n height: am5.percent(80) // Adjust the percentage to control the height\r\n });\r\n\r\n // Create series\r\n const series = root.container.children.push(am5flow.ArcDiagram.new(root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n orientation: \"horizontal\"\r\n }));\r\n\r\n // Configure labels\r\n series.nodes.labels.template.setAll({\r\n fontSize: \"16px\",\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n width: 160\r\n });\r\n \r\n // Animated bullets\r\n series.bullets.push((root, series, dataItem) => {\r\n const bullet = am5.Bullet.new(root, {\r\n locationY: Math.random(),\r\n sprite: am5.Circle.new(root, {\r\n radius: 2,\r\n fill: dataItem.get(\"source\").get(\"fill\")\r\n })\r\n });\r\n\r\n bullet.animate({\r\n key: \"locationY\",\r\n to: 1,\r\n from: 0,\r\n duration: Math.random() * 1000 + 2000,\r\n loops: Infinity\r\n });\r\n\r\n return bullet;\r\n });\r\n\r\n // Set data dynamically from the API response\r\n series.data.setAll(diagramData);\r\n\r\n // Make stuff animate on load\r\n series.appear(1000, 100);\r\n this.arcDiagram = series;\r\n },100);\r\n }\r\n getZoneColor(index: number): am5.Color {\r\n const colors = [am5.color(0x4285F4), am5.color(0xAA46BB), am5.color(0xFF7043), am5.color(0x8E24AA)];\r\n return colors[index % colors.length];\r\n }\r\n onSlideChange\r\n (slideEvent: NgbSlideEvent) {\r\n const\r\n slideIndex = +slideEvent.current.\r\n replace\r\n (\r\n 'ngb-slide-'\r\n ,\r\n ''\r\n ); this.currentSlide = slideIndex; \r\n let prevElement = document.querySelector('.carousel-control-prev');\r\n let nextElement = document.querySelector('.carousel-control-next');\r\n if(this.currentSlide == 0) {\r\n nextElement?.removeAttribute('style');\r\n if(prevElement) {\r\n prevElement.setAttribute('style',\"display:none\")\r\n }\r\n }\r\n else if(this.currentSlide === this.overallStoreconcentrationData?.ImageURLs?.length - 1) {\r\n prevElement?.removeAttribute('style');\r\n if(nextElement) {\r\n nextElement.setAttribute('style',\"display:none\")\r\n }\r\n\r\n }\r\n else {\r\n prevElement?.removeAttribute('style');\r\n nextElement?.removeAttribute('style');\r\n }\r\n }\r\n\r\n scrollLeft() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: -200,behavior:'smooth'});}\r\n scrollRight() {const element = this.dateList.nativeElement; element.scrollBy\r\n ({left: 200,behavior:'smooth'});}\r\n\r\n zonescrollLeft() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: -150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n \r\n zonescrollRight() {\r\n this.zoneNameList.nativeElement.scrollBy({\r\n left: 150, // Adjust the scroll amount as needed\r\n behavior: 'smooth'\r\n });\r\n }\r\n}","<div class=\"card\">\r\n <div class=\"card-header storecard\">\r\n <div class=\"zone-container position-relative mx-5\">\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-left position-absolute\" (click)=\"zonescrollLeft()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <div class=\"zone-buttons-container d-flex justify-content-start align-items-center no-wrap-list ms-4 me-10\" #zoneNameList>\r\n <button id=\"heatmapscroll\" *ngFor=\"let zone of availableZones\" \r\n class=\"btn btn-color-gray-600 btn-active btn-active-secondary py-3\"\r\n [ngClass]=\"selectedTab === zone.zoneName ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\r\n (click)=\"changeTab(zone.zoneName)\">\r\n {{ zone.zoneName }}\r\n </button>\r\n </div>\r\n <span *ngIf=\"!heatmapLoading && !heatmapNoData\" class=\"cursor-pointer arrow-right position-absolute\" (click)=\"zonescrollRight()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"row px-3 pt-3\">\r\n <div class=\"col-lg-6 right-border my-1\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Store Heatmap</span>\r\n </h3>\r\n \r\n <div class=\"card-toolbar text-nowrap me-4\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'daily',\r\n 'inactivePlanBtn': type !== 'daily',\r\n 'disabled': disableDay\r\n }\" (click)=\"selectPlan('daily')\" [attr.disabled]=\"disableDay ? true : null\">\r\n Day\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'weekly',\r\n 'inactivePlanBtn': type !== 'weekly',\r\n 'disabled': disableWeek\r\n }\" (click)=\"selectPlan('weekly')\" [attr.disabled]=\"disableWeek ? true : null\">\r\n Week\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"{\r\n 'activePlanBtn': type === 'monthly',\r\n 'inactivePlanBtn': type !== 'monthly',\r\n 'disabled': disableMonth\r\n }\" (click)=\"selectPlan('monthly')\" [attr.disabled]=\"disableMonth ? true : null\">\r\n Month\r\n </button>\r\n </div>\r\n \r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div >\r\n <div class=\"d-flex\">\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollLeft()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M15 18L9 12L15 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <ul *ngIf=\"periodzone === 1 && !customOption\" #dateList\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center m-2\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon active\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"(periodzone === 2 || periodzone === 3) && !customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <ul *ngIf=\"customOption\"\r\n class=\"d-flex pills nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder align-items-start mb-5 mt-1 p-3 no-wrap-list\">\r\n <li class=\"nav-item nav-overflow\" *ngFor=\"let date of overallStoreConcentrationDates\">\r\n <a data-bs-toggle=\"pill\"\r\n [ngClass]=\"date.zoneDate === selectedDate ? 'category_active' : ''\"\r\n class=\"nav-link d-flex justify-content-between flex-column cursor-pointer flex-center w-90px mx-3\"\r\n (click)=\"onDateChange(date.zoneDate)\">\r\n <div class=\"nav-icon\"></div>\r\n <span class=\"nav-text text-gray-700 fw-bolder fs-7 lh-1 mx-3\">{{ date.zoneDate\r\n }}</span>\r\n <span class=\"bullet-custom position-absolute bottom-0 h-4px bg-primary\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n <span *ngIf=\"customArrow && !heatmapLoading && !heatmapNoData\" class=\"mt-3 cursor-pointer\" (click)=\"scrollRight()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </div>\r\n \r\n <div *ngIf=\"!heatmapLoading && !heatmapNoData\">\r\n <ngb-carousel #carousel [interval]=\"0\" [pauseOnHover]=\"true\" (slide)=\"onSlideChange($event)\" [id]=\"selectedDate\">\r\n <ng-container *ngFor=\"let image of overallStoreconcentrationData?.ImageURLs;let i=index;\">\r\n <ng-template ngbSlide [id]=\"'ngb-slide-'+ i\">\r\n <div class=\"w-100 image-container cursor-pointer\">\r\n <img (click)=\"concentrationHeatmap(overallStoreconcentrationData?.ImageURLs)\"\r\n [src]=\"image.URL\" [alt]=\"image.streamName\" class=\"cardimg\" />\r\n \r\n <a [href]=\"image.URL\" download><svg id=\"download-icon\" width=\"44\" height=\"44\"\r\n viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"icon-overlay\">\r\n <g filter=\"url(#filter0_d_3822_19479)\">\r\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\"\r\n stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_3822_19479\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_3822_19479\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_3822_19479\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></a>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </ngb-carousel>\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"heatmapLoading\">\r\n <div class=\"row loader concheatmap d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"heatmapNoData && !heatmapLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body concheatmap d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Overall Store Concentration\r\n Heatmap</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Analysis</span>\r\n </h3>\r\n </div>\r\n <div class=\"body me-4\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> -->\r\n <div class=\"m-4\" *ngIf=\"!cardDataLoading\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-12\">{{ overallStoreData?.footfall?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.footfall?.storeRate || '--' }}%</span> of store footfall\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Impression Rate</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">{{ overallStoreData?.impression?.zoneRate || '--' }}%</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.impression?.storeRate || '--' }}%</span> Store Impression\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Bounced Footfall</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-6\">{{ overallStoreData?.bounced?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.bounced?.storeRate || '--' }}%</span> of total bounced\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Engagers</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title ms-10\">{{ overallStoreData?.engagers?.zoneCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n <span class=\"textprimary mx-1\">{{ overallStoreData?.engagers?.storeRate || '--' }}%</span> of total engagers\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n \r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">Avg. Zone Dwell Time</div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title me-12\">{{ overallStoreData?.avgDwellTime?.zoneAvgDwellTime || '--' }} mins</span>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"blue-badge\">\r\n Avg. dwell time <span class=\"textprimary mx-1\">{{ overallStoreData?.avgDwellTime?.storeAvgDwellTime || '--' }} mins</span>\r\n </span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"borderdashed my-6\"></div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row\">\r\n <div class=\"col-8\">\r\n <div class=\"headtext p-3\">Age & Gender Analysis</div>\r\n <div class=\"card-body p-0 mb-2\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"genderchartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-4\">\r\n <div class=\"mt-4\">\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div class=\"card-body p-0 mt-5\">\r\n <div>\r\n \r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <!-- <table class=\"table table-borderless text-center w-100\"> -->\r\n <tr *ngFor=\"let item of ageAnalysis\">\r\n <td>\r\n <div class=\"overalltext\">{{ item?.category || '' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n </tr>\r\n<!-- </table> -->\r\n\r\n <!-- <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let i of getAgeArray()\">\r\n <td>\r\n <div class=\"overalltext\">{{ ageAnalysis[i]?.category || '' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ ageAnalysis[i]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"overalltext\">{{ ageAnalysis[i + 1]?.category || '' }}</div>\r\n </td>\r\n <td *ngIf=\"ageAnalysis[i + 1]?.category\">\r\n <div class=\"table-title\">{{ ageAnalysis[i + 1]?.value?.toFixed(0) || '--' }}%</div>\r\n </td>\r\n </tr>\r\n </tbody> -->\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"selectedTab !== 'Overall Store'\" class=\"row p-8\">\r\n <div class=\"col-12 trajectorycard\">\r\n <div class=\"card-header border-0 p-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">{{ selectedTab }} Trajectory Analysis</span>\r\n </h3> \r\n </div>\r\n <div class=\"card-body\">\r\n \r\n \r\n\r\n <div class=\"row\">\r\n <div class=\"col-6\">\r\n <ng-container *ngIf=\"trajectoryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryNoData && !trajectoryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryLoading && !trajectoryNoData\" class=\"arcdiagram\">\r\n <div id=\"arcDiagramDiv\"></div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"col-6 p-12\">\r\n <ng-container *ngIf=\"trajectoryRateLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trajectoryRateNoData && !trajectoryRateLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Trajectory Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!trajectoryRateLoading && !trajectoryRateNoData\" class=\"row ps-15 mt-20\">\r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ currentZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n {{ selectedTab }}\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">Other Zones</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ currentZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ currentZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ currentZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"col px-2\">\r\n <div class=\"card card-border p-6\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headcount\">\r\n {{ otherZone?.impressionRate || '--' }}% \r\n <span class=\"overalltext\">Impression Rate</span>\r\n </span>\r\n </h3>\r\n <span class=\"overalltext my-1\">\r\n Other Zones\r\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3.33594 8.57096H12.6693M12.6693 8.57096L8.0026 3.9043M12.6693 8.57096L8.0026 13.2376\" \r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <span class=\"overalltext\">{{ selectedTab }}</span>\r\n </span>\r\n <div class=\"textprimary my-4\">\r\n {{ otherZone?.ageGenderRate || '--' }}% \r\n <span class=\"ratetext\">{{ otherZone?.gender || '--' }} Rate</span>\r\n <span class=\"badgegrey ms-1\">{{ otherZone?.ageGroup || '--' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- <ng-container *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\">\r\n <div ngbAccordion>\r\n <div ngbAccordionItem [collapsed]=\"false\">\r\n <h2 ngbAccordionHeader>\r\n <button class=\"headtext\" ngbAccordionButton>Image Directory<div class=\"divider\"></div></button>\r\n </h2>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <lib-image-directory></lib-image-directory>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container> -->\r\n \r\n</div>\r\n\r\n\r\n\r\n","import { Component, EventEmitter, HostListener, Input, Output, Provider, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nconst SELECT_CONTROL_VALUE_ACCESSOR: Provider = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ReactiveSelectComponent),\r\n multi: true,\r\n};\r\n\r\n@Component({\r\n selector: 'lib-reactive-select',\r\n templateUrl: './reactive-select.component.html',\r\n styleUrl: './reactive-select.component.scss',\r\n providers: [SELECT_CONTROL_VALUE_ACCESSOR]\r\n})\r\nexport class ReactiveSelectComponent implements ControlValueAccessor {\r\n\r\n private onTouched: Function;\r\n private onChanged: Function;\r\n protected isDisabled: boolean;\r\n @Input() idField: string\r\n @Input() nameField: string\r\n @Input() label: string\r\n @Input() data: any\r\n protected isOpened: boolean = false\r\n protected selected: Record<string, any> | null = null\r\n protected selectedId: string | number\r\n\r\n writeValue(val: string | number): void {\r\n this.selectedId = val\r\n this.selected = this.data.filter((item:Record<string, any>)=> item?.[this.idField] === val)[0] \r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChanged = fn\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.isDisabled = isDisabled\r\n\r\n }\r\n\r\n onSelect(item: Record<string, any>) {\r\n this.onTouched()\r\n this.selected = item\r\n this.selectedId = item?.[this.idField] \r\n this.isOpened = false\r\n this.onChanged(this.selectedId)\r\n this.onSelectionChange(item); \r\n }\r\n\r\n \r\n onSelectionChange(item: Record<string, any>) {\r\n this.valueChange.emit(item?.[this.idField]);\r\n }\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.isDisabled) {\r\n const targetElement = event.target as HTMLElement;\r\n if (!this.isComponentClicked(targetElement)) {\r\n this.isOpened = false;\r\n }\r\n }\r\n }\r\n\r\n isComponentClicked(targetElement: HTMLElement): boolean {\r\n const parentElement = targetElement.parentElement;\r\n if (parentElement) {\r\n const clickedOnComponent = parentElement.classList.contains('custom-select');\r\n if (clickedOnComponent) {\r\n return true;\r\n } else {\r\n return this.isComponentClicked(parentElement);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n\r\n}\r\n","<div class=\"custom-select w-200px\">\r\n <div class=\"form-group\">\r\n <label *ngIf=\"label\" class=\"form-label w-100\">{{label}}</label>\r\n <div class=\"position-relative\">\r\n <div (click)=\"isOpened = !isOpened;\" [ngClass]=\"isDisabled ? 'disable' : ''\" class=\"form-select dropselect w-100\">\r\n {{selected?.[nameField]}}</div>\r\n <div *ngIf=\"isOpened\" class=\"card py-2 w-100 position-absolute end-0 z-1 drop-list\">\r\n <ul class=\"list-unstyled mb-2 w-100\">\r\n <li *ngFor=\"let item of data\" (click)=\"onSelect(item)\"\r\n [ngClass]=\"item?.[idField] === selected?.[idField] ? 'active' : ''\"\r\n class=\"text px-5 items cursor-pointer py-4 w-100\">\r\n {{item?.[nameField]}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, OnInit, OnDestroy, ElementRef, NgZone, ChangeDetectorRef } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\n\r\n@Component({\r\n selector: 'lib-customer-journey',\r\n templateUrl: './customer-journey.component.html',\r\n styleUrl: './customer-journey.component.scss'\r\n})\r\nexport class CustomerJourneyComponent {\r\n private root: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n form: FormGroup;\r\n selectControl: FormControl;\r\n datasets: Array<{ value: string, label: string }> = [\r\n { value: 'top', label: 'Highest Visited Path' },\r\n { value: 'bottom', label: 'Lowest Visited Path' }\r\n ];\r\n\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes = [10, 20, 30]\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n searchInput: any =\"\";\r\n customerJourneyData: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n customerjourneyLoading: boolean = true;\r\n customerjourneyNoData: boolean = false;\r\n headerData: any;\r\n sortDirection: any = '';\r\n showAverage: boolean = true;\r\n totalfootfallCount: number | null = null;;\r\n\r\n constructor(private zone: NgZone, private elRef: ElementRef, private fb: FormBuilder, private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService) {}\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.initializeChart();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.selectControl = new FormControl('top');\r\n this.form = this.fb.group({\r\n selectControl: this.selectControl\r\n });\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n // this.getCustomerJourney()\r\n this.getCustomerJourneyTable();\r\n // this.initializeChart();\r\n})\r\nthis.Zonev2Service.footfall$.subscribe((count) => {\r\n this.totalfootfallCount = count;\r\n this.getCustomerJourney();\r\n});\r\n \r\n }\r\n limit = 10;\r\n offset = 1;\r\n getCustomerJourney(): void {\r\n this.customerjourneyLoading = true;\r\n this.customerjourneyNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores?.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n search: this.searchInput,\r\n sortType: this.selectControl.value,\r\n limit: this.limit,\r\n offset: this.offset - 1,\r\n export: false,\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourney(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n // this.customerjourneyLoading = true;\r\n if (response && response.status === 'success') {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = false;\r\n this.initializeChart(); // Initialize chart when data is available\r\n this.updateChart(response.data.customerJourneyData, this.totalfootfallCount);\r\n \r\n } else {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n }\r\n }, (error:any) => {\r\n this.customerjourneyLoading = false;\r\n this.customerjourneyNoData = true;\r\n // console.error('Error fetching customer journey data:', error);\r\n });\r\n}\r\ninitializeChart(): void {\r\n const chartDiv = document.getElementById('customerjourney');\r\n if (!chartDiv) {\r\n // console.error('Could not find HTML element with id customerjourney');\r\n return;\r\n }\r\n\r\n if (!this.root) { // Check if chart is already initialized\r\n try {\r\n this.root = am5.Root.new('customerjourney');\r\n this.root.setThemes([am5themes_Animated.new(this.root)]);\r\n\r\n const series = this.root.container.children.push(am5flow.Sankey.new(this.root, {\r\n sourceIdField: \"from\",\r\n targetIdField: \"to\",\r\n valueField: \"value\",\r\n paddingRight: 100\r\n }));\r\n } catch (error) {\r\n // console.error('Error initializing chart:', error);\r\n }\r\n }\r\n}\r\n\r\nupdateChart(data: any[], footfallCount: number | null): void {\r\n let filteredData = this.removeCircularLinks(data);\r\n // let firstZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.to == item.from);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n // let lastZone = filteredData.filter((item:any) => {\r\n // let findExists = filteredData.find((ele:any) => ele.from == item.to);\r\n // if(!findExists) {\r\n // return item;\r\n // }\r\n // });\r\n \r\n // firstZone = firstZone.map((item) => {\r\n // return {from:'Entry ('+this.totalfootfallCount+')',\r\n // to:item.from,\r\n // value:item.value,}\r\n // })\r\n // lastZone = lastZone.map((item) => {\r\n // return {from:item.to,to:'Exit ('+this.totalfootfallCount+')',value:item.value,}\r\n // })\r\n\r\n // filteredData = [...firstZone,...filteredData,...lastZone];\r\n\r\n if (this.root) {\r\n const series = this.root.container.children.getIndex(0) as am5flow.Sankey;\r\n if (series) {\r\n // Check if data is available, otherwise use fallback data\r\n if (filteredData.length > 0) {\r\n series.data.setAll(filteredData); // Update with API data\r\n } else {\r\n \r\n // Predefined sample data as fallback\r\n series.data.setAll([filteredData]);\r\n }\r\n\r\n this.changeDetector.detectChanges(); // Trigger Angular change detection\r\n } else {\r\n // console.error('Series not found for chart');\r\n }\r\n }\r\n}\r\n\r\nremoveCircularLinks(data: any[]): any[] {\r\n const graph = new Map();\r\n const result = [];\r\n\r\n function hasCycle(from:any, to:any, visited:any) {\r\n if (from === to) return true;\r\n if (visited.has(from)) return false;\r\n\r\n visited.add(from);\r\n\r\n if (graph.has(from)) {\r\n for (const neighbor of graph.get(from)) {\r\n if (hasCycle(neighbor, to, visited)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n visited.delete(from);\r\n return false;\r\n }\r\n\r\n for (const { from, to, value } of data) {\r\n if (hasCycle(to, from, new Set())) {\r\n continue;\r\n }\r\n\r\n result.push({ from, to, value });\r\n\r\n if (!graph.has(from)) {\r\n graph.set(from, []);\r\n }\r\n graph.get(from).push(to);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n \r\n setColorStep(series: any, step: number): void {\r\n series.nodes.set(\"colors\", am5.ColorSet.new(this.root, {\r\n step: step\r\n }));\r\n }\r\n \r\n onValueChange(event: any): void {\r\n this.getCustomerJourney();\r\n }\r\n\r\n getCustomerJourneyTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.pageSize,\r\n offset: this.offset - 1,\r\n export: false,\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTable(requestData).subscribe({\r\n next: (response: any) => {\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.customerJourneyData = response.data.customerJourneyTableData;\r\n this.totalItems = response.data['total_count']\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n } else {\r\n this.customerJourneyData = []\r\n this.totalItems = 0\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n }\r\n\r\n if (this.totalItems < 10) {\r\n this.paginationSizes = [this.totalItems]\r\n } else {\r\n this.paginationSizes = [10, 20, 30]\r\n }\r\n\r\n },\r\n error: (err) => {\r\n this.customerJourneyData = [];\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n console.log(\"@@ ~ getCustomerJourneyTableData [ERR]:\", err);\r\n }\r\n })\r\n }\r\n\r\n paginationSize(): number {\r\n return this.totalItems < 10 ? this.totalItems : this.limit;\r\n }\r\n onExport(): void {\r\n this.currentPage = 1;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: 0,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getCustomerJourneyTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n // console.log('API Response:', res); \r\n this.Zonev2Service.saveAsExcelFile(res, 'CustomerJourney_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.offset = 1;\r\n this.limit = 10;\r\n this.getCustomerJourneyTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getCustomerJourneyTable();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.offset = 1;\r\n this.limit = Number(pageSize);\r\n this.changeDetector.detectChanges();\r\n this.getCustomerJourneyTable()\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.offset = Number(pageOffset);\r\n this.getCustomerJourneyTable()\r\n }\r\n toggleView(): void {\r\n this.showAverage =!this.showAverage;\r\n if (this.showAverage === true) {\r\n // this.getCustomerJourney()\r\n // this.initializeChart();\r\n }\r\n }\r\n goToZone(){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n datavalue.store = datavalue.stores[0].storeId;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.router.navigate([\"/manage/stores/zones\"], {\r\n queryParams: { storeId: datavalue.stores[0].storeId},\r\n });\r\n \r\n }\r\n\r\n\r\n}","<div class=\"card\">\r\n <div [hidden]=\"!showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\"><span class=\"card-label mb-2\">Customer Journey</span></h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end\">\r\n View All Zones</button>\r\n <form class=\"mx-4\" [formGroup]=\"form\">\r\n <lib-reactive-select\r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n\r\n <button (click)=\"goToZone()\"\r\n class=\"btn bg-light-primary btn-light-primary btn-active-light-primary\"><span\r\n ><svg \r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M9.99984 4.16602V15.8327M4.1665 9.99935H15.8332\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n </path>\r\n </svg></span> Add New Zone \r\n </button>\r\n \r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <ng-container *ngIf=\"customerjourneyLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"customerjourneyNoData && !customerjourneyLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Chart</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div [hidden]=\"customerjourneyLoading || customerjourneyNoData\" id=\"customerjourney\"></div>\r\n </div>\r\n</div>\r\n \r\n<div [hidden]=\"showAverage\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Customer Journey</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n \r\n <div class=\"d-flex align-items-center position-relative my-1 justify-content-between\">\r\n <button (click)=\"toggleView()\" type=\"button\" class=\"btn btn-outline align-items-end mx-4\">\r\n View Average Customer Journey</button>\r\n <span class=\"me-4\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute mt-3 ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n /></span>\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!customerJourneyData.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('noOfStores')\">\r\n No. of stores\r\n <svg [ngClass]=\"sortColumName === 'noOfStores' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'noOfStores' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneFF')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'zoneFF' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneFF' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('impressions')\">\r\n Impressions\r\n <svg [ngClass]=\"sortColumName === 'impressions' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'impressions' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('AvgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'AvgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'AvgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of customerJourneyData\">\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.noOfStores || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneFF || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.impressions || '--' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.AvgDwellTime || '--' }} Mins</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Customer Journey Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination\r\n class=\"text-start\"\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n ></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>\r\n</div>","import { ChangeDetectorRef, Component, ElementRef, NgZone } from '@angular/core';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { FormBuilder } from '@angular/forms';\r\n\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-top-performing',\r\n templateUrl: './top-performing.component.html',\r\n styleUrl: './top-performing.component.scss'\r\n})\r\n\r\nexport class TopPerformingComponent {\r\n topPerformingStores: any[] = []; \r\n topPerformingZones: any[] = []; \r\n searchInput: string = '';\r\n searchDisabled: boolean = false;\r\n analysisLoading: boolean = true;\r\n analysisNoData: boolean = false;\r\n topperformingstoresLoading: boolean = true;\r\n topperformingstoresNodata: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n type: string = 'top-zones';\r\n storetype: string = 'top-Stores';\r\n\r\n // Default selected type\r\n disableTopZones: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomZones: boolean = false;\r\n disableTopStores: boolean = false; // Control whether the Top 5 Zones button is disabled\r\n disableBottomStores: boolean = false;\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n pageSize = 5\r\n currentPage = 1\r\n\r\n // invoiceNoData: boolean = true;\r\n // invoiceLoading: boolean = false;\r\n // isExport: boolean = false;\r\n // clientId: string = '';\r\n // userType:any = '';\r\n private readonly destroy$ = new Subject();\r\n sortStoreColumName: any = '';\r\n constructor(public modalService: NgbModal, private fb: FormBuilder, private Zonev2Service: Zonev2Service, private changeDetector: ChangeDetectorRef, private toast: ToastService, public gs: GlobalStateService,private elementRef: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getTopPerformingZones('top');\r\n this.getTopPerformingStores('top')\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n \r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n\r\n getTopPerformingZones(sortType: string): void {\r\n this.analysisLoading = true;\r\n this.analysisNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1,\r\n };\r\n \r\n this.Zonev2Service.getTopPerformingZones(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.analysisLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingZones?.length === 0){\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n }else{\r\n this.topPerformingZones = response?.data?.topPerformingZones;\r\n this.analysisLoading = false;\r\n this.analysisNoData = false;\r\n }\r\n } else {\r\n this.analysisLoading = false;\r\n this.analysisNoData = true;\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingZones = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getTopPerformingStores(sortType: string): void {\r\n this.topperformingstoresLoading = true;\r\n this.topperformingstoresNodata = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n sortType: sortType, // top or bottom\r\n limit: this.pageSize,\r\n offset: this.currentPage -1, \r\n };\r\n\r\n this.Zonev2Service.getTopPerformingStores(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.topperformingstoresLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.topPerformingStores?.length === 0){\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n }else{\r\n this.topPerformingStores = response?.data?.topPerformingStores;\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = false;\r\n }\r\n\r\n \r\n } else {\r\n this.topperformingstoresLoading = false;\r\n this.topperformingstoresNodata = true;\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n },\r\n error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n }\r\n );\r\n }\r\n\r\n sortData(column: string,): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingZones(this.type);\r\n }\r\n\r\n \r\n sortDataStore(column: string,): void {\r\n if (this.sortStoreColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortStoreColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getTopPerformingStores(this.storetype);\r\n }\r\n \r\n selectPlanzone(type: string): void {\r\n this.type = type;\r\n if (type === 'top-zones') {\r\n this.getTopPerformingZones('top'); // Fetch top zones\r\n } else if (type === 'bottom-zones') {\r\n this.getTopPerformingZones('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n selectPlanStore(storetype: string): void {\r\n this.storetype = storetype;\r\n if (storetype === 'top-Stores') {\r\n this.getTopPerformingStores('top'); // Fetch top zones\r\n } else if (storetype === 'bottom-Stores') {\r\n this.getTopPerformingStores('bottom'); // Fetch bottom zones\r\n }\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n\r\n \r\n\r\n // selectPlan(planType: string): void {\r\n // if (planType === 'top-zones') {\r\n // this.type = 'top-zones'; // Select Top 5 Zones\r\n // } else if (planType === 'bottom-zones') {\r\n // this.type = 'bottom-zones'; // Select Bottom 5 Zones\r\n // }\r\n // }\r\n\r\n \r\n}","<div class=\"row \">\r\n <div class=\"d-flex justify-content-between p-3\">\r\n <div class=\"col-lg-6 card\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Zones <span\r\n ngbTooltip=\"Top performing zones across the stores selected\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'top-zones',\r\n 'inactivePlanBtn': type !== 'top-zones',\r\n 'disabled': disableTopZones\r\n }\" \r\n (click)=\"selectPlanzone('top-zones')\" \r\n [attr.disabled]=\"disableTopZones ? true : null\">\r\n Top 5 Zones\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': type === 'bottom-zones',\r\n 'inactivePlanBtn': type !== 'bottom-zones',\r\n 'disabled': disableBottomZones\r\n }\" \r\n (click)=\"selectPlanzone('bottom-zones')\" \r\n [attr.disabled]=\"disableBottomZones ? true : null\">\r\n Bottom 5 Zones\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!analysisLoading && !analysisNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Zone Name</th>\r\n <th>Footfall</th>\r\n <th>Bounced</th>\r\n <th>Engagers</th>\r\n <th>Impressions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let zone of topPerformingZones\">\r\n <td>\r\n <div class=\"table-title\">{{ zone?.zoneName ? zone.zoneName : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.footfallCount ? zone.footfallCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.bouncedCount ? zone.bouncedCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.engagersCount ? zone.engagersCount : '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ zone?.impressionRate ? zone.impressionRate + '%' : '--' }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"analysisLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"analysisNoData && !analysisLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Zones</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-lg-6 card mx-2\">\r\n <div class=\"h-100\">\r\n <div class=\"card-header border-0 p-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"headtext\">Top Performing Stores <span\r\n ngbTooltip=\"Top performing stores and their concentration % along with avg dwell time\" placement=\"top\"\r\n triggers=\"mouseenter:mouseleave\" tooltipClass=\"custom-tooltip\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_3512_32868)\">\r\n <path\r\n d=\"M8.00016 10.6666V7.99998M8.00016 5.33331H8.00683M14.6668 7.99998C14.6668 11.6819 11.6821 14.6666 8.00016 14.6666C4.31826 14.6666 1.3335 11.6819 1.3335 7.99998C1.3335 4.31808 4.31826 1.33331 8.00016 1.33331C11.6821 1.33331 14.6668 4.31808 14.6668 7.99998Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3512_32868\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span></span>\r\n <span class=\"subratetext mt-2\">From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}</span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!--begin::Nav group-->\r\n <div class=\"nav-group nav-group-outline border-1 btn-group p-0\">\r\n <button class=\"btn btn-outline\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'top-Stores',\r\n 'inactivePlanBtn': storetype !== 'top-Stores',\r\n 'disabled': disableTopStores\r\n }\" \r\n (click)=\"selectPlanStore('top-Stores')\" \r\n [attr.disabled]=\"disableTopStores ? true : null\">\r\n Top 5 Stores\r\n </button>\r\n \r\n <button class=\"btn btn-outline px-6 py-3\" \r\n [ngClass]=\"{\r\n 'activePlanBtn': storetype === 'bottom-Stores',\r\n 'inactivePlanBtn': storetype !== 'bottom-Stores',\r\n 'disabled': disableBottomStores\r\n }\" \r\n (click)=\"selectPlanStore('bottom-Stores')\" \r\n [attr.disabled]=\"disableBottomStores ? true : null\">\r\n Bottom 5 Stores\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-container mx-4\">\r\n <table *ngIf=\"!topperformingstoresLoading && !topperformingstoresNodata\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th>Store Info</th>\r\n <th>Zone Name</th>\r\n <th>Zone Footfall</th>\r\n <th>Impressions</th>\r\n <th>Avg Dwell Time</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive topstores\">\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td>\r\n <div class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneName || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.zoneFootfall || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.impressionRate || '--' }}%</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.avgDwellTime || '--' }} mins</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"topperformingstoresLoading\">\r\n <div class=\"row loader Analysiscard d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"topperformingstoresNodata && !topperformingstoresLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 Analysiscard\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Top Performing Stores</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport { Subject, debounceTime, distinctUntilChanged, filter, takeUntil } from \"rxjs\";\r\nimport { FormControl } from '@angular/forms';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-summary-table',\r\n templateUrl: './summary-table.component.html',\r\n styleUrl: './summary-table.component.scss'\r\n})\r\n\r\nexport class SummaryTableComponent {\r\n isExport: boolean = false;\r\n itemsPerPage = 10\r\n currentPage = 1\r\n totalItems = 0\r\n paginationSizes:any[] = [];\r\n pageSize = 10\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n topPerformingStores: any[] = [];\r\n searchDisabled: boolean = false;\r\n invoiceList: any[] = [];\r\n zonesummaryLoading: boolean = true;\r\n zonesummaryNoData: boolean = false;\r\n headerData: any;\r\n private destroy$ = new Subject<void>();\r\n\r\n // loading: boolean = true;\r\n // noData: boolean = false;\r\n\r\n // user: any;\r\n // searchInput = new FormControl(\"\");\r\n // receivedData: string = \"stores\";\r\n // columns: any[];\r\n // sortColumName: string;\r\n // sortDirection: number;\r\n\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n private changeDetector: ChangeDetectorRef,\r\n public gs: GlobalStateService,public modalService: NgbModal,\r\n private router: Router,private route: ActivatedRoute,\r\n private toast: ToastService\r\n ) {}\r\n\r\n \r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getSummayTable();\r\n})\r\n \r\n }\r\n\r\n \r\n getSummayTable(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n if(response?.data?.zoneSummaryData?.length === 0){\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = false;\r\n }else{\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n }\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n getSummayTable1(): void {\r\n this.searchDisabled = true;\r\n this.zonesummaryLoading = true;\r\n this.zonesummaryNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage -1,\r\n export: false,\r\n\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableData(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((response: any) => {\r\n this.zonesummaryLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.topPerformingStores = response?.data?.zoneSummaryData;\r\n this.totalItems = response.data.totalCount\r\n // this.setPaginationSizes()\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = false;\r\n this.searchDisabled = false;\r\n } else {\r\n this.zonesummaryLoading = false;\r\n this.zonesummaryNoData = true;\r\n this.searchDisabled = true;\r\n if (this.searchInput?.length) {\r\n this.searchDisabled = true\r\n }\r\n this.topPerformingStores = []\r\n this.totalItems = 0\r\n this.changeDetector.detectChanges()\r\n }\r\n }, error => {\r\n this.topPerformingStores = []\r\n this.changeDetector.detectChanges()\r\n });\r\n }\r\n onExport(): void {\r\n this.currentPage = 0;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),\r\n // storeId: [\"11-253\", \"11-511\",\"11-1176\"],\r\n clientId:this.headerData.client,\r\n // valueType: \"sum\",\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: 10000,\r\n offset: this.currentPage,\r\n export: true\r\n };\r\n\r\n this.Zonev2Service.getSummaryTableExport(requestData)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res) => {\r\n this.Zonev2Service.saveAsExcelFile(res, 'ZoneSummaryTable_list');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n });\r\n }\r\n searchField(): void {\r\n this.headerData.search = this.searchInput;\r\n this.headerData.export = false;\r\n this.currentPage = 1;\r\n this.pageSize=10;\r\n this.getSummayTable();\r\n }\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1();\r\n }\r\n onPageSizeChange(pageSize: any) {\r\n this.currentPage = 1;\r\n this.itemsPerPage = pageSize;\r\n this.pageSize = pageSize;\r\n this.changeDetector.detectChanges();\r\n this.getSummayTable1()\r\n\r\n }\r\n onPageChange(pageOffset: any) {\r\n this.currentPage = pageOffset\r\n this.getSummayTable()\r\n }\r\n storeView(data:any){\r\n const datavalue: any = JSON.parse(\r\n localStorage.getItem(\"header-filters\") || \"{}\"\r\n );\r\n const matchedStores = datavalue.stores.filter((store: any) => store.checked && store.storeId === data);\r\n // Update the balance stores (those not in the matched stores) to set their checked property to false\r\n datavalue.stores.forEach((store: any) => {\r\n if (!matchedStores.some((matchedStore:any) => matchedStore.storeId === store.storeId)) {\r\n store.checked = false;\r\n }\r\n });\r\n datavalue.store = data;\r\n localStorage.setItem(\"header-filters\", JSON.stringify(datavalue));\r\n this.changeDetector.detectChanges()\r\n this.gs.dataRangeValue.next(datavalue)\r\n this.gs.manageRefreshTrigger.next(true);\r\n }\r\n setPaginationSizes() {\r\n if (this.totalItems > 10) {\r\n this.paginationSizes = [10, 20, 30];\r\n } else {\r\n this.paginationSizes = [this.totalItems]; // Just one option if less than 10\r\n }\r\n this.pageSize = this.paginationSizes[0];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Zone Summary Table</span>\r\n <span class=\"text-sub mb-2\"> From {{ headerData?.date?.startDate | date: 'MMM d' }} to {{ headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\"\r\n class=\"form-control ps-14 me-4 footfallsearch\"\r\n placeholder=\"Search...\" autocomplete=\"off\" (keyup.enter)=\"searchField()\"\r\n />\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!topPerformingStores.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <svg [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store ID\r\n <svg [ngClass]=\"sortColumName === 'storeId' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th>\r\n <div class=\"cursor-pointer\" (click)=\"sortData('date')\">\r\n Date\r\n <svg [ngClass]=\"sortColumName === 'date' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'date' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('zoneName')\">\r\n Zone Name\r\n <svg [ngClass]=\"sortColumName === 'zoneName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'zoneName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n \r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('impressionRate')\">\r\n Impression Rate\r\n <svg [ngClass]=\"sortColumName === 'impressionRate' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'impressionRate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th ><div class=\"cursor-pointer\" (click)=\"sortData('avgDwellTime')\">\r\n Avg Dwell Time\r\n <svg [ngClass]=\"sortColumName === 'avgDwellTime' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'avgDwellTime' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('footfallCount')\">\r\n Zone FF\r\n <svg [ngClass]=\"sortColumName === 'footfallCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'footfallCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('bouncedCount')\">\r\n Zone Bounced\r\n <svg [ngClass]=\"sortColumName === 'bouncedCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'bouncedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('engagersCount')\">\r\n Zone Engagers\r\n <svg [ngClass]=\"sortColumName === 'engagersCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'engagersCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('below12')\">\r\n Age Below 12\r\n <svg [ngClass]=\"sortColumName === 'below12' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'below12' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('13-19')\">\r\n Age 13-19\r\n <svg [ngClass]=\"sortColumName === '13-19' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '13-19' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('20-30')\">\r\n Age 20-30\r\n <svg [ngClass]=\"sortColumName === '20-30' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '20-30' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('31-45')\">\r\n Age 31-45\r\n <svg [ngClass]=\"sortColumName === '31-45' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '31-45' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('46-59')\">\r\n Age 46-59\r\n <svg [ngClass]=\"sortColumName === '46-59' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '46-59' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('60 above')\">\r\n Age 60+\r\n <svg [ngClass]=\"sortColumName === '60 above' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === '60 above' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('maleCount')\">\r\n Male\r\n <svg [ngClass]=\"sortColumName === 'maleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'maleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('femaleCount')\">\r\n Female\r\n <svg [ngClass]=\"sortColumName === 'femaleCount' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'femaleCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of topPerformingStores\">\r\n <td><a class=\"table-title-primary cursor-pointer\" (click)=\"storeView(store.storeId)\">{{ store.storeName || '--' }}</a></td>\r\n <td><div class=\"table-title\">{{ store.storeId || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store?.date | date: 'd MMM, y' || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.zoneName || '--' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.impressionRate?.toFixed(0) || '0' }}%</div></td>\r\n <td><div class=\"table-title\">{{ store.avgDwellTime || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.footfallCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bouncedCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.engagersCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.bellow12 || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['13-19'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['20-30'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['31-45'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['46-59'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store['60 above'] || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.maleCount || '0' }}</div></td>\r\n <td><div class=\"table-title\">{{ store.femaleCount || '0' }}</div></td>\r\n </tr> \r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"zonesummaryLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"zonesummaryNoData && !zonesummaryLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Zone Summary Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n <div *ngIf=\"!zonesummaryLoading && !zonesummaryNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\"\r\n [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n \r\n </div>\r\n</div>","import { ChangeDetectorRef, Component } from '@angular/core';\r\nimport { GlobalStateService, PageInfoService } from 'tango-app-ui-global';\r\nimport { Observable, Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\r\nimport { ZoneService } from '../services/zone.service';\r\n\r\n@Component({\r\n selector: 'lib-zone-v2',\r\n templateUrl: './zone-v2.component.html',\r\n styleUrl: './zone-v2.component.scss'\r\n})\r\nexport class ZoneV2Component {\r\n storeId: number = 0;\r\n headerData: any;\r\n showReportProcessingCard: boolean = true;\r\n yesterdayDate: string = '';\r\n dataProcessedLoading = true;\r\n private readonly destroy$ = new Subject();\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n constructor(\r\n private pageInfo: PageInfoService,public gs: GlobalStateService, private zoneService:ZoneService,private cd:ChangeDetectorRef\r\n ) {\r\n }\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.updateStoreId()\r\n this.setPageData();\r\n this.checkTodayReportStatus()\r\n})\r\n}\r\n\r\n setPageData() {\r\n this.pageInfo.setTitle(\"Zones\");\r\n this.pageInfo.setDescription(\"Zones\");\r\n this.pageInfo.setBreadcrumbs([\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: false },\r\n { title: \"Tango Eye\", path: \"/manage/traffic\", isActive: false, isSeparator: true },\r\n ]);\r\n }\r\n updateStoreId(): void {\r\n this.storeId = this.headerData.stores.filter((store: any) => store.checked).length;\r\n }\r\n checkTodayReportStatus(): void {\r\n this.dataProcessedLoading = true;\r\n const reportParams = {\r\n clientId: this.headerData?.client,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate\r\n };\r\n this.zoneService.getCheckTodayReportStatus(reportParams)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (res: any) => {\r\n this.dataProcessedLoading = false\r\n this.showReportProcessingCard = res?.data?.reportSendStatus === true;\r\n this.yesterdayDate = res?.data?.yesterday || '';\r\n this.cd.detectChanges();\r\n },\r\n \r\n error: (err: any) => {\r\n console.error('Error checking report status:', err);\r\n this.showReportProcessingCard = false;\r\n }\r\n });\r\n }\r\n}\r\n\r\n","<div *ngIf=\"!showReportProcessingCard && !dataProcessedLoading\">\r\n<lib-zones-cards></lib-zones-cards>\r\n<div class=\"mt-4\">\r\n<lib-customer-journey></lib-customer-journey>\r\n</div>\r\n<div *ngIf=\"storeId === 1\" class=\"mt-4\">\r\n<lib-store-heatmap></lib-store-heatmap>\r\n</div>\r\n<div *ngIf=\"storeId > 1\" class=\"mt-2\">\r\n <lib-top-performing></lib-top-performing>\r\n</div>\r\n<div class=\"mt-4\" >\r\n <lib-summary-table></lib-summary-table>\r\n</div>\r\n</div>\r\n\r\n<div *ngIf=\"showReportProcessingCard && !dataProcessedLoading\" class=\"row px-3\"> \r\n <div class=\"card dataprocessed pb-0 px-0 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"dataprocessedgif\" src=\"./assets/tango/Icons/data_analyse_gif.gif\" alt=\"\">\r\n <div class=\"dataprocessed-title\">Data being Processed</div>\r\n <div class=\"dataprocessed-sub\">Data for the selected date {{ yesterdayDate }}, is currently being processed and will be available shortly.</div>\r\n <div class=\"dataprocessed-sub\"> If you wish to view data for other dates, Remove {{ yesterdayDate }} from your selection or choose a different date range.</div> \r\n </div>\r\n\r\n</div>\r\n<div *ngIf=\"dataProcessedLoading\" class=\"card row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n</div> \r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\n\r\n\r\nconst routes: Routes = [\r\n {\r\n path:'v1',\r\n component:TangoAnalyseZoneComponent\r\n },\r\n {\r\n path: 'v2',\r\n component: ZoneV2Component\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class TangoAnalyseZoneRoutingModule { }\r\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n\r\n@Component({\r\n selector: 'lib-image-directory-view',\r\n templateUrl: './image-directory-view.component.html',\r\n styleUrl: './image-directory-view.component.scss'\r\n})\r\nexport class ImageDirectoryViewComponent implements OnInit {\r\n @Input() Imagedata:any;\r\n @Input() processType:any;\r\n @Input() footfallDate:any;\r\n @Input() storeName:any;\r\n @Input() storeId:any;\r\n @Input() headerData:any;\r\n @Input() imageArray:any;\r\n @Input() folderName:any;\r\n Images: any;\r\n itemsPerPage = 10;\r\n currentPage = 1;\r\n totalItems = 1;\r\n paginationSizes = [1];\r\n pageSize = 1;\r\n dataSubscrptionValue: any=[];\r\n statusValues: any;\r\n filteredData: any;\r\n objData: any;\r\n storeArrayValue: any;\r\n constructor(private Zonev2Service:Zonev2Service, private cd: ChangeDetectorRef,){\r\n\r\n }\r\nngOnInit(): void {\r\n this.Images = this.Imagedata?.images?.entryTimeImage;\r\n this.filteredData = this.imageArray.filter((item:any) => item.folderName === this.folderName);\r\n this.totalItems = this.filteredData[0].count\r\n this.getStoreActive();\r\n}\r\nprivate readonly destroy$ = new Subject();\r\nngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n}\r\ngetStoreActive(){\r\nlet obj={\r\n \"clientId\":this.headerData.client,\r\n \"storeId\": this.storeId\r\n}\r\nthis.Zonev2Service\r\n.getStoresActive(obj)\r\n.pipe(takeUntil(this.destroy$))\r\n?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.dataSubscrptionValue = res.data.storeSubscription.product;\r\n }\r\n }\r\n })\r\n}\r\n\r\nimageData(type:any){\r\n if(type ==='entry'){\r\n this.Images = this.Imagedata?.images?.entryTimeImage\r\n } else if(type === 'exit'){\r\n this.Images = this.Imagedata?.images?.exitTimeImage\r\n } else if(type ==='staff') {\r\n this.Images = this.Imagedata?.images?.staffEngagementImage\r\n }\r\n\r\n}\r\n\r\n// getImageView() {\r\n// this.objData = {\r\n// storeId: this.headerData.stores\r\n// .filter((store: any) => store.checked)\r\n// .map((store: any) => store.storeId),\r\n// clientId: this.headerData.client,\r\n// processType: this.processType,\r\n// footfallDate: this.footfallDate,\r\n// folderName:this.folderName\r\n// };\r\n// this.service\r\n// .getFootfallDirectory(this.objData)\r\n// .pipe(takeUntil(this.destroy$))\r\n// ?.subscribe({\r\n// next: (res: any) => {\r\n// if (res && res.code === 200) {\r\n// if(!res?.data.footfallData.length){\r\n// } else{\r\n// this.Imagedata = res?.data.footfallData;\r\n// this.storeArrayValue = res?.data.storeName\r\n \r\n// this.cd.detectChanges();\r\n// }\r\n// } \r\n// },\r\n// error: (err: any) => {\r\n// this.cd.detectChanges();\r\n// },\r\n// complete: () => {},\r\n// });\r\n// }\r\n// onPageChange(pageOffset: number) {\r\n// this.currentPage = Number(pageOffset);\r\n// this.getImageView();\r\n// }\r\n\r\n// onPageSizeChange(pageSize: number) {\r\n// this.pageSize = Number(pageSize);\r\n// this.getImageView();\r\n// }\r\n}","<div class=\"row h-550px scroll w-100\"></div>\r\n <div class=\"col-md-12 col-lg-8 col-xl-8 col-xxl-8\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-7\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <!-- Display footfall count or '--' if not available -->\r\n <span class=\"card-label header\">{{storeName | titlecase}} - {{footfallDate | date:'dd MMM, yyyy'}}</span>\r\n </h3>\r\n </div>\r\n <!-- Switch toggle -->\r\n <div class=\"col-md-5 text-end\">\r\n <span class=\"custId\">Customer ID</span>\r\n <span class=\"badge badge-light-primary mx-2\">{{Imagedata?.tempId}}</span>\r\n <span class=\"badge badge-light-danger\">{{processType | titlecase}} </span>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row contain\">\r\n <div class=\"col-12 mb-5\">\r\n <img class=\"cursor-pointer\" class=\"img-src\" [src]=\"Images\"\r\n (error)=\"Images = null\" alt=\"\">\r\n <div *ngIf=\"!Images\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\" d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row slider\">\r\n\r\n <ng-container>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.entryTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.entryTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.entryTimeImage\r\n }\">\r\n <div>Entry Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.entryTimeImage\"\r\n (error)=\"Imagedata?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageData('entry')\">\r\n <div *ngIf=\"!Imagedata?.images?.entryTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4\" *ngIf=\"Imagedata?.images?.staffEngagementImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.staffEngagementImage,\r\n 'border-gray': Images !== Imagedata?.images?.staffEngagementImage\r\n }\">\r\n <div>Staff Engagement</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.staffEngagementImage\"\r\n (error)=\"Imagedata?.images.staffEngagementImage = null\" alt=\"\" (click)=\"imageData('staff')\">\r\n <div *ngIf=\"!Imagedata?.images?.staffEngagementImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-4 \" *ngIf=\"Imagedata?.images?.exitTimeImage\">\r\n <div class=\"mb-5 border-2\" [ngClass]=\"{\r\n 'border-gray-active': Images === Imagedata?.images?.exitTimeImage,\r\n 'border-gray': Images !== Imagedata?.images?.exitTimeImage\r\n }\">\r\n <div>Exit Time</div>\r\n <img class=\"cursor-pointer w-100 rounded-2 mh-100px pb-1\"\r\n [src]=\"Imagedata?.images?.exitTimeImage\"\r\n (error)=\"Imagedata?.images.exitTimeImage = null\" alt=\"\" (click)=\"imageData('exit')\">\r\n <div *ngIf=\"!Imagedata?.images?.exitTimeImage\" class=\"no-preview-sm cursor-pointer\">\r\n <span class=\"mb-2\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-2 text-center\">Preview not available</span>\r\n <span class=\"description mb-2 text-center\">The selected camera is not available\r\n at\r\n the\r\n moment.</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <span (click)=\"next()\" class=\"next\">\r\n <span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"7\" height=\"12\" viewBox=\"0 0 7 12\"\r\n fill=\"none\">\r\n <path d=\"M1 11L6 6L1 1\" stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n </span> -->\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n <!-- <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination> -->\r\n </div>\r\n <div class=\"col-md-12 col-lg-4 col-xl-4 col-xxl-4\">\r\n <div *ngIf=\"dataSubscrptionValue.tangoTraffic\" class=\"row\">\r\n <div class=\"col-12 mb-5 cam-details-header px-0\">Time Spent</div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Entry Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Exit Time <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n <!-- <div class=\"py-2 img-doc-time\">Avg Dwell Time</div> -->\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.entryTime ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.exitTime ?? '--'}}</div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata.timeSpent.totalTimeSpent ?? '--'}}</div>\r\n <!-- <div class=\"py-2 img-doc-value\">20 Mins</div> -->\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <hr />\r\n\r\n <div *ngIf=\"!dataSubscrptionValue.tangoZone\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Zone\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Identify hotspots and optimize your merchandise with Tango Zone's store heatmap analytics\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/zone-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"row\">\r\n <span class=\"zone-header\">Zones Visited</span>\r\n <ng-container class=\"h-200px scroll\">\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n <div class=\"col-md-4 mt-2\">\r\n <span class=\"badge badge-light-primary \">Billing Area</span>\r\n </div>\r\n </ng-container>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"last-visit\">Last Visited Zone</span>\r\n </div>\r\n <div class=\"col-md-6 mt-5\">\r\n <span class=\"badge badge-light-primary mx-2\"> John Jacobs</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"dataSubscrptionValue.tangoZone\" class=\"mt-5 col-lg-12\">\r\n <button class=\"btn btn-light-primary1 w-100 px-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_4713_25)\">\r\n <path d=\"M19.6673 5.83341L13.834 10.0001L19.6673 14.1667V5.83341Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12.1673 4.16675H3.00065C2.08018 4.16675 1.33398 4.91294 1.33398 5.83341V14.1667C1.33398 15.0872 2.08018 15.8334 3.00065 15.8334H12.1673C13.0878 15.8334 13.834 15.0872 13.834 14.1667V5.83341C13.834 4.91294 13.0878 4.16675 12.1673 4.16675Z\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4713_25\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.5)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">View Trajectory</span></button>\r\n </div>\r\n <hr />\r\n <div *ngIf=\"!dataSubscrptionValue.tangoTrax\" class=\"row my-2 px-2\">\r\n <div class=\"card productCard\">\r\n <div class=\"row \">\r\n <div class=\"col-md-7 py-5\">\r\n<div class=\"product-title\">\r\n Tango Trax\r\n</div>\r\n<div class=\"left-card-count-title mt-3\">\r\n Create AI-driven checklists to streamline your processes and boost compliance with Tango Trax.\r\n</div>\r\n<div class=\"explore-btn mt-4\">Explore <span class=\"mx-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 10.8333V15.8333C15 16.2754 14.8244 16.6993 14.5118 17.0118C14.1993 17.3244 13.7754 17.5 13.3333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V6.66667C2.5 6.22464 2.67559 5.80072 2.98816 5.48816C3.30072 5.17559 3.72464 5 4.16667 5H9.16667M12.5 2.5H17.5M17.5 2.5V7.5M17.5 2.5L8.33333 11.6667\" stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span></div>\r\n </div>\r\n <div class=\"col-md-5 px-0\">\r\n <img class=\"h-100 w-100\" src=\"assets/tango/Images/trax-tango.svg\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div *ngIf=\"dataSubscrptionValue.tangoTrax\" class=\"row\">\r\n <div class=\"zone-header my-3 ps-3\">Staff Engagement</div>\r\n\r\n <div class=\"row ps-3 mb-2\">\r\n <div class=\"col-md-8\">\r\n\r\n <div class=\"py-2 img-doc-time text-primary text-decoration-underline fw-bold\">Time taken to assist <span\r\n class=\"ms-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14ZM3.33333 14L10.6667 6.66667L14 10M6.66667 5.66667C6.66667 6.21895 6.21895 6.66667 5.66667 6.66667C5.11438 6.66667 4.66667 6.21895 4.66667 5.66667C4.66667 5.11438 5.11438 4.66667 5.66667 4.66667C6.21895 4.66667 6.66667 5.11438 6.66667 5.66667Z\"\r\n stroke=\"#667085\" stroke-width=\"1.2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span></div>\r\n\r\n <div class=\"py-2 img-doc-time\">Time spent with staff</div>\r\n\r\n </div>\r\n <div class=\"col-md-4 text-end\">\r\n\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeTakenToAssist ?? '--'}} </div>\r\n <div class=\"py-2 img-doc-value\">{{Imagedata?.staffEngagement?.timeSpentWithStaff ?? '--'}} </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <hr /> -->\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport dayjs from 'dayjs';\r\nimport { FormBuilder, FormControl } from '@angular/forms';\r\n\r\nimport { ImageDirectoryViewComponent } from '../image-directory-view/image-directory-view.component';\r\nimport { Zonev2Service } from '../../services/zonev2.service';\r\n\r\n@Component({\r\n selector: 'lib-image-directory',\r\n templateUrl: './image-directory.component.html',\r\n styleUrl: './image-directory.component.scss'\r\n})\r\n\r\nexport class ImageDirectoryComponent implements OnInit, OnDestroy {\r\n selectIndex: any = 0;\r\n selectedTime: any;\r\n objData: any;\r\n objectsArray: any;\r\n imagesArrayData: any;\r\n processType = \"footfall\";\r\n headerData: any;\r\n folderView = true;\r\n dayjs = dayjs;\r\n dateArray: string[];\r\n form: any;\r\n noData: boolean =false;\r\n loading:boolean =true;\r\n storeArrayValue: any;\r\n storeIdarray: any;\r\n constructor(\r\n private Zonev2Service: Zonev2Service,\r\n public gs: GlobalStateService,\r\n private cd: ChangeDetectorRef,\r\n private modalService: NgbModal,private fb: FormBuilder\r\n ) {\r\n this.form = this.fb.group({\r\n selectValue: new FormControl('') // Initialize as FormControl\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n if(data !==null || data?.client !== null){\r\n this.headerData = data;\r\n this.storeIdarray = this.headerData?.stores.filter((store:any) => store.checked).map((store:any) => store.storeId)\r\n this.objData = {\r\n storeId: data.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: data.client,\r\n processType: this.processType,\r\n footfallDate: this.headerData.date.endDate,\r\n };\r\n const initialValue = this.getInitialValue();\r\n const selectControl = this.form.get('selectValue') as FormControl;\r\n if (selectControl) {\r\n selectControl.setValue(initialValue);\r\n }\r\n this.backToFootfall();\r\n this.displayDateRange();\r\n }\r\n });\r\n }\r\n private readonly destroy$ = new Subject();\r\n ngOnDestroy(): void {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n getImageFolder() {\r\n \r\n delete this.objData.folderName;\r\n this.Zonev2Service\r\n .getFootfallDirectoryFolders(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n this.objectsArray = res?.data.footfallData;\r\n this.selectedTime = this.objectsArray[0].folderName;\r\n this.objData.folderName = this.selectedTime;\r\n this.getImageView();\r\n this.cd.detectChanges();\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n getImageView() {\r\n this.loading =true;\r\n this.noData =false;\r\n this.Zonev2Service\r\n .getFootfallDirectory(this.objData)\r\n .pipe(takeUntil(this.destroy$))\r\n ?.subscribe({\r\n next: (res: any) => {\r\n if (res && res.code === 200) {\r\n if(!res?.data.footfallData.length){\r\n this.loading =false;\r\n this.noData =true;\r\n } else{\r\n this.imagesArrayData = res?.data.footfallData;\r\n this.storeArrayValue = res?.data.storeName\r\n this.loading =false;\r\n this.noData =false;\r\n this.cd.detectChanges();\r\n }\r\n } else {\r\n this.loading =false;\r\n this.noData =true;\r\n }\r\n },\r\n error: (err: any) => {\r\n this.cd.detectChanges();\r\n },\r\n complete: () => {},\r\n });\r\n }\r\n\r\n getimages(index: any, obj: any) {\r\n this.selectIndex = index;\r\n (this.objData.footfallDate = obj), (this.folderView = false);\r\n this.getImageFolder();\r\n }\r\n backToFootfall() {\r\n this.selectIndex = 0;\r\n this.folderView = true;\r\n }\r\n selectedTimes(val: any) {\r\n this.selectedTime = val;\r\n this.objData.folderName = val;\r\n this.folderView = false;\r\n this.selectedTime = val;\r\n this.getImageView();\r\n }\r\n\r\n imageView(obj: any,footfallDate:any) {\r\n const modalRef = this.modalService.open(ImageDirectoryViewComponent, {\r\n centered: true,\r\n size: \"xl\",\r\n scrollable: true,\r\n });\r\n modalRef.componentInstance.Imagedata = obj;\r\n modalRef.componentInstance.processType = this.objData.processType;\r\n modalRef.componentInstance.footfallDate = footfallDate;\r\n modalRef.componentInstance.storeName = this.storeArrayValue;\r\n modalRef.componentInstance.storeId = this.storeIdarray\r\n modalRef.componentInstance.headerData = this.headerData;\r\n modalRef.componentInstance.imageArray = this.objectsArray;\r\n modalRef.componentInstance.folderName = this.objData.folderName\r\n modalRef.result.then((result: any) => {});\r\n }\r\n\r\n getDateRangeArray(fromDate: string, toDate: string): string[] {\r\n const start = new Date(fromDate); // Convert string to Date object\r\n const end = new Date(toDate); // Convert string to Date object\r\n const dateArray: string[] = [];\r\n\r\n // Check if the dates are valid\r\n if (isNaN(start.getTime()) || isNaN(end.getTime())) {\r\n return dateArray;\r\n }\r\n\r\n // Loop from start date to end date\r\n let currentDate = start;\r\n while (currentDate <= end) {\r\n dateArray.push(currentDate.toISOString().split(\"T\")[0]); // Format YYYY-MM-DD\r\n currentDate.setDate(currentDate.getDate() + 1); // Increment the date by 1 day\r\n }\r\n\r\n return dateArray;\r\n }\r\n\r\n // Method to display or log the date range array\r\n displayDateRange() {\r\n const dates = this.getDateRangeArray(\r\n this.headerData.date.startDate,\r\n this.headerData.date.endDate\r\n );\r\n this.dateArray = dates;\r\n }\r\n datasets = [\r\n { value: 'footfall', label: 'Footfall' },\r\n { value: 'bounced', label: 'Bounced Footfall' },\r\n { value: 'engager', label: 'Engagers' },\r\n { value: 'missedOpportunity', label: 'Missed Opportunity' },\r\n { value: 'conversion', label: 'Conversion' }\r\n ];\r\n\r\n getInitialValue(): string {\r\n // For example, selecting the second item in the dataset\r\n return this.datasets[0].value; // Change as needed\r\n }\r\n onValueChange(selectedId: any) {\r\n this.objData.processType = selectedId,\r\n this.getImageFolder();\r\n }\r\n get selectControl(): FormControl {\r\n return this.form.get('selectValue') as FormControl;\r\n }\r\n}\r\n"," <div class=\"card-header border-0 px-0\">\r\n <div class=\"col-md-12\">\r\n <div class=\"switch-form-card\">\r\n <div class=\"d-flex align-items-center\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#EAF8FF\" stroke-width=\"6\" />\r\n <path d=\"M23.8333 14.6666L15.5 24.6666H23L22.1667 31.3333L30.5 21.3333H23L23.8333 14.6666Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"txt-one ms-2\">\r\n <ng-container>Examine individual footfall in gallery view with optimal sample images for detailed analysis.</ng-container>\r\n <!-- <ng-container *ngIf=\"isMultiple\">Upload multiple stores for configuration</ng-container> -->\r\n </div>\r\n </div>\r\n <div>\r\n <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M18.295 7.115C18.6844 6.72564 18.6844 6.09436 18.295 5.705C17.9056 5.31564 17.2744 5.31564 16.885 5.705L12 10.59L7.115 5.705C6.72564 5.31564 6.09436 5.31564 5.705 5.705C5.31564 6.09436 5.31564 6.72564 5.705 7.115L10.59 12L5.705 16.885C5.31564 17.2744 5.31564 17.9056 5.705 18.295C6.09436 18.6844 6.72564 18.6844 7.115 18.295L12 13.41L16.885 18.295C17.2744 18.6844 17.9056 18.6844 18.295 18.295C18.6844 17.9056 18.6844 17.2744 18.295 16.885L13.41 12L18.295 7.115Z\"\r\n fill=\"black\" />\r\n </svg> -->\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"folderView\" class=\"p-1\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1 mt-5 text-center\" *ngFor=\"let obj of dateArray;let i = index\">\r\n <div (click)=\"getimages(i,obj)\">\r\n <div *ngIf=\"i === selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.154297\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#33B5FF\" />\r\n <path\r\n d=\"M39.8216 36.1667C39.8216 36.7855 39.5758 37.379 39.1382 37.8166C38.7006 38.2542 38.1071 38.5 37.4883 38.5H18.8216C18.2028 38.5 17.6093 38.2542 17.1717 37.8166C16.7341 37.379 16.4883 36.7855 16.4883 36.1667V19.8333C16.4883 19.2145 16.7341 18.621 17.1717 18.1834C17.6093 17.7458 18.2028 17.5 18.8216 17.5H24.6549L26.9883 21H37.4883C38.1071 21 38.7006 21.2458 39.1382 21.6834C39.5758 22.121 39.8216 22.7145 39.8216 23.3333V36.1667Z\"\r\n stroke=\"white\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n <div *ngIf=\"i !== selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.462891\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M40.1302 36.1667C40.1302 36.7855 39.8844 37.379 39.4468 37.8166C39.0092 38.2542 38.4157 38.5 37.7969 38.5H19.1302C18.5114 38.5 17.9179 38.2542 17.4803 37.8166C17.0427 37.379 16.7969 36.7855 16.7969 36.1667V19.8333C16.7969 19.2145 17.0427 18.621 17.4803 18.1834C17.9179 17.7458 18.5114 17.5 19.1302 17.5H24.9635L27.2969 21H37.7969C38.4157 21 39.0092 21.2458 39.4468 21.6834C39.8844 22.121 40.1302 22.7145 40.1302 23.3333V36.1667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n </div>\r\n <div *ngIf=\"!folderView\" class=\"p1\">\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-between align-items-center\">\r\n <span class=\"cursor-pointer\" (click)=\"backToFootfall()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <div class=\"ms-auto text-end\">\r\n <form [formGroup]=\"form\">\r\n <lib-reactive-select \r\n [formControl]=\"selectControl\" \r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"datasets\"\r\n class=\"w-100 text-start\"\r\n (valueChange)=\"onValueChange($event)\">\r\n </lib-reactive-select>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mt-6 p-0 w-100 overflow-x\">\r\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.folderName)\"\r\n [ngClass]=\"selectedTime === obj?.folderName ? 'active' : ''\" class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.folderName}}<span class=\"mx-2 \" [ngClass]=\"selectedTime === obj?.folderName ? 'badge-num-primary' :'badge-num-muted'\">{{obj?.count?obj?.count:0}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result for this image directory</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row p-3 img-traffic contain\" *ngIf=\"!noData && !loading\">\r\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of imagesArrayData\">\r\n <img *ngIf=\"obj.images.entryTimeImage\" class=\"img-src cursor-pointer\" [src]=\"obj.images.entryTimeImage\" (error)=\"obj?.images.entryTimeImage = null\" alt=\"\" (click)=\"imageView(obj,objData.footfallDate)\">\r\n <div *ngIf=\"!obj.images.entryTimeImage\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-8\">\r\n <div class=\"py-2 img-doc-directory\">{{obj.tempId}} <span class=\"badge badge-light-success ms-2\">{{selectControl.value | titlecase}}</span></div>\r\n <div class=\"py-2 img-doc-time\">Entry Time</div>\r\n <div class=\"py-2 img-doc-time\">Exit Time</div>\r\n <div class=\"py-2 img-doc-time\">Total Time Spent</div>\r\n </div>\r\n <div class=\"col-md-4 text-end\" >\r\n <div class=\"py-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1841_143300)\">\r\n <path d=\"M14.1986 5.33333V14H2.19857V5.33333M6.86523 8H9.5319M0.865234 2H15.5319V5.33333H0.865234V2Z\" stroke=\"#101828\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1841_143300\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" transform=\"translate(0.199219)\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.entryTime}} </div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.exitTime}}</div>\r\n <div class=\"py-2 img-doc-value\">{{obj.timeSpent.totalTimeSpent}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n\r\n","import { ChangeDetectorRef, Component, ElementRef } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\nimport * as am5 from \"@amcharts/amcharts5\";\r\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\r\nimport * as am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\r\n\r\ninterface ChartData {\r\n year: string; // or store name, depending on your requirement\r\n customerCountOver10Min: number;\r\n customerCountLessThanMin: number;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'lib-interation-table-client430',\r\n templateUrl: './interation-table-client430.component.html',\r\n styleUrl: './interation-table-client430.component.scss'\r\n})\r\nexport class InterationTableClient430Component {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private root!: am5.Root;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService,private el: ElementRef,) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n ngOnDestroy(): void {\r\n // this.zone.runOutsideAngular(() => {\r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n // });\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getInterationTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n console.log(this.cardData);\r\n this.cardData = response.data.data\r\n this.cardNoData = this.cardData.length === 0;\r\n setTimeout(() => {\r\n this.createChart(this.cardData); // Call this method after data is set\r\n }, 200);\r\n // this.createChart(this.cardData);\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n \r\n\r\n createChart(cardData: any[]): void {\r\n setTimeout(() => {\r\n const chartDiv = document.getElementById(\"chartdiv\");\r\n if (!chartDiv) {\r\n console.error(\"Could not find HTML element with id `chartdiv`\");\r\n return;\r\n }\r\n \r\n if (this.root) {\r\n this.root.dispose();\r\n }\r\n \r\n this.root = am5.Root.new('chartdiv');\r\n \r\n const chart = this.root.container.children.push(\r\n am5xy.XYChart.new(this.root, {\r\n panX: false,\r\n panY: false,\r\n paddingLeft: 0,\r\n wheelX: \"panX\",\r\n wheelY: \"zoomX\",\r\n layout: this.root.verticalLayout\r\n })\r\n );\r\n \r\n const legend = chart.children.push(\r\n am5.Legend.new(this.root, {\r\n centerX: am5.p50,\r\n x: am5.p50\r\n })\r\n );\r\n \r\n const data: ChartData[] = cardData.map((item: any) => ({\r\n year: item.store_name,\r\n customerCountOver10Min: item.customer_count_over10min,\r\n customerCountLessThanMin: item.customer_count_lessthanamin\r\n }));\r\n \r\n const xRenderer = am5xy.AxisRendererX.new(this.root, {\r\n cellStartLocation: 0.1,\r\n cellEndLocation: 0.9,\r\n minorGridEnabled: true\r\n });\r\n \r\n const xAxis = chart.xAxes.push(\r\n am5xy.CategoryAxis.new(this.root, {\r\n categoryField: \"year\",\r\n renderer: xRenderer,\r\n tooltip: am5.Tooltip.new(this.root, {})\r\n })\r\n );\r\n \r\n xRenderer.grid.template.setAll({\r\n location: 1\r\n });\r\n \r\n xAxis.data.setAll(data);\r\n \r\n xAxis.get(\"renderer\").labels.template.setAll({\r\n visible: false\r\n });\r\n \r\n const yAxis = chart.yAxes.push(\r\n am5xy.ValueAxis.new(this.root, {\r\n renderer: am5xy.AxisRendererY.new(this.root, {\r\n strokeOpacity: 0.1\r\n })\r\n })\r\n );\r\n \r\n // Use an arrow function to ensure `this` is bound correctly\r\n const makeSeries = (name: string, fieldName: keyof ChartData): void => {\r\n const series = chart.series.push(am5xy.ColumnSeries.new(this.root, {\r\n name: name,\r\n xAxis: xAxis,\r\n yAxis: yAxis,\r\n valueYField: fieldName,\r\n categoryXField: \"year\"\r\n }));\r\n \r\n series.columns.template.setAll({\r\n tooltipText: \"{name}: {valueY}\",\r\n width: am5.percent(90),\r\n tooltipY: 0,\r\n strokeOpacity: 0\r\n });\r\n \r\n series.data.setAll(data);\r\n series.appear();\r\n \r\n series.bullets.push(() => {\r\n return am5.Bullet.new(this.root, {\r\n locationY: 0,\r\n sprite: am5.Label.new(this.root, {\r\n text: \"{valueY}\",\r\n fill: this.root.interfaceColors.get(\"alternativeText\"),\r\n centerY: 0,\r\n centerX: am5.p50,\r\n populateText: true\r\n })\r\n });\r\n });\r\n \r\n legend.data.push(series);\r\n };\r\n \r\n makeSeries(\"Customer spent more than 10 mins\", \"customerCountOver10Min\");\r\n makeSeries(\"Billing Conversion\", \"customerCountLessThanMin\");\r\n \r\n chart.appear(1000, 100);\r\n }, 100);\r\n }\r\n \r\n onExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getInterationTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'CustomerFunnel');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n onRateExport() {\r\n const requestData = {\r\n fromDate: this.headerData.date.startDate,\r\n toDate: this.headerData.date.endDate,\r\n storeId: this.headerData.stores.filter((store: any) => store.checked).map((store: any) => store.storeId),\r\n clientId: this.headerData.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.zoneInteractionTableExport_430(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'InteractionvsConversion');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n}\r\n","\r\n<div class=\"row\">\r\n\r\n<div class=\"col-6 ps-5 pe-0\" *ngIf=\"!cardNoData\" >\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Customer Funnel</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- overflowfunnel -->\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" class=\"body me-4\">\r\n <div *ngFor=\"let item of cardData\" class=\"m-4\">\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Passer By\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.passer_by || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Footfall\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Drop In Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.drop_in_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Customer Attended\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.customer_attended || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Interaction Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <!-- <span class=\"table-title\">{{ roundof(overallStoreData?.concentrationRate) || '0' }} %</span> -->\r\n <span class=\"table-title\">{{ item.interaction_rate || '--' }} %</span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.footfall_overamin_inzone || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Billing Conversion Rate\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.billing_conversion_rate || '--' }}%\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Greetings Count\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.greeting_count || '--' }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"borderdashed my-2\"></div>\r\n <div class=\"d-flex flex-stack\">\r\n <span class=\"d-flex flex-row align-items-center\">\r\n <div class=\"overalltext me-2\">\r\n Avg Interaction Time\r\n </div>\r\n </span>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"table-title\">\r\n {{ item.avg_interaction_time || '--' }} Mins\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n \r\n\r\n <!-- <div class=\"card-body p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n \r\n <th>Interaction Rate</th>\r\n <th>Customer Attended</th>\r\n <th>Passer By</th>\r\n \r\n <th>Drop In Rate</th>\r\n <th>Billing Conversion</th>\r\n <th>Footfall</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.interaction_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.customer_attended }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.passer_by }}</div>\r\n </td>\r\n \r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.zonename }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.drop_in_rate }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall_overamin_inzone }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title subscribedtext\">{{ item.footfall }}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Interation Table Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div> -->\r\n </div>\r\n</div>\r\n\r\n<div class=\"col-6 ps-7 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 p-2\">\r\n <div class=\"card-title align-items-start flex-column headtext p-3\">Interaction vs Conversion</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <!-- [disabled]=\"!cardData.length\" -->\r\n <button type=\"button\" (click)=\"onRateExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body mb-14 p-0\">\r\n <div *ngIf=\"!cardDataLoading && !cardNoData\" id=\"chartdiv\"></div>\r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body mb-13 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Gender Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n \r\n</div>\r\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { ZoneService } from '../services/zone.service';\r\nimport { GlobalStateService } from 'tango-app-ui-global';\r\nimport { Subject, debounceTime, takeUntil} from 'rxjs';\r\nimport { ToastService } from 'tango-app-ui-shared';\r\n\r\n@Component({\r\n selector: 'lib-passerby-table',\r\n templateUrl: './passerby-table.component.html',\r\n styleUrl: './passerby-table.component.scss'\r\n})\r\nexport class PasserbyTableComponent implements OnInit,OnDestroy {\r\n cardData: any = {};\r\n cardDataLoading: boolean = true;\r\n cardNoData: boolean = false;\r\n headerData: any;\r\n isExport: boolean = false;\r\n private destroy$ = new Subject<void>();\r\n constructor(private ZoneService: ZoneService,private changeDetector: ChangeDetectorRef,public gs: GlobalStateService,private toast: ToastService) {}\r\n\r\n ngOnInit(): void {\r\n this.gs.dataRangeValue\r\n .pipe(takeUntil(this.destroy$), debounceTime(300))\r\n .subscribe((data: any) => {\r\n this.headerData = data;\r\n this.getCardData();\r\n})\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n itemsPerPage = 10000\r\n currentPage = 0\r\n totalItems = 0\r\n sortColumName: string = '';\r\n sortBy: any = '';\r\n sortDirection: any = '';\r\n searchInput: any =\"\";\r\n getCardData(): void {\r\n this.cardDataLoading = true;\r\n this.cardNoData = true;\r\n const requestData = {\r\n search: this.searchInput,\r\n sort: this.sortColumName,\r\n sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store?.checked)\r\n .map((store: any) => store?.storeId),\r\n clientId: this.headerData?.client,\r\n export: false,\r\n };\r\n \r\n this.ZoneService.getPasserByTable430Data(requestData).pipe(takeUntil(this.destroy$)).subscribe((response: any) => {\r\n this.cardDataLoading = false;\r\n if (response?.code === 200 && response?.status === \"success\") {\r\n this.cardData = response?.data?.passerByData\r\n this.cardNoData = this.cardData.length === 0;\r\n } else {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n }\r\n },\r\n error => {\r\n this.cardData = [];\r\n this.cardNoData = true;\r\n this.changeDetector.detectChanges();\r\n });\r\n }\r\n onExport() {\r\n const requestData = {\r\n search: this.searchInput,\r\n // sort: this.sortColumName,\r\n // sortBy: this.sortDirection,\r\n limit: this.itemsPerPage,\r\n offset: this.currentPage,\r\n fromDate: this.headerData?.date?.startDate,\r\n toDate: this.headerData?.date?.endDate,\r\n storeId: this.headerData?.stores\r\n .filter((store: any) => store.checked)\r\n .map((store: any) => store.storeId),\r\n clientId: this.headerData?.client,\r\n export: true,\r\n };\r\n\r\n this.ZoneService.getPasserByTable430DataExport(requestData).pipe(takeUntil(this.destroy$)).subscribe({\r\n next: (res) => {\r\n this.ZoneService.saveAsExcelFile(res, 'Passer-by Analysis ');\r\n },\r\n error: (e) => {\r\n this.toast.getErrorToast('Something went Wrong..')\r\n }\r\n })\r\n }\r\n\r\n sortData(column: string): void {\r\n if (this.sortColumName === column) {\r\n this.sortDirection = this.sortDirection === 1 ? -1 : 1;\r\n } else {\r\n this.sortColumName = column;\r\n this.sortDirection = 1;\r\n }\r\n this.getCardData();\r\n }\r\n}\r\n","<div class=\"row mt-2\">\r\n <div class=\"col-12 pe-0\" *ngIf=\"!cardNoData\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 px-4\">\r\n <div class=\"card-title align-items-start flex-column headtext px-3\">Passer-by Analysis</div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"onExport()\" class=\"btn-outline btn align-items-end text-nowrap invheader me-4\" [disabled]=\"!cardData.length\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <div class=\"card-body mb-8 p-0\">\r\n <div class=\"mx-3 agerangescroll\">\r\n <table *ngIf=\"!cardDataLoading && !cardNoData\" class=\"table bottom-border\">\r\n <thead class=\"fixed-header\">\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('streamName')\">\r\n Camera Name\r\n <svg [ngClass]=\"sortColumName === 'streamName' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'streamName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('passerby_count')\">\r\n Passer-by Count\r\n <svg [ngClass]=\"sortColumName === 'passerby_count' && sortDirection === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'passerby_count' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-responsive\">\r\n <tr *ngFor=\"let item of cardData\">\r\n <td class=\"text-capitalize\">{{ item.streamName ? item.streamName :'--'}}</td>\r\n <td>{{ item.passerby_count?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"cardDataLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center mb-15\">\r\n <div class=\"shimmer my-17\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"cardNoData && !cardDataLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column mb-10\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for PasserBy Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TangoAnalyseZoneRoutingModule } from './tango-analyse-zone-routing.module';\r\nimport { NgbAccordionModule, NgbCarouselModule, NgbModule, NgbProgressbarModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { OverallcardsComponent } from './components/overallcards/overallcards.component';\r\nimport { TopPerformingZonesComponent } from './components/top-performing-zones/top-performing-zones.component';\r\nimport { ZoneSummaryTableComponent } from './components/zone-summary-table/zone-summary-table.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { ZoneConcentrationComponent } from './components/zone-concentration/zone-concentration.component';\r\nimport { CommonSharedModule } from 'tango-app-ui-shared';\r\nimport { TangoAnalyseZoneComponent } from './components/tango-analyse-zone/tango-analyse-zone.component';\r\nimport { ConcentrationheatmapComponent } from './components/zone-concentration/concentrationheatmap/concentrationheatmap.component';\r\nimport { ZoneV2Component } from './components/zone-v2/zone-v2.component';\r\nimport { ZonesCardsComponent } from './components/zone-v2/zones-cards/zones-cards.component';\r\nimport { StoreHeatmapComponent } from './components/zone-v2/store-heatmap/store-heatmap.component';\r\nimport { ImageDirectoryComponent } from './components/zone-v2/image-directory/image-directory.component';\r\nimport { ImageDirectoryViewComponent } from './components/zone-v2/image-directory-view/image-directory-view.component';\r\nimport { CustomerJourneyComponent } from './components/zone-v2/customer-journey/customer-journey.component';\r\nimport { ReactiveSelectComponent } from './components/zone-v2/reactive-select/reactive-select.component';\r\nimport { TopPerformingComponent } from './components/zone-v2/top-performing/top-performing.component';\r\nimport { SummaryTableComponent } from './components/zone-v2/summary-table/summary-table.component';\r\nimport { StoreZoomHeatmapComponent } from './components/zone-v2/store-heatmap/store-zoom-heatmap/store-zoom-heatmap.component';\r\nimport { SegmentationComponent } from './components/segmentation/segmentation.component';\r\nimport { InterationTableClient430Component } from './components/interation-table-client430/interation-table-client430.component';\r\nimport { InterationTableClient459Component } from './components/interation-table-client459/interation-table-client459.component';\r\nimport { PasserbyTableComponent } from './components/passerby-table/passerby-table.component';\r\nimport { CustomerJourneyChartComponent } from './components/customer-journey-chart/customer-journey-chart.component';\r\nimport { ZoneJourneyComponent } from './components/zone-journey/zone-journey.component';\r\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n OverallcardsComponent,\r\n TangoAnalyseZoneComponent,\r\n TopPerformingZonesComponent,\r\n ZoneSummaryTableComponent,\r\n ZoneConcentrationComponent,\r\n ConcentrationheatmapComponent,\r\n\r\n ZoneV2Component,\r\n ConcentrationheatmapComponent,\r\n ZonesCardsComponent,\r\n StoreHeatmapComponent,\r\n ImageDirectoryComponent,\r\n ImageDirectoryViewComponent,\r\n CustomerJourneyComponent,\r\n ReactiveSelectComponent,\r\n TopPerformingComponent,\r\n SummaryTableComponent,\r\n StoreZoomHeatmapComponent,\r\n SegmentationComponent,\r\n InterationTableClient430Component,\r\n InterationTableClient459Component,\r\n PasserbyTableComponent,\r\n CustomerJourneyChartComponent,\r\n ZoneJourneyComponent,\r\n \r\n ],\r\n imports: [\r\n // CommonModule,\r\n // TangoAnalyseZoneRoutingModule,\r\n // NgbProgressbarModule,\r\n // FormsModule,\r\n // ReactiveFormsModule,\r\n // NgbCarouselModule,\r\n // CommonSharedModule,\r\n // NgbTooltipModule,\r\n // NgbModule\r\n CommonModule,\r\n TangoAnalyseZoneRoutingModule,\r\n NgbProgressbarModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CommonSharedModule,\r\n NgbTooltipModule,\r\n NgbModule,\r\n NgbAccordionModule,\r\n CommonSharedModule,\r\n NgbCarouselModule,\r\n MatAutocompleteModule\r\n],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]\r\n})\r\nexport class TangoAnalyseZoneModule { }\r\n","/*\r\n * Public API Surface of tango-analyse-zone\r\n */\r\n\r\nexport * from './lib/components/tango-analyse-zone/tango-analyse-zone.component';\r\nexport * from './lib/tango-analyse-zone.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EXCEL_TYPE","EXCEL_EXTENSION","takeUntil","i1.ZoneService","i2.Zonev2Service","i3","i5","i6","i7","i1","i2","i3.ZoneService","i8.ZoneJourneyComponent","i4","startWith","skip","i4.ZoneService","i5.Zonev2Service","i8","i2.ZoneService","i4.OverallcardsComponent","i5.TopPerformingZonesComponent","i6.ZoneSummaryTableComponent","i7.ZoneConcentrationComponent","i8.SegmentationComponent","i9.InterationTableClient459Component","i10.CustomerJourneyChartComponent","i1.Zonev2Service","i3.Zonev2Service","i8.ReactiveSelectComponent","i4.ZonesCardsComponent","i5.StoreHeatmapComponent","i6.CustomerJourneyComponent","i7.TopPerformingComponent","i8.SummaryTableComponent","debounceTime","i6.ReactiveSelectComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAMA,YAAU,GAAG,iFAAiF;AACpG,MAAMC,iBAAe,GAAG,OAAO;MAKlB,WAAW,CAAA;AAMF,IAAA,IAAA;AAA0B,IAAA,EAAA;AAL9C,IAAA,iBAAiB;AACjB,IAAA,aAAa;AACL,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/D,IAAA,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACnD,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;IACjD,WAAA,CAAoB,IAAgB,EAAU,EAAsB,EAAA;QAAhD,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAsB,IAAA,CAAA,EAAE,GAAF,EAAE;QAC9C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACnE,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB;AAC9C,gBAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa;AACvC,YAAA;AACH,QAAA,CAAC,CAAC;IACJ;IACA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;IACO,iBAAiB,CAAC,IAAW,EAAE,aAAqB,EAAA;QACzD,MAAM,SAAS,GAAmB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;AAChE,QAAA,MAAM,QAAQ,GAAkB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;AACvF,QAAA,MAAM,WAAW,GAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAClF,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC;IAClD;IAEO,eAAe,CAAC,MAAW,EAAE,QAAgB,EAAA;QAClD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAED;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAEC,iBAAe,CAAC;IAC5D;IACO,gBAAgB,CAAC,MAAW,EAAE,QAAgB,EAAA;QACnD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAED;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAGC,iBAAe,CAAC;IACpD;IACO,cAAc,CAAC,MAAW,EAAE,QAAgB,EAAA;QACjD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAED;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAGC,iBAAe,CAAC;IACpD;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAE3C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAEE,IAAA,0BAA0B,CAAE,IAAQ,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,iCAAA,CAAmC,EAAE,IAAI,CAAC;IAC3F;;;;AAIA,IAAA,gCAAgC,CAAE,IAAQ,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,2BAA2B,CAAE,IAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,6BAAA,CAA+B,EAAE,IAAI,CAAC;IACvF;AACA,IAAA,WAAW,CAAE,IAAQ,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAChF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,uBAAA,CAAyB,EAAE,IAAI,CAAC;IACjF;AACA,IAAA,iCAAiC,CAAE,IAAQ,EAAA;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,yBAAyB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAChH;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,sBAAsB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC7G;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,4BAA4B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACnH;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,yBAAA,CAA2B,EAAE,IAAI,CAAC;IACnF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,iCAAiC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACxH;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,yBAAA,CAA2B,EAAE,IAAI,CAAC;IACnF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,2BAA2B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAClH;AACA,IAAA,8BAA8B,CAAE,IAAQ,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,iCAAiC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACxH;AACA,IAAA,gCAAgC,CAAE,IAAQ,EAAA;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,+BAA+B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACtH;AAEA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,yBAAA,CAA2B,EAAE,IAAI,CAAC;IACnF;AACA,IAAA,8BAA8B,CAAE,IAAQ,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,iCAAiC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACxH;AACA,IAAA,uBAAuB,CAAE,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,qBAAA,CAAuB,EAAE,IAAI,CAAC;IAC/E;AACA,IAAA,6BAA6B,CAAE,IAAQ,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,8BAA8B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACrH;AACA,IAAA,uBAAuB,CAAE,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,4BAA4B,CAAE,IAAQ,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,6BAA6B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACpH;AACA,IAAA,6BAA6B,CAAE,IAAQ,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,0BAAA,CAA4B,EAAE,IAAI,CAAC;IACpF;AACA,IAAA,+BAA+B,CAAE,IAAQ,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,gCAAgC,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IACvH;AACA,IAAA,yBAAyB,CAAC,MAAW,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,uBAAA,CAAyB,EAAE,MAAM,CAAC;IACpF;AACQ,IAAA,WAAW,CAAC,KAAwB,EAAA;QAC1C,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAClE;IACH;AACO,IAAA,eAAe,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAEjE,IAAA,OAAO,CAAC,QAAgB,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrC;IAEA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IACpC;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;IAC7C;AAEA,IAAA,aAAa,CAAC,IAAQ,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,cAAA,CAAgB,EAAC,IAAI,CAAC;IACvE;AAEA,IAAA,YAAY,CAAC,IAAQ,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,gBAAA,CAAkB,EAAE,IAAI,CAAC;IAC1E;AAEA,IAAA,iBAAiB,CAAC,IAAQ,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,qBAAA,CAAuB,EAAE,IAAI,CAAC;IAC/E;AACE,IAAA,uBAAuB,CAAC,IAAQ,EAAA;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,uBAAuB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC9G;;AAKE,IAAA,oBAAoB,CAAC,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,qBAAA,CAAuB,EAAE,IAAI,CAAC;IAC/E;AACG,IAAA,4BAA4B,CAAC,IAAQ,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,6BAAA,CAA+B,EAAE,IAAI,CAAC;IACvF;AACA,IAAA,kCAAkC,CAAC,IAAQ,EAAA;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,+BAA+B,EAAE,IAAI,EAAC,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAErH;AACG,IAAA,+BAA+B,CAAC,IAAQ,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,gCAAA,CAAkC,EAAE,IAAI,CAAC;IAC1F;AACE,IAAA,4BAA4B,CAAC,IAAQ,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,4BAAA,CAA8B,EAAE,IAAI,CAAC;IACtF;AACG,IAAA,qBAAqB,CAAC,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAChF;AACA,IAAA,wBAAwB,CAAE,IAAQ,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,iBAAiB,CAAA,wBAAA,CAA0B,EAAE,IAAI,CAAC;IAClF;AAEE,IAAA,kBAAkB,CAAC,MAAW,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,gBAAA,CAAkB,EAAE,MAAM,CAAC;IAC7E;AAEA,IAAA,mBAAmB,CAAC,MAAW,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,iBAAA,CAAmB,EAAE,MAAM,CAAC;IAC9E;wGArMW,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACJD,MAAM,UAAU,GAAG,iFAAiF;AACpG,MAAM,eAAe,GAAG,OAAO;MAOlB,aAAa,CAAA;AASJ,IAAA,IAAA;AAA0B,IAAA,EAAA;AAR9C,IAAA,eAAe;AACf,IAAA,aAAa;IACL,eAAe,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC,CAAC;AACnE,IAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AACvC,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AAC/D,IAAA,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AAC1C,IAAA,YAAY,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AACtD,IAAA,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACzC,WAAA,CAAoB,IAAgB,EAAU,EAAsB,EAAA;QAAhD,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAsB,IAAA,CAAA,EAAE,GAAF,EAAE;QAC9C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AACnE,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe;AAC1C,gBAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa;AAEvC,YAAA;AACH,QAAA,CAAC,CAAC;IACJ;IACA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;AACA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;IACO,iBAAiB,CAAC,IAAW,EAAE,aAAqB,EAAA;QACzD,MAAM,SAAS,GAAmB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;AAChE,QAAA,MAAM,QAAQ,GAAkB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE;AACvF,QAAA,MAAM,WAAW,GAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAClF,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC;IAClD;IAEO,eAAe,CAAC,MAAW,EAAE,QAAgB,EAAA;QAClD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,eAAe,CAAC;IACpD;IAEO,cAAc,CAAC,MAAW,EAAE,QAAgB,EAAA;QACjD,MAAM,IAAI,GAAS,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,IAAI,EAAE;AACP,SAAA,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,eAAe,CAAC;IACpD;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAE3C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;;AAEE,IAAA,gBAAgB,CAAE,IAAQ,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,aAAA,CAAe,EAAE,IAAI,CAAC;IACrE;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,sBAAsB,CAAE,IAAQ,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,uBAAA,CAAyB,EAAE,IAAI,CAAC;IAC/E;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,oBAAA,CAAsB,EAAE,IAAI,CAAC;IAC5E;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,sBAAsB,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC3G;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,2BAA2B,CAAE,IAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,kCAAA,CAAoC,EAAE,IAAI,CAAC;IAC1F;AACA,IAAA,gCAAgC,CAAE,IAAQ,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,oCAAA,CAAsC,EAAE,IAAI,CAAC;IAC5F;AACA,IAAA,mBAAmB,CAAE,IAAQ,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,4BAAA,CAA8B,EAAE,IAAI,CAAC;IACpF;AACA,IAAA,qBAAqB,CAAE,IAAQ,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,sBAAA,CAAwB,EAAE,IAAI,CAAC;IAC9E;AACA,IAAA,2BAA2B,CAAC,MAAW,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,yBAAA,CAA2B,EAChD,MAAM,CACP;IACH;AACA,IAAA,oBAAoB,CAAC,MAAW,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,kBAAA,CAAoB,EACzC,MAAM,CACP;IACH;AACA,IAAA,eAAe,CAAC,MAAW,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,kBAAA,CAAoB,EAAE,MAAM,CAAC;IACjF;AACA,IAAA,yBAAyB,CAAE,IAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,0BAAA,CAA4B,EAAE,IAAI,CAAC;IAClF;AACA,IAAA,kBAAkB,CAAE,IAAQ,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,mBAAA,CAAqB,EAAE,IAAI,CAAC;IAC3E;AACA,IAAA,uBAAuB,CAAE,IAAQ,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,wBAAA,CAA0B,EAAE,IAAI,CAAC;IAChF;AACA,IAAA,6BAA6B,CAAE,IAAQ,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,eAAe,0BAA0B,EAAE,IAAI,EAAE,EAAC,YAAY,EAAE,aAAa,EAAC,CAAC;IAC/G;AACA,IAAA,yBAAyB,CAAC,MAAW,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAM,CAAA,EAAG,IAAI,CAAC,aAAa,CAAA,uBAAA,CAAyB,EAAE,MAAM,CAAC;IACpF;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEU,IAAA,WAAW,CAAC,KAAwB,EAAA;QAC1C,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAClE;IACH;wGAxHW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAHZ,MAAM,EAAA,CAAA;;4FAGP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCQY,qBAAqB,CAAA;AA0BtB,IAAA,IAAA;AACA,IAAA,WAAA;AACA,IAAA,aAAA;AACA,IAAA,EAAA;AACD,IAAA,EAAA;AACC,IAAA,KAAA;IA9BV,QAAQ,GAAQ,EAAE;IAClB,cAAc,GAAU,EAAE;IAC1B,WAAW,GAAU,EAAE;IACvB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;AACF,IAAA,UAAU;AACV,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,WAAW,GAAQ,EAAE;IACrB,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,qBAAqB,GAAQ,EAAE;IAC/B,uBAAuB,GAAG,KAAK;IAC/B,kBAAkB,GAAG,KAAK;IAC1B,QAAQ,GAAQ,eAAe;AAC/B,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,QAAQ;IACR,iBAAiB,GAAQ,EAAE;IAC3B,eAAe,GAAQ,EAAE;IACzB,iBAAiB,GAAG,KAAK;IACzB,sBAAsB,GAAG,IAAI;IAE7B,WAAA,CACU,IAAY,EACZ,WAAwB,EACxB,aAA4B,EAC5B,EAAqB,EACtB,EAAsB,EACrB,KAAmB,EAAA;QALnB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,EAAE,GAAF,EAAE;QACH,IAAA,CAAA,EAAE,GAAF,EAAE;QACD,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IACH,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAACC,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;iBAClC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;;AAGrC,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ;AACtB,iBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,CAAC,CAAC,CAAC;AACP,YAAAA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzB,iBAAA,SAAS,CAAC,CAAC,GAAQ,KAAI;AACtB,gBAAA,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;oBAEnB,IAAI,CAAC,WAAW,EAAE;AAEnB,gBAAA;AAAM,qBAAA;;oBAEL,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,iBAAiB,EAAE;oBACxB,IAAI,CAAC,iBAAiB,EAAE;oBACtB,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,gBAAA;AACH,YAAA,CAAC,CAAC;;YAGJ,UAAU,CAAC,MAAK;AACd,gBAAA,MAAM,UAAU,GAAQ,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;AACD,gBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;YAC9B,CAAC,EAAE,GAAG,CAAC;AAEP,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,KAAK,EAAE;gBACrC,IAAI,CAAC,kBAAkB,EAAE;AAC1B,YAAA;;AAED,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE;gBACtC,IAAI,CAAC,WAAW,CAAC;AACd,qBAAA,IAAI,CACH,SAAS,CAAC,IAAI,CAAC;AACf,gBAAA,IAAI,CAAC,CAAC,CAAC;AACP,gBAAAA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzB,qBAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,oBAAA,IAAI,QAAQ,EAAE;AACZ,wBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;wBACxB,IAAI,CAAC,mBAAmB,EAAE;wBAC1B,IAAI,CAAC,WAAW,EAAE;AACnB,oBAAA;AACH,gBAAA,CAAC,CAAC;AACL,YAAA;AACH,QAAA,CAAC,CAAC;IACN;IAEA,oBAAoB,GAAA;QAClB,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;YACpC,OAAO,EAAE,IAAI,CAAC,YAAY;AAC1B,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;QACD,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ;AACpD,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI;oBACxC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,iBAAiB,CAAC;AACjE,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC5B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;YAC7B,CAAC;AACF,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,QAAA;AACH,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAED,WAAW,GAAA;QACV,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;AAC1D,YAAA,IAAI,CAAC,QAAQ;gBAAE;YACf,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;YAED,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAGhD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACrD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACjC,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACvB,gBAAA,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACxB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;AACzB,aAAA,CAAC,CACH;AAGD,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CACjC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACvC,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAC5B,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,gBAAA,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACxB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC9B,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACxC,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CACH;AAGD,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;AAGF,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3B,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;YAGF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;AAEvC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAClC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;AACzB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACvB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACvB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,SAAS,EAAE,OAAO;AAClB,gBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG;AACvB,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;AACpC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAE1B,CAAC,EAAE,GAAG,CAAC;IACT;IACC,YAAY,GAAA;QACV,UAAU,CAAC,MAAK;YACX,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;YAC3D,IAAI,CAAC,QAAQ,EAAE;;gBAEb;AACD,YAAA;YAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;YACD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAEjD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACjD,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACrC,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;AAC9B,aAAA,CAAC,CACL;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC5B,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACtC,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE;AAChB,aAAA,CAAC,CACL;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC3B,QAAQ,EAAE,CAAC;AACd,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,OAAO,EAAE;AACZ,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AAC5B,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB;AAC3C,aAAA,CAAC,CACL;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,KAAK;AAElB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3B,aAAA,CAAC;YACJ,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAAM,KAAI,EAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;;AAGlC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC5B,CAAC,EAAE,GAAG,CAAC;IACX;IAEE,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,eAAe;SAC1D;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW;AACrC,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CACR,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBAClC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc;gBAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;oBACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,gBAAA,CAAC,CAAC;gBACF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW;gBAC5C,UAAU,CAAC,MAAK;AACd,oBAAA,IAAG,IAAI,CAAC,UAAU,EAAE,MAAM,KAAI,KAAK;AACnC,wBAAA,IAAI,CAAC,WAAW,EAAE,CAAC;;wBAEnB,IAAI,CAAC,YAAY,EAAE;gBACrB,CAAC,EAAE,GAAG,CAAC;AAEP,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACxB,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;AACH,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,QAAA,CAAC,CACF;IACL;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;QACzC,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;AACnC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,qBAAqB,GAAG,GAAG,EAAE,IAAI,EAAE,qBAAqB;AAC7D,oBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAChC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,oBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC/B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK;AACpC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAChC,CAAC;AACF,SAAA,CAAC;IACN;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,IAAI;SACb;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,WAAW;AACxD,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,oBAAoB,CAAC;YAC7D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD,CAAC;AACF,SAAA,CAAC;IACN;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW;AAC7C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CACR,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;YACnC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,IAAI,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE;oBAChD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB;;;;;;oBAMzD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;AAC3D,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC9B,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC9B,YAAA;;AAEH,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,QAAA,CAAC,CACF;IACL;IACA,eAAe,GAAA;AACb,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW;AACnD,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD,CAAC;AACF,SAAA,CAAC;IACN;AAEA,IAAA,kBAAkB;IAClB,iBAAiB,GAAA;AACf,QAAA,IAAI,GAAG,GAAG;AACR,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;SACtC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG;AACtC,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AAC5B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI;AACpC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC9B,CAAC;AACF,SAAA,CAAC;IACN;AACA,IAAA,mBAAmB;AACnB,IAAA,kBAAkB;IAClB,cAAc,GAAA;QACZ,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACtC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ;AAC9C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;AAC3B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI;AACpC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACN;IACA,cAAc,GAAG,KAAK;IACtB,eAAe,GAAA;QACb,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACtC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ;AAC/C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;AAC3B,oBAAA,IAAI,CAAC,mBAAmB,GAAG,GAAG,EAAE,IAAI;AACrC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC9B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACN;IACA,QAAQ,GAAQ,OAAO;AACvB,IAAA,SAAS,CAAC,IAAS,EAAA;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,eAAe,EAAE;IACxB;IACA,kBAAkB,GAAQ,EAAE;IAE9B,KAAK,GAAU,EAAE;IACjB,eAAe,GAAG,CAAC;IAEnB,WAAW,GAAG,IAAI;IAClB,UAAU,GAAG,KAAK;AAEV,IAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;IAI5C,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAE1B,QAAA,MAAM,GAAG,GAAG;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO;iBAC5B,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AAC7B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,GAAG;AAC9C,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBAExB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE;AAC5C,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;oBACtB;AACD,gBAAA;gBAED,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAEtD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AAClD,oBAAA,KAAK,EAAE,GAAG;AACV,oBAAA,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO;AACnC,oBAAA,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;AAC1B,iBAAA,CAAC,CAAC;AAEH,gBAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;gBAGvB,IAAI,CAAC,iBAAiB,EAAE;YAC1B,CAAC;YAED,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;YAC1B;AACD,SAAA,CAAC;IACN;IAGA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;IAClD;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,eAAe;AAClB,YAAA,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;IACtE;AAEA,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;IAC9B;IAGA,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE;AAE5B,QAAA,QAAQ,CAAC,IAAI,CAAC;AACX,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAEA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC7D,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,eAAe;AAClB,gBAAA,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;AAChD,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACzB,QAAA,CAAC,CAAC;IACN;IAIA,cAAc,GAAO,EAAE;IACvB,YAAY,GAAO,EAAE;IAEnB,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SACjC;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AAC9B,oBAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAE,MAAM,CACrE,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,eAAe,CAChE;;AAEE,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AAC1B,oBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;wBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ;wBACnD,IAAI,CAAC,cAAc,EAAE;AACtB,oBAAA;AACQ,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACzB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;YAC1B;AACD,SAAA,CACA;IACH;AACF,IAAA,YAAY,CAAC,KAAS,EAAA;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;QACtC,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,kBAAkB;IAChB,cAAc,GAAA;AACZ,QAAA,IAAI,GAAG,GAAG;AACR,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;iBACtB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,IAAI,EAAC,IAAI,CAAC;SACX;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,GAAG;AACvC,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;oBAC5B,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI,EAAE,YAAY;oBACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAC3D,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;YAC9B,CAAC;AACF,SAAA,CAAC;IAGN;wGAvsBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,wDCtBlC,0pyEAkhCU,EAAA,MAAA,EAAA,CAAA,u9HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FD5/BG,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,0pyEAAA,EAAA,MAAA,EAAA,CAAA,u9HAAA,CAAA,EAAA;;;MEJjB,oBAAoB,CAAA;AAKR,IAAA,OAAA;AAA4B,IAAA,aAAA;AAAoC,IAAA,EAAA;AAA6B,IAAA,MAAA;AAAsB,IAAA,EAAA;AAJjI,IAAA,IAAI;AACF,IAAA,UAAU;AACT,IAAA,UAAU;AACT,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACxC,WAAA,CAAoB,OAAmB,EAAS,aAA2B,EAAS,EAAoB,EAAS,MAAa,EAAS,EAAe,EAAA;QAAlI,IAAA,CAAA,OAAO,GAAP,OAAO;QAAqB,IAAA,CAAA,aAAa,GAAb,aAAa;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA2B,IAAA,CAAA,MAAM,GAAN,MAAM;QAAgB,IAAA,CAAA,EAAE,GAAF,EAAE;IAAiB;AAC/J,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;YACtC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AACtD,QAAA;AACD,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AACvD,QAAA;QACD,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;IACzB;AAGA,IAAA,mBAAmB;AACnB,IAAA,eAAe;AACf,IAAA,MAAM;AACN,IAAA,OAAO;IACP,cAAc,GAAQ,EAAE;IAExB,YAAY,GAAG,KAAK;IACpB,UAAU,GAAG,EAAE;IACf,QAAQ,GAAK,EAAE;IACf,aAAa,GAAK,EAAE;IAGpB,gBAAgB,GAAG,KAAK;IACxB,YAAY,GAAU,EAAE;IACxB,iBAAiB,GAAU,EAAE;IAC7B,kBAAkB,GAAG,EAAE;IACvB,cAAc,GAAS,EAAE;IACvB,iBAAiB,GAAA;AACf,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SACjC;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AAC9B,oBAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAE,MAAM,CACrE,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,eAAe,CAChE;AACE,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK;wBACvC,IAAI,EAAE,CAAC,CAAC,QAAQ;AAChB,wBAAA,OAAO,EAAE;AACV,qBAAA,CAAC,CAAC;AACH,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,oBAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AACvB,oBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAClB,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AAEtB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACtB,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC7B,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC7B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAChC;AACD,SAAA,CACA;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCyB,IAAA,YAAY;;AAIvC,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC9B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;QAEtC,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAK,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5D,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAChD,QAAA;IACH;;AAIA,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AAExB,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAEzD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AAC1B,QAAA;IACH;AACA,IAAA,eAAe,CAAC,KAAU,EAAA;AACxB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO;;AAGpC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK;AAC9C,YAAA,GAAG,CAAC;YACJ;AACD,SAAA,CAAC,CAAC;;QAGH,IAAI,CAAC,WAAW,EAAE;IACpB;IACA,aAAa,GAAA;AACX,QAAA,QACE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IAE3C;IAEA,WAAW,GAAA;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;QAClD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IACjD,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACpC;IACH;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAEtD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;aACtB,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,OAAO;aAC7B,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC;AAE1B,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACvB,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IAEA,UAAU,GAAA;;AAER,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAK,MAAM;AAC5C,YAAA,GAAG,CAAC;AACJ,YAAA,OAAO,EAAE;AACV,SAAA,CAAC,CAAC;;QAGH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAK,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;AAE/C,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;;AAG5B,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAElB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IACA,oBAAoB,GAAA;QAClB,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;AAC3B,YAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,IAAI,CAAC;AAC/E,YAAA,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;AACjC,YAAA,MAAM,EAAG;SACV;QAED,IAAI,CAAC,OAAO,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACpE,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACX,gBAAA,IAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAC;oBACrE,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;oBACvE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC3C,gBAAA;AAAM,qBAAA;oBACP,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,GAAC,GAAG,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;oBACxG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC3C,gBAAA;YACC,CAAC;AACD,YAAA,KAAK,GAAG,CAAC,CAAK,KAAI;gBAChB,IAAI,QAAQ,GAAG,wBAAwB;gBACvC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;AACjC,oBAAA,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK;AACzB,gBAAA;AACD,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjC,YAAA,CAAC;AACN,SAAA,CAAC;IACJ;IACA,cAAc,GAAG,KAAK;IACd,eAAe,GAAG,IAAI;IAC9B,cAAc,CAAC,cAAqB,EAAE,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;AAC3B,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,MAAM,EAAE,IAAI,CAAC,cAAc,IAAI,EAAE;AACjC,YAAA,MAAM,EAAG;SACV;QAED,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;AAC3B,oBAAA,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,IAAI;oBACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,IAAI,EAAE;AAChE,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC7B,gBAAA;YACH,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC9B;AACD,SAAA,CAAC;IACJ;IAEA,eAAe,GAAG,KAAK;IACf,gBAAgB,GAAG,IAAI;IAC/B,SAAS,CAAC,cAAqB,EAAE,EAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC7B,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AACzC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACxC,YAAA,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK;AAC3B,YAAA,SAAS,EAAE,WAAW;SAEvB;QACH,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,GAAO,KAAG;AACf,gBAAA,IAAG,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAC;AACzB,oBAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI;oBAC/B,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC5B,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC9B,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAO,KAAG;AAChB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;YAEjC;AACD,SAAA,CAAC;IAEJ;IAEA,WAAW,GAAA;QACT,UAAU,CAAC,MAAK;;YAEd,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,YAAA;;YAGD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;YAGxD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC9C,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CACH;;;;YAKD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACzC,gBAAA,iBAAiB,EAAE,KAAK;AACxB,gBAAA,mBAAmB,EAAE,KAAK;AAC1B,gBAAA,aAAa,EAAE,KAAK;AACpB,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,kBAAkB,EAAE;AACrB,aAAA,CAAC;AAEF,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;AAChC,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzB,gBAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC3B,gBAAA,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AAChC,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,aAAa,EAAE;AAChB,aAAA,CAAC;;YAGF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;AAChD,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3B,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;;YAGF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;AAC3C,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC;;AAGE,YAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAI;AAClE,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,gBAAA,IAAI,CAAC,QAAQ;AAAE,oBAAA,OAAO,EAAE;AAExB,gBAAA,MAAM,EAAE,GAAQ,QAAQ,CAAC,WAAW;gBAEpC,OAAO,CAAA;;;AAGC,YAAA,EAAA,EAAE,CAAC,IAAI,CAAA,GAAA,EAAM,EAAE,CAAC,EAAE,CAAA;;;;;kCAKE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAA;;;;kCAIhB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAA;;;;OAIzC;AACH,YAAA,CAAC,CAAC;;;;YAKF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClC,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;AACzB,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;;;;AAKF,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,KAAI;gBAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,oBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;oBACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,wBAAA,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;qBACxC;AACF,iBAAA,CAAC;gBAEF,MAAM,CAAC,OAAO,CAAC;AACb,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,EAAE,EAAE,CAAC;oBACL,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG;AAClC,iBAAA,CAAC;AAEF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;;;;AAKF,YAAA,MAAM,SAAS,GAAG,CAAC,IAAY,KAAI;gBACjC,IAAI,IAAI,KAAK,OAAO;AAAE,oBAAA,OAAO,CAAC;gBAC9B,IAAI,IAAI,KAAK,MAAM;AAAE,oBAAA,OAAO,GAAG;AAC/B,gBAAA,OAAO,CAAC;AACV,YAAA,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC;AAEhE,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;gBACxD,QACE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;oBACtC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC;AAE1C,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;IAKE,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;;IAE1B;IAEC,KAAK,GAAO,EAAE;IAEjB,WAAW,GAAkB,CAAC;AAE9B,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK;IAC9D;IACA,aAAa,GAAE,KAAK;IACpB,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa;AAC1C,QAAA,IAAG,CAAC,IAAI,CAAC,aAAa,EAAC;AACrB,YAAA,IAAI,CAAC,cAAc,GAAE,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AACxB,QAAA;IACD;IAEA,cAAc,GAAS,EAAE;IACzB,WAAW,GAAA;AACR,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;IAC1B;IACA,WAAW,GAAG,KAAK;;IAGnB,QAAQ,GAAG,KAAK;IAChB,OAAO,GAAG,CAAC;IACX,OAAO,GAAG,CAAC;AAEX,IAAA,WAAW,GAAG;AACZ,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG;KAC3B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW;IACtC;AAYA,IAAA,SAAS,CAAC,KAAiB,EAAA;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AAEvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI;AACpD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;QAEnD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;QACnD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;IACrD;AAEA,IAAA,MAAM,GAAG,CAAC,KAAiB,KAAI;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AAEpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACrD,IAAA,CAAC;IAED,QAAQ,GAAG,MAAK;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;QACtD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC;AACxD,IAAA,CAAC;IAEC,SAAS,GAAA;QACP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC/C;wGA9gBW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,iUCdjC,0z0BAqWM,EAAA,MAAA,EAAA,CAAA,k5HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FDvVO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,0z0BAAA,EAAA,MAAA,EAAA,CAAA,k5HAAA,CAAA,EAAA;wLAMjB,UAAU,EAAA,CAAA;sBAAlB;gBACS,UAAU,EAAA,CAAA;sBAAlB;gBA0GqB,YAAY,EAAA,CAAA;sBAAtC,SAAS;uBAAC,cAAc;gBAgBzB,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MExH7B,2BAA2B,CAAA;AAuBlB,IAAA,IAAA;AAAqB,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,WAAA;AAAkC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAA+B,IAAA,UAAA;AAA+B,IAAA,MAAA;AAtBjQ,IAAA,QAAQ;IAChB,mBAAmB,GAAU,EAAE;IAC/B,kBAAkB,GAAU,EAAE;IAC9B,WAAW,GAAW,EAAE;IACxB,cAAc,GAAY,KAAK;IAC/B,eAAe,GAAY,IAAI;IAC/B,cAAc,GAAY,KAAK;IAC/B,0BAA0B,GAAY,IAAI;IAC1C,yBAAyB,GAAY,KAAK;AAC1C,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;IACzB,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;;;;;;AAQN,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;AACzC,IAAA,WAAA,CAAoB,IAAY,EAAS,YAAsB,EAAU,EAAe,EAAU,WAAwB,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAS,UAAsB,EAAS,MAAc,EAAA;QAAnQ,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAiB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,WAAW,GAAX,WAAW;QAAuB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,UAAU,GAAV,UAAU;QAAqB,IAAA,CAAA,MAAM,GAAN,MAAM;IAAY;IAE3R,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,sBAAsB,EAAE;;AAErC,QAAA,CAAC,CAAC;IAEA;AACW,IAAA,UAAU;AACvB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE;YACtC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY;AACtD,QAAA;IACH;IACE,WAAW,GAAA;;QAEP,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxB,QAAA;;AAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;SAChC;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB;AAC1D,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC3B,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,YAAY,EAAE;gBACrB,CAAC,EAAE,GAAG,CAAC;AACV,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC7B,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,YAAY,GAAA;;QAER,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,QAAQ,EAAE;;YAEb;AACD,QAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACxB,QAAA;QAED,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;;QAG5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnF,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,WAAW,EAAE;AACd,SAAA,CAAC,CAAC;;QAGH,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC;;QAG5C,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACvD,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,gBAAgB,EAAE;AACnB,SAAA,CAAC;AACF,QAAA,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC/B,QAAQ,EAAE,CAAC,EAAE;YACb,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,SAAS,EAAE;AACZ,SAAA,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;AAE7C,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnE,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,aAAa,EAAE,UAAU;AACzB,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChE,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpD,SAAA,CAAC,CAAC;AAEH,QAAA,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClD,QAAQ,EAAE,CAAC,EAAE;AACb,YAAA,IAAI,EAAE,UAAU;YAChB,CAAC,EAAE,GAAG,CAAC,GAAG;YACV,OAAO,EAAE,GAAG,CAAC;AACd,SAAA,CAAC,CAAC;;AAGH,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACrE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,WAAW,EAAE,OAAO;YACpB,cAAc,EAAE,UAAU;AAC3B,SAAA,CAAC,CAAC;;AAGH,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;YACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnC,gBAAA,SAAS,EAAE,CAAC;gBACZ,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAA,IAAI,EAAE,oCAAoC;oBAC1C,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC1D,oBAAA,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,oBAAA,YAAY,EAAE;iBACf;AACF,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,YAAA,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,GAAG,CAAC;AACf,SAAA,CAAC;QACF,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YACjE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAE5C,QAAA;AAAM,aAAA;;AAEN,QAAA;;IAEL;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACvH,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;YACvC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB;AAC5D,gBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,gBAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACtC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,gBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACvC,QAAA,CAAC,CACF;IACD;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACvG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;AACA,IAAA,WAAW,CAAC,CAAK,EAAA;QACf,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QACjC,IAAI,CAAC,sBAAsB,EAAE;IAC/B;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,sBAAsB,EAAE;IAC/B;;;;;;;;;;;;;AAcA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;wGAjSW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,2HClBxC,4seA+MU,EAAA,MAAA,EAAA,CAAA,smFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD7LG,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,4seAAA,EAAA,MAAA,EAAA,CAAA,smFAAA,CAAA,EAAA;mSAwCzB,UAAU,EAAA,CAAA;sBAAlB;;;MExCQ,yBAAyB,CAAA;AA+B1B,IAAA,WAAA;AACA,IAAA,cAAA;AACD,IAAA,EAAA;AAA8B,IAAA,YAAA;AAC7B,IAAA,MAAA;AAAuB,IAAA,KAAA;AACvB,IAAA,KAAA;IAlCV,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,eAAe,GAAS,EAAE;IAC1B,QAAQ,GAAG,EAAE;IACb,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAO,EAAE;IACpB,mBAAmB,GAAU,EAAE;IAC/B,cAAc,GAAY,KAAK;IAC/B,WAAW,GAAU,EAAE;IACvB,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;AAClC,IAAA,UAAU;AAEF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;;;;;;;;AAYtC,IAAA,WAAA,CACU,WAAwB,EACxB,cAAiC,EAClC,EAAsB,EAAQ,YAAsB,EACnD,MAAc,EAAS,KAAqB,EAC5C,KAAmB,EAAA;QAJnB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,cAAc,GAAd,cAAc;QACf,IAAA,CAAA,EAAE,GAAF,EAAE;QAA4B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QAAiB,IAAA,CAAA,KAAK,GAAL,KAAK;QAC5B,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IAGH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAA,CAAC,CAAC;IAEA;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW;AAC7C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe;gBACxD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;gBAC1C,IAAI,CAAC,kBAAkB,EAAE;AACzB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW;AAC7C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,eAAe;gBACxD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;;AAE1C,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,kBAAkB,CAAC;YAC3D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACN;IACA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAC,EAAE;QAChB,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,eAAe,EAAE;IACxB;AACA,IAAA,YAAY,CAAC,UAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;QAC7B,IAAI,CAAC,eAAe,EAAE;IACxB;AACA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;IACA,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC;wGArOW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,8DCdtC,+uwBA+SM,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAF,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FDjSO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,+uwBAAA,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA;;;MEFvB,6BAA6B,CAAA;AAC/B,IAAA,UAAU;IACnB,iBAAiB,GAAG,CAAC;IACrB,YAAY,GAAG,CAAC;AAChB,IAAA,gBAAgB,GAA8D,EAAE,SAAS,EAAE,EAAE,EAAE;AAE/F,IAAA,WAAA,GAAA,EAAe;IAEf,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU;AAClD,QAAA;IAIL;IACA,eAAe,GAAA;QACb,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAC5E,QAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;IACvD;AAEA,IAAA,aAAa,CACZ,UAAyB,EAAA;AAE1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;QAChF,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAChF,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACD,QAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACG,aAAA;AACF,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACL;wGAnDa,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,sGCR1C,kkBAWE,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,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,EAAAA,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,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDHW,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,kkBAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA;wDAK3B,UAAU,EAAA,CAAA;sBAAlB;;;MEOU,0BAA0B,CAAA;AA0CjB,IAAA,IAAA;AAAqB,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,WAAA;AAAkC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAA+B,IAAA,UAAA;IAzC1O,KAAK,GAAG,KAAK;IACb,WAAW,GAAO,EAAE;IACpB,cAAc,GAAQ,KAAK;IAC3B,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,qBAAqB,GAAU,EAAE;IACjC,gBAAgB,GAAQ,EAAE;IAC1B,IAAI,GAAW,OAAO;IACtB,8BAA8B,GAAU,EAAE;IAC1C,YAAY,GAAW,EAAE;IACzB,UAAU,GAAW,CAAC;IACtB,YAAY,GAAY,KAAK;IAC7B,YAAY,GAAY,KAAK;IAC7B,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;IAClC,cAAc,GAAY,IAAI;IAC9B,aAAa,GAAY,KAAK;AAC9B,IAAA,UAAU;IACV,aAAa,GAAQ,EAAE;IACvB,QAAQ,GAAW,EAAE;IACrB,UAAU,GAAY,KAAK;IAC3B,WAAW,GAAY,KAAK;IAC5B,YAAY,GAAY,KAAK;IAC7B,WAAW,GAAY,KAAK;IAC5B,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,CAAC;IAChB,iBAAiB,GAAG,CAAC;;;;;;;;AAQJ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;AACC,IAAA,QAAQ;IAClD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,YAAY,GAAO,EAAE;AACrB,IAAA,WAAA,CAAoB,IAAY,EAAS,YAAsB,EAAU,EAAe,EAAU,WAAwB,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAS,UAAsB,EAAA;QAA5O,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAiB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,WAAW,GAAX,WAAW;QAAuB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,UAAU,GAAV,UAAU;IAAgB;IACpQ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACpH,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO;;;;;;;;;;;;;;;;;;YAkBnB,IAAI,CAAC,wBAAwB,EAAE;;;AAGzC,QAAA,CAAC,CAAC;IAEA;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;QAGD,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAClH,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB;;gBAEhE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE;gBAC/F,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;gBAC3B,IAAI,CAAC,2BAA2B,EAAE;AACnC,YAAA;AAAM,iBAAA;;;;AAIL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;;AAGlB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CACF;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACtG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,0BAA0B,CAAC;YACnE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEA,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,MAAM,EAAE,KAAK;SACd;QAGD,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAClH,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB;;;AAGhE,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;;;;AAIL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;;AAGlB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CACF;IAEH;IAEA,gCAAgC,GAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC;SAChB;QACD,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;;YAEtH,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;;gBAE5D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,8BAA8B;AACpE,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;gBAC1B,UAAU,CAAC,MAAK;oBACd,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,oBAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;gBACnD,CAAC,EAAE,GAAG,CAAC;AACR,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;;AAEzB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC1B,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;;;AAG3B,QAAA,CAAC,CACF;IACH;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC;SAChB;QAED,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACnH,YAAA,IAAG,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAC;gBAC3B,IAAI,CAAC,8BAA8B,GAAG,QAAQ,CAAC,IAAI,CAAC,8BAA8B;gBAClF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,QAAQ;AACnE,gBAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE;;;;;;;;AASjH,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,wBAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,4BAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,wBAAA;AACF,oBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,wBAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,4BAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,wBAAA;AACF,oBAAA;AAAM,yBAAA;AACN,oBAAA;oBACD,IAAI,CAAC,gCAAgC,EAAE;;;AAG1C,gBAAA;AAAM,qBAAA;AAEL,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC1B,gBAAA;AACF,YAAA;AAAI,iBAAA;AACH,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAC5B,YAAA;QACH,CAAC,EACC,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAE3B,QAAA,CAAC,CACF;IACH;AAEA,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,gCAAgC,EAAE;AACxC,QAAA;IACH;AAEA,IAAA,UAAU,CAAC,YAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;QACxB,IAAI,CAAC,2BAA2B,EAAE;;IAEtC;AAEA,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;;IAElD;AACA,IAAA,oBAAoB,CAAC,UAAkB,EAAA;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,6BAA6B,EAAE;AACrE,YAAA,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;AACvB,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAG,UAAU;QAClD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAEhC,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACxE,EAAC,IAAI,EAAE,CAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;IACnC,WAAW,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACzE,EAAC,IAAI,EAAE,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;AAEhC,IAAA,aAAa,CACZ,UAAyB,EAAA;AAC1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;QAClE,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACI,aAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACzE,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACI,aAAA;AACH,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACP;wGAtYa,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,iDAF1B,CAAC,iBAAiB,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAsCD,UAAU,6BCpDzC,+huCAggBM,EAAA,MAAA,EAAA,CAAA,+9KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAI,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDhfO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;+BACE,wBAAwB,EAAA,SAAA,EAGvB,CAAC,iBAAiB,CAAC,EAAA,QAAA,EAAA,+huCAAA,EAAA,MAAA,EAAA,CAAA,+9KAAA,CAAA,EAAA;4QAsCY,QAAQ,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAC,IAAI,EAAC,UAAU,EAAC;;;MEtC7B,qBAAqB,CAAA;AAgBZ,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;IAf7H,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;IAC3B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,IAAI;IAChC,WAAW,GAAY,KAAK;AAC5B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,QAAQ,GAAK,eAAe;AAC5B,IAAA,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAA;QAA5H,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;AACzI,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;IACnD,QAAQ,GAAA;QACP,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,YAAA,QAAQ,IAAI,CAAC,UAAU,EAAE,MAAM;AAC7B,gBAAA,KAAK,KAAK;;AAEN,oBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ;AAClB,yBAAA,IAAI,CACHK,WAAS,CAAC,IAAI,CAAC;AACf,oBAAAC,MAAI,CAAC,CAAC,CAAC;AACP,oBAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEzB,yBAAA,SAAS,CAAC,CAAC,GAAQ,KAAI;AACtB,wBAAA,IAAI,GAAG,EAAE;AACP,4BAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;4BACnB,IAAI,CAAC,iBAAiB,EAAE;AACzB,wBAAA;AAAM,6BAAA;4BAEb,IAAI,CAAC,iBAAiB,EAAE;AACzB,wBAAA;AACH,oBAAA,CAAC,CAAC;;AAGF,oBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE;wBACtC,IAAI,CAAC,WAAW,CAAC;AACd,6BAAA,IAAI,CAACA,MAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,6BAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,4BAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;4BACxB,IAAI,CAAC,YAAY,EAAE;4BACnB,IAAI,CAAC,YAAY,EAAE;AACrB,wBAAA,CAAC,CAAC;AACL,oBAAA;oBACD;AAEF,gBAAA,KAAK,KAAK;oBACR,IAAI,CAAC,iBAAiB,EAAE;oBACxB;AAEF,gBAAA;;oBAEE;AACH;AACH,QAAA,CAAC,CAAC;IACN;;IAGQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,YAAY,EAAE;IACrB;;IAGQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,WAAW,EAAE;IACpB;AAES,IAAA,IAAI;IACX,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3G,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB;;;;;;gBAMlD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAC7C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;;QAEH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/F,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IAEA,SAAS,GAAK,EAAE;IACd,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAC9C,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnC,CAAC,EAAE,GAAG,CAAC;;AAER,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,SAAgB,EAAA;QAC1B,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC;gBAC/D;AACD,YAAA;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,YAAA;YAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC7C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3B,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACnB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBACxB,OAAO,EAAE,GAAG,CAAC,GAAG;gBAChB,CAAC,EAAE,GAAG,CAAC;AACR,aAAA,CAAC,CACH;YAED,MAAM,IAAI,GAAgB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;gBACtD,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,sBAAsB,EAAE,IAAI,CAAC,wBAAwB;gBACrD,wBAAwB,EAAE,IAAI,CAAC;AAChC,aAAA,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACnD,gBAAA,iBAAiB,EAAE,GAAG;AACtB,gBAAA,eAAe,EAAE,GAAG;AACpB,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AACvC,aAAA,CAAC,CACH;AAED,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;AAEF,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAEvB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3C,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC7B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3C,oBAAA,aAAa,EAAE;iBAChB;AACF,aAAA,CAAC,CACH;;AAGD,YAAA,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,SAA0B,KAAU;AACpE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjE,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,WAAW,EAAE,SAAS;AACtB,oBAAA,cAAc,EAAE;AACjB,iBAAA,CAAC,CAAC;AAEH,gBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,aAAa,EAAE;AAChB,iBAAA,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACxB,MAAM,CAAC,MAAM,EAAE;AAEf,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;oBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,wBAAA,SAAS,EAAE,CAAC;wBACZ,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,4BAAA,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtD,4BAAA,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,4BAAA,YAAY,EAAE;yBACf;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,YAAA,CAAC;AAED,YAAA,UAAU,CAAC,kCAAkC,EAAE,wBAAwB,CAAC;AACxE,YAAA,UAAU,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;AAE5D,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC;YACzD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,YAAY,GAAA;AACV,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,yBAAyB,CAAC;YAClE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,SAAS,GAAK,EAAE;IAChB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,YAAY;gBAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,YAAY;;;YAGzB,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,aAAa,GAAG,KAAK;IACrB,YAAY,GAAG,CAAC;IAChB,WAAW,GAAG,CAAC;IACf,YAAY,GAAM,EAAE;AACpB,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,SAAS,GAAK,EAAE;IAChB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAC;SACR;QAED,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE;gBACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,wBAAwB;gBACzD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK;gBAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAClG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,uBAAuB,CAAC;YAChE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IAEA,SAAS,GAAK,EAAE;IAChB,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAC;SACR;QAED,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACrH,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE;gBACtC,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI;gBACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC/C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACxB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,MAAM,EAAC;SACR;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,2BAA2B,CAAC;YACpE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;wGA5fS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAZ,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,iGCdlC,283CA4xBM,EAAA,MAAA,EAAA,CAAA,ivLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAP,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9wBO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,283CAAA,EAAA,MAAA,EAAA,CAAA,ivLAAA,CAAA,EAAA;yKAsBlB,WAAW,EAAA,CAAA;sBAApB;;;MEnBU,iCAAiC,CAAA;AAOxB,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;IAN7H,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACtC,IAAA,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAA;QAA5H,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;IAEnJ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,CAAC,CAAC;IACA;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAC7C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAC1D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;wGAnEW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,sECZ9C,kpKAiGM,EAAA,MAAA,EAAA,CAAA,6pCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDrFO,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,kpKAAA,EAAA,MAAA,EAAA,CAAA,6pCAAA,CAAA,EAAA;;;MEU/B,6BAA6B,CAAA;AA4B9B,IAAA,MAAA;AACA,IAAA,KAAA;AACA,IAAA,EAAA;AAAgC,IAAA,WAAA;AAChC,IAAA,aAAA;AA9BV,IAAA,SAAS;IACT,QAAQ,GAAsB,OAAO;AAC5B,IAAA,UAAU;AACnB,IAAA,UAAU;IAEV,aAAa,GAAY,IAAI;IAE7B,YAAY,GAAW,EAAE;IACzB,SAAS,GAAW,CAAC;IAErB,UAAU,GAAW,EAAE;IAEvB,KAAK,GAAW,EAAE;IAClB,MAAM,GAAW,CAAC;IAClB,UAAU,GAAW,CAAC;IACtB,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAE9B,wBAAwB,GAAU,EAAE;IACpC,wBAAwB,GAIlB,EAAE;AAEA,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IAEtC,WAAA,CACU,MAAc,EACd,KAAmB,EACnB,EAAsB,EAAU,WAAwB,EACxD,aAA4B,EAAA;QAH5B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;QACL,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,WAAW,GAAX,WAAW;QAC3C,IAAA,CAAA,aAAa,GAAb,aAAa;IACnB;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YAC9B,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;AACb,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;gBAC7B,IAAI,CAAC,2BAA2B,EAAE;AACnC,YAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,2BAA2B,EAAE;AACnC,YAAA;AACH,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;IACxB;AAEA,IAAA,UAAU,CAAC,IAAuB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC7B,IAAI,CAAC,2BAA2B,EAAE;AACnC,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,2BAA2B,EAAE;AACnC,QAAA;IACH;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC5D,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;oBAC5D,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,wBAAwB;oBACtE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AAC/C,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACpB,gBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;oBACxB,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,gBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,gBAAA;AAED,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC5B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC;YAC7D;AACD,SAAA,CAAC;IACJ;IAEA,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AAC1G,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AACrC,YAAA,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AACvD,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;AACtB,gBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;oBAC7C,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB;AACjE,oBAAA,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACpD,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AACnC,gBAAA;AACD,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC5B,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE;AAClC,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,GAAG,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IAEA,eAAe,GAAA;QACb,IAAI;YACF,IAAI,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO;YAE3B,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACrD,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAElE,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE;AACxE,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,YAAY,EAAE;AACf,aAAA,CAAC,CAAC;AAEJ,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC;AAClD,QAAA;IACH;AAEA,IAAA,eAAe,CAAC,IAAS,EAAA;QACvB,IAAI,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACjD,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAEvD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAmB;AAC9E,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;AAE/C,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;AACjC,YAAA;AAAM,iBAAA;gBACL,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACnC,YAAA;AAEF,QAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,CAAC;AAClD,QAAA;IACH;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,KAAK,CAC1B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;AAEnC,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,EAAE;AAC7C,YAAA,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACjD,SAAA,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE;SACT;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAEjF,QAAA,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,OAAO;AACrD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,QAAQ,GAAG,yBAAyB;AAExC,gBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;AAClE,oBAAA,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAA,CAAE;AAC3D,gBAAA;AAAM,qBAAA;oBACL,QAAQ,GAAG,GAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;AAC3F,gBAAA;gBAED,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;YACnD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IAEN;AAEA,IAAA,mBAAmB,CAAC,IAAW,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,EAAE;AAEjB,QAAA,SAAS,QAAQ,CAAC,IAAS,EAAE,EAAO,EAAE,OAAY,EAAA;YAChD,IAAI,IAAI,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;AAC5B,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;AAEnC,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEjB,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACnB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACtC,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;AACnC,wBAAA,OAAO,IAAI;AACZ,oBAAA;AACF,gBAAA;AACF,YAAA;AAED,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACpB,YAAA,OAAO,KAAK;QACd;QAEA,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;YACtC,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE;gBACjC;AACD,YAAA;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AACpB,YAAA;YACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA;AAED,QAAA,OAAO,MAAM;IACf;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QAEf,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,WAAW,CAAC,MAAc,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/C,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AACnB,QAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QAEf,IAAI,CAAC,2BAA2B,EAAE;IACpC;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;IAC5D;AAEA,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA,IAAA,YAAY,CAAC,UAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QAChC,IAAI,CAAC,2BAA2B,EAAE;IACpC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;IAC3B;IACF,gBAAgB,GAAO,EAAE;IACzB,KAAK,GAAO,EAAE;IACZ,cAAc,GAAA;AACZ,QAAA,IAAI,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;SACnC;QACP,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAChD,YAAA,IAAI,EAAC,CAAC,GAAO,KAAG;;AAEf,gBAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,IAAI;YACjC,CAAC;AACD,YAAA,KAAK,EAAC,CAAC,GAAO,KAAG;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC;YAChD;AACD,SAAA,CAAC;IACF;IACA,cAAc,GAAE,IAAI;IACpB,iBAAiB,GAAA;AACb,QAAA,IAAI,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC9D,YAAA,MAAM,EAAG,KAAK;SACb;QACT,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AACnD,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC;gBACtC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;oBAC3B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;AACpC,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAChB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACvC,CAAC;YACD,QAAQ,EAAE,MAAK;AACb,gBAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;YACnC;AACD,SAAA,CAAC;IACF;IACA,gBAAgB,GAAA;AACd,QAAA,IAAI,MAAM,GAAG;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC3B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;SACzC;QACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAC/C,YAAA,IAAI,EAAC,CAAC,GAAO,KAAG;gBACf,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ;gBACzC,IAAI,CAAC,UAAU,EAAE;YAClB,CAAC;AACD,YAAA,KAAK,EAAC,CAAC,GAAO,KAAG;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC;YAChD;AACD,SAAA,CAAC;IACF;IACC,QAAQ,GAAO,EAAE;IAEhB,aAAa,GAAU,EAAE;IACzB,YAAY,GAAG,KAAK;IACpB,UAAU,GAAG,EAAE;IACjB,cAAc,GAAU,EAAE;IACxB,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;IAEF,aAAa,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACnC,CAAC,IAAS,KACR,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YACnE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CACrE;;AAGD,QAAA,OAAO,QAAQ;IACjB;AAEE,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACrB,QAAA;IACH;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IACF,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;QACpB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;IACE,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE;YACnC,IAAI,CAAC,iBAAiB,EAAE;AACxB,QAAA;IACH;IACA,QAAQ,GAAA;AACL,QAAA,IAAI,MAAM,GAAG;AACX,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,QAAQ,CAAC;AAC9D,YAAA,MAAM,EAAG,IAAI;SACZ;QACP,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AAC3D,YAAA,IAAI,EAAC,CAAC,GAAO,KAAG;AACd,gBAAA,IAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAC;oBAChE,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;oBACvE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,gBAAA;AAAM,qBAAA;oBACP,IAAI,QAAQ,GAAG,yBAAyB,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,GAAC,GAAG,GAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;oBACxG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC/C,gBAAA;YACL,CAAC;AACF,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AACnB,gBAAA,MAAM,QAAQ,GACZ,GAAG,EAAE,KAAK,EAAE,OAAO;oBACnB,GAAG,EAAE,KAAK,EAAE,KAAK;AACjB,oBAAA,GAAG,EAAE,OAAO;AACZ,oBAAA,wBAAwB;AAE1B,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC;YACpC;AAEG,SAAA,CAAC;IAEF;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC/C;IAEA,YAAY,GAAkB,IAAI;AAEpC,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;AAEA,IAAA,UAAU,CAAC,KAAgB,EAAA;AACzB,QAAA,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB;AAEA,IAAA,MAAM,CAAC,WAAmB,EAAA;QACxB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE;YACnE;AACD,QAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;;QAGzD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;;QAG/C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,WAAW,CAAC;AAEtD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,MAAM,IAAI,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAC;AAChE,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;AACvC,QAAA;IACH;AAEA,IAAA,WAAW,CAAC,KAAiB,EAAA;QAC3B,MAAM,IAAI,GAAI,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,YAAY,CAAC;AAChE,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;AACxC,QAAA;IACH;wGA3ea,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAW,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,wGCjB1C,i50BAuhBA,EAAA,MAAA,EAAA,CAAA,46GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,EAAAT,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAV,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FDtgBa,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;+BACE,4BAA4B,EAAA,QAAA,EAAA,i50BAAA,EAAA,MAAA,EAAA,CAAA,46GAAA,CAAA,EAAA;yLAO7B,UAAU,EAAA,CAAA;sBAAlB;;;MEXU,yBAAyB,CAAA;AAc1B,IAAA,QAAA;AAAiC,IAAA,EAAA;AAA+B,IAAA,WAAA;AAAgC,IAAA,EAAA;IAb1G,OAAO,GAAW,CAAC;AACnB,IAAA,QAAQ;AACR,IAAA,UAAU;IACV,wBAAwB,GAAY,IAAI;IACxC,aAAa,GAAW,EAAE;IAC1B,oBAAoB,GAAG,IAAI;AACV,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAEzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AACA,IAAA,WAAA,CACU,QAAyB,EAAQ,EAAsB,EAAS,WAAuB,EAAS,EAAoB,EAAA;QAApH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAyB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,WAAW,GAAX,WAAW;QAAqB,IAAA,CAAA,EAAE,GAAF,EAAE;IAE5G;AACA,IAAA,UAAU;;IAEV,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;AAC9E,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;QAC5B,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAA,CAAC,CAAC;IACF;IAEA,mBAAmB,GAAY,KAAK;AAEpC,IAAA,wBAAwB,CAAC,OAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,mBAAmB,GAAG,OAAO;IACpC;;;;;;IAOE,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC3B,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;AACpF,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;AACpF,SAAA,CAAC;IACJ;IACA,aAAa,GAAA;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC,CAAC,MAAM;IACxF;IAEC,sBAAsB,GAAA;AACnB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;SAChC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,YAAY;AACtD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;gBACjC,IAAI,CAAC,wBAAwB,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI;gBACpE,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;AAC/C,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AAED,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;AACnD,gBAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACjC,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB;AACD,SAAA,CAAC;IACF;wGA/EO,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,8DCTtC,8hGA+DQ,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,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,EAAAe,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,6BAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDtDK,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,8hGAAA,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA;;;MEOvB,mBAAmB,CAAA;AAKV,IAAA,aAAA;AAAqC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAAgC,IAAA,MAAA;AAAwB,IAAA,cAAA;AAJ1J,IAAA,aAAa;AACb,IAAA,UAAU;AACV,IAAA,iBAAiB;AACT,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,WAAA,CAAoB,aAA4B,EAAS,cAAiC,EAAQ,EAAsB,EAAU,MAAc,EAAU,cAA8B,EAAA;QAApK,IAAA,CAAA,aAAa,GAAb,aAAa;QAAwB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,cAAc,GAAd,cAAc;IAAoB;IAE5L,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAACxB,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,YAAY,EAAE;AAC3B,QAAA,CAAC,CAAC;IACA;IACA,WAAW,GAAA;AAET,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;SAChC;QAED,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CACvF,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAClC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;AACvC,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAErE,YAAA;AAAO,iBAAA;AACN,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACxB,YAAA;AACH,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;AACvD,QAAA,CAAC,CACF;IACH;wGA5CW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAyB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,uDCZhC,w2LA2GA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FD/Fa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,iBAAiB,EAAA,QAAA,EAAA,w2LAAA,EAAA,MAAA,EAAA,CAAA,+qBAAA,CAAA,EAAA;;;MEAhB,yBAAyB,CAAA;AACM,IAAA,SAAS;AAE1C,IAAA,QAAQ;AACjB,IAAA,gBAAgB,GAA8D,EAAE,SAAS,EAAE,EAAE,EAAE;IAC/F,iBAAiB,GAAG,CAAC;IAErB,YAAY,GAAG,CAAC;AAEhB,IAAA,WAAA,GAAA,EAAe;IAEf,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;AAGhD,QAAA;IACL;IAEA,eAAe,GAAA;QACb,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAC5E,QAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;IACvD;AAEA,IAAA,aAAa,CACZ,UAAyB,EAAA;AAC1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;QAChF,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC;AAChF,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACD,QAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACG,aAAA;AACF,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACL;wGArDa,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,sNCRtC,6mBAWM,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,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,EAAAA,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,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDHO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;+BACE,wBAAwB,EAAA,QAAA,EAAA,6mBAAA,EAAA,MAAA,EAAA,CAAA,4FAAA,CAAA,EAAA;wDAKQ,SAAS,EAAA,CAAA;sBAAlD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAE/B,QAAQ,EAAA,CAAA;sBAAhB;;;MEQU,qBAAqB,CAAA;AA8CZ,IAAA,IAAA;AAAqB,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,aAAA;AAAsC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAAgC,IAAA,UAAA;AAA+B,IAAA,KAAA;AA7CrO,IAAA,QAAQ;AAChC,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,WAAW,GAAW,EAAE;AACxB,IAAA,UAAU;IACV,KAAK,GAAG,KAAK;IACb,UAAU,GAAY,KAAK;IAC3B,WAAW,GAAY,KAAK;IAC5B,YAAY,GAAY,KAAK;IAC7B,IAAI,GAAW,OAAO;IACtB,cAAc,GAAY,IAAI;IAC9B,aAAa,GAAY,KAAK;IAC9B,QAAQ,GAAW,EAAE;IACrB,YAAY,GAAW,EAAE;IACzB,gBAAgB,GAAQ,EAAE;IAC1B,6BAA6B,GAAQ,EAAE;;IAEvC,cAAc,GAAU,EAAE;IAC1B,8BAA8B,GAAU,EAAE;IAC1C,UAAU,GAAW,CAAC;IACtB,YAAY,GAAY,KAAK;IAC7B,WAAW,GAAQ,EAAE;IACrB,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAW,CAAC;IAClB,aAAa,GAAW,CAAC,CAAC;IAC1B,cAAc,GAAU,EAAE;IAC1B,WAAW,GAAU,EAAE;IACvB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AACnB,IAAA,UAAU;AACV,IAAA,OAAO;IACf,WAAW,CAAM;AACjB,IAAA,SAAS;AACT,IAAA,UAAU;IACV,iBAAiB,GAAG,CAAC;IACrB,WAAW,GAAY,KAAK;IAC5B,gBAAgB,GAAY,KAAK;IACjC,iBAAiB,GAAY,IAAI;IACjC,oBAAoB,GAAY,KAAK;IACrC,qBAAqB,GAAY,IAAI;IACrC,eAAe,GAAY,KAAK;IAEhC,YAAY,GAAG,CAAC;AAC0B,IAAA,QAAQ;AACJ,IAAA,YAAY;AAE1D,IAAA,WAAA,CAAoB,IAAY,EAAS,YAAsB,EAAU,EAAe,EAAU,aAA4B,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAU,UAAsB,EAAS,KAAqB,EAAA;QAA/Q,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAiB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,aAAa,GAAb,aAAa;QAAyB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,UAAU,GAAV,UAAU;QAAqB,IAAA,CAAA,KAAK,GAAL,KAAK;IAEnR;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AACtD,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO;YACnB,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AACpB,YAAA;iBACI,IAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAC,KAAK,CAAC,GAAG,EAAE,EAAE;AACpC,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;AACrB,YAAA;AACI,iBAAA;AACH,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACtB,YAAA;YAED,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAG;AACxC,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;gBAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAE9B,gBAAA;AACH,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,qBAAqB,EAAE;;;;AAK9B,QAAA,CAAC,CAAC;IAEN;IACA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,QAAA;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAE1B;AAEA,IAAA,SAAS,CAAC,OAAe,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;;QAEvB,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,yBAAyB,EAAE;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;IACrC;IACA,qBAAqB,GAAA;;AAEnB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SACjC;QAED,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;YAC/G,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB;AACrD,gBAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;oBAE9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ;AAClD,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW;;AAEjC,gBAAA;;;AAGD,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;gBAC1B,IAAI,CAAC,2BAA2B,EAAE;gBAClC,IAAI,CAAC,qBAAqB,EAAE;gBAC5B,IAAI,CAAC,yBAAyB,EAAE;gBAChC,IAAI,CAAC,mBAAmB,EAAE;AAK3B,YAAA;AAAM,iBAAA;;;AAIL,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,gBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;AACvC,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;;AAE5B,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACC,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;;AAGlB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CACF;IACH;IACA,gCAAgC,GAAA;AAC9B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;AAEzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;;AAExG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC;SAChB;QACD,IAAI,CAAC,aAAa,CAAC,gCAAgC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC1H,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;;gBAGvC,IAAI,CAAC,6BAA6B,GAAG,QAAQ,CAAC,IAAI,CAAC,8BAA8B;AACjF,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;gBAC1B,UAAU,CAAC,MAAK;oBACd,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,oBAAA,WAAW,EAAE,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;gBACnD,CAAC,EAAE,GAAG,CAAC;AAGR,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;;;AAGvC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACC,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,6BAA6B,GAAG,EAAE;;;;AAIzC,QAAA,CAAC,CACF;IACH;IAEF,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AAEzB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AACxF,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,WAAW;AACvD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,8BAA8B,IAAI,EAAE;AACjE,gBAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI;AAC1C,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,gBAAA,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;oBAC3E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;;AAGpC,oBAAA,IAAI,CAAC,WAAW;wBACd,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACzC,6BAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;oBAG7C,IAAI,CAAC,gCAAgC,EAAE;oBACvC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,oBAAA,IAAI,CAAC,8BAA8B,GAAG,EAAE;AACxC,oBAAA,IAAI,CAAC,gBAAgB,GAAE,EAAE;AAC1B,gBAAA;YACH,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YAC3B,CAAC;AACF,SAAA,CAAC;IACN;AAGA,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YACxB,IAAI,CAAC,gCAAgC,EAAE;YACvC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,QAAA;IACH;AAGA,IAAA,UAAU,CAAC,YAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;AACxB,QAAA,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACrC;AAGE,IAAA,WAAW,CAAC,QAAgB,EAAA;AAE1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,2BAA2B,EAAE;IAEpC;AACA,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACjE,YAAA,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;AACvB,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,GAAG,QAAQ;QAC9C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAEhC,QAAA,CAAC,CAAC;IACJ;IACA,WAAW,GAAA;QACT,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;YAC1D,IAAI,CAAC,QAAQ,EAAE;;gBAEb;AACD,YAAA;YAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;YACD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAEhD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACnD,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACvC,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;AAC5B,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAC9B,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AACxC,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CACH;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC7B,QAAQ,EAAE,CAAC;AACZ,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AAClB,gBAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB;AACzC,aAAA,CAAC,CACH;AAED,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5B,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC1B,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,UAAU,EAAE,KAAK;AAElB,aAAA,CAAC;AAEF,YAAA,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3B,aAAA,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;;AAGpC,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;;AAEM,IAAA,eAAe,CAAC,OAAe,EAAA;QACrC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;AAC1F,QAAA;AAED,QAAA,MAAM,eAAe,GAAG,CAAC,CAAS,KAAI;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AACxB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE;AAC5B,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACtD,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnD,YAAA,OAAO,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,GAAG,EAAE;AAC3B,QAAA,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;IACvC;IAGA,mBAAmB,GAAA;AACjB,QAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AAEpE,QAAA,MAAM,WAAW,GAAG;YAClB,QAAQ;YACR,MAAM;AACN,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC;AACxF,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AAEvB,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,qBAAqB,IAAI,EAAE;gBAC5D,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,oBAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC;oBACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,EAAE;oBAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,EAAE;oBAChE,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC;AACzC,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,gBAAA;AACD,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC9B,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACxB,CAAC;AACF,SAAA,CAAC;IACN;IAGE,WAAW,GAAA;QACT,IAAI,IAAI,GAAQ,EAAE;QAClB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,KAAU,KAAI;AACjD,YAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;AAClB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACjB,YAAA;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;IACA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;;AAI7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACjD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ;AAChD,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;gBAC5B;AACD,YAAA;AACF,QAAA;AAED,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC;;SAEhB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;YAC9B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,sBAAsB;AACjD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;gBAC9B,MAAM,WAAW,GAAwE,EAAE;gBAC3F,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAyC,EAAE,KAAa,KAAI;oBAC5E,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC/B,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,gBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBAE1B,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;oBACpC,CAAC,EAAE,GAAG,CAAC;;AAER,gBAAA;AAAM,qBAAA;;AAEN,gBAAA;;AAGF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;;;AAG7B,YAAA;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACzB,QAAA,CAAC,CAAC;IACN;IACA,yBAAyB,GAAA;AACvB,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,WAAW;AACrD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CACR,CAAC,QAAa,KAAI;AAChB,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;YAElC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,0BAA0B;AAEnF,gBAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,WAAW;AACtE,gBAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS;AACnC,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;;AAEvC,gBAAA;AAAM,qBAAA;;AAEN,gBAAA;AAED,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;AACnC,YAAA;AAAM,iBAAA;;AAEL,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACjC,YAAA;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC9B,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACxB,QAAA,CAAC,CACF;IACL;AAEA,IAAA,gBAAgB,CAAC,WAA4E,EAAA;QAC3F,UAAU,CAAC,MAAK;;YAEhB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAC1B,YAAA;;YAGD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,GAAG,CAAC,IAAI;gBACf,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxB,aAAA,CAAC;;AAGF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE;AACvE,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,UAAU,EAAE,OAAO;AACnB,gBAAA,WAAW,EAAE;AACd,aAAA,CAAC,CAAC;;YAGH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAClC,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC;;AAGF,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,KAAI;gBAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AAClC,oBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;oBACxB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AAC3B,wBAAA,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;qBACxC;AACF,iBAAA,CAAC;gBAEF,MAAM,CAAC,OAAO,CAAC;AACb,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,EAAE,EAAE,CAAC;AACL,oBAAA,IAAI,EAAE,CAAC;oBACP,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI;AACrC,oBAAA,KAAK,EAAE;AACR,iBAAA,CAAC;AAEF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC;;AAGF,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;;AAG/B,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;QAC1B,CAAC,EAAC,GAAG,CAAC;IACN;AACA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnG,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC;AACA,IAAA,aAAa,CACV,UAAyB,EAAA;AAC1B,QAAA,MACE,UAAU,GAAG,CAAC,UAAU,CAAC,OAAO;AAC9B,YAAA,OAAO,CAEL,YAAY,EAEZ,EAAE,CACH;AAAE,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU;QACjC,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;QAClE,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AAClE,QAAA,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACzB,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AACF,QAAA;AACI,aAAA,IAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,6BAA6B,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE;AACvF,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,IAAG,WAAW,EAAE;AACd,gBAAA,WAAW,CAAC,YAAY,CAAC,OAAO,EAAC,cAAc,CAAC;AACjD,YAAA;AAEF,QAAA;AACI,aAAA;AACH,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACrC,YAAA,WAAW,EAAE,eAAe,CAAC,OAAO,CAAC;AACtC,QAAA;IACP;IAEA,UAAU,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACxE,EAAC,IAAI,EAAE,CAAC,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;IACnC,WAAW,GAAA;AAAI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAA,OAAO,CAAC,QAAQ,CACzE,EAAC,IAAI,EAAE,GAAG,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC;IAAC;IAElC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC;YACvC,IAAI,EAAE,CAAC,GAAG;AACV,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC;AACvC,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;IACJ;wGAxpBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAkB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EA2CH,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACN,UAAU,6BC/D7C,s/vCAilBA,EAAA,MAAA,EAAA,CAAA,4gOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FD9jBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,s/vCAAA,EAAA,MAAA,EAAA,CAAA,4gOAAA,CAAA,EAAA;6SAKY,QAAQ,EAAA,CAAA;sBAAhD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBA0CG,QAAQ,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAC,IAAI,EAAC,UAAU,EAAC;gBACM,YAAY,EAAA,CAAA;sBAAzD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAC,IAAI,EAAC,UAAU,EAAC;;;AE5D9C,MAAM,6BAA6B,GAAa;AAC9C,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,IAAA,KAAK,EAAE,IAAI;CACZ;MAQY,uBAAuB,CAAA;AAE1B,IAAA,SAAS;AACT,IAAA,SAAS;AACP,IAAA,UAAU;AACX,IAAA,OAAO;AACP,IAAA,SAAS;AACT,IAAA,KAAK;AACL,IAAA,IAAI;IACH,QAAQ,GAAY,KAAK;IACzB,QAAQ,GAA+B,IAAI;AAC3C,IAAA,UAAU;AAEpB,IAAA,UAAU,CAAC,GAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAwB,KAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAChG;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AACA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAE9B;AAEA,IAAA,QAAQ,CAAC,IAAyB,EAAA;QAChC,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC9B;AAGA,IAAA,iBAAiB,CAAC,IAAyB,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAqB;AACjD,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACtB,YAAA;AACF,QAAA;IACH;AAEA,IAAA,kBAAkB,CAAC,aAA0B,EAAA;AAC3C,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,aAAa;AACjD,QAAA,IAAI,aAAa,EAAE;YACjB,MAAM,kBAAkB,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC5E,YAAA,IAAI,kBAAkB,EAAE;AACtB,gBAAA,OAAO,IAAI;AACZ,YAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;AAC9C,YAAA;AACF,QAAA;AACD,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO;wGAhEpC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EAFvB,CAAC,6BAA6B,CAAC,0BCb5C,68BAiBM,EAAA,MAAA,EAAA,CAAA,6sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDFO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,qBAAqB,EAAA,SAAA,EAGpB,CAAC,6BAA6B,CAAC,EAAA,QAAA,EAAA,68BAAA,EAAA,MAAA,EAAA,CAAA,6sBAAA,CAAA,EAAA;8BAOjC,OAAO,EAAA,CAAA;sBAAf;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBAkCD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;gBAuBhC,WAAW,EAAA,CAAA;sBAApB;;;ME9DU,wBAAwB,CAAA;AA+Bf,IAAA,IAAA;AAAsB,IAAA,KAAA;AAA2B,IAAA,EAAA;AAAyB,IAAA,aAAA;AACpF,IAAA,cAAA;AACD,IAAA,EAAA;AAA8B,IAAA,YAAA;AAC7B,IAAA,MAAA;AAAuB,IAAA,KAAA;AACvB,IAAA,KAAA;AAlCF,IAAA,IAAI;AACJ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACtC,IAAA,IAAI;AACJ,IAAA,aAAa;AACb,IAAA,QAAQ,GAA4C;AAClD,QAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE;AAC/C,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB;KAChD;IAED,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC9B,QAAQ,GAAG,EAAE;IACb,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,WAAW,GAAO,EAAE;IACpB,mBAAmB,GAAU,EAAE;IAC/B,cAAc,GAAY,KAAK;IAC/B,WAAW,GAAU,EAAE;IACvB,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;IAClC,sBAAsB,GAAY,IAAI;IACtC,qBAAqB,GAAY,KAAK;AACtC,IAAA,UAAU;IACV,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAY,IAAI;IAC3B,kBAAkB,GAAmB,IAAI;;AAEzC,IAAA,WAAA,CAAoB,IAAY,EAAU,KAAiB,EAAU,EAAe,EAAU,aAA4B,EAChH,cAAiC,EAClC,EAAsB,EAAQ,YAAsB,EACnD,MAAc,EAAS,KAAqB,EAC5C,KAAmB,EAAA;QAJT,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAkB,IAAA,CAAA,KAAK,GAAL,KAAK;QAAsB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,aAAa,GAAb,aAAa;QACjG,IAAA,CAAA,cAAc,GAAd,cAAc;QACf,IAAA,CAAA,EAAE,GAAF,EAAE;QAA4B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QAAiB,IAAA,CAAA,KAAK,GAAL,KAAK;QAC5B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;IAE9B,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAExB,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;IACH;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;IACxB;IAEF,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,aAAa,EAAE,IAAI,CAAC;AACrB,SAAA,CAAC;QACF,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;;YAEtB,IAAI,CAAC,uBAAuB,EAAE;;AAEtC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC/C,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,CAAC,kBAAkB,EAAE;AAC3B,QAAA,CAAC,CAAC;IAEA;IACA,KAAK,GAAG,EAAE;IACV,MAAM,GAAG,CAAC;IACV,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,QAAA,MAAM,WAAW,GAAG;AAChB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AAC1G,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;YACjC,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACtB,YAAA,MAAM,EAAE,KAAK;SAChB;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;;AAE1G,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;AAC7C,gBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAChC,gBAAA,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,kBAAkB,CAAC;AAE/E,YAAA;AAAO,iBAAA;AACN,gBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AACnC,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AAClC,YAAA;AACL,QAAA,CAAC,EAAE,CAAC,KAAS,KAAI;AACf,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;AAC/B,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;;AAEvC,QAAA,CAAC,CAAC;IACN;IACA,eAAe,GAAA;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE;;YAEX;AACH,QAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI;gBACA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAExD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3E,oBAAA,aAAa,EAAE,MAAM;AACrB,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,UAAU,EAAE,OAAO;AACnB,oBAAA,YAAY,EAAE;AACjB,iBAAA,CAAC,CAAC;AACN,YAAA;AAAC,YAAA,OAAO,KAAK,EAAE;;AAEf,YAAA;AACJ,QAAA;IACH;IAEA,WAAW,CAAC,IAAW,EAAE,aAA4B,EAAA;QACnD,IAAI,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;QAyBjD,IAAI,IAAI,CAAC,IAAI,EAAE;AACX,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAmB;AACzE,YAAA,IAAI,MAAM,EAAE;;AAER,gBAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,gBAAA;AAAM,qBAAA;;oBAGH,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACrC,gBAAA;AAED,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;AACvC,YAAA;AAAM,iBAAA;;AAEN,YAAA;AACJ,QAAA;IACH;AAEA,IAAA,mBAAmB,CAAC,IAAW,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,EAAE;AAEjB,QAAA,SAAS,QAAQ,CAAC,IAAQ,EAAE,EAAM,EAAE,OAAW,EAAA;YAC7C,IAAI,IAAI,KAAK,EAAE;AAAE,gBAAA,OAAO,IAAI;AAC5B,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,KAAK;AAEnC,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEjB,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACnB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACtC,IAAI,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;AACnC,wBAAA,OAAO,IAAI;AACZ,oBAAA;AACF,gBAAA;AACF,YAAA;AAED,YAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AACpB,YAAA,OAAO,KAAK;QACd;QAEA,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE;YACtC,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE;gBACjC;AACD,YAAA;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AACpB,YAAA;YACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA;AAED,QAAA,OAAO,MAAM;IACf;IAGE,YAAY,CAAC,MAAW,EAAE,IAAY,EAAA;AACpC,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACrD,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,aAAa,CAAC,KAAU,EAAA;QACtB,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ;AACrB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACtB,YAAA,MAAM,EAAE,KAAK;SACd;QAEF,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;AAC/D,YAAA,IAAI,EAAE,CAAC,QAAa,KAAI;gBACtB,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;oBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,wBAAwB;oBACjE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;AAC9C,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC/B,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACjB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACnC,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC5B,gBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;oBACxB,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACzC,gBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,gBAAA;YAEH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC;YAC7D;AACD,SAAA,CAAC;IACJ;IAEE,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK;IAC5D;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,WAAW;AACzD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;;gBAEZ,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,sBAAsB,CAAC;YACjE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACN;IACA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;QACf,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACvC,IAAI,CAAC,uBAAuB,EAAE;IAChC;AACA,IAAA,YAAY,CAAC,UAAe,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,uBAAuB,EAAE;IAChC;IACA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,GAAE,CAAC,IAAI,CAAC,WAAW;AACtC,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;;;AAG9B,QAAA;IACA;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;AAC7C,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,EAAE;AAC7C,YAAA,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAC;AACrD,SAAA,CAAC;IAEJ;wGA3VW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAL,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,4DCjBrC,4hcAoOM,EAAA,MAAA,EAAA,CAAA,yjGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsB,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDnNO,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,4hcAAA,EAAA,MAAA,EAAA,CAAA,yjGAAA,CAAA,EAAA;;;MEKrB,sBAAsB,CAAA;AAgCd,IAAA,YAAA;AAAgC,IAAA,EAAA;AAAyB,IAAA,aAAA;AAAsC,IAAA,cAAA;AAA2C,IAAA,KAAA;AAA4B,IAAA,EAAA;AAA+B,IAAA,UAAA;IA/BxN,mBAAmB,GAAU,EAAE;IAC/B,kBAAkB,GAAU,EAAE;IAC9B,WAAW,GAAW,EAAE;IACxB,cAAc,GAAY,KAAK;IAC/B,eAAe,GAAY,IAAI;IAC/B,cAAc,GAAY,KAAK;IAC/B,0BAA0B,GAAY,IAAI;IAC1C,yBAAyB,GAAY,KAAK;AAC1C,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;IACzB,IAAI,GAAW,WAAW;IAC1B,SAAS,GAAW,YAAY;;AAGhC,IAAA,eAAe,GAAY,KAAK,CAAC;IACjC,kBAAkB,GAAY,KAAK;AACnC,IAAA,gBAAgB,GAAY,KAAK,CAAC;IAClC,mBAAmB,GAAY,KAAK;IACpC,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,QAAQ,GAAG,CAAC;IACZ,WAAW,GAAG,CAAC;;;;;;AAOE,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,kBAAkB,GAAQ,EAAE;AAC5B,IAAA,WAAA,CAAmB,YAAsB,EAAU,EAAe,EAAU,aAA4B,EAAU,cAAiC,EAAU,KAAmB,EAAS,EAAsB,EAAS,UAAsB,EAAA;QAA3N,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAoB,IAAA,CAAA,EAAE,GAAF,EAAE;QAAuB,IAAA,CAAA,aAAa,GAAb,aAAa;QAAyB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,UAAU,GAAV,UAAU;IAAgB;IAElP,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AAC1C,QAAA,CAAC,CAAC;IACA;IAEA,WAAW,GAAA;AAET,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAEA,IAAA,qBAAqB,CAAC,QAAgB,EAAA;AACpC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,QAAQ;AACpB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;SAC5B;QAED,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAG,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,KAAK,CAAC,EAAC;AAClD,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AAAI,qBAAA;oBACH,IAAI,CAAC,kBAAkB,GAAG,QAAQ,EAAE,IAAI,EAAE,kBAAkB;AAC5D,oBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC9B,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC1B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAChC,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AAClC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AACA,IAAA,sBAAsB,CAAC,QAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;AAC/B,YAAA,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,QAAQ;AACpB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;SAC5B;QAED,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAChH,YAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;YACvC,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAG,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,KAAK,CAAC,EAAC;AACnD,oBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,oBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACtC,gBAAA;AAAI,qBAAA;oBACH,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,IAAI,EAAE,mBAAmB;AAC9D,oBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,oBAAA,IAAI,CAAC,yBAAyB,GAAG,KAAK;AACvC,gBAAA;AAGF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,0BAA0B,GAAG,KAAK;AACvC,gBAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;AACrC,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACvC,QAAA,CAAC,CACF;IACD;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IACvC;AAGA,IAAA,aAAa,CAAC,MAAc,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,MAAM,EAAE;AACtC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACnC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7C;AAEA,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA;aAAM,IAAI,IAAI,KAAK,cAAc,EAAE;AAClC,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA;IACH;AACA,IAAA,eAAe,CAAC,SAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,SAAS,KAAK,YAAY,EAAE;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA;aAAM,IAAI,SAAS,KAAK,eAAe,EAAE;AACxC,YAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AACvC,QAAA;IACH;AACA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;wGArLW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAApB,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAkB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,0DClBnC,4wYA8OU,EAAA,MAAA,EAAA,CAAA,irFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAG,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FD5NG,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,4wYAAA,EAAA,MAAA,EAAA,CAAA,irFAAA,CAAA,EAAA;;;MEEnB,qBAAqB,CAAA;AA8BtB,IAAA,aAAA;AACA,IAAA,cAAA;AACD,IAAA,EAAA;AAA8B,IAAA,YAAA;AAC7B,IAAA,MAAA;AAAuB,IAAA,KAAA;AACvB,IAAA,KAAA;IAjCV,QAAQ,GAAY,KAAK;IACzB,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,eAAe,GAAS,EAAE;IAC1B,QAAQ,GAAG,EAAE;IACb,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAO,EAAE;IACpB,mBAAmB,GAAU,EAAE;IAC/B,cAAc,GAAY,KAAK;IAC/B,WAAW,GAAU,EAAE;IACvB,kBAAkB,GAAY,IAAI;IAClC,iBAAiB,GAAY,KAAK;AAClC,IAAA,UAAU;AACF,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;;;;;;;;;AAYtC,IAAA,WAAA,CACU,aAA4B,EAC5B,cAAiC,EAClC,EAAsB,EAAQ,YAAsB,EACnD,MAAc,EAAS,KAAqB,EAC5C,KAAmB,EAAA;QAJnB,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,cAAc,GAAd,cAAc;QACf,IAAA,CAAA,EAAE,GAAF,EAAE;QAA4B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACzC,IAAA,CAAA,MAAM,GAAN,MAAM;QAAiB,IAAA,CAAA,KAAK,GAAL,KAAK;QAC5B,IAAA,CAAA,KAAK,GAAL,KAAK;IACZ;IAGH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAA,CAAC,CAAC;IAEA;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAG,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC,EAAC;AAC/C,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,gBAAA;AAAI,qBAAA;oBACH,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,IAAI,EAAE,eAAe;oBAC1D,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;oBAC5C,IAAI,CAAC,kBAAkB,EAAE;AACzB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,oBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,oBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC1B,gBAAA;AACF,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;;AAEpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;AACtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;AACxB,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,GAAE,CAAC;AAC3B,YAAA,MAAM,EAAE,KAAK;SAEd;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW;AAC/C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,QAAa,KAAI;AAC3B,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,IAAI,EAAE,eAAe;gBAC1D,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU;;AAE1C,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC5B,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC3B,gBAAA;AACD,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACpC,YAAA;QACH,CAAC,EAAE,KAAK,IAAG;AACT,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;IACA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;;AAEtG,YAAA,QAAQ,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;;YAE/B,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,YAAA,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE;SACT;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,WAAW;AACjD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,uBAAuB,CAAC;YAClE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACN;IACA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAC,EAAE;QAChB,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,eAAe,EAAE;IACxB;AACA,IAAA,gBAAgB,CAAC,QAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,eAAe,EAAE;IAExB;AACA,IAAA,YAAY,CAAC,UAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;QAC7B,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,SAAS,CAAC,IAAQ,EAAA;AAChB,QAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,KAAK,CAC/B,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAC/C;QACD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;;QAEtG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAgB,KAAK,YAAY,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,EAAE;AACrF,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;AACtB,YAAA;AACH,QAAA,CAAC,CAAC;AACF,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI;AACtB,QAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;IACA,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpC,QAAA;AAAM,aAAA;YACL,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACzC;wGA3OW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAkB,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAP,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,yDCflC,6hrBA6RM,EAAA,MAAA,EAAA,CAAA,k3FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,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,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAF,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FD9QO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,6hrBAAA,EAAA,MAAA,EAAA,CAAA,k3FAAA,CAAA,EAAA;;;MEAlB,eAAe,CAAA;AAahB,IAAA,QAAA;AAAiC,IAAA,EAAA;AAAgC,IAAA,WAAA;AAAgC,IAAA,EAAA;IAZ3G,OAAO,GAAW,CAAC;AACnB,IAAA,UAAU;IACV,wBAAwB,GAAY,IAAI;IACxC,aAAa,GAAW,EAAE;IAC1B,oBAAoB,GAAG,IAAI;AACV,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IAEzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AACA,IAAA,WAAA,CACU,QAAyB,EAAQ,EAAsB,EAAU,WAAuB,EAAS,EAAoB,EAAA;QAArH,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAyB,IAAA,CAAA,EAAE,GAAF,EAAE;QAA8B,IAAA,CAAA,WAAW,GAAX,WAAW;QAAqB,IAAA,CAAA,EAAE,GAAF,EAAE;IAE7G;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,sBAAsB,EAAE;AACrC,QAAA,CAAC,CAAC;IACF;IAEE,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC3B,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;AACpF,YAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE;AACpF,SAAA,CAAC;IACJ;IACA,aAAa,GAAA;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;IACrF;IACA,sBAAsB,GAAA;AACpB,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;SAChC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,YAAY;AACtD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;gBACjC,IAAI,CAAC,wBAAwB,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB,KAAK,IAAI;gBACpE,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;AAC/C,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AAED,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC;AACnD,gBAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;YACvC;AACD,SAAA,CAAC;IACF;wGA5DS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,EAAA,CAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,mDCV5B,w2DAyCA,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAd,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,EAAAyB,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,CAAA;;4FD/Ba,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,w2DAAA,EAAA,MAAA,EAAA,CAAA,yVAAA,CAAA,EAAA;;;AEAzB,MAAM,MAAM,GAAW;AACrB,IAAA;AACE,QAAA,IAAI,EAAC,IAAI;AACT,QAAA,SAAS,EAAC;AACX,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,SAAS,EAAE;AACZ;CACF;MAMY,6BAA6B,CAAA;wGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,0CAF9B,YAAY,CAAA,EAAA,CAAA;yGAEX,6BAA6B,EAAA,OAAA,EAAA,CAH9B,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC7B,YAAY,CAAA,EAAA,CAAA;;4FAEX,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACxC,OAAO,EAAE,CAAC,YAAY;AACvB,iBAAA;;;MCVY,2BAA2B,CAAA;AAoBlB,IAAA,aAAA;AAAqC,IAAA,EAAA;AAnBhD,IAAA,SAAS;AACT,IAAA,WAAW;AACX,IAAA,YAAY;AACZ,IAAA,SAAS;AACT,IAAA,OAAO;AACP,IAAA,UAAU;AACV,IAAA,UAAU;AACV,IAAA,UAAU;AACnB,IAAA,MAAM;IACN,YAAY,GAAG,EAAE;IACjB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;AACd,IAAA,eAAe,GAAG,CAAC,CAAC,CAAC;IACrB,QAAQ,GAAG,CAAC;IACZ,oBAAoB,GAAM,EAAE;AAC5B,IAAA,YAAY;AACZ,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,eAAe;IACf,WAAA,CAAoB,aAA2B,EAAU,EAAqB,EAAA;QAA1D,IAAA,CAAA,aAAa,GAAb,aAAa;QAAwB,IAAA,CAAA,EAAE,GAAF,EAAE;IAE3D;IACF,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAQ,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;QAC7F,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK;QAC3C,IAAI,CAAC,cAAc,EAAE;IACvB;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,cAAc,GAAA;AACd,QAAA,IAAI,GAAG,GAAC;AACJ,YAAA,UAAU,EAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YACjC,SAAS,EAAE,IAAI,CAAC;SACnB;AACD,QAAA,IAAI,CAAC;aACJ,eAAe,CAAC,GAAG;AACnB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO;AAC/D,gBAAA;YACH;AACC,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,IAAQ,EAAA;QAChB,IAAG,IAAI,KAAI,OAAO,EAAC;YAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc;AACpD,QAAA;aAAM,IAAG,IAAI,KAAK,MAAM,EAAC;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa;AACpD,QAAA;aAAM,IAAG,IAAI,KAAI,OAAO,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB;AAC3D,QAAA;IAEH;wGA5Da,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,wRCVxC,sisBAmTA,EAAA,MAAA,EAAA,CAAA,6kJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FDzSa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAAA,sisBAAA,EAAA,MAAA,EAAA,CAAA,6kJAAA,CAAA,EAAA;+GAK3B,SAAS,EAAA,CAAA;sBAAjB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;;;MEDU,uBAAuB,CAAA;AAiBxB,IAAA,aAAA;AACD,IAAA,EAAA;AACC,IAAA,EAAA;AACA,IAAA,YAAA;AAA+B,IAAA,EAAA;IAnBzC,WAAW,GAAQ,CAAC;AACpB,IAAA,YAAY;AACZ,IAAA,OAAO;AACP,IAAA,YAAY;AACZ,IAAA,eAAe;IACf,WAAW,GAAG,UAAU;AACxB,IAAA,UAAU;IACV,UAAU,GAAG,IAAI;IACjB,KAAK,GAAG,KAAK;AACb,IAAA,SAAS;AACT,IAAA,IAAI;IACJ,MAAM,GAAW,KAAK;IACtB,OAAO,GAAU,IAAI;AACrB,IAAA,eAAe;AACf,IAAA,YAAY;IACZ,WAAA,CACU,aAA4B,EAC7B,EAAsB,EACrB,EAAqB,EACrB,YAAsB,EAAS,EAAe,EAAA;QAH9C,IAAA,CAAA,aAAa,GAAb,aAAa;QACd,IAAA,CAAA,EAAE,GAAF,EAAE;QACD,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,YAAY,GAAZ,YAAY;QAAmB,IAAA,CAAA,EAAE,GAAF,EAAE;QAEzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACxB,YAAA,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;AACjC,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACL,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAEyB,cAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;YACvB,IAAG,IAAI,KAAI,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI,EAAC;AACzC,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAS,KAAK,KAAK,CAAC,OAAO,CAAC;gBAClH,IAAI,CAAC,OAAO,GAAG;oBACb,OAAO,EAAE,IAAI,CAAC;yBACX,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;yBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;oBACrC,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,oBAAA,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;iBAC3C;AACD,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;gBAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAgB;AACjE,gBAAA,IAAI,aAAa,EAAE;AACjB,oBAAA,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;AACrC,gBAAA;gBACD,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA;AACD,QAAA,CAAC,CAAC;IACN;AACiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAE;IACzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,cAAc,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;AAC9B,QAAA,IAAI,CAAC;AACF,aAAA,2BAA2B,CAAC,IAAI,CAAC,OAAO;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,IAAI,CAAC,YAAY;oBAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU;oBACnD,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;oBAC3C,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACxB,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,oBAAA,IAAI,CAAC,MAAM,GAAE,IAAI;AAClB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACD,YAAA,QAAQ,EAAE,MAAK,EAAE,CAAC;AACnB,SAAA,CAAC;IACN;IACA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAE,IAAI;AAClB,QAAA,IAAI,CAAC,MAAM,GAAE,KAAK;AAClB,QAAA,IAAI,CAAC;AACF,aAAA,oBAAoB,CAAC,IAAI,CAAC,OAAO;AACjC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,cAAE,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACjB,gBAAA,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;oBAC3B,IAAG,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAC;AAChC,wBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,wBAAA,IAAI,CAAC,MAAM,GAAE,IAAI;AAClB,oBAAA;AAAK,yBAAA;wBACL,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,IAAI,CAAC,YAAY;wBAC7C,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS;AAC3C,wBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,wBAAA,IAAI,CAAC,MAAM,GAAE,KAAK;AAClB,wBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACtB,oBAAA;AACF,gBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,OAAO,GAAE,KAAK;AACnB,oBAAA,IAAI,CAAC,MAAM,GAAE,IAAI;AAClB,gBAAA;YACH,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;YACzB,CAAC;AACD,YAAA,QAAQ,EAAE,MAAK,EAAE,CAAC;AACnB,SAAA,CAAC;IACN;IAEA,SAAS,CAAC,KAAU,EAAE,GAAQ,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC5D,IAAI,CAAC,cAAc,EAAE;IACvB;IACA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;AACA,IAAA,aAAa,CAAC,GAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;QACvB,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,SAAS,CAAC,GAAQ,EAAC,YAAgB,EAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,2BAA2B,EAAE;AACnE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,IAAI;AACjB,SAAA,CAAC;AACF,QAAA,QAAQ,CAAC,iBAAiB,CAAC,SAAS,GAAG,GAAG;QAC1C,QAAQ,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;AACjE,QAAA,QAAQ,CAAC,iBAAiB,CAAC,YAAY,GAAG,YAAY;QACtD,QAAQ,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe;QAC3D,QAAQ,CAAC,iBAAiB,CAAC,OAAO,GAAI,IAAI,CAAC,YAAY;QACvD,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAI,IAAI,CAAC,UAAU;QACxD,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;QACzD,QAAQ,CAAC,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;AAC/D,QAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI,EAAE,CAAC,CAAC;IAC3C;IAEA,iBAAiB,CAAC,QAAgB,EAAE,MAAc,EAAA;QAChD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAa,EAAE;;AAG9B,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE;AAClD,YAAA,OAAO,SAAS;AACjB,QAAA;;QAGD,IAAI,WAAW,GAAG,KAAK;QACvB,OAAO,WAAW,IAAI,GAAG,EAAE;AACzB,YAAA,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,YAAA,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD,QAAA;AAED,QAAA,OAAO,SAAS;IAClB;;IAGA,gBAAgB,GAAA;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAC7B;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AACA,IAAA,QAAQ,GAAG;AACT,QAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE;AAC/C,QAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;AACvC,QAAA,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,oBAAoB,EAAE;AAC3D,QAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY;KAC3C;IAED,eAAe,GAAA;;QAEb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChC;AACA,IAAA,aAAa,CAAC,UAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,UAAU;YACrC,IAAI,CAAC,cAAc,EAAE;IACvB;AACA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAgB;IACpD;wGAjMW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAR,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAtB,IAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,2DCjBpC,u1bAmMA,EAAA,MAAA,EAAA,CAAA,miEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,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,EAAAO,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAuB,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA9B,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA;;4FDlLa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,u1bAAA,EAAA,MAAA,EAAA,CAAA,miEAAA,CAAA,EAAA;;;MESpB,iCAAiC,CAAA;AAQxB,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;AAA4B,IAAA,EAAA;IAPzJ,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,IAAI;AACJ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACtC,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAS,EAAc,EAAA;QAAnJ,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;QAAuB,IAAA,CAAA,EAAE,GAAF,EAAE;IAAgB;IAE3K,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,CAAC,CAAC;IACA;IACA,WAAW,GAAA;;QAEP,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,QAAA;;AAEH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACjH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;AAC5D,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI;gBAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAC5C,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClC,CAAC,EAAE,GAAG,CAAC;;AAER,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,QAAe,EAAA;QACzB,UAAU,CAAC,MAAK;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC;gBAC/D;AACD,YAAA;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACpB,YAAA;YAED,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC7C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3B,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACnB,aAAA,CAAC,CACH;AAED,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAChC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBACxB,OAAO,EAAE,GAAG,CAAC,GAAG;gBAChB,CAAC,EAAE,GAAG,CAAC;AACR,aAAA,CAAC,CACH;YAED,MAAM,IAAI,GAAgB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;gBACrD,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,sBAAsB,EAAE,IAAI,CAAC,wBAAwB;gBACrD,wBAAwB,EAAE,IAAI,CAAC;AAChC,aAAA,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACnD,gBAAA,iBAAiB,EAAE,GAAG;AACtB,gBAAA,eAAe,EAAE,GAAG;AACpB,gBAAA,gBAAgB,EAAE;AACnB,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAChC,gBAAA,aAAa,EAAE,MAAM;AACrB,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AACvC,aAAA,CAAC,CACH;AAED,YAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;AAEF,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YAEvB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC3C,gBAAA,OAAO,EAAE;AACV,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC5B,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC7B,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3C,oBAAA,aAAa,EAAE;iBAChB;AACF,aAAA,CAAC,CACH;;AAGD,YAAA,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,SAA0B,KAAU;AACpE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjE,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,WAAW,EAAE,SAAS;AACtB,oBAAA,cAAc,EAAE;AACjB,iBAAA,CAAC,CAAC;AAEH,gBAAA,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,oBAAA,WAAW,EAAE,kBAAkB;AAC/B,oBAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACtB,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,aAAa,EAAE;AAChB,iBAAA,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACxB,MAAM,CAAC,MAAM,EAAE;AAEf,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;oBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,wBAAA,SAAS,EAAE,CAAC;wBACZ,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/B,4BAAA,IAAI,EAAE,UAAU;4BAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtD,4BAAA,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,GAAG,CAAC,GAAG;AAChB,4BAAA,YAAY,EAAE;yBACf;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1B,YAAA,CAAC;AAED,YAAA,UAAU,CAAC,kCAAkC,EAAE,wBAAwB,CAAC;AACxE,YAAA,UAAU,CAAC,oBAAoB,EAAE,0BAA0B,CAAC;AAE5D,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACrG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,gBAAgB,CAAC;YACzD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;IACA,YAAY,GAAA;AACV,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS;AACxC,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO;AACpC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACxG,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;AAChC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,yBAAyB,CAAC;YAClE,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;wGAlNW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,sECrB9C,y9dAwSA,EAAA,MAAA,EAAA,CAAA,onKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDnRa,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAL7C,SAAS;+BACE,gCAAgC,EAAA,QAAA,EAAA,y9dAAA,EAAA,MAAA,EAAA,CAAA,onKAAA,CAAA,EAAA;;;MEN/B,sBAAsB,CAAA;AAOb,IAAA,WAAA;AAAiC,IAAA,cAAA;AAAyC,IAAA,EAAA;AAA+B,IAAA,KAAA;IAN7H,QAAQ,GAAQ,EAAE;IAClB,eAAe,GAAY,IAAI;IAC/B,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AACjB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AACtC,IAAA,WAAA,CAAoB,WAAwB,EAAS,cAAiC,EAAQ,EAAsB,EAAS,KAAmB,EAAA;QAA5H,IAAA,CAAA,WAAW,GAAX,WAAW;QAAsB,IAAA,CAAA,cAAc,GAAd,cAAc;QAA2B,IAAA,CAAA,EAAE,GAAF,EAAE;QAA6B,IAAA,CAAA,KAAK,GAAL,KAAK;IAAiB;IAEnJ,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC;AACP,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAChD,aAAA,SAAS,CAAC,CAAC,IAAS,KAAI;AACrB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,WAAW,EAAE;AAC1B,QAAA,CAAC,CAAC;IACA;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;IACA,YAAY,GAAG,KAAK;IACpB,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;IACd,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAQ,EAAE;IAChB,aAAa,GAAQ,EAAE;IACvB,WAAW,GAAO,EAAE;IACpB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,aAAa;YACxB,MAAM,EAAE,IAAI,CAAC,aAAa;YAC1B,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO;iBACrC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,EAAE,OAAO,CAAC;AACtC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,KAAK;SACd;QAED,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AAC/G,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5D,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,YAAY;gBAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAC7C,YAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACvB,YAAA;QACH,CAAC,EACD,KAAK,IAAG;AACN,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE;AACrC,QAAA,CAAC,CAAC;IACJ;IACA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,WAAW;;;YAGxB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,MAAM,EAAE,IAAI,CAAC,WAAW;AACxB,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS;AAC1C,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO;AACtC,YAAA,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;iBACvB,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO;iBACpC,GAAG,CAAC,CAAC,KAAU,KAAK,KAAK,CAAC,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM;AACjC,YAAA,MAAM,EAAE,IAAI;SACb;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACnG,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;gBACZ,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,EAAE,qBAAqB,CAAC;YAC9D,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,CAAC,KAAI;AACX,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;YACpD;AACD,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,MAAc,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACvD,QAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;AACvB,QAAA;QACD,IAAI,CAAC,WAAW,EAAE;IACpB;wGAjGW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,0DCXnC,2kLAoFU,EAAA,MAAA,EAAA,CAAA,4rCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FDzEG,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,2kLAAA,EAAA,MAAA,EAAA,CAAA,4rCAAA,CAAA,EAAA;;;ME6EnB,sBAAsB,CAAA;wGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAnD/B,qBAAqB;YACrB,yBAAyB;YACzB,2BAA2B;YAC3B,yBAAyB;YACzB,0BAA0B;YAC1B,6BAA6B;YAE7B,eAAe;YACf,6BAA6B;YAC7B,mBAAmB;YACnB,qBAAqB;YACrB,uBAAuB;YACvB,2BAA2B;YAC3B,wBAAwB;YACxB,uBAAuB;YACvB,sBAAsB;YACtB,qBAAqB;YACrB,yBAAyB;YACzB,qBAAqB;YACrB,iCAAiC;YACjC,iCAAiC;YACjC,sBAAsB;YACtB,6BAA6B;YAC7B,oBAAoB,CAAA,EAAA,OAAA,EAAA;;;;;;;;;;YAapB,YAAY;YACZ,6BAA6B;YAC7B,oBAAoB;YACpB,WAAW;YACX,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB;YAChB,SAAS;YACT,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,qBAAqB,CAAA,EAAA,CAAA;yGAIZ,sBAAsB,EAAA,OAAA,EAAA;;;;;;;;;;YAf/B,YAAY;YACZ,6BAA6B;YAC7B,oBAAoB;YACpB,WAAW;YACX,mBAAmB;YACnB,kBAAkB;YAClB,gBAAgB;YAChB,SAAS;YACT,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,qBAAqB,CAAA,EAAA,CAAA;;4FAIZ,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArDlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,yBAAyB;wBACzB,2BAA2B;wBAC3B,yBAAyB;wBACzB,0BAA0B;wBAC1B,6BAA6B;wBAE7B,eAAe;wBACf,6BAA6B;wBAC7B,mBAAmB;wBACnB,qBAAqB;wBACrB,uBAAuB;wBACvB,2BAA2B;wBAC3B,wBAAwB;wBACxB,uBAAuB;wBACvB,sBAAsB;wBACtB,qBAAqB;wBACrB,yBAAyB;wBACzB,qBAAqB;wBACrB,iCAAiC;wBACjC,iCAAiC;wBACjC,sBAAsB;wBACtB,6BAA6B;wBAC7B,oBAAoB;AAErB,qBAAA;AACD,oBAAA,OAAO,EAAE;;;;;;;;;;wBAUP,YAAY;wBACZ,6BAA6B;wBAC7B,oBAAoB;wBACpB,WAAW;wBACX,mBAAmB;wBACnB,kBAAkB;wBAClB,gBAAgB;wBAChB,SAAS;wBACT,kBAAkB;wBAClB,kBAAkB;wBAClB,iBAAiB;wBACjB;AACH,qBAAA;AACC,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,gBAAgB;AACnD,iBAAA;;;ACnFD;;AAEG;;ACFH;;AAEG;;;;"}