{"version":3,"file":"angular-extensions-controls-select-control.mjs","sources":["../../../projects/angular-extensions/controls/select-control/src/ngx-mat-select-search.directive.ts","../../../projects/angular-extensions/controls/select-control/src/truncate.directive.ts","../../../projects/angular-extensions/controls/select-control/src/select-control.component.ts","../../../projects/angular-extensions/controls/select-control/src/select-control.component.html","../../../projects/angular-extensions/controls/select-control/src/select-control.module.ts","../../../projects/angular-extensions/controls/select-control/src/angular-extensions-controls-select-control.ts"],"sourcesContent":["import { Directive, Input, AfterViewInit, OnChanges, ElementRef } from \"@angular/core\";\r\nimport { MatSelect } from \"@angular/material/select\";\r\nimport { MatSelectSearchComponent } from \"ngx-mat-select-search\";\r\n\r\nimport { overrideFunction, SimpleChanges } from \"angular-extensions/core\";\r\nimport { filter, first } from \"rxjs\";\r\n\r\n@Directive({\r\n  selector: \"ngx-mat-select-search\"\r\n})\r\nexport class MatSelectSearchComponentDirective implements AfterViewInit, OnChanges {\r\n\r\n  private get innerSearchElement() {\r\n    return this.selectSearchComponent.innerSelectSearch.nativeElement as HTMLElement;\r\n  }\r\n\r\n  private get checkbox() {\r\n    return this.innerSearchElement.querySelector(\"mat-checkbox\") as HTMLElement;\r\n  }\r\n\r\n  private get searchIcon() {\r\n    return this.innerSearchElement.querySelector(\"mat-icon\") as HTMLElement;\r\n  }\r\n\r\n  @Input()\r\n  public toggleAllCheckboxDisabled: boolean;\r\n\r\n  constructor(\r\n    matSelect: MatSelect,\r\n    elementRef: ElementRef<HTMLElement>,\r\n    private selectSearchComponent: MatSelectSearchComponent,\r\n  ) {\r\n    fixSearchWidthCalculation();\r\n\r\n    /**\r\n     * Select search has position absolute and re-calculates width when opened which causes flicker\r\n     */\r\n    function fixSearchWidthCalculation() {\r\n      matSelect.openedChange\r\n        .pipe(filter(opened => opened), first())\r\n        .subscribe(() => elementRef.nativeElement.classList.toggle(\"position-relative\", true));\r\n\r\n      overrideFunction(\r\n        selectSearchComponent,\r\n        searchComponent => searchComponent.updateInputWidth,\r\n        updateInputWidth => {\r\n          updateInputWidth();\r\n\r\n          elementRef.nativeElement.classList.toggle(\"position-relative\", false);\r\n        });\r\n    }\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    if (this.checkbox) {\r\n      this.checkbox.insertAdjacentHTML(\"afterend\", `<mat-icon\r\n        class=\"material-icons\"\r\n        style=\"padding-left: 12px; margin-right: -4px; display: none; color: #999;\"\r\n        >search</mat-icon>`);\r\n\r\n      this.updateCheckboxState();\r\n    }\r\n  }\r\n\r\n  public ngOnChanges(changes: SimpleChanges<MatSelectSearchComponentDirective>): void {\r\n    if (changes.toggleAllCheckboxDisabled) {\r\n      this.updateCheckboxState();\r\n    }\r\n  }\r\n\r\n  private updateCheckboxState() {\r\n    if (!this.checkbox) {\r\n      return;\r\n    }\r\n\r\n    this.checkbox.style.display = this.toggleAllCheckboxDisabled ? \"none\" : null;\r\n    this.searchIcon.style.display = this.toggleAllCheckboxDisabled ? null : \"none\";\r\n  }\r\n}\r\n","import { debounceTime, Subject } from \"rxjs\";\r\nimport { Directive, Input, ElementRef, OnChanges, AfterViewInit, OnDestroy } from \"@angular/core\";\r\n\r\n@Directive({\r\n  selector: \"[truncate]\"\r\n})\r\nexport class TruncateDirective implements OnChanges, AfterViewInit, OnDestroy {\r\n\r\n  @Input(\"truncate\")\r\n  public values: string[];\r\n\r\n  private truncated = true;\r\n\r\n  private truncate$ = new Subject<void>();\r\n\r\n  private resizeObserver: ResizeObserver;\r\n\r\n  private get container() {\r\n    return this.elementRef.nativeElement;\r\n  }\r\n\r\n  private get remainderContainer() {\r\n    return this.container.children.length == 2\r\n      ? this.container.lastChild as HTMLSpanElement\r\n      : null;\r\n  }\r\n\r\n  private get parentElement() {\r\n    return this.elementRef.nativeElement.parentElement;\r\n  }\r\n\r\n  constructor(\r\n    private elementRef: ElementRef<HTMLSpanElement>,\r\n  ) {\r\n    this.resizeObserver = new ResizeObserver(() => {\r\n      if (this.truncated || this.container.offsetWidth > this.parentElement.offsetWidth) {\r\n        this.truncate$.next();\r\n      }\r\n    });\r\n\r\n    this.truncate$\r\n      .pipe(debounceTime(0))\r\n      .subscribe(() => {\r\n        if (document.contains(this.container)) {\r\n          this.truncated = this.truncate(this.values);\r\n        }\r\n      });\r\n  }\r\n\r\n  public ngOnChanges() {\r\n    this.truncate$.next();\r\n  }\r\n\r\n  public ngAfterViewInit() {\r\n    this.truncate$.next();\r\n\r\n    this.resizeObserver.observe(this.parentElement);\r\n  }\r\n\r\n  public ngOnDestroy() {\r\n    this.truncate$.complete();\r\n\r\n    this.resizeObserver.unobserve(this.parentElement);\r\n  }\r\n\r\n  private truncate(values?: string[]): boolean {\r\n    if (!values?.length) {\r\n      this.elementRef.nativeElement.innerHTML = \"\";\r\n\r\n      return false;\r\n    }\r\n\r\n    this.container.style.maxWidth = this.parentElement.offsetWidth + \"px\";\r\n\r\n    if (values.length == 1) {\r\n      let value = values[0];\r\n\r\n      this.container.innerText = value;\r\n\r\n      if (this.container.offsetWidth <= this.parentElement.offsetWidth) {\r\n        return false;\r\n      }\r\n\r\n      this.container.innerHTML += \"...\";\r\n\r\n      let truncatedWidth = Math.round((this.parentElement.offsetWidth / this.container.offsetWidth) * values[0].length);\r\n\r\n      this.container.innerHTML = this.container.innerHTML.substring(0, truncatedWidth) + \"...\";\r\n\r\n      return true;\r\n    }\r\n\r\n    // create label and remainder elements\r\n    this.container.innerHTML = `<span></span><span class=\"px-2 ml-1 rounded-pill bg-secondary text-white\">+${values.length - 1}</span>`;\r\n\r\n    let labelContainer = this.container.firstChild as HTMLSpanElement;\r\n\r\n    let remainder = values.length;\r\n\r\n    // add labels to result until test container width overflows\r\n    for (let index = 0; index < values.length && this.container.offsetWidth <= this.parentElement.offsetWidth; index++) {\r\n      let pendingValue = index == 0 ? values[index] : \", \" + values[index];\r\n\r\n      labelContainer.innerText += pendingValue;\r\n\r\n      // need to truncate value since we get overflow on first iteration\r\n      if (index == 0 && this.container.offsetWidth > this.parentElement.offsetWidth) {\r\n        labelContainer.innerText += \"...\";\r\n\r\n        let truncatedWidth = Math.round(\r\n          ((this.parentElement.offsetWidth - this.remainderContainer.offsetWidth) / this.container.offsetWidth) *\r\n          values[0].length);\r\n\r\n        labelContainer.innerText = labelContainer.innerText.substring(0, truncatedWidth) + \"...\";\r\n\r\n        return true;\r\n      }\r\n\r\n      // need to revert last value due to overflow\r\n      if (this.container.offsetWidth > this.parentElement.offsetWidth) {\r\n        labelContainer.innerText = labelContainer.innerText.substring(0, labelContainer.innerText.length - pendingValue.length);\r\n\r\n        return true;\r\n      }\r\n      else {\r\n        this.remainderContainer.innerText = \"+\" + --remainder;\r\n      }\r\n    }\r\n\r\n    // remove empty remainder\r\n    if (remainder == 0) {\r\n      this.remainderContainer.remove();\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n}\r\n","import { castArray } from \"lodash-es\";\r\nimport { Observable, of, merge } from \"rxjs\";\r\nimport { catchError, debounceTime, filter, first, startWith, switchMap, takeUntil, tap } from \"rxjs/operators\";\r\nimport {\r\n  Component, OnInit, OnChanges, Input, Optional, ElementRef, ChangeDetectorRef, NgZone,\r\n  ViewChild, ContentChild, TemplateRef, ChangeDetectionStrategy, Output, EventEmitter, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { AppMatOption, MatOptgroup, MatPseudoCheckboxState } from \"@angular/material/core\";\r\nimport { AppMatSelect, MatSelect } from \"@angular/material/select\";\r\nimport { FormControl } from \"@angular/forms\";\r\nimport { MatMenuTrigger } from \"@angular/material/menu\";\r\nimport { CdkVirtualScrollViewport } from \"@angular/cdk/scrolling\";\r\nimport { SelectionModel } from \"@angular/cdk/collections\";\r\n\r\nimport { Field } from \"angular-extensions/models\";\r\nimport { overrideFunction, SimpleChanges } from \"angular-extensions/core\";\r\nimport { ActionableControl, ControlBase } from \"angular-extensions/controls/base-control\";\r\n\r\ninterface SelectionGroup<TKey, T> extends Group<TKey, T> {\r\n  state?: MatPseudoCheckboxState;\r\n}\r\n\r\n@Component({\r\n  selector: \"select-control\",\r\n  templateUrl: \"./select-control.component.html\",\r\n  styleUrls: [\"./select-control.component.scss\"],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SelectControlComponent<TValue, TOption, TOptionGroup, TFormattedValue, TControlValue>\r\n  extends ControlBase<TValue, TOption, TOptionGroup, TFormattedValue, TControlValue>\r\n  implements OnInit, OnChanges, ActionableControl {\r\n\r\n  @Input()\r\n  public dropdownClass = \"\";\r\n\r\n  @Input()\r\n  public multiple: boolean;\r\n\r\n  @Input()\r\n  public searchable: boolean;\r\n\r\n  @Input()\r\n  public clearable: boolean;\r\n\r\n  @Input()\r\n  public virtualization = false;\r\n\r\n  @Input()\r\n  public tooltipDisabled = false;\r\n\r\n  @Input()\r\n  public optionTooltipDisabled = false;\r\n\r\n  @Input()\r\n  public filter = \"\";\r\n\r\n  @Input()\r\n  public actionButtonVisible = true;\r\n\r\n  @Input()\r\n  public actionButtonIcon?: string;\r\n\r\n  @Input()\r\n  public actionButtonTooltip?: string;\r\n\r\n  @Input()\r\n  public optionHeight = 42;\r\n\r\n  @Input()\r\n  public visibleOptionsCount = 6;\r\n\r\n  @Input()\r\n  public hideTriggerLabel?: boolean;\r\n\r\n  @Input()\r\n  public alwaysShowTriggerLabel?: boolean;\r\n\r\n  @Output()\r\n  public actionButton = new EventEmitter<Field<TValue, TOption, TOptionGroup, TFormattedValue, TControlValue>>();\r\n\r\n  @Output()\r\n  public menuClosed = new EventEmitter<void>();\r\n\r\n  @ViewChild(MatSelect, { static: true })\r\n  public select: AppMatSelect;\r\n\r\n  @ViewChild(CdkVirtualScrollViewport)\r\n  public scrollViewport?: CdkVirtualScrollViewport;\r\n\r\n  @ContentChild(\"headerTemplate\", { static: true })\r\n  public headerTemplate: TemplateRef<any>;\r\n\r\n  @ContentChild(\"optionTemplate\", { static: true })\r\n  public optionTemplate: TemplateRef<{ $implicit: string; option: TOption }>;\r\n\r\n  @ContentChild(\"triggerTemplate\", { static: true })\r\n  public triggerTemplate: TemplateRef<{ $implicit: string; option: TOption | TOption[] }>;\r\n\r\n  @ContentChild(\"searchActionTemplate\", { static: true })\r\n  public searchActionTemplate: TemplateRef<any>;\r\n\r\n  public dropdownHeight = this.optionHeight * this.visibleOptionsCount;\r\n\r\n  public isSelectAllChecked = false;\r\n\r\n  public get viewportHeight() {\r\n    return this.dropdownHeight - (this.searchable ? this.optionHeight : 0);\r\n  }\r\n\r\n  /**\r\n   * Selected option(s) based on option comparer,\r\n   * see {@link Field.optionId} for details\r\n   */\r\n  public selectedOption: TOption | TOption[];\r\n\r\n  public groupStates = new Map<TOptionGroup, SelectionGroup<TOptionGroup, TOption>>();\r\n\r\n  /**\r\n   * Trigger label (text shown when option(s) selected),\r\n   * based on option label, see {@link Field.optionLabel} for details\r\n   */\r\n  public triggerLabel: string;\r\n\r\n  public tooltip: string;\r\n\r\n  public filterControl = new FormControl<string>(\"\");\r\n\r\n  private selection: SelectionModel<TOption>;\r\n\r\n  constructor(\r\n    elementRef: ElementRef<HTMLElement>,\r\n    private changeDetectorRef: ChangeDetectorRef,\r\n    private ngZone: NgZone,\r\n    @Optional() matMenuTrigger: MatMenuTrigger,\r\n  ) {\r\n    super();\r\n\r\n    // provides ability to have select-control to open\r\n    // custom popup menu without processing actual event\r\n    if (matMenuTrigger) {\r\n      elementRef.nativeElement.addEventListener(\r\n        \"click\",\r\n        event => {\r\n          matMenuTrigger.openMenu();\r\n\r\n          event.stopPropagation();\r\n        },\r\n        { capture: true });\r\n    }\r\n  }\r\n\r\n  public ngOnInit() {\r\n    this.filterControl.setValue(this.filter);\r\n\r\n    this.selection = new SelectionModel<TOption>(this.multiple, [], true);\r\n\r\n    this.selection.values = new Map();\r\n    this.selection.compareBy = this.field.optionId;\r\n\r\n    this.patchSelectTrigger();\r\n    this.addCustomSelectionModel();\r\n    this.addOptionsFilteringSupport();\r\n    this.updateOptionsAndViewportOnMenuOpen();\r\n\r\n    if (this.multiple && (this.searchable || this.field.optionsGroupProvider)) {\r\n      this.updateSelectStatesOnOptionChanges();\r\n    }\r\n\r\n    if (this.menuClosed.observed || this.field.optionsProvider) {\r\n      this.select._closedStream\r\n        .pipe(takeUntil(this.destroy$))\r\n        .subscribe(() => {\r\n          // reset filtered options to selected options to help deselect them in the future\r\n          if (this.field.optionsProvider && this.selection.selected.length > 0) {\r\n            this.field.options = this.multiple\r\n              ? [...this.selection.selected]\r\n              : [];\r\n          }\r\n\r\n          this.menuClosed.emit();\r\n        });\r\n    }\r\n  }\r\n\r\n  public ngOnChanges(changes: SimpleChanges<SelectControlComponent<TValue, TOption, TOptionGroup, TFormattedValue, TControlValue>>) {\r\n    if (changes.visibleOptionsCount || changes.optionHeight) {\r\n      this.dropdownHeight = this.optionHeight * this.visibleOptionsCount;\r\n    }\r\n  }\r\n\r\n  public optionGroupTracker = (index: number, optionGroup: Group<TOptionGroup, TOption>) => {\r\n    return optionGroup.key;\r\n  };\r\n\r\n  public optionTracker = (index: number, option: TOption) => {\r\n    return this.field.optionId(option, index);\r\n  };\r\n\r\n  public optionFilter = (option: TOption) => {\r\n    return !this.field.optionDisabled(option) &&\r\n      this.field.optionsFilterPredicate(option, this.filterControl.value);\r\n  };\r\n\r\n  public optionComparer = (left?: TOption, right?: TOption) => {\r\n    return left != null && right != null &&\r\n      this.field.optionId(left) == this.field.optionId(right);\r\n  };\r\n\r\n  public showClearButton() {\r\n    return this.field.control.enabled && this.clearable && !this.field.isQuerying && this.selection.hasValue();\r\n  }\r\n\r\n  public isSearchAvailable() {\r\n    return this.field.isQuerying ||\r\n      this.field.options?.length ||\r\n      this.field.optionsProvider;\r\n  }\r\n\r\n  public clear() {\r\n    this.field.control.setValue(this.multiple ? [] as any as TControlValue : null);\r\n    this.field.control.markAsTouched({ onlySelf: true });\r\n\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  public toggleSelectAll(shouldSelect: boolean) {\r\n    let filteredOptions = this.field.options.filter(this.optionFilter);\r\n\r\n    let matOptions = this.select.options.filter(option => !option.disabled);\r\n\r\n    (matOptions as any as AppMatOption<any>[])\r\n      .forEach(option => {\r\n        option._selected = shouldSelect;\r\n        option._changeDetectorRef.markForCheck();\r\n      });\r\n\r\n    if (shouldSelect) {\r\n      this.selection.select(...filteredOptions);\r\n      this.select._selectionModel.select(...matOptions);\r\n    }\r\n    else {\r\n      this.selection.deselect(...filteredOptions);\r\n      this.select._selectionModel.deselect(...matOptions);\r\n    }\r\n\r\n    this.select._propagateChanges();\r\n\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  public toggleOptionGroup(group: SelectionGroup<TOptionGroup, TOption>, optionGroup: MatOptgroup) {\r\n    let shouldSelect = group.state != \"checked\";\r\n\r\n    let mapOptions = this.select.options.filter(option => {\r\n      return !option.disabled &&\r\n        option.group == optionGroup &&\r\n        this.optionFilter(option.value);\r\n    });\r\n\r\n    let groupOptions = group.items.filter(this.optionFilter);\r\n\r\n    if (shouldSelect) {\r\n      this.selection.select(...groupOptions);\r\n      this.select._selectionModel.select(...mapOptions);\r\n    }\r\n    else {\r\n      this.selection.deselect(...groupOptions);\r\n      this.select._selectionModel.deselect(...mapOptions);\r\n    }\r\n\r\n    this.select._propagateChanges();\r\n\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  /**\r\n   * Store selected values in separate model to avoid mutations when virtualization applies.\r\n   * Extend changes propagation with values stored in custom selection model.\r\n   * Listens to control value changes in order to update selection.\r\n   */\r\n  private addCustomSelectionModel() {\r\n    overrideFunction(\r\n      this.select,\r\n      select => select._onSelect,\r\n      (onSelect, _, matOption, isUserInput) => {\r\n        if (isUserInput) {\r\n          let fieldOption = this.field.options.find(option => this.field.optionValue(option).valueOf() == matOption.value.valueOf());\r\n\r\n          if (matOption.selected) {\r\n            this.selection.select(fieldOption);\r\n          }\r\n          else {\r\n            this.selection.deselect(fieldOption);\r\n          }\r\n        }\r\n\r\n        onSelect(matOption, isUserInput);\r\n      });\r\n\r\n    overrideFunction(\r\n      this.select,\r\n      select => select._propagateChanges,\r\n      (_, select, fallbackValue) => {\r\n        let valueToEmit = this.selection.hasValue\r\n          ? this.multiple\r\n            ? this.selection.selected.map(this.field.optionValue)\r\n            : this.field.optionValue(this.selection.selected.first())\r\n          : fallbackValue;\r\n\r\n        select._value = valueToEmit;\r\n        select.valueChange.emit(valueToEmit);\r\n        select._onChange(valueToEmit);\r\n        select.selectionChange.emit(select._getChangeEvent(valueToEmit));\r\n        select._changeDetectorRef.markForCheck();\r\n      });\r\n\r\n    // TODO: purpose is to sync values to select's selection model and convert value to option\r\n    this.field$\r\n      .pipe(\r\n        switchMap(field => merge(\r\n          of(field.value),\r\n          field.optionChanges,\r\n          new Observable(subscriber => field.control.registerOnChange(() => subscriber.next(null))),\r\n        )),\r\n        debounceTime(0),\r\n        takeUntil(this.destroy$))\r\n      .subscribe(() => {\r\n        // delay value selection until options are fully loaded\r\n        if (this.field.isQuerying) {\r\n          return;\r\n        }\r\n\r\n        // ensures raw value mapping to TOption\r\n        let options = castArray(this.field.value as any as TOption[] ?? [])\r\n          .map(item => this.field.options.find(option => this.optionComparer(option, item)) ?? item);\r\n\r\n        this.selection.clear();\r\n        this.selection.select(...options);\r\n\r\n        if (this.field.optionsGroupProvider) {\r\n          this.groupStates = new Map(this.field.options.groupBy(this.field.optionsGroupProvider).map(group => [group.key, group]));\r\n        }\r\n\r\n        // synchronize with select model\r\n        this.select._initializeSelection();\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Delegates \"empty\" state detection to custom selection model.\r\n   * Updates select trigger label based on custom selection model.\r\n   * If \"hideTriggerLabel\" set to true - trigger label will be ignored completely\r\n   */\r\n  private patchSelectTrigger() {\r\n    Object.defineProperty(this.select, \"empty\", {\r\n      get: () => this.alwaysShowTriggerLabel ? false : this.hideTriggerLabel ? true : !this.selection.hasValue()\r\n    });\r\n\r\n    this.selection.changed\r\n      .pipe(startWith(this.selection.selected), takeUntil(this.destroy$))\r\n      .subscribe(() => {\r\n        if (!this.selection.hasValue()) {\r\n          this.tooltip = null;\r\n          this.triggerLabel = null;\r\n          this.selectedOption = null;\r\n        }\r\n        else {\r\n          if (this.multiple) {\r\n            this.selectedOption = this.selection.selected;\r\n            this.triggerLabel = this.selection.selected.map(this.field.optionDisplayLabel ?? this.field.optionLabel).join(\", \");\r\n\r\n            this.tooltip = (this.selection.selected.length > 1 ? \"• \" : \"\") +\r\n              this.selection.selected.map(this.field.optionDisplayLabel ?? this.field.optionLabel).join(\"\\n• \");\r\n          }\r\n          else {\r\n            this.tooltip = null;\r\n            this.selectedOption = this.selection.selected.first();\r\n\r\n            this.triggerLabel = (this.field.optionDisplayLabel ?? this.field.optionLabel)(this.selectedOption);\r\n          }\r\n        }\r\n\r\n        this.select.stateChanges.next();\r\n\r\n        this.changeDetectorRef.markForCheck();\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Trigger \"filter\" pipe to refresh options since custom predicate might not be pure.\r\n   * Recalculates virtualization viewport size.\r\n   */\r\n  private updateOptionsAndViewportOnMenuOpen() {\r\n    overrideFunction(\r\n      this.select,\r\n      select => select.open,\r\n      (open, select) => {\r\n        if (select._canOpen()) {\r\n          if (this.field.customOptionFilterPredicate) {\r\n            this.field.options = [...this.field.options];\r\n          }\r\n\r\n          if (this.virtualization) {\r\n            this.ngZone.onStable.pipe(first()).subscribe(() => {\r\n              if (this.scrollViewport) {\r\n                this.select.panel.nativeElement.style.maxHeight = `${this.dropdownHeight}px`;\r\n\r\n                this.scrollViewport.checkViewportSize();\r\n\r\n                if (this.selection.hasValue()) {\r\n                  let selectedOptionIndex = this.field.options.indexOf(this.selection.selected.first()) -\r\n                    Math.floor((this.visibleOptionsCount / 2));\r\n\r\n                  this.scrollViewport.scrollToIndex(selectedOptionIndex);\r\n                }\r\n              }\r\n            });\r\n          }\r\n        }\r\n\r\n        open();\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Updates \"select all\" or \"group\" states on selection changes.\r\n   */\r\n  private updateSelectStatesOnOptionChanges() {\r\n    merge(this.selection.changed, this.filterControl.valueChanges)\r\n      .pipe(\r\n        debounceTime(0),\r\n        startWith(undefined),\r\n        takeUntil(this.destroy$))\r\n      .subscribe(() => {\r\n        let selectedOptions = this.selection.selected.filter(this.optionFilter);\r\n\r\n        if (this.searchable) {\r\n          if (!selectedOptions.length) {\r\n            this.isSelectAllChecked = false;\r\n          }\r\n          else {\r\n            let allSelected = isAllSelected(\r\n              this.field.options.filter(this.optionFilter),\r\n              selectedOptions,\r\n              this.field.optionId);\r\n\r\n            this.isSelectAllChecked = allSelected ? true : null;\r\n          }\r\n        }\r\n\r\n        if (this.field.optionsGroupProvider) {\r\n          let selectedGroups = selectedOptions.groupBy(this.field.optionsGroupProvider);\r\n\r\n          this.groupStates.forEach(groupState => {\r\n            groupState.state = getSelectionState(selectedGroups.find(x => x.key == groupState.key)?.items ?? [], groupState.items);\r\n          });\r\n        }\r\n\r\n        this.changeDetectorRef.markForCheck();\r\n      });\r\n\r\n    function getSelectionState(selected: TOption[], options: TOption[]): MatPseudoCheckboxState {\r\n      if (!options.length) {\r\n        return \"unchecked\";\r\n      }\r\n\r\n      if (selected.length == 0) {\r\n        return \"unchecked\";\r\n      }\r\n      else if (selected.length == options.length) {\r\n        return \"checked\";\r\n      }\r\n      else {\r\n        return \"indeterminate\";\r\n      }\r\n    }\r\n\r\n    function isAllSelected<T>(allValues: T[], selectedValues: T[], keySelector: (value: T) => any) {\r\n      let set = new Set(selectedValues.map(keySelector));\r\n\r\n      for (let item of allValues) {\r\n        if (!set.has(keySelector(item))) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Hooks up the <ngx-mat-select-search> MatOption and provides filtered field option\r\n   */\r\n  private addOptionsFilteringSupport() {\r\n    if (this.field.optionsProvider) {\r\n      this.filterControl.valueChanges\r\n        .pipe(\r\n          filter((query: string) => query != \"\"),\r\n          tap(() => {\r\n            this.field.options = [];\r\n            this.field.isQuerying = true;\r\n\r\n            this.changeDetectorRef.markForCheck();\r\n          }),\r\n          debounceTime(300),\r\n          switchMap((query: string) => !!query\r\n            ? this.field\r\n              .optionsProvider(query)\r\n              .pipe(catchError(error => {\r\n                console.error(error);\r\n\r\n                return of<TOption[]>([]);\r\n              }))\r\n            : of([])),\r\n          takeUntil(this.destroy$))\r\n        .subscribe(options => {\r\n          this.field.options = options;\r\n          this.field.isQuerying = false;\r\n\r\n          this.changeDetectorRef.markForCheck();\r\n        });\r\n    }\r\n\r\n    // ensure that filtered options are initialized with pending selection\r\n    if (this.field.control.updateOn == \"blur\") {\r\n      overrideFunction(\r\n        this.select,\r\n        select => select._initializeSelection,\r\n        (_, select) => {\r\n          Promise.resolve().then(() => {\r\n            if (select.ngControl) {\r\n              select._value = select.ngControl.value;\r\n            }\r\n\r\n            let selectedIds = this.selection.selected.map(value => this.field.optionId(value));\r\n            let selectedValues = this.selection.selected.map(value => this.field.optionValue(value));\r\n\r\n            let matchedOptions = this.select.options.filter(option => {\r\n              if (option.value === undefined) {\r\n                return false;\r\n              }\r\n\r\n              return typeof option.value == \"string\" || typeof option.value == \"number\"\r\n                ? selectedValues.includes(option.value as unknown as TControlValue)\r\n                : selectedIds.includes(this.field.optionId(option.value)) || this.selection.selected.includes(option.value);\r\n            });\r\n\r\n            select._selectionModel.setSelection(...matchedOptions);\r\n\r\n            select.stateChanges.next();\r\n          });\r\n        });\r\n    }\r\n  }\r\n}\r\n","<base-control #baseControl\r\n              [control]=\"this\">\r\n  <mat-form-field [appearance]=\"appearance\"\r\n                  [ngClass]=\"fieldClass\"\r\n                  [attr.clearable]=\"clearable\">\r\n    <mat-label>\r\n      {{ field.label }}\r\n    </mat-label>\r\n\r\n    <mat-hint>\r\n      <ng-container *ngTemplateOutlet=\"baseControl.hintTemplate\"></ng-container>\r\n    </mat-hint>\r\n\r\n    <mat-select [panelClass]=\"'custom-scroll select-control-panel' + dropdownClass\"\r\n                [ngClass]=\"{ loading: field.isQuerying }\"\r\n                [matTooltipDisabled]=\"tooltipDisabled\"\r\n                [matTooltip]=\"tooltip || triggerLabel\"\r\n                [matTooltipClass]=\"'white-space-pre-line'\"\r\n                [formControl]=\"field.control\"\r\n                [disableOptionCentering]=\"searchable\"\r\n                [compareWith]=\"optionComparer\"\r\n                [multiple]=\"multiple\">\r\n      <mat-select-trigger>\r\n        <ng-container *ngTemplateOutlet=\"triggerTemplate || (multiple ? defaultTriggerMultipleTemplate : defaultTriggerTemplate);\r\n                      context: { $implicit: triggerLabel, label: triggerLabel, option: selectedOption }\"></ng-container>\r\n      </mat-select-trigger>\r\n\r\n      <mat-option *ngIf=\"searchable\">\r\n        <ngx-mat-select-search class=\"d-block\"\r\n                               [showToggleAllCheckbox]=\"multiple\"\r\n                               [toggleAllCheckboxIndeterminate]=\"isSelectAllChecked == null\"\r\n                               [toggleAllCheckboxChecked]=\"isSelectAllChecked\"\r\n                               [toggleAllCheckboxDisabled]=\"multiple && !(field.options | filter : field.optionsFilterPredicate : filterControl.value).length\"\r\n                               [toggleAllCheckboxTooltipMessage]=\"'Select all'\"\r\n                               [placeholderLabel]=\"isSearchAvailable() ? 'Type to search items' : 'No items available'\"\r\n                               [disableInitialFocus]=\"!isSearchAvailable()\"\r\n                               [ngStyle]=\"{'pointer-events': isSearchAvailable() ? 'all' : 'none'}\"\r\n                               [noEntriesFoundLabel]=\"null\"\r\n                               [formControl]=\"filterControl\"\r\n                               [searching]=\"field.isQuerying\"\r\n                               (toggleAll)=\"toggleSelectAll($event)\">\r\n          <div *ngIf=\"searchActionTemplate\"\r\n               [hidden]=\"filterControl.value\"\r\n               class=\"mat-select-search-custom-header-content\">\r\n            <ng-container *ngTemplateOutlet=\"searchActionTemplate\"></ng-container>\r\n          </div>\r\n        </ngx-mat-select-search>\r\n      </mat-option>\r\n\r\n      <ng-container *ngIf=\"headerTemplate\">\r\n        <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n      </ng-container>\r\n\r\n      <ng-container *ngIf=\"field.options | filter : field.optionsFilterPredicate : filterControl.value as options\">\r\n        <ng-container *ngIf=\"options.length; else noItemsTemplate\">\r\n          <ng-container *ngIf=\"field.optionsGroupProvider\">\r\n            <mat-optgroup #optionGroup\r\n                          *ngFor=\"let group of options | groupBy : field.optionsGroupProvider; trackBy : optionGroupTracker\"\r\n                          [style.top]=\"searchable ? optionHeight + 'px' : '0px'\"\r\n                          [label]=\"multiple ? '' : group.key | map : field.optionGroupLabel\">\r\n              <span *ngIf=\"multiple && groupStates.get(group.key) as group\">\r\n                <mat-pseudo-checkbox class=\"mat-option-pseudo-checkbox\"\r\n                                     [state]=\"group.state\"\r\n                                     (click)=\"toggleOptionGroup(group, optionGroup)\"></mat-pseudo-checkbox>\r\n                {{ group.key | map : field.optionGroupLabel }}\r\n              </span>\r\n\r\n              <mat-option *ngFor=\"let option of group.items; trackBy : optionTracker\"\r\n                          [matTooltipDisabled]=\"optionTooltipDisabled\"\r\n                          [matTooltip]=\"option | map : field.optionTooltip ?? field.optionLabel\"\r\n                          [value]=\"option | map : field.optionValue\"\r\n                          [disabled]=\"option | map : field.optionDisabled\">\r\n                <ng-container *ngTemplateOutlet=\"optionTemplate || defaultOptionTempalte;\r\n                              context: { $implicit: option | map : field.optionLabel, option: option }\"></ng-container>\r\n              </mat-option>\r\n            </mat-optgroup>\r\n          </ng-container>\r\n\r\n          <ng-container *ngIf=\"!field.optionsGroupProvider\">\r\n            <ng-container *ngIf=\"virtualization\">\r\n              <cdk-virtual-scroll-viewport [itemSize]=\"optionHeight\"\r\n                                           [style.height.px]=\"viewportHeight\"\r\n                                           [class.virtualization-disabled]=\"options.length * optionHeight < viewportHeight\">\r\n                <mat-option *cdkVirtualFor=\"let option of options; trackBy : optionTracker\"\r\n                            [style.height.px]=\"optionHeight\"\r\n                            [value]=\"option | map : field.optionValue\"\r\n                            [disabled]=\"option | map : field.optionDisabled\">\r\n                  <ng-container *ngTemplateOutlet=\"optionTemplate || defaultOptionTempalte;\r\n                              context: { $implicit: option | map : field.optionLabel, option: option }\"></ng-container>\r\n                </mat-option>\r\n              </cdk-virtual-scroll-viewport>\r\n            </ng-container>\r\n\r\n            <ng-container *ngIf=\"!virtualization\">\r\n              <mat-option *ngFor=\"let option of options; trackBy : optionTracker\"\r\n                          [matTooltipDisabled]=\"optionTooltipDisabled\"\r\n                          [matTooltip]=\"option | map : field.optionTooltip ?? field.optionLabel\"\r\n                          [value]=\"option | map : field.optionValue\"\r\n                          [disabled]=\"option | map : field.optionDisabled\">\r\n                <ng-container *ngTemplateOutlet=\"optionTemplate || defaultOptionTempalte;\r\n                            context: { $implicit: option | map : field.optionLabel, option: option }\"></ng-container>\r\n              </mat-option>\r\n            </ng-container>\r\n          </ng-container>\r\n        </ng-container>\r\n      </ng-container>\r\n    </mat-select>\r\n\r\n    <span matSuffix\r\n          *ngIf=\"field.isQuerying\">\r\n      <mat-spinner mode=\"indeterminate\"\r\n                   [diameter]=\"20\"></mat-spinner>\r\n    </span>\r\n\r\n    <a *ngIf=\"showClearButton()\"\r\n       mat-icon-button\r\n       matSuffix\r\n       matTooltip=\"Clear\"\r\n       (click)=\"clear(); $event.stopPropagation()\">\r\n      <mat-icon>close</mat-icon>\r\n    </a>\r\n\r\n    <a *ngIf=\"!field.isQuerying && actionButtonVisible && actionButtonIcon && actionButton.observed\"\r\n       mat-icon-button\r\n       matSuffix\r\n       [matTooltip]=\"actionButtonTooltip\"\r\n       (click)=\"actionButton.emit(field); $event.stopPropagation()\">\r\n      <mat-icon>{{ actionButtonIcon }}</mat-icon>\r\n    </a>\r\n\r\n    <mat-error *ngIf=\"baseControl.initialized\">\r\n      <ng-container *ngTemplateOutlet=\"baseControl.errorsTemplate\"></ng-container>\r\n    </mat-error>\r\n  </mat-form-field>\r\n</base-control>\r\n\r\n<ng-template #noItemsTemplate>\r\n  <ng-container *ngIf=\"field.isQuerying\">\r\n    <mat-option [disabled]=\"true\">Loading...</mat-option>\r\n  </ng-container>\r\n\r\n  <ng-container *ngIf=\"!field.isQuerying\">\r\n    <ng-container *ngIf=\"filterControl.value\">\r\n      <mat-option [disabled]=\"true\">No items found</mat-option>\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultOptionTempalte\r\n             let-label\r\n             let-option=\"option\">\r\n  {{ label }}\r\n</ng-template>\r\n\r\n<ng-template #defaultTriggerTemplate\r\n             let-triggerValue>\r\n  {{ triggerValue }}\r\n</ng-template>\r\n\r\n<ng-template #defaultTriggerMultipleTemplate\r\n             let-options=\"option\">\r\n  <span [truncate]=\"(options ?? []) | map : this.field.optionDisplayLabel ?? this.field.optionLabel\"></span>\r\n</ng-template>\r\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { ScrollingModule } from \"@angular/cdk/scrolling\";\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { MatPseudoCheckboxModule } from \"@angular/material/core\";\nimport { NgxMatSelectSearchModule } from \"ngx-mat-select-search\";\n\nimport { overrideFunction } from \"angular-extensions/core\";\nimport { NgxDirectivesModule } from \"angular-extensions/directives\";\nimport { NgxBaseControlModule } from \"angular-extensions/controls/base-control\";\nimport { SelectControlComponent } from \"./select-control.component\";\nimport { MatSelectSearchComponentDirective } from \"./ngx-mat-select-search.directive\";\nimport { TruncateDirective } from \"./truncate.directive\";\n\ninterface AppSelectionModel<T> extends Omit<SelectionModel<T>, \"_markSelected\" | \"_unmarkSelected\"> {\n  _multiple: boolean;\n\n  _emitChanges: boolean;\n\n  _selection: Set<T>;\n\n  _selectedToEmit: T[];\n\n  _deselectedToEmit: T[];\n\n  _unmarkAll(): void;\n\n  _markSelected(value: T): void;\n\n  _unmarkSelected(value: T): void;\n}\n\nfunction patchSelectionModel() {\n  overrideFunction(\n    SelectionModel.prototype as any as AppSelectionModel<any>,\n    selection => selection.isSelected,\n    (isSelected, selection, value) => {\n      if (selection.compareBy) {\n        let key = selection.compareBy(value);\n\n        return selection.values.has(key);\n      }\n      else {\n        return isSelected(value);\n      }\n    });\n\n  overrideFunction(\n    SelectionModel.prototype as any as AppSelectionModel<any>,\n    selection => selection._markSelected,\n    (markSelected, selection, value) => {\n      if (!selection.compareBy) {\n        markSelected(value);\n\n        return;\n      }\n\n      let key = selection.compareBy(value);\n\n      if (selection.values.has(key)) {\n        return;\n      }\n\n      if (!selection._multiple) {\n        selection._unmarkAll();\n      }\n\n      selection._selection.add(value);\n      selection.values.set(key, value);\n\n      if (selection._emitChanges) {\n        selection._selectedToEmit.push(value);\n      }\n    });\n\n  overrideFunction(\n    SelectionModel.prototype as any as AppSelectionModel<any>,\n    selection => selection._unmarkSelected,\n    (unmarkSelected, selection, value) => {\n      if (!selection.compareBy) {\n        unmarkSelected(value);\n\n        return;\n      }\n\n      let key = selection.compareBy(value);\n\n      if (!selection.values.has(key)) {\n        return;\n      }\n\n      selection._selection.delete(value);\n      selection.values.delete(key);\n\n      if (selection._emitChanges) {\n        selection._deselectedToEmit.push(value);\n      }\n    });\n}\n\npatchSelectionModel();\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MatSelectModule,\n    MatPseudoCheckboxModule,\n    MatProgressSpinnerModule,\n    ScrollingModule,\n    NgxMatSelectSearchModule,\n\n    NgxBaseControlModule,\n    NgxDirectivesModule,\n  ],\n  exports: [\n    MatSelectModule,\n    MatProgressSpinnerModule,\n    NgxBaseControlModule,\n    ScrollingModule,\n    NgxMatSelectSearchModule,\n\n    SelectControlComponent,\n    NgxDirectivesModule,\n  ],\n  declarations: [\n    SelectControlComponent,\n    MatSelectSearchComponentDirective,\n    TruncateDirective,\n  ]\n})\nexport class NgxSelectControlModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["debounceTime","first","filter","i1","i2","i4","i8","i15.MatSelectSearchComponentDirective","i16.TruncateDirective"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUa,iCAAiC,CAAA;AAiB5C,IAAA,WAAA,CACE,SAAoB,EACpB,UAAmC,EAC3B,qBAA+C,EAAA;AAA/C,QAAA,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAA0B;AAEvD,QAAA,yBAAyB,EAAE,CAAC;AAE5B;;AAEG;AACH,QAAA,SAAS,yBAAyB,GAAA;AAChC,YAAA,SAAS,CAAC,YAAY;AACnB,iBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AACvC,iBAAA,SAAS,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC;AAEzF,YAAA,gBAAgB,CACd,qBAAqB,EACrB,eAAe,IAAI,eAAe,CAAC,gBAAgB,EACnD,gBAAgB,IAAG;AACjB,gBAAA,gBAAgB,EAAE,CAAC;gBAEnB,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AACxE,aAAC,CAAC,CAAC;SACN;KACF;AAvCD,IAAA,IAAY,kBAAkB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,aAA4B,CAAC;KAClF;AAED,IAAA,IAAY,QAAQ,GAAA;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,cAAc,CAAgB,CAAC;KAC7E;AAED,IAAA,IAAY,UAAU,GAAA;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAgB,CAAC;KACzE;IA+BM,eAAe,GAAA;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAA;;;AAGxB,0BAAA,CAAA,CAAC,CAAC;YAEvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,SAAA;KACF;AAEM,IAAA,WAAW,CAAC,OAAyD,EAAA;QAC1E,IAAI,OAAO,CAAC,yBAAyB,EAAE;YACrC,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,SAAA;KACF;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,GAAG,MAAM,GAAG,IAAI,CAAC;AAC7E,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,yBAAyB,GAAG,IAAI,GAAG,MAAM,CAAC;KAChF;;+HAnEU,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mHAAjC,iCAAiC,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;iBAClC,CAAA;gKAgBQ,yBAAyB,EAAA,CAAA;sBAD/B,KAAK;;;MClBK,iBAAiB,CAAA;AAyB5B,IAAA,WAAA,CACU,UAAuC,EAAA;AAAvC,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAA6B;AArBzC,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAEjB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;AAqBtC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;AAC5C,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AACjF,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,SAAS;AACX,aAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;aACrB,SAAS,CAAC,MAAK;YACd,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7C,aAAA;AACH,SAAC,CAAC,CAAC;KACN;AA9BD,IAAA,IAAY,SAAS,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KACtC;AAED,IAAA,IAAY,kBAAkB,GAAA;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC;AACxC,cAAE,IAAI,CAAC,SAAS,CAAC,SAA4B;cAC3C,IAAI,CAAC;KACV;AAED,IAAA,IAAY,aAAa,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC;KACpD;IAoBM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACvB;IAEM,eAAe,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAEtB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACjD;IAEM,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAE1B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACnD;AAEO,IAAA,QAAQ,CAAC,MAAiB,EAAA;QAChC,IAAI,EAAC,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE,CAAC;AAE7C,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;AAEtE,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AACtB,YAAA,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEtB,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;YAEjC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AAChE,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC;YAElC,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAElH,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC;AAEzF,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;AAGD,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAA,2EAAA,EAA8E,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA,OAAA,CAAS,CAAC;AAEpI,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,UAA6B,CAAC;AAElE,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;;QAG9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;YAClH,IAAI,YAAY,GAAG,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAErE,YAAA,cAAc,CAAC,SAAS,IAAI,YAAY,CAAC;;AAGzC,YAAA,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;AAC7E,gBAAA,cAAc,CAAC,SAAS,IAAI,KAAK,CAAC;gBAElC,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAC7B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW;AACpG,oBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpB,gBAAA,cAAc,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC;AAEzF,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;;YAGD,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;gBAC/D,cAAc,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAExH,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACI,iBAAA;gBACH,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,SAAS,CAAC;AACvD,aAAA;AACF,SAAA;;QAGD,IAAI,SAAS,IAAI,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;AAEjC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;+GAnIU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,CAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;iBACvB,CAAA;iGAIQ,MAAM,EAAA,CAAA;sBADZ,KAAK;uBAAC,UAAU,CAAA;;;ACqBb,MAAO,sBACX,SAAQ,WAA0E,CAAA;AAoGlF,IAAA,WAAA,CACE,UAAmC,EAC3B,iBAAoC,EACpC,MAAc,EACV,cAA8B,EAAA;AAE1C,QAAA,KAAK,EAAE,CAAC;AAJA,QAAA,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;AACpC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAnGjB,QAAA,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AAYnB,QAAA,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAGvB,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAGxB,QAAA,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;AAG9B,QAAA,IAAM,CAAA,MAAA,GAAG,EAAE,CAAC;AAGZ,QAAA,IAAmB,CAAA,mBAAA,GAAG,IAAI,CAAC;AAS3B,QAAA,IAAY,CAAA,YAAA,GAAG,EAAE,CAAC;AAGlB,QAAA,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAC;AASxB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAwE,CAAC;AAGxG,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;QAoBtC,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAE9D,QAAA,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;AAY3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAuD,CAAC;QAU7E,IAAA,CAAA,aAAa,GAAG,IAAI,WAAW,CAAS,EAAE,CAAC,CAAC;QAiE5C,IAAA,CAAA,kBAAkB,GAAG,CAAC,KAAa,EAAE,WAAyC,KAAI;YACvF,OAAO,WAAW,CAAC,GAAG,CAAC;AACzB,SAAC,CAAC;QAEK,IAAA,CAAA,aAAa,GAAG,CAAC,KAAa,EAAE,MAAe,KAAI;YACxD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC5C,SAAC,CAAC;AAEK,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,MAAe,KAAI;YACxC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;AACvC,gBAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACxE,SAAC,CAAC;QAEK,IAAA,CAAA,cAAc,GAAG,CAAC,IAAc,EAAE,KAAe,KAAI;AAC1D,YAAA,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;AAClC,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5D,SAAC,CAAC;;;AAnEA,QAAA,IAAI,cAAc,EAAE;YAClB,UAAU,CAAC,aAAa,CAAC,gBAAgB,CACvC,OAAO,EACP,KAAK,IAAG;gBACN,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAE1B,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,aAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACtB,SAAA;KACF;AA5CD,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;KACxE;IA4CM,QAAQ,GAAA;QACb,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEzC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAU,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAEtE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAE/C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,kCAAkC,EAAE,CAAC;AAE1C,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE;YACzE,IAAI,CAAC,iCAAiC,EAAE,CAAC;AAC1C,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;YAC1D,IAAI,CAAC,MAAM,CAAC,aAAa;AACtB,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC9B,SAAS,CAAC,MAAK;;AAEd,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,oBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ;0BAC9B,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;0BAC5B,EAAE,CAAC;AACR,iBAAA;AAED,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACzB,aAAC,CAAC,CAAC;AACN,SAAA;KACF;AAEM,IAAA,WAAW,CAAC,OAA6G,EAAA;AAC9H,QAAA,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,YAAY,EAAE;YACvD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACpE,SAAA;KACF;IAoBM,eAAe,GAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC5G;IAEM,iBAAiB,GAAA;;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;AAC1B,aAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,CAAA;AAC1B,YAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;KAC9B;IAEM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,EAA0B,GAAG,IAAI,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAErD,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;AAEM,IAAA,eAAe,CAAC,YAAqB,EAAA;AAC1C,QAAA,IAAI,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAEnE,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEvE,UAAyC;aACvC,OAAO,CAAC,MAAM,IAAG;AAChB,YAAA,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC;AAChC,YAAA,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC3C,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC;AACnD,SAAA;AACI,aAAA;YACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC;AACrD,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAEhC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAEM,iBAAiB,CAAC,KAA4C,EAAE,WAAwB,EAAA;AAC7F,QAAA,IAAI,YAAY,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;AAE5C,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;YACnD,OAAO,CAAC,MAAM,CAAC,QAAQ;gBACrB,MAAM,CAAC,KAAK,IAAI,WAAW;AAC3B,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAEzD,QAAA,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC;AACnD,SAAA;AACI,aAAA;YACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC;AACrD,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAEhC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;AAED;;;;AAIG;IACK,uBAAuB,GAAA;QAC7B,gBAAgB,CACd,IAAI,CAAC,MAAM,EACX,MAAM,IAAI,MAAM,CAAC,SAAS,EAC1B,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,KAAI;AACtC,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAE3H,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,oBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACpC,iBAAA;AACI,qBAAA;AACH,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtC,iBAAA;AACF,aAAA;AAED,YAAA,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;QAEL,gBAAgB,CACd,IAAI,CAAC,MAAM,EACX,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAClC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,KAAI;AAC3B,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;kBACrC,IAAI,CAAC,QAAQ;AACb,sBAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AACrD,sBAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;kBACzD,aAAa,CAAC;AAElB,YAAA,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;AAC5B,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACrC,YAAA,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC9B,YAAA,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;AACjE,YAAA,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;AAC3C,SAAC,CAAC,CAAC;;AAGL,QAAA,IAAI,CAAC,MAAM;aACR,IAAI,CACH,SAAS,CAAC,KAAK,IAAI,KAAK,CACtB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EACf,KAAK,CAAC,aAAa,EACnB,IAAI,UAAU,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1F,CAAC,EACFA,cAAY,CAAC,CAAC,CAAC,EACf,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC1B,SAAS,CAAC,MAAK;;;AAEd,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACzB,OAAO;AACR,aAAA;;AAGD,YAAA,IAAI,OAAO,GAAG,SAAS,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,KAAyB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC;AAChE,iBAAA,GAAG,CAAC,IAAI,cAAI,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAA,EAAA,CAAC,CAAC;AAE7F,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;AAElC,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE;AACnC,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1H,aAAA;;AAGD,YAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;AACrC,SAAC,CAAC,CAAC;KACN;AAED;;;;AAIG;IACK,kBAAkB,GAAA;QACxB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AAC1C,YAAA,GAAG,EAAE,MAAM,IAAI,CAAC,sBAAsB,GAAG,KAAK,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC3G,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,OAAO;AACnB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAClE,SAAS,CAAC,MAAK;;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;AAC9B,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,aAAA;AACI,iBAAA;gBACH,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC9C,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAEpH,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE;wBAC5D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrG,iBAAA;AACI,qBAAA;AACH,oBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAEtD,IAAI,CAAC,YAAY,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACpG,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;KACN;AAED;;;AAGG;IACK,kCAAkC,GAAA;AACxC,QAAA,gBAAgB,CACd,IAAI,CAAC,MAAM,EACX,MAAM,IAAI,MAAM,CAAC,IAAI,EACrB,CAAC,IAAI,EAAE,MAAM,KAAI;AACf,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE;AACrB,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,2BAA2B,EAAE;AAC1C,oBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC9C,iBAAA;gBAED,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAACC,OAAK,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;wBAChD,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,4BAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,CAAG,EAAA,IAAI,CAAC,cAAc,IAAI,CAAC;AAE7E,4BAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;AAExC,4BAAA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE;AAC7B,gCAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oCACnF,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;AAE7C,gCAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;AACxD,6BAAA;AACF,yBAAA;AACH,qBAAC,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,EAAE,CAAC;AACT,SAAC,CAAC,CAAC;KACN;AAED;;AAEG;IACK,iCAAiC,GAAA;AACvC,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AAC3D,aAAA,IAAI,CACHD,cAAY,CAAC,CAAC,CAAC,EACf,SAAS,CAAC,SAAS,CAAC,EACpB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC1B,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAExE,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;AAC3B,oBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AACjC,iBAAA;AACI,qBAAA;oBACH,IAAI,WAAW,GAAG,aAAa,CAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5C,eAAe,EACf,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEvB,oBAAA,IAAI,CAAC,kBAAkB,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AACrD,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE;AACnC,gBAAA,IAAI,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAE9E,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;;AACpC,oBAAA,UAAU,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AACzH,iBAAC,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;AAEL,QAAA,SAAS,iBAAiB,CAAC,QAAmB,EAAE,OAAkB,EAAA;AAChE,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,gBAAA,OAAO,WAAW,CAAC;AACpB,aAAA;AAED,YAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;AACxB,gBAAA,OAAO,WAAW,CAAC;AACpB,aAAA;AACI,iBAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AAC1C,gBAAA,OAAO,SAAS,CAAC;AAClB,aAAA;AACI,iBAAA;AACH,gBAAA,OAAO,eAAe,CAAC;AACxB,aAAA;SACF;AAED,QAAA,SAAS,aAAa,CAAI,SAAc,EAAE,cAAmB,EAAE,WAA8B,EAAA;AAC3F,YAAA,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAEnD,YAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/B,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AAED,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AAED;;AAEG;IACK,0BAA0B,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;YAC9B,IAAI,CAAC,aAAa,CAAC,YAAY;AAC5B,iBAAA,IAAI,CACHE,QAAM,CAAC,CAAC,KAAa,KAAK,KAAK,IAAI,EAAE,CAAC,EACtC,GAAG,CAAC,MAAK;AACP,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;AAE7B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,aAAC,CAAC,EACFF,cAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,KAAa,KAAK,CAAC,CAAC,KAAK;kBAChC,IAAI,CAAC,KAAK;qBACT,eAAe,CAAC,KAAK,CAAC;AACtB,qBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,IAAG;AACvB,oBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAErB,oBAAA,OAAO,EAAE,CAAY,EAAE,CAAC,CAAC;AAC3B,iBAAC,CAAC,CAAC;AACL,kBAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACX,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC1B,SAAS,CAAC,OAAO,IAAG;AACnB,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;AAE9B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,aAAC,CAAC,CAAC;AACN,SAAA;;QAGD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE;AACzC,YAAA,gBAAgB,CACd,IAAI,CAAC,MAAM,EACX,MAAM,IAAI,MAAM,CAAC,oBAAoB,EACrC,CAAC,CAAC,EAAE,MAAM,KAAI;AACZ,gBAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;oBAC1B,IAAI,MAAM,CAAC,SAAS,EAAE;wBACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AACxC,qBAAA;oBAED,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBACnF,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAEzF,oBAAA,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAG;AACvD,wBAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;AAC9B,4BAAA,OAAO,KAAK,CAAC;AACd,yBAAA;AAED,wBAAA,OAAO,OAAO,MAAM,CAAC,KAAK,IAAI,QAAQ,IAAI,OAAO,MAAM,CAAC,KAAK,IAAI,QAAQ;8BACrE,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAiC,CAAC;AACnE,8BAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChH,qBAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC,CAAC;AAEvD,oBAAA,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC7B,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACN,SAAA;KACF;;oHA7gBU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAuDtB,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,SAAS,EAGT,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,wBAAwB,4FCvFrC,8zQAmKA,EAAA,MAAA,EAAA,CAAA,46BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,uCAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,kCAAA,EAAA,uBAAA,EAAA,mCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,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,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6IAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,cAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iCAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FDtIa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,mBAGT,uBAAuB,CAAC,MAAM,EAChC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,8zQAAA,EAAA,MAAA,EAAA,CAAA,46BAAA,CAAA,EAAA,CAAA;;;8BA2GlC,QAAQ;;yBApGJ,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAIC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAIC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,eAAe,EAAA,CAAA;sBADrB,KAAK;gBAIC,qBAAqB,EAAA,CAAA;sBAD3B,KAAK;gBAIC,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAIC,mBAAmB,EAAA,CAAA;sBADzB,KAAK;gBAIC,gBAAgB,EAAA,CAAA;sBADtB,KAAK;gBAIC,mBAAmB,EAAA,CAAA;sBADzB,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,mBAAmB,EAAA,CAAA;sBADzB,KAAK;gBAIC,gBAAgB,EAAA,CAAA;sBADtB,KAAK;gBAIC,sBAAsB,EAAA,CAAA;sBAD5B,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,MAAM;gBAIA,UAAU,EAAA,CAAA;sBADhB,MAAM;gBAIA,MAAM,EAAA,CAAA;sBADZ,SAAS;gBAAC,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAI/B,cAAc,EAAA,CAAA;sBADpB,SAAS;uBAAC,wBAAwB,CAAA;gBAI5B,cAAc,EAAA,CAAA;sBADpB,YAAY;gBAAC,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAIzC,cAAc,EAAA,CAAA;sBADpB,YAAY;gBAAC,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAIzC,eAAe,EAAA,CAAA;sBADrB,YAAY;gBAAC,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAI1C,oBAAoB,EAAA,CAAA;sBAD1B,YAAY;gBAAC,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;AEjExD,SAAS,mBAAmB,GAAA;IAC1B,gBAAgB,CACd,cAAc,CAAC,SAA0C,EACzD,SAAS,IAAI,SAAS,CAAC,UAAU,EACjC,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,KAAI;QAC/B,IAAI,SAAS,CAAC,SAAS,EAAE;YACvB,IAAI,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAErC,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,SAAA;AACI,aAAA;AACH,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;AACH,KAAC,CAAC,CAAC;IAEL,gBAAgB,CACd,cAAc,CAAC,SAA0C,EACzD,SAAS,IAAI,SAAS,CAAC,aAAa,EACpC,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,KAAI;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YAEpB,OAAO;AACR,SAAA;QAED,IAAI,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC7B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACxB,SAAS,CAAC,UAAU,EAAE,CAAC;AACxB,SAAA;AAED,QAAA,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAEjC,IAAI,SAAS,CAAC,YAAY,EAAE;AAC1B,YAAA,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,SAAA;AACH,KAAC,CAAC,CAAC;IAEL,gBAAgB,CACd,cAAc,CAAC,SAA0C,EACzD,SAAS,IAAI,SAAS,CAAC,eAAe,EACtC,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,KAAI;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACxB,cAAc,CAAC,KAAK,CAAC,CAAC;YAEtB,OAAO;AACR,SAAA;QAED,IAAI,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC9B,OAAO;AACR,SAAA;AAED,QAAA,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,SAAS,CAAC,YAAY,EAAE;AAC1B,YAAA,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,SAAA;AACH,KAAC,CAAC,CAAC;AACP,CAAC;AAED,mBAAmB,EAAE,CAAC;MA8BT,sBAAsB,CAAA;;oHAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAL/B,sBAAsB;QACtB,iCAAiC;AACjC,QAAA,iBAAiB,aAvBjB,YAAY;QACZ,eAAe;QACf,uBAAuB;QACvB,wBAAwB;QACxB,eAAe;QACf,wBAAwB;QAExB,oBAAoB;AACpB,QAAA,mBAAmB,aAGnB,eAAe;QACf,wBAAwB;QACxB,oBAAoB;QACpB,eAAe;QACf,wBAAwB;QAExB,sBAAsB;QACtB,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAQV,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YA1B/B,YAAY;QACZ,eAAe;QACf,uBAAuB;QACvB,wBAAwB;QACxB,eAAe;QACf,wBAAwB;QAExB,oBAAoB;AACpB,QAAA,mBAAmB,EAGnB,eAAe;QACf,wBAAwB;QACxB,oBAAoB;QACpB,eAAe;QACf,wBAAwB;QAGxB,mBAAmB,CAAA,EAAA,CAAA,CAAA;4FAQV,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA5BlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;wBACf,uBAAuB;wBACvB,wBAAwB;wBACxB,eAAe;wBACf,wBAAwB;wBAExB,oBAAoB;wBACpB,mBAAmB;AACpB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,eAAe;wBACf,wBAAwB;wBACxB,oBAAoB;wBACpB,eAAe;wBACf,wBAAwB;wBAExB,sBAAsB;wBACtB,mBAAmB;AACpB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,sBAAsB;wBACtB,iCAAiC;wBACjC,iBAAiB;AAClB,qBAAA;iBACF,CAAA;;;ACnID;;AAEG;;;;"}