{"version":3,"file":"c8y-ngx-components-operations-bulk-operations-list.mjs","sources":["../../operations/bulk-operations-list/modals/bulk-operations-modal.component.ts","../../operations/bulk-operations-list/modals/bulk-operations-modal.component.html","../../operations/bulk-operations-list/modals/bulk-operation-modals.service.ts","../../operations/bulk-operations-list/bulk-operations-list.component.ts","../../operations/bulk-operations-list/bulk-operations-list.component.html","../../operations/bulk-operations-list/bulk-operations-list.module.ts","../../operations/bulk-operations-list/c8y-ngx-components-operations-bulk-operations-list.ts"],"sourcesContent":["import { Component, ViewContainerRef, ViewChild, OnInit, Inject, forwardRef } from '@angular/core';\nimport {\n  GainsightService,\n  IconDirective,\n  C8yTranslateDirective,\n  GuideDocsComponent,\n  GuideHrefDirective,\n  ProductExperienceDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n  BulkOperationsService,\n  OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport {\n  ACTIONS_OPERATIONS_BULK,\n  BULK_OPERATION_DIALOG_STEPS,\n  BULK_OPERATION_EVENT\n} from '@c8y/ngx-components/operations/product-experience';\nimport { BulkOperationModalsService } from '..';\nimport { Router } from '@angular/router';\nimport { NgFor, NgIf } from '@angular/common';\n\n@Component({\n  selector: 'c8y-bulk-operations-modal',\n  templateUrl: 'bulk-operations-modal.component.html',\n  imports: [\n    IconDirective,\n    C8yTranslateDirective,\n    GuideDocsComponent,\n    GuideHrefDirective,\n    NgFor,\n    NgIf,\n    ProductExperienceDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class BulkOperationsModalComponent implements OnInit {\n  BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n  bulkActions = ACTIONS_OPERATIONS_BULK;\n  pxSteps = BULK_OPERATION_DIALOG_STEPS;\n\n  @ViewChild('container', { static: false, read: ViewContainerRef }) container;\n  showComponent = false;\n  bulkList: OperationType[] = [];\n\n  constructor(\n    private bsModalRef: BsModalRef,\n    private router: Router,\n    private gainsightService: GainsightService,\n    private bulkOperationsService: BulkOperationsService,\n    @Inject(forwardRef(() => BulkOperationModalsService))\n    private bulkOperationModalsService: BulkOperationModalsService\n  ) {}\n\n  ngOnInit() {\n    this.bulkList = this.bulkOperationsService.getBulkTypes();\n  }\n\n  cancel() {\n    this.bsModalRef.hide();\n  }\n\n  createComponent(item: OperationType) {\n    if (item && item.component) {\n      this.showComponent = true;\n      this.container.createComponent(item.component);\n      this.gainsightService.triggerEvent(this.BULK_OPERATION_EVENT, {\n        action: this.bulkActions.SELECT_BULK_OPERTION_TYPE,\n        bulkOperationType: item.type\n      });\n    }\n  }\n\n  handleClick(item: OperationType) {\n    if (item.path) {\n      this.bulkOperationModalsService.hideNewBulkOperationModal();\n      this.router.navigateByUrl(item.path);\n      this.gainsightService.triggerEvent(this.BULK_OPERATION_EVENT, {\n        action: this.bulkActions.SELECT_BULK_OPERTION_TYPE,\n        bulkOperationType: item.type\n      });\n    } else if (item.component) {\n      this.createComponent(item);\n    }\n  }\n}\n","<div class=\"viewport-modal\">\n  <div class=\"modal-header dialog-header\">\n    <i c8yIcon=\"c8y-energy\"></i>\n    <h4\n      id=\"modal-title\"\n      translate\n    >\n      Add bulk operation\n    </h4>\n  </div>\n  <div\n    class=\"modal-inner-scroll\"\n    id=\"modal-body\"\n  >\n    <div\n      class=\"modal-body p-t-8 p-b-8 sticky-top separator-bottom text-center\"\n      [hidden]=\"showComponent\"\n    >\n      <p\n        class=\"text-medium\"\n        translate\n      >\n        Select one of the available options\n      </p>\n      <p c8y-guide-docs>\n        <small\n          translate\n          ngNonBindable\n        >\n          Check the\n          <a\n            c8y-guide-href=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-add-a-bulk-operation-using-the-wizard\"\n          >\n            user documentation\n          </a>\n          for more details.\n        </small>\n      </p>\n    </div>\n\n    <div class=\"list-group list-group-links\">\n      <button\n        class=\"list-group-item flex-row\"\n        type=\"button\"\n        *ngFor=\"let item of bulkList\"\n        (click)=\"handleClick(item)\"\n      >\n        <div\n          class=\"list-item-icon\"\n          *ngIf=\"item.c8yIcon; else icon\"\n        >\n          <i [c8yIcon]=\"item.c8yIcon\"></i>\n        </div>\n        <ng-template #icon>\n          <div class=\"list-item-icon\">\n            <i c8yIcon=\"cogs\"></i>\n          </div>\n        </ng-template>\n        <div\n          class=\"list-item-body text-truncate\"\n          title=\"{{ item.name | translate }}\"\n        >\n          {{ item.name | translate }}\n        </div>\n      </button>\n    </div>\n    <template #container></template>\n  </div>\n  <div\n    class=\"modal-footer\"\n    [hidden]=\"showComponent\"\n  >\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      (click)=\"cancel()\"\n      c8yProductExperience\n      [actionName]=\"BULK_OPERATION_EVENT\"\n      [actionData]=\"{\n        action: bulkActions.CANCEL_ADD_BULK_OPERATION_DIALOG,\n        step: pxSteps.SELECT_OPERATION_TYPE\n      }\"\n    >\n      <span translate>Cancel</span>\n    </button>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsModalComponent } from './bulk-operations-modal.component';\n\n@Injectable()\nexport class BulkOperationModalsService {\n  private bsModalRef: BsModalRef;\n\n  constructor(private bsModalService: BsModalService) {}\n\n  showNewBulkOperationModal() {\n    this.bsModalRef = this.bsModalService.show(BulkOperationsModalComponent, {\n      backdrop: 'static',\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title'\n    });\n  }\n\n  hideNewBulkOperationModal() {\n    if (this.bsModalRef) {\n      this.bsModalRef.hide();\n    }\n  }\n}\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { IOperationBulk, IResultList } from '@c8y/client';\nimport {\n  DatePickerComponent,\n  ForOfFilterPipe,\n  OperationBulkRealtimeService,\n  TitleComponent,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  ActionBarItemComponent,\n  C8yTranslateDirective,\n  SelectLegacyComponent,\n  RealtimeButtonComponent,\n  ProductExperienceDirective,\n  IconDirective,\n  HelpComponent,\n  EmptyStateComponent,\n  ListGroupComponent,\n  ForOfDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n  BulkOperationListItemComponent,\n  BULK_OPERATION_STATUS_OPTIONS,\n  OperationStatusOptionsMap\n} from '@c8y/ngx-components/operations/bulk-operation-list-item';\nimport {\n  BulkOperationsService,\n  OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport {\n  ACTIONS_OPERATIONS_BULK,\n  BULK_OPERATION_EVENT\n} from '@c8y/ngx-components/operations/product-experience';\nimport { OperationStatusOption } from '@c8y/ngx-components/operations/shared';\nimport { StatusFilterComponent } from '@c8y/ngx-components/operations/status-filter';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, pipe } from 'rxjs';\nimport { map, shareReplay, switchMap, tap, withLatestFrom } from 'rxjs/operators';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\n@Component({\n  selector: 'c8y-bulk-operations',\n  templateUrl: './bulk-operations-list.component.html',\n  providers: [OperationBulkRealtimeService],\n  imports: [\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    NgIf,\n    ActionBarItemComponent,\n    C8yTranslateDirective,\n    SelectLegacyComponent,\n    StatusFilterComponent,\n    DatePickerComponent,\n    RealtimeButtonComponent,\n    ProductExperienceDirective,\n    IconDirective,\n    NgClass,\n    HelpComponent,\n    EmptyStateComponent,\n    ListGroupComponent,\n    ForOfDirective,\n    BulkOperationListItemComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class BulkOperationsListComponent implements OnInit {\n  bulkTypes: OperationType[] = [];\n  selectedTypeFilters = this.getTypeFilters();\n  bulkOperationStatusOptions: OperationStatusOptionsMap = BULK_OPERATION_STATUS_OPTIONS;\n  BULK_OPERATION_EVENT = BULK_OPERATION_EVENT;\n  bulkActions = ACTIONS_OPERATIONS_BULK;\n\n  filterPipe: ForOfFilterPipe<IOperationBulk>;\n  refreshLoading = false;\n  statusFilter$: BehaviorSubject<OperationStatusOption[]> = new BehaviorSubject(null);\n  typeFilter$: BehaviorSubject<OperationType[]> = new BehaviorSubject(null);\n  timeFilter$: BehaviorSubject<any> = new BehaviorSubject(null);\n  reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n  @ViewChildren(BulkOperationListItemComponent)\n  listItems: QueryList<BulkOperationListItemComponent>;\n  @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n  @ViewChild(DatePickerComponent, { static: true }) datePicker: DatePickerComponent;\n\n  bulkOperations$: Observable<IResultList<IOperationBulk>> = combineLatest(\n    this.statusFilter$,\n    this.timeFilter$,\n    this.typeFilter$,\n    this.reload$\n  ).pipe(\n    tap(() => {\n      this.refreshLoading = true;\n    }),\n    switchMap(([statusFilters, timeFilters]) => this.filter(statusFilters, timeFilters)),\n    withLatestFrom(this.typeFilter$),\n    map(([result, typeFilter]: [IResultList<IOperationBulk>, OperationType[]]) => {\n      this.filterPipe = pipe(map(data => this.filterByType(data, typeFilter)));\n      return { ...result, data: this.filterByType(result.data, typeFilter) };\n    }),\n    tap(() => {\n      this.refreshLoading = false;\n    }),\n    shareReplay(1)\n  );\n\n  private allFilterFragments: string[];\n\n  constructor(\n    public realtime: OperationBulkRealtimeService,\n    private bulkOperationsService: BulkOperationsService,\n    private bulkOperationModalsService: BulkOperationModalsService\n  ) {\n    this.allFilterFragments = this.flattenFilterFragments(this.getTypeFilters());\n  }\n\n  ngOnInit() {\n    this.bulkTypes = this.bulkOperationsService.getBulkTypes();\n  }\n\n  filterByType(bulkOperations: IOperationBulk[], typeFilter) {\n    const flattenedFragments: string[] = this.flattenFilterFragments(typeFilter);\n    if (\n      // return data unfiltered if no filters selected...\n      !flattenedFragments.length ||\n      // ...or when all filters are selected\n      this.allFilterFragments.every(fragment => flattenedFragments.includes(fragment))\n    ) {\n      return bulkOperations;\n    }\n\n    const filteredData = bulkOperations.filter(item => {\n      return Object.keys(item.operationPrototype).some(key => flattenedFragments.includes(key));\n    });\n\n    return filteredData;\n  }\n\n  resetFilter() {\n    this.statusFilter$.next(null);\n    this.timeFilter$.next(null);\n    this.typeFilter$.next(null);\n\n    this.datePicker.clearFilter();\n    this.selectedTypeFilters = this.getTypeFilters();\n    this.statusFilter.reset();\n  }\n\n  isFilterApplied() {\n    return (\n      !!this.statusFilter$.getValue()?.length ||\n      !!this.typeFilter$.getValue()?.length ||\n      !!this.timeFilter$.getValue()\n    );\n  }\n\n  filter(statusFilters, timeFilter) {\n    const status =\n      statusFilters && statusFilters.length > 0\n        ? {\n            generalStatus: flatten(statusFilters.map(statusFilter => statusFilter.generalStatuses))\n          }\n        : {};\n\n    const time = timeFilter\n      ? {\n          ...(timeFilter.dateFrom && {\n            dateFrom: timeFilter.dateFrom.toISOString()\n          }),\n          ...(timeFilter.dateTo && {\n            dateTo: timeFilter.dateTo.toISOString()\n          })\n        }\n      : {};\n    return this.getBulkOperations({ ...status, ...time });\n  }\n\n  getBulkOperations(filter?) {\n    return this.bulkOperationsService.getBulkOperations(filter);\n  }\n\n  getTypeFilters() {\n    return this.bulkOperationsService.getBulkTypes();\n  }\n\n  addBulkOperation() {\n    this.bulkOperationModalsService.showNewBulkOperationModal();\n  }\n\n  openFailedOperation(failedParentId) {\n    this.listItems.forEach(item => {\n      if (item.bulkOperation.id === failedParentId) {\n        item.listItem.collapsed = false;\n        item.listItem.element.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n      }\n    });\n  }\n\n  compareOperations(operationA: IOperationBulk, operationB: IOperationBulk): number {\n    return new Date(operationA.startDate).getTime() - new Date(operationB.startDate).getTime();\n  }\n\n  private flattenFilterFragments(filters: OperationType[]): string[] {\n    return (filters || []).reduce((flattened, current) => flattened.concat(current.fragments), []);\n  }\n}\n","<c8y-title>{{ 'Bulk operations' | translate }}</c8y-title>\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-overviews'\"\n    [label]=\"'Overviews' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-device-control'\"\n    [label]=\"'Device control' | translate\"\n    [path]=\"'devicecontrol/single'\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-energy'\"\n    [label]=\"'Bulk operations' | translate\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n  *ngIf=\"bulkTypes?.length\"\n  itemClass=\"navbar-form\"\n  [placement]=\"'left'\"\n>\n  <label\n    class=\"hidden-sm hidden-xs\"\n    translate\n  >\n    Type\n  </label>\n  <c8y-select-legacy\n    style=\"width: 180px\"\n    [items]=\"bulkTypes\"\n    [selected]=\"selectedTypeFilters\"\n    [disableApplyOnNoSelection]=\"true\"\n    (onChange)=\"selectedTypeFilters = $event; typeFilter$.next(selectedTypeFilters)\"\n  ></c8y-select-legacy>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form\"\n>\n  <c8y-status-filter\n    #statusFilter\n    [options]=\"bulkOperationStatusOptions\"\n    (onFilterChanged)=\"statusFilter$.next($event)\"\n  ></c8y-status-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form\"\n>\n  <c8y-date-picker (onDateSelected)=\"timeFilter$.next($event)\"></c8y-date-picker>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n  <c8y-realtime-btn [service]=\"realtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n  <button\n    class=\"btn btn-link d-flex a-i-center\"\n    title=\"{{ 'Add bulk operation' | translate }}\"\n    *ngIf=\"bulkTypes?.length\"\n    (click)=\"addBulkOperation()\"\n    c8yProductExperience\n    [actionName]=\"BULK_OPERATION_EVENT\"\n    [actionData]=\"{ action: bulkActions.OPEN_ADD_BULK_OPERATION_DIALOG }\"\n  >\n    <i\n      class=\"m-r-4\"\n      c8yIcon=\"plus-circle\"\n    ></i>\n    <span class=\"text-truncate\">\n      {{ 'Add bulk operation' | translate }}\n    </span>\n  </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n  <button\n    class=\"btn btn-link d-flex a-i-center\"\n    title=\"{{ 'Reload' | translate }}\"\n    (click)=\"reload$.next()\"\n  >\n    <i\n      class=\"m-r-4\"\n      c8yIcon=\"refresh\"\n      [ngClass]=\"{ 'icon-spin': refreshLoading }\"\n    ></i>\n    <span class=\"text-truncate\">\n      {{ 'Reload' | translate }}\n    </span>\n  </button>\n</c8y-action-bar-item>\n\n<c8y-help\n  src=\"/docs/device-management-application/monitoring-and-controlling-devices/#to-view-bulk-operations\"\n></c8y-help>\n\n<!-- Empty state -->\n<c8y-ui-empty-state\n  icon=\"c8y-energy\"\n  [title]=\"'No items to display' | translate\"\n  [subtitle]=\"'Bulk operations will be displayed here' | translate\"\n  *ngIf=\"(bulkOperations$ | async)?.data.length === 0 && !isFilterApplied()\"\n>\n  <button\n    class=\"btn btn-primary\"\n    title=\"{{ 'Add bulk operation' | translate }}\"\n    type=\"button\"\n    *ngIf=\"bulkTypes?.length\"\n    (click)=\"addBulkOperation()\"\n    translate\n  >\n    Add bulk operation\n  </button>\n</c8y-ui-empty-state>\n\n<!-- No results empty state -->\n<c8y-ui-empty-state\n  icon=\"search\"\n  [title]=\"'No results to display.' | translate\"\n  [subtitle]=\"'Adjust or reset the filter.' | translate\"\n  *ngIf=\"(bulkOperations$ | async)?.data.length === 0 && isFilterApplied()\"\n>\n  <button\n    class=\"btn btn-primary\"\n    title=\"{{ 'Reset filter' | translate }}\"\n    type=\"button\"\n    (click)=\"resetFilter()\"\n    translate\n  >\n    Reset filter\n  </button>\n</c8y-ui-empty-state>\n\n<!-- Detailed list of operations + load more button -->\n<c8y-list-group class=\"m-b-24\">\n  <div\n    class=\"page-sticky-header hidden-xs c8y-list__item--double-actions c8y-list__item\"\n    *ngIf=\"(bulkOperations$ | async)?.data.length\"\n  >\n    <div class=\"c8y-list__item__block\">\n      <div class=\"c8y-list__item__icon\">\n        <i\n          class=\"invisible\"\n          c8yIcon=\"refresh\"\n        ></i>\n      </div>\n      <div class=\"c8y-list__item__body\">\n        <div class=\"content-flex-57\">\n          <div class=\"col-5\">\n            {{ 'Operation' | translate }}\n          </div>\n          <div class=\"flex-grow\">\n            {{ 'Progress' | translate }}\n          </div>\n          <div class=\"col-4\">\n            {{ 'Status' | translate }}\n          </div>\n        </div>\n      </div>\n      <div class=\"c8y-list__item__actions\"></div>\n    </div>\n  </div>\n  <div\n    class=\"d-contents\"\n    *c8yFor=\"\n      let bulkOperation of bulkOperations$ | async;\n      let i = index;\n      realtime: realtime;\n      pipe: filterPipe;\n      comparator: compareOperations.bind(this);\n      loadMore: 'auto'\n    \"\n  >\n    <c8y-bulk-operation-list-item\n      class=\"d-contents\"\n      [bulkOperation]=\"bulkOperation\"\n      (reload)=\"reload$.next()\"\n      (showFailedOperation)=\"openFailedOperation($event)\"\n    ></c8y-bulk-operation-list-item>\n  </div>\n</c8y-list-group>\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { Route } from '@c8y/ngx-components';\nimport { BulkOperationsListComponent } from './bulk-operations-list.component';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationsModalComponent } from './modals/bulk-operations-modal.component';\n\nexport const bulkOperationListRoutes: Route[] = [\n  {\n    path: 'devicecontrol/bulk',\n    component: BulkOperationsListComponent\n  }\n];\n\n/**\n * This module allows for displaying the list of bulk operations and their details.\n */\n@NgModule({\n  imports: [\n    RouterModule.forChild(bulkOperationListRoutes),\n    BulkOperationsListComponent,\n    BulkOperationsModalComponent\n  ],\n  providers: [BulkOperationModalsService],\n  exports: [BulkOperationsListComponent, BulkOperationsModalComponent]\n})\nexport class BulkOperationsListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3.BulkOperationModalsService"],"mappings":";;;;;;;;;;;;;;;;MAsCa,4BAA4B,CAAA;IASvC,WAAA,CACU,UAAsB,EACtB,MAAc,EACd,gBAAkC,EAClC,qBAA4C,EAE5C,0BAAsD,EAAA;QALtD,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QAErB,IAAA,CAAA,0BAA0B,GAA1B,0BAA0B;QAdpC,IAAA,CAAA,oBAAoB,GAAG,oBAAoB;QAC3C,IAAA,CAAA,WAAW,GAAG,uBAAuB;QACrC,IAAA,CAAA,OAAO,GAAG,2BAA2B;QAGrC,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,QAAQ,GAAoB,EAAE;IAS3B;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;IAC3D;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;IACxB;AAEA,IAAA,eAAe,CAAC,IAAmB,EAAA;AACjC,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9C,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC5D,gBAAA,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB;gBAClD,iBAAiB,EAAE,IAAI,CAAC;AACzB,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,WAAW,CAAC,IAAmB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,0BAA0B,CAAC,yBAAyB,EAAE;YAC3D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC5D,gBAAA,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB;gBAClD,iBAAiB,EAAE,IAAI,CAAC;AACzB,aAAA,CAAC;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;QAC5B;IACF;AAhDW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,uIAc7B,UAAU,CAAC,MAAM,0BAA0B,CAAC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAd3C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,wKAKQ,gBAAgB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3CjE,0tEAwFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED5DI,aAAa,2EACb,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,kBAAkB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,yFAClB,KAAK,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,0BAA0B,yIAC1B,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAdxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAE5B;wBACP,aAAa;wBACb,qBAAqB;wBACrB,kBAAkB;wBAClB,kBAAkB;wBAClB,KAAK;wBACL,IAAI;wBACJ,0BAA0B;wBAC1B;AACD,qBAAA,EAAA,QAAA,EAAA,0tEAAA,EAAA;;0BAgBE,MAAM;AAAC,oBAAA,IAAA,EAAA,CAAA,UAAU,CAAC,MAAM,0BAA0B,CAAC;;sBATrD,SAAS;uBAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE;;;MEtCtD,0BAA0B,CAAA;AAGrC,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAA,CAAA,cAAc,GAAd,cAAc;IAAmB;IAErD,yBAAyB,GAAA;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,4BAA4B,EAAE;AACvE,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,eAAe,EAAE,YAAY;AAC7B,YAAA,cAAc,EAAE;AACjB,SAAA,CAAC;IACJ;IAEA,yBAAyB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QACxB;IACF;+GAlBW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA1B,0BAA0B,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MCgEY,2BAA2B,CAAA;AAyCtC,IAAA,WAAA,CACS,QAAsC,EACrC,qBAA4C,EAC5C,0BAAsD,EAAA;QAFvD,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACP,IAAA,CAAA,qBAAqB,GAArB,qBAAqB;QACrB,IAAA,CAAA,0BAA0B,GAA1B,0BAA0B;QA3CpC,IAAA,CAAA,SAAS,GAAoB,EAAE;AAC/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;QAC3C,IAAA,CAAA,0BAA0B,GAA8B,6BAA6B;QACrF,IAAA,CAAA,oBAAoB,GAAG,oBAAoB;QAC3C,IAAA,CAAA,WAAW,GAAG,uBAAuB;QAGrC,IAAA,CAAA,cAAc,GAAG,KAAK;AACtB,QAAA,IAAA,CAAA,aAAa,GAA6C,IAAI,eAAe,CAAC,IAAI,CAAC;AACnF,QAAA,IAAA,CAAA,WAAW,GAAqC,IAAI,eAAe,CAAC,IAAI,CAAC;AACzE,QAAA,IAAA,CAAA,WAAW,GAAyB,IAAI,eAAe,CAAC,IAAI,CAAC;AAC7D,QAAA,IAAA,CAAA,OAAO,GAA0B,IAAI,eAAe,CAAC,IAAI,CAAC;QAM1D,IAAA,CAAA,eAAe,GAA4C,aAAa,CACtE,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,CACb,CAAC,IAAI,CACJ,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC5B,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,EACpF,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAChC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAiD,KAAI;YAC3E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AACxE,YAAA,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;AACxE,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC7B,QAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;AASC,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9E;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;IAC5D;IAEA,YAAY,CAAC,cAAgC,EAAE,UAAU,EAAA;QACvD,MAAM,kBAAkB,GAAa,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;AAC5E,QAAA;;QAEE,CAAC,kBAAkB,CAAC,MAAM;;AAE1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAChF;AACA,YAAA,OAAO,cAAc;QACvB;QAEA,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,IAAG;YAChD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3F,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,YAAY;IACrB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAE3B,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC7B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE;AAChD,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;IAEA,eAAe,GAAA;QACb,QACE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,MAAM;YACvC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM;YACrC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IAEjC;IAEA,MAAM,CAAC,aAAa,EAAE,UAAU,EAAA;QAC9B,MAAM,MAAM,GACV,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG;AACtC,cAAE;AACE,gBAAA,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,eAAe,CAAC;AACvF;cACD,EAAE;QAER,MAAM,IAAI,GAAG;AACX,cAAE;AACE,gBAAA,IAAI,UAAU,CAAC,QAAQ,IAAI;AACzB,oBAAA,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW;iBAC1C,CAAC;AACF,gBAAA,IAAI,UAAU,CAAC,MAAM,IAAI;AACvB,oBAAA,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,WAAW;iBACtC;AACF;cACD,EAAE;AACN,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IACvD;AAEA,IAAA,iBAAiB,CAAC,MAAO,EAAA;QACvB,OAAO,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,MAAM,CAAC;IAC7D;IAEA,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE;IAClD;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,0BAA0B,CAAC,yBAAyB,EAAE;IAC7D;AAEA,IAAA,mBAAmB,CAAC,cAAc,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAG;YAC5B,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,cAAc,EAAE;AAC5C,gBAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YAC7F;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,iBAAiB,CAAC,UAA0B,EAAE,UAA0B,EAAA;QACtE,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAC5F;AAEQ,IAAA,sBAAsB,CAAC,OAAwB,EAAA;QACrD,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;IAChG;+GAzIW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,4BAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,0BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,SAAA,EAxB3B,CAAC,4BAA4B,CAAC,mLAwC9B,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAHhB,8BAA8B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjF9C,0mKAuLA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzII,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,mBAAmB,2DACnB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,qBAAqB,4OACrB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,uBAAuB,uIACvB,0BAA0B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,aAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,cAAc,keACd,8BAA8B,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC9B,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAChB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGA,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA3BvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,SAAA,EAEpB,CAAC,4BAA4B,CAAC,EAAA,OAAA,EAChC;wBACP,cAAc;wBACd,mBAAmB;wBACnB,uBAAuB;wBACvB,IAAI;wBACJ,sBAAsB;wBACtB,qBAAqB;wBACrB,qBAAqB;wBACrB,qBAAqB;wBACrB,mBAAmB;wBACnB,uBAAuB;wBACvB,0BAA0B;wBAC1B,aAAa;wBACb,OAAO;wBACP,aAAa;wBACb,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,8BAA8B;wBAC9B,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,0mKAAA,EAAA;;sBAeA,YAAY;uBAAC,8BAA8B;;sBAE3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAC1C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AE7E3C,MAAM,uBAAuB,GAAY;AAC9C,IAAA;AACE,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,SAAS,EAAE;AACZ;;AAGH;;AAEG;MAUU,wBAAwB,CAAA;+GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,6BANjC,2BAA2B;YAC3B,4BAA4B,CAAA,EAAA,OAAA,EAAA,CAGpB,2BAA2B,EAAE,4BAA4B,CAAA,EAAA,CAAA,CAAA;gHAExD,wBAAwB,EAAA,SAAA,EAHxB,CAAC,0BAA0B,CAAC,EAAA,OAAA,EAAA,CAJrC,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC9C,2BAA2B;YAC3B,4BAA4B,CAAA,EAAA,CAAA,CAAA;;4FAKnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBATpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC;wBAC9C,2BAA2B;wBAC3B;AACD,qBAAA;oBACD,SAAS,EAAE,CAAC,0BAA0B,CAAC;AACvC,oBAAA,OAAO,EAAE,CAAC,2BAA2B,EAAE,4BAA4B;AACpE,iBAAA;;;ACzBD;;AAEG;;;;"}