{"version":3,"file":"costimize-mat-select-autocomplete.mjs","sources":["../../../projects/select-autocomplete/src/lib/select-autocomplete.service.ts","../../../projects/select-autocomplete/src/lib/select-autocomplete.component.ts","../../../projects/select-autocomplete/src/lib/select-autocomplete.component.html","../../../projects/select-autocomplete/src/lib/select-autocomplete.module.ts","../../../projects/select-autocomplete/src/lib/DropdownKeyValue.ts","../../../projects/select-autocomplete/src/public_api.ts","../../../projects/select-autocomplete/src/costimize-mat-select-autocomplete.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class SelectAutocompleteService {\r\n\r\n  constructor() { }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  forwardRef,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  OnInit,\r\n  QueryList,\r\n  SimpleChanges,\r\n  ViewChild,\r\n  ViewChildren\r\n} from '@angular/core';\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR, UntypedFormControl} from '@angular/forms';\r\nimport {MatButtonToggleChange, MatButtonToggleGroup} from '@angular/material/button-toggle';\r\nimport {CdkVirtualScrollViewport, ScrollDispatcher} from '@angular/cdk/scrolling';\r\nimport {MatOption, MatOptionSelectionChange} from '@angular/material/core';\r\nimport {distinctUntilChanged, filter} from 'rxjs/operators';\r\nimport {Subscription} from 'rxjs';\r\nimport {DropdownKeyValue} from './DropdownKeyValue';\r\nimport {MatCheckboxChange} from '@angular/material/checkbox';\r\n\r\n@Component({\r\n\r\n  selector: 'mat-select-autocomplete',\r\n  templateUrl: './select-autocomplete.component.html',\r\n  styleUrls: ['./select-autocomplete.component.scss'],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => SelectAutocompleteComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class SelectAutocompleteComponent implements OnInit, ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {\r\n  @Input() selectPlaceholder = 'search...';\r\n  @Input() placeholder: string;\r\n  @Input() options: DropdownKeyValue[] = [];\r\n  @Input() errorMsg = 'Field is required';\r\n  @Input() showErrorMsg = false;\r\n  @Input() selectedOptions;\r\n  @Input() multiple = true;\r\n  @Input() favourites = false;\r\n  @Input() filterButtons: Array<{ name: string, filterCallback: (key: string, value: string) => boolean }> = [];\r\n  @Input() selectAll: string;\r\n  @Input() appearance: 'standard' | 'fill' | 'outline' = 'standard';\r\n  @ViewChild('selectElem') selectElem;\r\n  @ViewChild(MatButtonToggleGroup) toggleGroup: MatButtonToggleGroup;\r\n  @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewPort: CdkVirtualScrollViewport;\r\n  @ViewChildren(MatOption) matOptions: QueryList<MatOption>;\r\n\r\n  filteredOptions: DropdownKeyValue[] = [];\r\n  selectAllChecked = false;\r\n  customSelectAllChecked = false;\r\n  displayString = '';\r\n  formControl: UntypedFormControl = new UntypedFormControl([]);\r\n  selected: string[] | string | null;\r\n  isSelectedFavourite: boolean;\r\n  searchInputFormControl = new UntypedFormControl('');\r\n  searchInputFormControlSubscription: Subscription;\r\n  lastEmittedValue: string[] | string | null | undefined = undefined;\r\n\r\n  constructor(private cd: ChangeDetectorRef, readonly sd: ScrollDispatcher) {\r\n\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.selectAll) {\r\n      this.filterButtons.push({\r\n        name: this.selectAll,\r\n        filterCallback: () => true\r\n      });\r\n    }\r\n\r\n    this.filteredOptions = this.options;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.searchInputFormControlSubscription = this.searchInputFormControl.valueChanges\r\n      .pipe(distinctUntilChanged())\r\n      .subscribe(newValue => {\r\n        this.filterItem(newValue);\r\n      });\r\n\r\n    this.sd\r\n      .scrolled()\r\n      .pipe(filter(scrollable => this.cdkVirtualScrollViewPort === scrollable))\r\n      .subscribe(() => {\r\n        let needUpdate = false;\r\n\r\n        this.matOptions.forEach(option => {\r\n          const selected = this.multiple ? this.selected.includes(option.value) : this.selected === option.value;\r\n\r\n          if (selected && !option.selected) {\r\n            option.select();\r\n            needUpdate = true;\r\n          } else if (!selected && option.selected) {\r\n            option.deselect();\r\n            needUpdate = true;\r\n          }\r\n        });\r\n\r\n        if (needUpdate) {\r\n          this.cd.detectChanges();\r\n        }\r\n      });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.options) {\r\n      this.filteredOptions = changes.options.currentValue;\r\n      this.writeValue(this.selected, true);\r\n    }\r\n  }\r\n\r\n  toggleDropdown() {\r\n    this.selectElem.toggle();\r\n  }\r\n\r\n  toggleSelectAll(event: MatCheckboxChange) {\r\n    this.deselectButtons();\r\n    this.customSelectAllChecked = false;\r\n    if (event.checked) {\r\n      this.selected = this.getFilteredOptionsValues();\r\n    } else {\r\n      this.selected = [];\r\n    }\r\n\r\n    this.patchValue(this.selected);\r\n  }\r\n\r\n  filterItem(value: string) {\r\n    this.filteredOptions = this.options.filter(item => {\r\n      let valueIndex = 0;\r\n      const splitItem = item.display.split(/(?=[A-Z])|(-)|(\\.)|(\\s+)|(_)/).filter(Boolean);\r\n      for (let word of splitItem) {\r\n        let wordIndex = 0;\r\n        word = word.charAt(0).toUpperCase() + word.slice(1);\r\n\r\n        if (value.charAt(0).toUpperCase() === word.charAt(0) && valueIndex === 1) {\r\n          valueIndex = 0;\r\n        }\r\n\r\n        while (wordIndex < word.length) {\r\n          if (valueIndex < value.length && value[valueIndex].toUpperCase() === word[wordIndex]) {\r\n            valueIndex++;\r\n            wordIndex++;\r\n            while (valueIndex < value.length && value[valueIndex].toLowerCase() === word[wordIndex]) {\r\n              valueIndex++;\r\n              wordIndex++;\r\n            }\r\n          } else {\r\n            wordIndex++;\r\n          }\r\n        }\r\n\r\n      }\r\n\r\n      return valueIndex === value.length;\r\n    });\r\n    this.selectAllChecked = !this.customSelectAllChecked\r\n      && this.multiple\r\n      && this.filteredOptions.length > 0\r\n      && !this.filteredOptions.some(item => !this.selected.includes(item.value));\r\n    this.cdkVirtualScrollViewPort.scrollToIndex(1);\r\n    this.cdkVirtualScrollViewPort.checkViewportSize();\r\n  }\r\n\r\n  getFilteredOptionsValues() {\r\n    return this.filteredOptions.map(option => option.value);\r\n  }\r\n\r\n  getDisplayString(): string {\r\n    if (this.customSelectAllChecked) {\r\n      return this.selectAll;\r\n    }\r\n    let displayString = '';\r\n    if (this.selected && this.selected.length) {\r\n      if (this.multiple && this.selected.length === 1) {\r\n        displayString = this.options.find(option => option.value === this.selected[0]).display;\r\n      } else if (this.multiple) {\r\n        displayString = this.selected.length + '/' + this.options.length;\r\n      } else {\r\n        displayString = this.options.find(option => option.value === this.selected).display;\r\n      }\r\n    }\r\n    return displayString;\r\n  }\r\n\r\n  onSelectionChange(change: MatOptionSelectionChange) {\r\n    if (!change.isUserInput) {\r\n      return;\r\n    }\r\n\r\n    const value = change.source.value;\r\n    if (this.multiple) {\r\n      if (change.source.selected) {\r\n        (this.selected as string[]).push(value);\r\n        if (this.selected.length === this.options.length) {\r\n          this.selectAllChecked = true;\r\n        }\r\n      } else {\r\n        const elementIndex = this.selected.indexOf(change.source.value);\r\n        (this.selected as string[]).splice(elementIndex, 1);\r\n        this.selectAllChecked = false;\r\n      }\r\n    } else {\r\n      this.selected = value;\r\n    }\r\n  }\r\n\r\n  public trackByFn = (index, item) => item.value;\r\n\r\n  public changeSelectedValues(clickedButtonEvent: MatButtonToggleChange, filterCallback: (key: string, value: string) => boolean) {\r\n    this.selectedOptions = [];\r\n    this.selectAllChecked = false;\r\n    this.customSelectAllChecked = false;\r\n    if (clickedButtonEvent.source.checked) {\r\n      this.toggleGroup.value = [clickedButtonEvent.source.value];\r\n      this.selectedOptions = this.filteredOptions.filter(option => filterCallback(option.value, option.display));\r\n      if (clickedButtonEvent.value === this.selectAll) {\r\n        this.customSelectAllChecked = true;\r\n        this.selectedOptions = this.options.filter(option => filterCallback(option.value, option.display));\r\n        this.filterItem('');\r\n      }\r\n      this.toggleDropdown();\r\n    }\r\n\r\n    this.selected = this.selectedOptions.map(item => item.value);\r\n    this.patchValue(this.selected);\r\n  }\r\n\r\n  writeValue(selectedElements: string | string[] | null, clearLastEmittedValue: boolean = true): void {\r\n    this.deselectButtons();\r\n    const allElementsValues = this.options.map(it => it.value);\r\n    if (this.multiple && selectedElements) {\r\n      this.customSelectAllChecked = false;\r\n      const filteredElements = (selectedElements as string[]).filter(it => allElementsValues.includes(it));\r\n      this.selected = filteredElements;\r\n      this.selectAllChecked = selectedElements.length === allElementsValues.length;\r\n      this.patchValue(filteredElements);\r\n    } else if (this.multiple && selectedElements == null) {\r\n      if (this.selectAll) {\r\n        this.selectAllChecked = false;\r\n        this.customSelectAllChecked = true;\r\n        setTimeout(() => this.toggleGroup.value = [this.selectAll]);\r\n        this.selected = allElementsValues;\r\n        this.patchValue(allElementsValues);\r\n      } else {\r\n        this.customSelectAllChecked = false;\r\n        this.selected = [];\r\n        this.patchValue([]);\r\n      }\r\n    } else if (\r\n      !this.multiple\r\n      && (selectedElements == null || selectedElements.length === 0 || !allElementsValues.includes(selectedElements as string))\r\n    ) {\r\n      this.customSelectAllChecked = false;\r\n      this.selected = null;\r\n      this.patchValue([]);\r\n    } else {\r\n      this.customSelectAllChecked = false;\r\n      this.selected = selectedElements;\r\n      this.patchValue(selectedElements);\r\n    }\r\n\r\n    this.displayString = this.getDisplayString();\r\n    if (clearLastEmittedValue) {\r\n      this.lastEmittedValue = undefined;\r\n    }\r\n    this.emitValueIfChanged();\r\n    this.reorderOptionsSelectedFirst();\r\n    if(this.favourites)this.reorderOptionsFavouritesFirst()\r\n  }\r\n\r\n  onTouch = () => {\r\n  };\r\n  propagateChange = (_: any) => {\r\n  };\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.propagateChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouch = fn;\r\n  }\r\n\r\n  setDisabledState?(isDisabled: boolean): void {\r\n    if (isDisabled) {\r\n      this.formControl.disable({emitEvent: false});\r\n    } else {\r\n      this.formControl.enable({emitEvent: false});\r\n    }\r\n  }\r\n\r\n  onClickOpen() {\r\n    try {\r\n      document.getElementById('costimize-dropdown-input').focus();\r\n    } catch (error) {\r\n    }\r\n    this.cdkVirtualScrollViewPort.scrollToIndex(0);\r\n    this.cdkVirtualScrollViewPort.checkViewportSize();\r\n  }\r\n\r\n  onClickClose() {\r\n    this.searchInputFormControl.setValue('');\r\n    this.onTouch();\r\n    if (this.customSelectAllChecked) {\r\n      this.displayString = this.getDisplayString();\r\n      this.emitValueIfChanged();\r\n    } else {\r\n      this.writeValue(this.selected, false);\r\n    }\r\n    this.cdkVirtualScrollViewPort.scrollToIndex(0);\r\n    this.cdkVirtualScrollViewPort.checkViewportSize();\r\n  }\r\n\r\n  private emitValueIfChanged() {\r\n    const valueToEmit = this.getValueToPropagate();\r\n    if (this.valueChanged(valueToEmit, this.lastEmittedValue)) {\r\n      this.propagateChange(valueToEmit);\r\n      this.lastEmittedValue = valueToEmit;\r\n    }\r\n  }\r\n\r\n  private deselectButtons() {\r\n    if (this.toggleGroup) {\r\n      this.toggleGroup.value = null;\r\n    }\r\n  }\r\n\r\n  private reorderOptionsFavouritesFirst() {\r\n    const favouriteOptions = [], notFavouriteOptions = [];\r\n    this.options.forEach(option => {\r\n      if (option.favourite) {\r\n        favouriteOptions.push(option);\r\n      } else {\r\n        notFavouriteOptions.push(option);\r\n      }\r\n    });\r\n\r\n    this.options = [...favouriteOptions, ...notFavouriteOptions];\r\n    this.filteredOptions = [...this.options];\r\n  }\r\n\r\n  private reorderOptionsSelectedFirst() {\r\n    const selectedOptions = [], notSelectedOptions = [];\r\n    this.options.forEach(option => {\r\n      if (this.selected && this.optionIsSelected(option, this.selected)) {\r\n        selectedOptions.push(option);\r\n      } else {\r\n        notSelectedOptions.push(option);\r\n      }\r\n    });\r\n\r\n    this.options = [...selectedOptions, ...notSelectedOptions];\r\n    this.filteredOptions = [...this.options];\r\n  }\r\n\r\n  private optionIsSelected(option: DropdownKeyValue, selected: string[] | string) {\r\n    return (this.multiple && (selected as string[]).some(it => it === option.value)) ||\r\n      (!this.multiple && (selected as string) === option.value);\r\n  }\r\n\r\n  private patchValue(newValue: string | string[] | null) {\r\n    if (this.multiple && newValue != null) {\r\n      this.formControl.patchValue([...newValue]);\r\n    } else {\r\n      this.formControl.patchValue(newValue);\r\n      if(this.favourites) {\r\n        this.isSelectedFavourite = this.filteredOptions.find( option => option.value == newValue)?.favourite\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.searchInputFormControlSubscription.unsubscribe();\r\n  }\r\n\r\n  private getValueToPropagate(): string | string[] | null {\r\n    if (this.customSelectAllChecked) {\r\n      return null;\r\n    } else {\r\n      return this.multiple ? [...this.selected] : this.selected;\r\n    }\r\n  }\r\n\r\n  private valueChanged(newValue: string | string[] | null, oldValue: string | string[] | null | undefined): boolean {\r\n    return oldValue === undefined ||\r\n      (!this.multiple && newValue !== oldValue) ||\r\n      (this.multiple && !this.arraysHaveTheSameElements((newValue as string[] | null), (oldValue as string[] | null)));\r\n  }\r\n\r\n  private arraysHaveTheSameElements(array1: string[] | null, array2: string[] | null): boolean {\r\n    if (array1 === array2) { // if they are both null\r\n      return true;\r\n    } else if (array1?.length === array2?.length) {\r\n      const sortedArray2 = [...array2].sort();\r\n      return ![...array1].sort().some((array1Value, index) => array1Value !== sortedArray2[index]);\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n}\r\n","<mat-form-field appearance=\"{{ appearance }}\">\r\n  <mat-label>{{placeholder}}</mat-label>\r\n  <mat-select\r\n    panelClass=\"custom-select-pane\"\r\n    #selectElem\r\n    [formControl]=\"formControl\"\r\n    [multiple]=\"multiple\"\r\n    (openedChange)=\"$event ? onClickOpen() : onClickClose()\"\r\n  >\r\n    <div class=\"box-search\">\r\n      <mat-checkbox\r\n        *ngIf=\"multiple\"\r\n        color=\"primary\"\r\n        class=\"box-select-all\"\r\n        matTooltip=\"Select all listed items\"\r\n        [(ngModel)]=\"selectAllChecked\"\r\n        (change)=\"toggleSelectAll($event)\"\r\n      ></mat-checkbox>\r\n      <input\r\n        id=\"costimize-dropdown-input\"\r\n        type='text'\r\n        [ngClass]=\"{ 'pl-1': !multiple }\"\r\n        [formControl]=\"searchInputFormControl\"\r\n        [placeholder]=\"selectPlaceholder\"\r\n        autocomplete=\"off\"\r\n        (keydown)=\"$event.stopPropagation()\"\r\n      />\r\n      <div\r\n        class=\"box-search-icon\"\r\n        (click)=\"searchInputFormControl.setValue('')\"\r\n      >\r\n        <button mat-icon-button class=\"search-button\">\r\n          <mat-icon class=\"mat-24\" aria-label=\"Search icon\">clear</mat-icon>\r\n        </button>\r\n      </div>\r\n    </div>\r\n    <mat-select-trigger class=\"option-container\">\r\n      <span class=\"ellipsis-text\">{{ displayString }}</span>\r\n      <mat-icon *ngIf=\"favourites && isSelectedFavourite\" class=\"input-icon icon-container fav-icon\">star_border</mat-icon>\r\n    </mat-select-trigger>\r\n    <div *ngIf=\"multiple && filterButtons.length > 0\" class=\"filter-buttons\">\r\n      <mat-button-toggle-group multiple=\"true\" class=\"filter-buttons-group\">\r\n        <mat-button-toggle class=\"filter-button\" *ngFor=\"let button of filterButtons;\"\r\n                           [value]=\"button.name\"\r\n                           (change)=\"changeSelectedValues($event, button.filterCallback)\">{{button.name}}\r\n        </mat-button-toggle>\r\n      </mat-button-toggle-group>\r\n    </div>\r\n    <cdk-virtual-scroll-viewport [itemSize]=\"24\" [style.height.px]=\"240\" class=\"cdk-viewport-format\">\r\n      <mat-option\r\n        *cdkVirtualFor=\"let option of filteredOptions; trackBy: trackByFn\"\r\n        [disabled]=\"customSelectAllChecked\"\r\n        [value]=\"option.value\"\r\n        (onSelectionChange)=\"onSelectionChange($event)\"\r\n      >\r\n        <div class=\"option-container\">\r\n          <span>{{ option.display }}</span>\r\n          <span class=\"icon-container\" *ngIf=\"favourites && option?.favourite\">\r\n            <mat-icon class=\"fav-icon\">star_border</mat-icon>\r\n          </span>\r\n        </div>\r\n      </mat-option>\r\n    </cdk-virtual-scroll-viewport>\r\n  </mat-select>\r\n  <mat-hint style=\"color:red\" *ngIf=\"showErrorMsg\">{{ errorMsg }}</mat-hint>\r\n</mat-form-field>\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {SelectAutocompleteComponent} from './select-autocomplete.component';\r\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\r\nimport {MatCheckboxModule} from '@angular/material/checkbox';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {ScrollingModule} from '@angular/cdk/scrolling';\r\nimport {MatListModule} from '@angular/material/list';\r\n\r\n@NgModule({\r\n  imports: [\r\n    FormsModule,\r\n    CommonModule,\r\n    MatIconModule,\r\n    MatButtonModule,\r\n    MatSelectModule,\r\n    MatCheckboxModule,\r\n    MatFormFieldModule,\r\n    ReactiveFormsModule,\r\n    MatButtonToggleModule,\r\n    MatTooltipModule,\r\n    ScrollingModule,\r\n    MatListModule,\r\n  ],\r\n  declarations: [SelectAutocompleteComponent],\r\n  exports: [SelectAutocompleteComponent]\r\n})\r\nexport class SelectAutocompleteModule {\r\n}\r\n","export class DropdownKeyValue {\r\n  value: string;\r\n  display: string;\r\n  favourite?: boolean;\r\n\r\n  constructor(id: string, name: string, favourite: boolean = false) {\r\n    this.value = id;\r\n    this.display = name;\r\n    this.favourite = favourite;\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of select-autocomplete\r\n */\r\n\r\nexport * from './lib/select-autocomplete.service';\r\nexport * from './lib/select-autocomplete.component';\r\nexport * from './lib/select-autocomplete.module';\r\nexport * from './lib/DropdownKeyValue';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;MAKa,yBAAyB,CAAA;AAEpC,IAAA,WAAA,GAAA,GAAiB;kIAFN,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,uBAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCgCY,2BAA2B,CAAA;IA4BtC,WAAoB,CAAA,EAAqB,EAAW,EAAoB,EAAA;QAApD,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;QAAW,IAAE,CAAA,EAAA,GAAF,EAAE,CAAkB;QA3B/D,IAAiB,CAAA,iBAAA,GAAG,WAAW,CAAC;QAEhC,IAAO,CAAA,OAAA,GAAuB,EAAE,CAAC;QACjC,IAAQ,CAAA,QAAA,GAAG,mBAAmB,CAAC;QAC/B,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAErB,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;QAChB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QACnB,IAAa,CAAA,aAAA,GAAqF,EAAE,CAAC;QAErG,IAAU,CAAA,UAAA,GAAoC,UAAU,CAAC;QAMlE,IAAe,CAAA,eAAA,GAAuB,EAAE,CAAC;QACzC,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QACzB,IAAsB,CAAA,sBAAA,GAAG,KAAK,CAAC;QAC/B,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AACnB,QAAA,IAAA,CAAA,WAAW,GAAuB,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAG7D,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAgB,CAAA,gBAAA,GAAyC,SAAS,CAAC;QAuJ5D,IAAS,CAAA,SAAA,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;QAgE/C,IAAO,CAAA,OAAA,GAAG,MAAK;AACf,SAAC,CAAC;AACF,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI;AAC7B,SAAC,CAAC;KAtND;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACtB,IAAI,EAAE,IAAI,CAAC,SAAS;AACpB,gBAAA,cAAc,EAAE,MAAM,IAAI;AAC3B,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;KACrC;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY;aAC/E,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC5B,SAAS,CAAC,QAAQ,IAAG;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,EAAE;AACJ,aAAA,QAAQ,EAAE;AACV,aAAA,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,wBAAwB,KAAK,UAAU,CAAC,CAAC;aACxE,SAAS,CAAC,MAAK;YACd,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,IAAG;AAC/B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC;AAEvG,gBAAA,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAChC,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChB,UAAU,GAAG,IAAI,CAAC;AACnB,iBAAA;AAAM,qBAAA,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACvC,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAClB,UAAU,GAAG,IAAI,CAAC;AACnB,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;AACzB,aAAA;AACH,SAAC,CAAC,CAAC;KACN;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;YACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACtC,SAAA;KACF;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;KAC1B;AAED,IAAA,eAAe,CAAC,KAAwB,EAAA;QACtC,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;AACjD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAChC;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAG;YAChD,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrF,YAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;gBAC1B,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,gBAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEpD,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE;oBACxE,UAAU,GAAG,CAAC,CAAC;AAChB,iBAAA;AAED,gBAAA,OAAO,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;AAC9B,oBAAA,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;AACpF,wBAAA,UAAU,EAAE,CAAC;AACb,wBAAA,SAAS,EAAE,CAAC;AACZ,wBAAA,OAAO,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;AACvF,4BAAA,UAAU,EAAE,CAAC;AACb,4BAAA,SAAS,EAAE,CAAC;AACb,yBAAA;AACF,qBAAA;AAAM,yBAAA;AACL,wBAAA,SAAS,EAAE,CAAC;AACb,qBAAA;AACF,iBAAA;AAEF,aAAA;AAED,YAAA,OAAO,UAAU,KAAK,KAAK,CAAC,MAAM,CAAC;AACrC,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,sBAAsB;AAC/C,eAAA,IAAI,CAAC,QAAQ;AACb,eAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;eAC/B,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,CAAC;KACnD;IAED,wBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;KACzD;IAED,gBAAgB,GAAA;QACd,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,OAAO,IAAI,CAAC,SAAS,CAAC;AACvB,SAAA;QACD,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACzC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/C,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACxF,aAAA;iBAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxB,gBAAA,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAClE,aAAA;AAAM,iBAAA;gBACL,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;AACrF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,aAAa,CAAC;KACtB;AAED,IAAA,iBAAiB,CAAC,MAAgC,EAAA;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACvB,OAAO;AACR,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AACzB,gBAAA,IAAI,CAAC,QAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAChD,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/D,IAAI,CAAC,QAAqB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AACpD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC/B,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACvB,SAAA;KACF;IAIM,oBAAoB,CAAC,kBAAyC,EAAE,cAAuD,EAAA;AAC5H,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,QAAA,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE;AACrC,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3G,YAAA,IAAI,kBAAkB,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE;AAC/C,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACnG,gBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrB,aAAA;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAChC;AAED,IAAA,UAAU,CAAC,gBAA0C,EAAE,qBAAA,GAAiC,IAAI,EAAA;QAC1F,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,EAAE;AACrC,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,YAAA,MAAM,gBAAgB,GAAI,gBAA6B,CAAC,MAAM,CAAC,EAAE,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACrG,YAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;YACjC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM,CAAC;AAC7E,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,IAAI,IAAI,EAAE;YACpD,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACnC,gBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,gBAAA,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC;AAClC,gBAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACpC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;aAAM,IACL,CAAC,IAAI,CAAC,QAAQ;AACX,gBAAC,gBAAgB,IAAI,IAAI,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,gBAA0B,CAAC,CAAC,EACzH;AACA,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACrB,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC7C,QAAA,IAAI,qBAAqB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,SAAA;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAG,IAAI,CAAC,UAAU;YAAC,IAAI,CAAC,6BAA6B,EAAE,CAAA;KACxD;AAOD,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;AAED,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;KACnB;AAED,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;AAC9C,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;AAC7C,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI;YACF,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7D,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACf,SAAA;AACD,QAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,CAAC;KACnD;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC7C,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3B,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,CAAC;KACnD;IAEO,kBAAkB,GAAA;AACxB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;AACrC,SAAA;KACF;IAEO,eAAe,GAAA;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;AAC/B,SAAA;KACF;IAEO,6BAA6B,GAAA;AACnC,QAAA,MAAM,gBAAgB,GAAG,EAAE,EAAE,mBAAmB,GAAG,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;YAC5B,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,gBAAA,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,aAAA;AAAM,iBAAA;AACL,gBAAA,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClC,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;KAC1C;IAEO,2BAA2B,GAAA;AACjC,QAAA,MAAM,eAAe,GAAG,EAAE,EAAE,kBAAkB,GAAG,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AAC5B,YAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;AACjE,gBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,aAAA;AAAM,iBAAA;AACL,gBAAA,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,kBAAkB,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;KAC1C;IAEO,gBAAgB,CAAC,MAAwB,EAAE,QAA2B,EAAA;AAC5E,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAK,QAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC;aAC5E,CAAC,IAAI,CAAC,QAAQ,IAAK,QAAmB,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;KAC7D;AAEO,IAAA,UAAU,CAAC,QAAkC,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE;YACrC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC5C,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAG,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAE,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,EAAE,SAAS,CAAA;AACrG,aAAA;AACF,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,kCAAkC,CAAC,WAAW,EAAE,CAAC;KACvD;IAEO,mBAAmB,GAAA;QACzB,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3D,SAAA;KACF;IAEO,YAAY,CAAC,QAAkC,EAAE,QAA8C,EAAA;QACrG,OAAO,QAAQ,KAAK,SAAS;aAC1B,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC;AACzC,aAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAE,QAA4B,EAAG,QAA4B,CAAC,CAAC,CAAC;KACpH;IAEO,yBAAyB,CAAC,MAAuB,EAAE,MAAuB,EAAA;AAChF,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA,IAAI,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,MAAM,EAAE;YAC5C,MAAM,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,WAAW,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9F,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;kIAjXU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,EAR3B,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,EAAC,MAAM,2BAA2B,EAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAeU,oBAAoB,EACpB,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,wBAAwB,EACrB,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAS,qECnDzB,u1FAkEA,EAAA,MAAA,EAAA,CAAA,ipGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,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,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,8BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,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,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,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,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,CAAA,EAAA,CAAA,CAAA,EAAA;;4FD9Ba,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAbvC,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAGxB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,EAAC,iCAAiC,EAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,u1FAAA,EAAA,MAAA,EAAA,CAAA,ipGAAA,CAAA,EAAA,CAAA;uIAGQ,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACmB,UAAU,EAAA,CAAA;sBAAlC,SAAS;uBAAC,YAAY,CAAA;gBACU,WAAW,EAAA,CAAA;sBAA3C,SAAS;uBAAC,oBAAoB,CAAA;gBACM,wBAAwB,EAAA,CAAA;sBAA5D,SAAS;uBAAC,wBAAwB,CAAA;gBACV,UAAU,EAAA,CAAA;sBAAlC,YAAY;uBAAC,SAAS,CAAA;;;MEnBZ,wBAAwB,CAAA;kIAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;mIAAxB,wBAAwB,EAAA,YAAA,EAAA,CAHpB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAbxC,WAAW;YACX,YAAY;YACZ,aAAa;YACb,eAAe;YACf,eAAe;YACf,iBAAiB;YACjB,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,gBAAgB;YAChB,eAAe;AACf,YAAA,aAAa,aAGL,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;AAE1B,uBAAA,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,YAhBjC,WAAW;YACX,YAAY;YACZ,aAAa;YACb,eAAe;YACf,eAAe;YACf,iBAAiB;YACjB,kBAAkB;YAClB,mBAAmB;YACnB,qBAAqB;YACrB,gBAAgB;YAChB,eAAe;YACf,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAKJ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlBpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,eAAe;wBACf,iBAAiB;wBACjB,kBAAkB;wBAClB,mBAAmB;wBACnB,qBAAqB;wBACrB,gBAAgB;wBAChB,eAAe;wBACf,aAAa;AACd,qBAAA;oBACD,YAAY,EAAE,CAAC,2BAA2B,CAAC;oBAC3C,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACvC,iBAAA,CAAA;;;MC/BY,gBAAgB,CAAA;AAK3B,IAAA,WAAA,CAAY,EAAU,EAAE,IAAY,EAAE,YAAqB,KAAK,EAAA;AAC9D,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;AACF;;ACVD;;AAEG;;ACFH;;AAEG;;;;"}