{"version":3,"file":"seniorsistemas-angular-components-table.mjs","sources":["../../projects/angular-components/table/src/lib/table/navigation/navigation.directive.ts","../../projects/angular-components/table/src/lib/table/row-toggler/row-toggler.directive.ts","../../projects/angular-components/table/src/lib/table/table-column/models/enum-column-field-type.ts","../../projects/angular-components/table/src/lib/table/table-column/models/enum-badge-colors.ts","../../projects/angular-components/table/src/lib/locale-utils.ts","../../projects/angular-components/table/src/lib/table/table-column/table-columns.component.ts","../../projects/angular-components/table/src/lib/table/table-column/table-columns.component.html","../../projects/angular-components/table/src/lib/table/table-paging/models/export-number-format.enum.ts","../../projects/angular-components/table/src/lib/table/export-utils.ts","../../projects/angular-components/table/src/lib/table/table-column/column-number-format.utils.ts","../../projects/angular-components/table/src/lib/table/table-paging/export-number-format.ts","../../projects/angular-components/table/src/lib/table/table-paging/table-paging.component.ts","../../projects/angular-components/table/src/lib/table/table-paging/table-paging.component.html","../../projects/angular-components/table/src/lib/table/table.module.ts","../../projects/angular-components/table/src/seniorsistemas-angular-components-table.ts"],"sourcesContent":["import { Directive, HostListener } from '@angular/core';\n\n@Directive({ selector: '[sNavigation]', standalone: true })\nexport class NavigationDirective {\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event: KeyboardEvent): void {\n        switch (event.key) {\n            case 'Right': // IE 11\n            case 'ArrowRight':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._focusFirstColFromCurrentRow(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._focusNextSelectableCol(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n            case 'Left': // IE 11\n            case 'ArrowLeft':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._focusLastColFromPrevRow(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._focusPrevSelectableCol(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n            case 'Up': // IE 11\n            case 'ArrowUp':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._setPrevRowFocus(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._setAboveColFocus(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n            case 'Down': // IE 11\n            case 'ArrowDown':\n                if (this._isRow(event.target as HTMLTableElement)) {\n                    this._setNextRowFocus(event.target as HTMLTableRowElement);\n                } else if (this._isCol(event.target as HTMLTableElement)) {\n                    this._setUnderColFocus(event.target as HTMLTableColElement);\n                }\n                event.preventDefault();\n                break;\n        }\n    }\n\n    private _focusLastColFromPrevRow(event: HTMLTableRowElement): void {\n        const prevRow = this._findPrevSelectableRow(event);\n\n        if (prevRow) {\n            (prevRow.lastElementChild as HTMLTableColElement).focus();\n        }\n    }\n\n    private _focusFirstColFromCurrentRow(row: HTMLTableRowElement): void {\n        const firstCol = row.firstElementChild as HTMLTableColElement;\n\n        if (firstCol) {\n            firstCol.focus();\n        }\n    }\n\n    private _focusNextSelectableCol(col: HTMLTableColElement): void {\n        const nextCol = col.nextElementSibling as HTMLTableColElement;\n\n        if (nextCol) {\n            nextCol.focus();\n        } else {\n            const currentRow = col.parentElement as HTMLTableRowElement;\n            return this._setNextRowFocus(currentRow);\n        }\n    }\n\n    private _focusPrevSelectableCol(col: HTMLTableColElement): void {\n        const prevCol = col.previousElementSibling as HTMLTableColElement;\n\n        if (prevCol) {\n            prevCol.focus();\n        } else {\n            const currentRow = col.parentElement as HTMLTableRowElement;\n            return currentRow.focus();\n        }\n    }\n\n    private _setAboveColFocus(currentCol: HTMLTableColElement): void {\n        const cellIndex = (currentCol as any)['cellIndex'];\n        const currentRow = currentCol.parentElement;\n        const prevRow = this._findPrevSelectableRow(currentRow as HTMLTableRowElement);\n\n        if (prevRow) (prevRow.cells[cellIndex] as HTMLTableDataCellElement).focus();\n    }\n\n    private _setUnderColFocus(currentCol: HTMLTableColElement): void {\n        const cellIndex = (currentCol as any)['cellIndex'];\n        const currentRow = currentCol.parentElement;\n        const nextRow = this._findNextSelectableRow(currentRow as HTMLTableRowElement);\n        if (nextRow) (nextRow.cells[cellIndex] as HTMLTableDataCellElement).focus();\n    }\n\n    private _setNextRowFocus(row: HTMLTableRowElement): void {\n        const nextRow = this._findNextSelectableRow(row);\n        if (nextRow) {\n            nextRow.focus();\n        }\n    }\n\n    private _setPrevRowFocus(row: HTMLTableRowElement): void {\n        const prevRow = this._findPrevSelectableRow(row);\n        if (prevRow) {\n            prevRow.focus();\n        }\n    }\n\n    private _isRow(event: HTMLTableElement): boolean {\n        return event.tagName.toLocaleLowerCase() === 'tr';\n    }\n\n    private _isCol(event: HTMLTableElement): boolean {\n        return event.tagName.toLocaleLowerCase() === 'td';\n    }\n\n    private _findPrevSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n        const prevRow = <HTMLTableRowElement>row.previousElementSibling;\n        return prevRow ?? null;\n    }\n\n    private _findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement | null {\n        const nextRow = <HTMLTableRowElement>row.nextElementSibling;\n        return nextRow ?? null;\n    }\n}\n\n","import { Directive, HostListener, Input, inject } from '@angular/core';\r\n\r\nimport { RowToggler, Table } from 'primeng/table';\r\n\r\n@Directive({\r\n    selector: '[sRowToggler]',\r\n    standalone: true,\r\n})\r\nexport class RowTogllerDirective extends RowToggler {\r\n    override readonly dt: Table;\r\n\r\n    @Input({ alias: 'sRowToggler', required: true })\r\n    public override data: any = null;\r\n\r\n    constructor() {\r\n        const dt = inject(Table);\r\n\r\n        super(dt);\r\n        this.dt = dt;\r\n    }\r\n\r\n    @HostListener('keydown', ['$event'])\r\n    public onKeydown(event: KeyboardEvent) {\r\n        if (this.isEnabled()) {\r\n            switch (event.key) {\r\n                case 'Enter':\r\n                    this.dt.toggleRow(this.data, event);\r\n                    event.preventDefault();\r\n                    break;\r\n                default:\r\n                    event.preventDefault();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n}\r\n","export enum EnumColumnFieldType {\n    STRING = 'STRING',\n    NUMBER = 'NUMBER',\n    BOOLEAN = 'BOOLEAN',\n    DATE = 'DATE',\n    CURRENCY = 'CURRENCY',\n    ENUM = 'ENUM',\n    LOOKUP = 'LOOKUP',\n    LINK = 'LINK',\n    TOKENS = 'TOKENS'\n}\n","export enum EnumBadgeColors {\n    RED = 'red',\n    ORANGE = 'orange',\n    YELLOW = 'yellow',\n    GREEN = 'green',\n    BLUE = 'blue',\n    GRAY = 'gray',\n}\n","export const convertToMomentDateFormat = (format: string): string => {\n    // A ordem dos replaces é importante.\n    return format\n        .replace(/\\bd\\b/, \"D\") // day of month (no leading zero)\n        .replace(/\\bdd\\b/, \"DD\") // day of month\n        .replace(/\\bo\\b/, \"DDD\") // day of the year (no leading zero)\n        .replace(/\\boo\\b/, \"DDDD\") // day of the year\n        .replace(/\\bM\\b/, \"MMM\") // month name short\n        .replace(/\\bMM\\b/, \"MMMM\") // month name long\n        .replace(/\\bm\\b/, \"M\") // month of year (no leading)\n        .replace(/\\bmm\\b/, \"MM\") // month of year\n        .replace(/\\by\\b/, \"YY\") // year (two digits)\n        .replace(/\\byy\\b/, \"YYYY\"); // year (four digits)\n}","import {\r\n    Component,\r\n    Input,\r\n    OnChanges,\r\n    SimpleChanges,\r\n    TemplateRef,\r\n    ViewChild,\r\n    ViewContainerRef,\r\n    inject,\r\n} from '@angular/core';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { HostProjectConfigs, HostProjectConfigsInjectionToken } from '@seniorsistemas/angular-components/common';\r\nimport {\r\n    applyLocalizedMask,\r\n    LocaleService,\r\n    LocalizedBignumberOptions,\r\n} from '@seniorsistemas/angular-components/locale';\r\nimport { NumericService } from '@seniorsistemas/angular-components/numeric';\r\nimport { IToken, TokenListComponent } from '@seniorsistemas/angular-components/token-list';\r\nimport { deepClone, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\r\nimport BigNumber from 'bignumber.js';\r\nimport moment from 'moment';\r\n\r\nimport { convertToMomentDateFormat } from '../../locale-utils';\r\nimport { Column, ColumnValues, EnumColumnFieldType, TableColumnLocaleOptions } from './models';\r\nimport { NgStyle, NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { TooltipDirective } from '@seniorsistemas/angular-components/tooltip';\r\nimport { BadgeComponent } from '@seniorsistemas/angular-components/badge';\r\nimport { InfoSignDirective } from '@seniorsistemas/angular-components/info-sign';\r\n\r\n/**\r\n * @description Componente interno que renderiza uma linha de colunas da tabela,\r\n * aplicando formatação localizada (data, número, moeda, token, etc.) para cada coluna.\r\n * Normalmente usado dentro do contexto de uma tabela PrimeNG.\r\n *\r\n * @example\r\n * ```html\r\n * <s-table-columns [columns]=\"colunas\" [rowValue]=\"linha\" />\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n    templateUrl: './table-columns.component.html',\r\n    styleUrls: ['./table-columns.component.scss'],\r\n    selector: 's-table-columns',\r\n    standalone: true,\r\n    imports: [\r\n        NgStyle,\r\n        NgClass,\r\n        TooltipDirective,\r\n        NgTemplateOutlet,\r\n        BadgeComponent,\r\n        InfoSignDirective,\r\n        TokenListComponent,\r\n    ],\r\n})\r\nexport class TableColumnsComponent implements OnChanges {\r\n    private readonly localeService = inject(LocaleService);\r\n    private readonly viewContainerRef = inject(ViewContainerRef);\r\n    private readonly translate = inject(TranslateService);\r\n    private readonly numericService = inject(NumericService);\r\n    private readonly hostProjectConfigs = inject<HostProjectConfigs>(HostProjectConfigsInjectionToken);\r\n\r\n    @ViewChild('columnsTemplate', { static: true })\r\n    public columnsTemplate: TemplateRef<any> | null = null;\r\n\r\n    /** @description Lista de configurações das colunas a serem renderizadas. @default [] */\r\n    @Input()\r\n    public columns: Column[] = [];\r\n\r\n    /** @description Objeto da linha com os valores a serem exibidos nas colunas. Campo obrigatório. */\r\n    @Input()\r\n    public rowValue!: any;\r\n\r\n    /** @description Opções de localização (calendário e número) usadas para formatação. @default null */\r\n    @Input()\r\n    public locale: TableColumnLocaleOptions | null = null;\r\n\r\n    cellsData: (CellData | null)[] = [];\r\n\r\n    formattedColumns: ColumnValues[] = [];\r\n\r\n    constructor() {\r\n        this.locale = {\r\n            calendar: {\r\n                ...this.localeService.getLocaleOptions()?.calendar,\r\n                dateFormat: convertToMomentDateFormat(this.localeService.getLocaleOptions()?.calendar.dateFormat ?? ''),\r\n            },\r\n            number: {\r\n                ...this.localeService.getLocaleOptions()?.number,\r\n                scale: 0,\r\n            },\r\n        };\r\n    }\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        this.validateComponentAttributes(changes);\r\n\r\n        if (changes['columns'] && changes['columns'].currentValue !== changes['columns'].previousValue) {\r\n            this.columns = this.sortColumnsBySequence(changes['columns'].currentValue);\r\n        }\r\n        this.createColumnsTemplate(changes);\r\n    }\r\n\r\n    public isArray(value: any): boolean {\r\n        return Array.isArray(value);\r\n    }\r\n\r\n    public getTokensByColumn(column: ColumnValues) {\r\n        return column.columnValue as IToken[];\r\n    }\r\n\r\n    private getCellData(column: ColumnValues): CellData | null {\r\n        const { columnValue, separator, uninformed } = column;\r\n\r\n        if (typeof columnValue === 'string') {\r\n            const splittedString = columnValue.split(separator);\r\n\r\n            return splittedString.map((string, index) => {\r\n                const isLastIndex = splittedString.length - 1 === index;\r\n\r\n                return {\r\n                    value: string,\r\n                    isUninformed: string === uninformed,\r\n                    separator: !isLastIndex ? separator : null,\r\n                };\r\n            });\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    private validateComponentAttributes(changes: SimpleChanges): void {\r\n        if (!this.columns && !changes['columns']?.currentValue) {\r\n            throw new Error(\"The 'columns' attribute must be informed!\");\r\n        }\r\n        if (!this.rowValue && !changes['rowValue']?.currentValue) {\r\n            throw new Error(\"The 'rowValue' attribute must be informed!\");\r\n        }\r\n    }\r\n\r\n    private createColumnsTemplate(changes: SimpleChanges): void {\r\n        this.viewContainerRef.clear();\r\n\r\n        const columns: Column[] = changes['columns']?.currentValue || this.columns;\r\n\r\n        const rowValue: object = deepClone(changes['rowValue']?.currentValue ?? this.rowValue);\r\n\r\n        const locale: TableColumnLocaleOptions = changes['locale']?.currentValue || this.locale;\r\n\r\n        this.formattedColumns = columns.map((column) => this.getColumnValue(column, rowValue, locale));\r\n\r\n        this.cellsData = this.formattedColumns.map((column) => this.getCellData(column));\r\n\r\n        if (!isNullOrUndefined(this.columnsTemplate)) {\r\n            this.viewContainerRef.createEmbeddedView(this.columnsTemplate);\r\n        }\r\n    }\r\n\r\n    private getColumnSeparator(column: Column) {\r\n        return column.separator ? column.separator : ' - ';\r\n    }\r\n\r\n    private getTranslationPrefix(column: Column) {\r\n        return column.prefix ? column.prefix : `${this.hostProjectConfigs.domain}.${this.hostProjectConfigs.service}.`;\r\n    }\r\n\r\n    private isAttributeValueInvalid(attributeValue: any) {\r\n        return (\r\n            attributeValue === null ||\r\n            attributeValue === undefined ||\r\n            (attributeValue?.options?.numberFormatOptions && isNullOrUndefined(attributeValue?.value)) ||\r\n            (this.isArray(attributeValue) && !attributeValue.length) ||\r\n            (typeof attributeValue === 'string' && attributeValue.trim() === '')\r\n        );\r\n    }\r\n\r\n    private getFormattedColumnValue(\r\n        column: Column,\r\n        columnValue: any[],\r\n        unifiedColumnValues: string,\r\n        uninformedText: string,\r\n        uninformedNumber: number,\r\n    ) {\r\n        if (uninformedNumber === column.attributes.length) {\r\n            return uninformedText;\r\n        }\r\n\r\n        if (column.type === EnumColumnFieldType.TOKENS) {\r\n            return [].concat.apply(\r\n                [],\r\n                columnValue.filter((values) => values !== uninformedText),\r\n            );\r\n        }\r\n\r\n        return unifiedColumnValues;\r\n    }\r\n\r\n    private getAttributeValue(attribute: string, rowValue: any) {\r\n        let attributeValue!: any;\r\n\r\n        attribute.split('/').forEach((value: string) => {\r\n            if (!attributeValue) {\r\n                value.split('.').forEach((val: string, i) => {\r\n                    if (!rowValue) {\r\n                        return;\r\n                    }\r\n\r\n                    if (i === 0) {\r\n                        attributeValue = rowValue[val];\r\n                    } else {\r\n                        if (attributeValue) {\r\n                            attributeValue = attributeValue[val];\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n        });\r\n\r\n        return attributeValue;\r\n    }\r\n\r\n    private getNumberConfigs(column: Column): LocalizedBignumberOptions {\r\n        return {\r\n            ...this.locale?.number,\r\n            scale:\r\n                column.scale !== null && column.scale !== undefined\r\n                    ? this.getColumnScale(column.scale)\r\n                    : this.locale?.number.scale,\r\n            prefix: `${this.locale?.number.currencySymbol} `,\r\n        };\r\n    }\r\n\r\n    private getDateFormat(column: Column, locale: TableColumnLocaleOptions) {\r\n        return column.dateFormat ? column.dateFormat : locale.calendar.dateFormat;\r\n    }\r\n\r\n    private getColumnValue(column: Column, rowValue: any, locale: TableColumnLocaleOptions): ColumnValues {\r\n        const prefix = this.getTranslationPrefix(column);\r\n        const separator = this.getColumnSeparator(column);\r\n        const uninformed = this.translate.instant(prefix + 'empty_label');\r\n        const style = column.style;\r\n\r\n        const columnValue = column.attributes.map((attribute: string | number | symbol) => {\r\n            const attributeValue = this.getAttributeValue(attribute as string, rowValue);\r\n\r\n            if (this.isAttributeValueInvalid(attributeValue)) {\r\n                return uninformed;\r\n            }\r\n\r\n            const numberConfigs = this.getNumberConfigs(column);\r\n\r\n            switch (column.type) {\r\n                case EnumColumnFieldType.ENUM:\r\n                    return this.translate.instant(column.enumPrefix + attributeValue.toString().toLowerCase());\r\n\r\n                case EnumColumnFieldType.CURRENCY: {\r\n                    const numberFormatOptions = attributeValue?.options?.numberFormatOptions\r\n                        ? attributeValue.options.numberFormatOptions\r\n                        : typeof column.numberFormatOptions === 'function'\r\n                          ? column.numberFormatOptions({\r\n                                rowData: rowValue,\r\n                            })\r\n                          : column.numberFormatOptions;\r\n\r\n                    return numberFormatOptions\r\n                        ? this.numericService.instant(attributeValue, {\r\n                              numberFormatOptions,\r\n                          })\r\n                        : applyLocalizedMask(\r\n                              attributeValue,\r\n                              {\r\n                                  decimalSeparator: '.',\r\n                                  thousandsSeparator: ',',\r\n                                  scale: 2,\r\n                                  prefix: '',\r\n                                  suffix: '',\r\n                                  allowNegative: true,\r\n                                  ...numberConfigs,\r\n                              },\r\n                              this.isNumber(attributeValue),\r\n                          );\r\n                }\r\n\r\n                case EnumColumnFieldType.DATE:\r\n                    const dateFormat = this.getDateFormat(column, locale);\r\n                    return moment(attributeValue).format(dateFormat);\r\n\r\n                case EnumColumnFieldType.BOOLEAN:\r\n                    const value = attributeValue ? 'yes' : 'no';\r\n                    return this.translate.instant(prefix + value);\r\n\r\n                case EnumColumnFieldType.NUMBER: {\r\n                    numberConfigs.prefix = '';\r\n\r\n                    const numberFormatOptions = attributeValue?.options?.numberFormatOptions\r\n                        ? attributeValue.options.numberFormatOptions\r\n                        : typeof column.numberFormatOptions === 'function'\r\n                          ? column.numberFormatOptions({\r\n                                rowData: rowValue,\r\n                            })\r\n                          : column.numberFormatOptions;\r\n\r\n                    return numberFormatOptions\r\n                        ? this.numericService.instant(attributeValue, {\r\n                              numberFormatOptions,\r\n                          })\r\n                        : applyLocalizedMask(\r\n                              attributeValue,\r\n                              {\r\n                                  decimalSeparator: '.',\r\n                                  thousandsSeparator: ',',\r\n                                  scale: 2,\r\n                                  prefix: '',\r\n                                  suffix: '',\r\n                                  allowNegative: true,\r\n                                  ...numberConfigs,\r\n                              },\r\n                              this.isNumber(attributeValue),\r\n                          );\r\n                }\r\n                case EnumColumnFieldType.TOKENS:\r\n                    return this.getTokens(attributeValue);\r\n\r\n                default:\r\n                    return attributeValue;\r\n            }\r\n        });\r\n\r\n        const unifiedColumnValues = columnValue.join(separator);\r\n        const uninformedNumber = unifiedColumnValues.split(separator).filter((value) => value === uninformed).length;\r\n        const formattedColumnValue = this.getFormattedColumnValue(\r\n            column,\r\n            columnValue,\r\n            unifiedColumnValues,\r\n            uninformed,\r\n            uninformedNumber,\r\n        );\r\n\r\n        return {\r\n            style,\r\n            columnValue: formattedColumnValue,\r\n            separator,\r\n            uninformed,\r\n            badgeConfigs: column?.badgeConfigs?.find(\r\n                (badgeConfig) => badgeConfig.enumValue === rowValue[column.attributes[0] ?? column.field],\r\n            ),\r\n            color: column.color?.(rowValue),\r\n            type: column.type,\r\n            tooltip: this.getColumnTooltip(column.tooltip),\r\n            infoSign: this.getColumnInfoSign(column.infoSign),\r\n            onLinkClick: column.onLinkClick,\r\n            onColumnClick: column.onColumnClick,\r\n            compact: column.compact,\r\n        };\r\n    }\r\n\r\n    private getColumnScale(scale: number | ((rowValue: any) => number)): number {\r\n        if (typeof scale === 'function') {\r\n            return scale(deepClone(this.rowValue));\r\n        }\r\n        return scale;\r\n    }\r\n\r\n    private getColumnInfoSign(infoSign?: string | ((rowValue: any) => string | null)): string | null {\r\n        if (!isNullOrUndefined(infoSign)) {\r\n            if (typeof infoSign === 'function') {\r\n                return infoSign(deepClone(this.rowValue));\r\n            }\r\n            return infoSign;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private getColumnTooltip(tooltip?: string | ((rowValue: any) => string)): string {\r\n        if (!isNullOrUndefined(tooltip)) {\r\n            if (typeof tooltip === 'function') {\r\n                return tooltip(deepClone(this.rowValue));\r\n            }\r\n            return tooltip;\r\n        }\r\n        return '';\r\n    }\r\n\r\n    private isNumber(value: any): boolean {\r\n        return !new BigNumber(value).isNaN();\r\n    }\r\n\r\n    private getTokens(values: any): IToken[] {\r\n        if (!this.isArray(values)) {\r\n            throw new Error('To use tokens an array must be informed');\r\n        }\r\n\r\n        if (!this.isValidTokenArray(values)) {\r\n            throw new Error(\r\n                'Not a valid token array. Must be a primitive values array or an objects with label attribute array',\r\n            );\r\n        }\r\n\r\n        if (this.isLabelObjectArray(values)) {\r\n            return values;\r\n        }\r\n\r\n        return values\r\n            .filter((value: any) => value !== undefined && value !== null)\r\n            .map((value: any) => {\r\n                const label = typeof value === 'symbol' ? value.toString() : `${value}`;\r\n                return {\r\n                    label,\r\n                };\r\n            });\r\n    }\r\n\r\n    private isValidTokenArray(values: any[]): boolean {\r\n        return this.isPrimitiveValuesArray(values) || this.isLabelObjectArray(values);\r\n    }\r\n\r\n    private isPrimitiveValuesArray(values: any[]): boolean {\r\n        return values.filter((value) => value !== Object(value)).length === values.length;\r\n    }\r\n\r\n    private isLabelObjectArray(values: any[]): boolean {\r\n        return values.filter((value) => value?.label !== null && value?.label !== undefined).length === values.length;\r\n    }\r\n\r\n    private sortColumnsBySequence(columns: Column[]): Column[] {\r\n        return columns.sort((a, b) => (a.sequence ?? 0) - (b.sequence ?? 0));\r\n    }\r\n}\r\n\r\ntype CellData = { value: string; isUninformed: boolean; separator: string | null }[];\r\n","<ng-template #columnsTemplate>\n    @for (column of formattedColumns; track $index; let i = $index) {\n        <td\n            [ngStyle]=\"column.style\"\n            (click)=\"column.onColumnClick ? column.onColumnClick(rowValue) : null\"\n        >\n            @if (column.type !== 'TOKENS' || !isArray(column.columnValue)) {\n                <div [ngClass]=\"{ 'compact-column': column.compact }\">\n                    @if (column.type !== 'LINK') {\n                        <span\n                            [sTooltip]=\"column.tooltip\"\n                            [escape]=\"false\"\n                        >\n                            <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n                        </span>\n                    }\n\n                    @if (column.type === 'LINK') {\n                        @if (cellsData[i]?.[0]?.isUninformed) {\n                            <span class=\"sds-empty-value\">{{ cellsData[i]?.[0]?.value }}</span>\n                        } @else {\n                            <a\n                                [sTooltip]=\"column.tooltip\"\n                                [escape]=\"false\"\n                                (click)=\"column.onLinkClick ? column.onLinkClick(rowValue) : null\"\n                            >\n                                <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n                            </a>\n                        }\n                    }\n\n                    <ng-template #columnValueTemplate>\n                        @for (cellData of cellsData[i]; track $index) {\n                            @if (cellData.isUninformed) {\n                                <span class=\"sds-empty-value\">{{ cellData.value }}</span>\n                            } @else {\n                                @if (column.badgeConfigs) {\n                                    <s-badge\n                                        [sTooltip]=\"column.tooltip\"\n                                        [color]=\"column.badgeConfigs.color\"\n                                        [text]=\"cellData.value\"\n                                    ></s-badge>\n                                } @else {\n                                    <span\n                                        [ngClass]=\"{\n                                            'column-cell-red': column.color === 'Red',\n                                            'column-cell-orange': column.color === 'Orange',\n                                            'column-cell-yellow': column.color === 'Yellow',\n                                            'column-cell-green': column.color === 'Green',\n                                            'column-cell-blue': column.color === 'Blue',\n                                        }\"\n                                        >{{ cellData.value }}</span\n                                    >\n                                }\n                            }\n\n                            @if (cellData.separator) {\n                                <span>{{ cellData.separator }}</span>\n                            }\n                        }\n\n                        @if (!!column.infoSign) {\n                            <span *sInfoSign=\"column.infoSign\"></span>\n                        }\n                    </ng-template>\n                </div>\n            } @else {\n                <s-token-list\n                    [tokens]=\"getTokensByColumn(column)\"\n                    [hidePointerEvents]=\"true\"\n                ></s-token-list>\n\n                @if (!!column.infoSign) {\n                    <span *sInfoSign=\"column.infoSign\"></span>\n                }\n            }\n        </td>\n    }\n</ng-template>\n\n","export enum ExportNumberFormat {\n    Raw = 'raw',\n    Localized = 'localized',\n}\n","import { ElementRef } from '@angular/core';\nimport { Column } from '../table/table-column/models/column.interface';\nimport { EnumColumnFieldType } from '../table/table-column/models/enum-column-field-type';\n\ndeclare global {\n    interface Navigator {\n        msSaveOrOpenBlob(blob: Blob, name: string): void;\n    }\n}\n\nexport abstract class ExportUtils {\n    public static addClass(element: ElementRef, className: string) {\n        element.nativeElement.className = `${element.nativeElement.className} ${className}`;\n    }\n\n    public static removeClass(element: ElementRef, className: string) {\n        if (element.nativeElement.className.includes(className)) {\n            element.nativeElement.className = element.nativeElement.className.replace(className, '');\n        }\n    }\n\n    public static exportCSV(\n        columns: Partial<Column>[] = [],\n        data: any[] = [],\n        csvSeparator: string = ';',\n        documentName: string = 'download',\n    ) {\n        let csv = '\\ufeff';\n\n        columns\n            .filter((column: any) => column.exportable && column.field)\n            .forEach((column: any, i: number) => {\n                csv += `\"${column.header || column.field}\"`;\n\n                if (i < columns.length - 1) csv += csvSeparator;\n            });\n\n        data.forEach((record: any) => {\n            csv += '\\n';\n\n            columns\n                .filter((column: any) => column.exportable && column.field)\n                .forEach((column: any, i: number) => {\n                    let cellData;\n                    if (Array.isArray(column.field)) {\n                        const fieldValues = column.field.map((col: string) =>\n                            this._resolveFieldData(record, col, column),\n                        );\n\n                        cellData = fieldValues\n                            .flat()\n                            .filter((value: string) => value !== null && value !== undefined)\n                            .join(column.separator);\n                    } else {\n                        cellData = this._resolveFieldData(record, column.field, column);\n                    }\n\n                    if (cellData !== null) cellData = String(cellData).replace(/\"/g, '\"\"');\n                    else cellData = '';\n\n                    csv += `\"${cellData}\"`;\n\n                    if (i < columns.length - 1) csv += csvSeparator;\n                });\n        });\n\n        const blob = new Blob([csv], {\n            type: 'text/csv;charset=utf-8;',\n        });\n\n        if (typeof window.navigator.msSaveOrOpenBlob === 'function') {\n            navigator.msSaveOrOpenBlob(blob, documentName + '.csv');\n        } else {\n            const link = document.createElement('a');\n            link.style.display = 'none';\n            document.body.appendChild(link);\n            if (link.download !== undefined) {\n                link.setAttribute('href', URL.createObjectURL(blob));\n                link.setAttribute('download', documentName + '.csv');\n                link.click();\n            } else {\n                csv = 'data:text/csv;charset=utf-8,' + csv;\n                window.open(encodeURI(csv));\n            }\n            document.body.removeChild(link);\n        }\n    }\n\n    private static _resolveFieldData(data: any, field: any, column: Column): string | null {\n        if (!data && !field) {\n            return null;\n        }\n        const needSplitValues = field.includes('.');\n        if (this._isFunction(field)) {\n            return field(data);\n        } else if (!needSplitValues) {\n            return data[field];\n        } else {\n            const fields: string[] = field.split('.');\n            let value = data;\n            for (let i = 0, len = fields.length; i < len; ++i) {\n                if (value === null || value === undefined) {\n                    return null;\n                }\n                value = value[fields[i]];\n            }\n            return ExportUtils._extractData(value, column);\n        }\n    }\n\n    private static _isFunction(obj: any) {\n        return !!(obj && obj.constructor && obj.call && obj.apply);\n    }\n\n    private static _extractData(data: any, column: Column) {\n        const _data = Array.isArray(data) ? data : [data];\n        switch (column.type) {\n            case EnumColumnFieldType.TOKENS:\n                return _data.map((d: any) => ExportUtils._parseToken(d));\n            default:\n                return data;\n        }\n    }\n\n    private static _parseToken(data: any) {\n        if (isObject(data)) {\n            return data['label'];\n        } else {\n            return data;\n        }\n    }\n}\n\nconst isObject = (obj: any) => obj !== null && typeof obj === 'object';\n","import { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\nimport BigNumber from 'bignumber.js';\n\nimport { Column, EnumColumnFieldType } from './models';\n\nexport function isNumericColumnType(type?: EnumColumnFieldType): boolean {\n    return type === EnumColumnFieldType.NUMBER || type === EnumColumnFieldType.CURRENCY;\n}\n\nexport function isNumericValue(value: any): boolean {\n    return !new BigNumber(value).isNaN();\n}\n\nexport function resolveColumnNumberFormatOptions(\n    column: Pick<Column, 'numberFormatOptions'>,\n    rowValue: any,\n    cellNumberFormatOptions?: Intl.NumberFormatOptions,\n): Intl.NumberFormatOptions | undefined {\n    if (cellNumberFormatOptions) {\n        return cellNumberFormatOptions;\n    }\n\n    return typeof column.numberFormatOptions === 'function'\n        ? column.numberFormatOptions({ rowData: rowValue })\n        : column.numberFormatOptions;\n}\n\nexport function resolveColumnScale(column: Pick<Column, 'scale'>, rowValue: any, fallback = 0): number {\n    if (isNullOrUndefined(column.scale)) {\n        return fallback;\n    }\n\n    return typeof column.scale === 'function' ? column.scale(rowValue) : (column.scale as number);\n}\n\n","import { applyLocalizedMask, LocaleOptions } from '@seniorsistemas/angular-components/locale';\nimport { NumericService } from '@seniorsistemas/angular-components/numeric';\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\nimport BigNumber from 'bignumber.js';\n\nimport {\n    isNumericColumnType,\n    isNumericValue,\n    resolveColumnNumberFormatOptions,\n    resolveColumnScale,\n} from '../table-column/column-number-format.utils';\nimport { Column } from '../table-column/models';\n\nexport type RowValueFormatOption = {\n    value?: number;\n    options?: {\n        numberFormatOptions?: Intl.NumberFormatOptions;\n    };\n};\n\ntype RowRecord = { [key: string]: RowValueFormatOption | number | string | null | undefined };\n\nfunction isRowValueFormatOption(cell: unknown): cell is RowValueFormatOption {\n    return !isNullOrUndefined(cell) && typeof cell === 'object' && 'value' in (cell as object);\n}\n\nfunction swapDecimalSeparator(value: number | string, decimalSeparator: string): string {\n    // toFixed() (sem argumento) preserva a precisão total e nunca usa notação exponencial,\n    // ao contrário de toString(), que passa a notação científica para valores muito grandes/pequenos.\n    return new BigNumber(value).toFixed().replace('.', decimalSeparator);\n}\n\n// column.attributes é a fonte preferencial (é o que table-columns.component.ts usa pra formatar\n// a mesma coluna na tela), mas colunas configuradas só com `field` (sem `attributes`) também\n// precisam ser resolvidas — mesmo fallback que mapCustomExport/mapColumnsTranslations já usam.\nfunction resolveColumnAttributes(column: Partial<Column>): string[] {\n    if (column.attributes?.length) {\n        return column.attributes as string[];\n    }\n\n    const field = column.field as unknown as string | string[] | undefined;\n\n    if (isNullOrUndefined(field)) {\n        return [];\n    }\n\n    return Array.isArray(field) ? field : [field];\n}\n\nexport function mapExportValuesRaw(columns: Partial<Column>[], tableData: RowRecord[]): RowRecord[] {\n    const numericColumns = columns.filter((column) => isNumericColumnType(column.type));\n\n    if (!numericColumns.length) {\n        return tableData;\n    }\n\n    return tableData.map((rowData) => {\n        const newRow = { ...rowData };\n\n        for (const column of numericColumns) {\n            for (const attribute of resolveColumnAttributes(column)) {\n                const cell = newRow[attribute];\n\n                if (isRowValueFormatOption(cell)) {\n                    newRow[attribute] = cell.value ?? null;\n                }\n            }\n        }\n\n        return newRow;\n    });\n}\n\nexport function mapExportValuesLocalized(\n    columns: Partial<Column>[],\n    tableData: RowRecord[],\n    numericService: Pick<NumericService, 'instant'>,\n    localeOptions: LocaleOptions | undefined,\n): RowRecord[] {\n    const numericColumns = columns.filter((column) => isNumericColumnType(column.type));\n\n    if (!numericColumns.length) {\n        return tableData;\n    }\n\n    return tableData.map((rowData) => {\n        const newRow = { ...rowData };\n\n        for (const column of numericColumns) {\n            for (const attribute of resolveColumnAttributes(column)) {\n                const cell = newRow[attribute];\n\n                if (isNullOrUndefined(cell)) {\n                    continue;\n                }\n\n                const isRichValue = isRowValueFormatOption(cell);\n                const rawValue = isRichValue ? cell.value : cell;\n\n                if (isNullOrUndefined(rawValue)) {\n                    // Rich-value com value ausente representa um número \"não informado\" — desembrulha\n                    // pra null em vez de deixar o objeto { value, options } intocado (viraria\n                    // \"[object Object]\" no CSV), igual ao que mapExportValuesRaw já faz.\n                    newRow[attribute] = null;\n                    continue;\n                }\n\n                const cellNumberFormatOptions = isRichValue ? cell.options?.numberFormatOptions : undefined;\n                const numberFormatOptions = resolveColumnNumberFormatOptions(column, rowData, cellNumberFormatOptions);\n\n                if (numberFormatOptions) {\n                    const valueToFormat =\n                        numberFormatOptions.style === 'percent'\n                            ? new BigNumber(rawValue as number).times(100).toNumber()\n                            : rawValue;\n\n                    newRow[attribute] = numericService.instant(valueToFormat as number | string, {\n                        locale: localeOptions?.locale,\n                        numberFormatOptions: {\n                            ...numberFormatOptions,\n                            style: 'decimal',\n                            useGrouping: false,\n                        },\n                    });\n                    continue;\n                }\n\n                const decimalSeparator = localeOptions?.number.decimalSeparator ?? ',';\n\n                if (isNullOrUndefined(column.scale)) {\n                    // Sem scale configurado, não há uma quantidade de casas decimais \"correta\" a impor:\n                    // só troca o separador, preservando a precisão original do dado (evita perda de dados no export).\n                    newRow[attribute] = isNumericValue(rawValue)\n                        ? swapDecimalSeparator(rawValue as number | string, decimalSeparator)\n                        : rawValue;\n                    continue;\n                }\n\n                newRow[attribute] = applyLocalizedMask(\n                    rawValue,\n                    {\n                        decimalSeparator,\n                        thousandsSeparator: '',\n                        scale: resolveColumnScale(column, rowData),\n                        prefix: '',\n                        suffix: '',\n                        allowNegative: true,\n                    },\n                    isNumericValue(rawValue),\n                );\n            }\n        }\n\n        return newRow;\n    });\n}\n","import { Component, Input, OnChanges, SimpleChanges, inject, input } from '@angular/core';\r\n\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { HostProjectConfigs, HostProjectConfigsInjectionToken } from '@seniorsistemas/angular-components/common';\r\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\r\nimport { NumericService } from '@seniorsistemas/angular-components/numeric';\r\nimport { TieredMenuItemData } from '@seniorsistemas/angular-components/tiered-menu';\r\nimport { deepClone } from '@seniorsistemas/angular-components/utils';\r\nimport { Table } from 'primeng/table';\r\n\r\nimport { ExportUtils } from '../export-utils';\r\nimport { Column } from '../table-column/models';\r\nimport { mapExportValuesLocalized, mapExportValuesRaw } from './export-number-format';\r\nimport { CustomAction, ExportNumberFormat } from './models';\r\nimport { ButtonComponent } from '@seniorsistemas/angular-components/button';\r\n\r\n@Component({\r\n    templateUrl: './table-paging.component.html',\r\n    styleUrls: ['./table-paging.component.scss'],\r\n    selector: 's-table-paging',\r\n    standalone: true,\r\n    imports: [ButtonComponent],\r\n})\r\nexport class TablePagingComponent implements OnChanges {\r\n    private readonly translate = inject(TranslateService);\r\n    private readonly hostProjectConfigs = inject<HostProjectConfigs>(HostProjectConfigsInjectionToken);\r\n\r\n    @Input()\r\n    public totalRecords!: number;\r\n\r\n    @Input()\r\n    public exportFileName?: string;\r\n\r\n    @Input()\r\n    public table!: Table;\r\n\r\n    @Input()\r\n    public exportable = true;\r\n\r\n    @Input()\r\n    public enableExportSelectedRecords = true;\r\n\r\n    @Input()\r\n    public customActions?: CustomAction[];\r\n\r\n    @Input()\r\n    public loadAllRecords?: () => Promise<any[]>;\r\n\r\n    @Input()\r\n    public loadCurrentPageRecords?: () => any[];\r\n\r\n    @Input()\r\n    public loadSelectedRecords?: () => any[];\r\n\r\n    public exportNumberFormat = input<ExportNumberFormat>();\r\n\r\n    public totalRecordsText = '';\r\n\r\n    private readonly localeService = inject(LocaleService);\r\n    private readonly numericService = inject(NumericService);\r\n\r\n    ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['totalRecords']?.currentValue) {\r\n            this.totalRecordsText = this.translate.instant(`${this.getTranslatePrefix()}total_records`, {\r\n                value: changes['totalRecords'].currentValue,\r\n            });\r\n        }\r\n    }\r\n\r\n    private getTranslatePrefix() {\r\n        return `${this.hostProjectConfigs.domain}.${this.hostProjectConfigs.service}.`;\r\n    }\r\n\r\n    public getTooltipText() {\r\n        return this.translate.instant(`${this.getTranslatePrefix()}export_to_csv`);\r\n    }\r\n\r\n    public getActions(): TieredMenuItemData[] {\r\n        const actions: TieredMenuItemData[] = [\r\n            this.buildScopeAction('exportCurrentPage', `${this.getTranslatePrefix()}export_current_page`, (format) =>\r\n                this.exportCurrentPage(format),\r\n            ),\r\n        ];\r\n\r\n        if (this.enableExportSelectedRecords) {\r\n            actions.push(\r\n                this.buildScopeAction(\r\n                    'exportSelected',\r\n                    `${this.getTranslatePrefix()}export_selected_records`,\r\n                    (format) => this.exportSelectedRecords(format),\r\n                ),\r\n            );\r\n        }\r\n\r\n        if (this.loadAllRecords) {\r\n            actions.push(\r\n                this.buildScopeAction('exportAll', `${this.getTranslatePrefix()}export_all_records`, (format) =>\r\n                    this.exportAllRecords(format),\r\n                ),\r\n            );\r\n        }\r\n\r\n        if (this.customActions?.length) {\r\n            const customMenus = this.customActions.map((p, $index) => ({\r\n                dataKey: `customAction_${$index}`,\r\n                label: p.label,\r\n                command: p.command,\r\n            }));\r\n            actions.push(...customMenus);\r\n        }\r\n\r\n        return actions;\r\n    }\r\n\r\n    private buildScopeAction(\r\n        dataKey: string,\r\n        label: string,\r\n        run: (format: ExportNumberFormat) => void,\r\n    ): TieredMenuItemData {\r\n        const fixedFormat = this.exportNumberFormat();\r\n        if (fixedFormat) {\r\n            return {\r\n                dataKey,\r\n                label: this.translate.instant(label),\r\n                command: () => run(fixedFormat),\r\n            };\r\n        }\r\n\r\n        return {\r\n            dataKey,\r\n            label: this.translate.instant(label),\r\n            submenu: [\r\n                {\r\n                    dataKey: `${dataKey}_raw`,\r\n                    label: this.translate.instant('platform.angular_components.export_raw_data'),\r\n                    command: () => run(ExportNumberFormat.Raw),\r\n                },\r\n                {\r\n                    dataKey: `${dataKey}_localized`,\r\n                    label: this.translate.instant('platform.angular_components.export_localized_data'),\r\n                    command: () => run(ExportNumberFormat.Localized),\r\n                },\r\n            ],\r\n        };\r\n    }\r\n\r\n    private validateComponent() {\r\n        if (!this.table) {\r\n            throw new Error('Table component not defined');\r\n        }\r\n    }\r\n\r\n    public getColumnsToExport() {\r\n        return [...(this.table.columns ?? [])].map((column) => {\r\n            const exportColumn = {\r\n                ...column,\r\n                header: column.header,\r\n                exportable: true,\r\n                field: column.field,\r\n                separator: column.separator ?? ' - ',\r\n                enumPrefix: column.enumPrefix,\r\n                customExport: column.customExport,\r\n            };\r\n\r\n            if (column.exportable === false) {\r\n                exportColumn.exportable = false;\r\n            }\r\n\r\n            if (column.attributes && column.attributes.length) {\r\n                if (column.attributes.length === 1) {\r\n                    exportColumn.field = column.attributes[0];\r\n                } else {\r\n                    exportColumn.field = column.attributes;\r\n                }\r\n            }\r\n\r\n            return exportColumn;\r\n        });\r\n    }\r\n\r\n    private getCurrentPageRowsToExport(columns: any[], format: ExportNumberFormat) {\r\n        let tableData = deepClone(this.table.value);\r\n\r\n        if (this.loadCurrentPageRecords) {\r\n            tableData = this.loadCurrentPageRecords();\r\n        }\r\n\r\n        tableData = this.mapCustomExport(columns, tableData);\r\n        tableData = this.mapNumberFormat(columns, tableData, format);\r\n        return this.mapColumnsTranslations(columns, tableData);\r\n    }\r\n\r\n    private getSelectedRowsToExport(columns: any[], format: ExportNumberFormat) {\r\n        let tableData = deepClone(this.table.selection);\r\n        if (this.loadSelectedRecords) {\r\n            tableData = this.loadSelectedRecords();\r\n        }\r\n\r\n        tableData = this.mapCustomExport(columns, tableData);\r\n        tableData = this.mapNumberFormat(columns, tableData, format);\r\n        return this.mapColumnsTranslations(columns, tableData);\r\n    }\r\n\r\n    private mapNumberFormat(columns: Partial<Column>[], tableData: any[], format: ExportNumberFormat) {\r\n        return format === ExportNumberFormat.Raw\r\n            ? mapExportValuesRaw(columns, tableData)\r\n            : mapExportValuesLocalized(columns, tableData, this.numericService, this.localeService.getLocaleOptions());\r\n    }\r\n\r\n    private getPropertyValue(obj: any, path: string) {\r\n        return path\r\n            .split('.')\r\n            .reduce((result: any, prop: any) => (result[prop] === undefined ? undefined : result[prop]), obj);\r\n    }\r\n\r\n    private setPropertyValue(obj: any, path: string, value: any) {\r\n        this.recursionSetValue(obj, path.split('.'), value);\r\n    }\r\n\r\n    private recursionSetValue(obj: any, keysList: string[], value: any): any {\r\n        const key = keysList[0];\r\n        if (keysList.length === 1) {\r\n            obj[key] = value;\r\n            return obj;\r\n        }\r\n        obj[key] = this.recursionSetValue(obj?.[key] || {}, keysList.slice(1), value);\r\n        return obj;\r\n    }\r\n\r\n    public mapColumnsTranslations(columns: any[], rows: any[]) {\r\n        const enumColumns = columns.filter((p) => p.enumPrefix);\r\n        if (!enumColumns.length) {\r\n            return rows;\r\n        }\r\n\r\n        return [...rows].map((row) => {\r\n            const newRow = { ...row };\r\n            enumColumns.forEach((column) => {\r\n                const fields = !Array.isArray(column.field) ? [column.field] : column.field;\r\n                fields.forEach((fieldName: string) => {\r\n                    const columnData = this.getPropertyValue(row, fieldName);\r\n                    if (columnData === null || columnData === undefined) {\r\n                        return;\r\n                    }\r\n\r\n                    const newValue = this.translateValue(column, columnData);\r\n                    this.setPropertyValue(newRow, fieldName, newValue);\r\n                });\r\n            });\r\n\r\n            return newRow;\r\n        });\r\n    }\r\n\r\n    public mapCustomExport(columns: any[], rows: any[]) {\r\n        const customColumns = columns.filter((p) => p.customExport);\r\n        if (!customColumns.length) {\r\n            return rows;\r\n        }\r\n\r\n        return [...rows].map((row) => {\r\n            const newRow = { ...row };\r\n            customColumns.forEach((column) => {\r\n                const fields = !Array.isArray(column.field) ? [column.field] : column.field;\r\n                fields.forEach((fieldName: string) => {\r\n                    const columnData = this.getPropertyValue(row, fieldName);\r\n                    if (columnData === null || columnData === undefined) {\r\n                        return;\r\n                    }\r\n                    const newValue = column.customExport(columnData);\r\n                    this.setPropertyValue(newRow, fieldName, newValue);\r\n                });\r\n            });\r\n\r\n            return newRow;\r\n        });\r\n    }\r\n\r\n    private translateValue(column: any, columnData: any) {\r\n        // Default usage: ENUM_VALUE -> domain.service.enum_value\r\n        const enumValue = columnData.toString().toLowerCase();\r\n        let translationKey = column.enumPrefix + enumValue;\r\n        let translatedValue = this.translate.instant(translationKey);\r\n\r\n        // Custom usage 1: V9 -> domain.service.v_9\r\n        if (translationKey === translatedValue && enumValue.length > 1) {\r\n            translationKey = `${column.enumPrefix}${enumValue.substring(0, 1)}_${enumValue.substr(1)}`;\r\n            translatedValue = this.translate.instant(translationKey);\r\n        }\r\n\r\n        // Custom usage 2: EnumValue -> domain.service.enum_value\r\n        if (translationKey === translatedValue) {\r\n            const enumKey = this.convertToSnakeCase(columnData.toString());\r\n            translationKey = `${column.enumPrefix}${enumKey}`;\r\n            translatedValue = this.translate.instant(translationKey);\r\n        }\r\n\r\n        return translatedValue;\r\n    }\r\n\r\n    private convertToSnakeCase(str: string) {\r\n        return str.replace(/([A-Z])/g, (_match, group) => `_${group.toLowerCase()}`).replace(/^_/, '');\r\n    }\r\n\r\n    private getExportFileName() {\r\n        const lang = this.translate.currentLang ?? 'pt-BR';\r\n        const date = new Date();\r\n\r\n        const fileName = this.exportFileName ?? 'download';\r\n        const formattedDate = date.toLocaleDateString(lang).replace('_', '-');\r\n        const formattedTime = date.toLocaleTimeString(lang).replace(' ', '-');\r\n\r\n        return `${fileName}_${formattedDate}_${formattedTime}`;\r\n    }\r\n\r\n    public exportCurrentPage(format: ExportNumberFormat = ExportNumberFormat.Localized) {\r\n        this.validateComponent();\r\n        const columns = this.getColumnsToExport();\r\n        const dataToExport = this.getCurrentPageRowsToExport(columns, format);\r\n        ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());\r\n    }\r\n\r\n    public exportSelectedRecords(format: ExportNumberFormat = ExportNumberFormat.Localized) {\r\n        this.validateComponent();\r\n        const columns = this.getColumnsToExport();\r\n        const dataToExport = this.getSelectedRowsToExport(columns, format);\r\n        ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());\r\n    }\r\n\r\n    public async exportAllRecords(format: ExportNumberFormat = ExportNumberFormat.Localized) {\r\n        this.validateComponent();\r\n\r\n        if (!this.loadAllRecords) {\r\n            return;\r\n        }\r\n        let serverData = await this.loadAllRecords();\r\n\r\n        const columns = this.getColumnsToExport();\r\n\r\n        serverData = this.mapCustomExport(columns, serverData);\r\n\r\n        serverData = this.mapNumberFormat(columns, serverData, format);\r\n\r\n        const dataToExport = this.mapColumnsTranslations(columns, serverData);\r\n\r\n        ExportUtils.exportCSV(columns, dataToExport, undefined, this.getExportFileName());\r\n    }\r\n}\r\n","<div class=\"paging-container\">\n    <span class=\"total-records\">\n        {{ totalRecordsText }}\n    </span>\n    @if (exportable) {\n        <s-button\n            class=\"export-button\"\n            priority=\"default\"\n            iconClass=\"fa fa-fw fa-file-export\"\n            [disabled]=\"false\"\n            [auxiliary]=\"true\"\n            [tooltip]=\"getTooltipText()\"\n            [menuOptions]=\"getActions()\"\n        >\n        </s-button>\n    }\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { NavigationDirective } from './navigation/navigation.directive';\r\nimport { RowTogllerDirective } from './row-toggler/row-toggler.directive';\r\nimport { TableColumnsComponent } from './table-column/table-columns.component';\r\nimport { TablePagingComponent } from './table-paging/table-paging.component';\r\n\r\n@NgModule({\r\n    imports: [NavigationDirective, RowTogllerDirective, TableColumnsComponent, TablePagingComponent],\r\n    exports: [RowTogllerDirective, TableColumnsComponent, TablePagingComponent, NavigationDirective],\r\n})\r\nexport class TableModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;MAGa,mBAAmB,CAAA;AAErB,IAAA,SAAS,CAAC,KAAoB,EAAA;AACjC,QAAA,QAAQ,KAAK,CAAC,GAAG;YACb,KAAK,OAAO,CAAC;AACb,YAAA,KAAK,YAAY;gBACb,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AAC/C,oBAAA,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBAC1E;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AACtD,oBAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBACrE;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACV,KAAK,MAAM,CAAC;AACZ,YAAA,KAAK,WAAW;gBACZ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AAC/C,oBAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBACtE;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AACtD,oBAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBACrE;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACV,KAAK,IAAI,CAAC;AACV,YAAA,KAAK,SAAS;gBACV,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AAC/C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBAC9D;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AACtD,oBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBAC/D;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;YACV,KAAK,MAAM,CAAC;AACZ,YAAA,KAAK,WAAW;gBACZ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AAC/C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBAC9D;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAA0B,CAAC,EAAE;AACtD,oBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAA6B,CAAC,CAAC;iBAC/D;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,MAAM;SACb;KACJ;AAEO,IAAA,wBAAwB,CAAC,KAA0B,EAAA;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,OAAO,EAAE;AACR,YAAA,OAAO,CAAC,gBAAwC,CAAC,KAAK,EAAE,CAAC;SAC7D;KACJ;AAEO,IAAA,4BAA4B,CAAC,GAAwB,EAAA;AACzD,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAwC,CAAC;QAE9D,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,KAAK,EAAE,CAAC;SACpB;KACJ;AAEO,IAAA,uBAAuB,CAAC,GAAwB,EAAA;AACpD,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,kBAAyC,CAAC;QAE9D,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;SACnB;aAAM;AACH,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,aAAoC,CAAC;AAC5D,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;SAC5C;KACJ;AAEO,IAAA,uBAAuB,CAAC,GAAwB,EAAA;AACpD,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,sBAA6C,CAAC;QAElE,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;SACnB;aAAM;AACH,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,aAAoC,CAAC;AAC5D,YAAA,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC;SAC7B;KACJ;AAEO,IAAA,iBAAiB,CAAC,UAA+B,EAAA;AACrD,QAAA,MAAM,SAAS,GAAI,UAAkB,CAAC,WAAW,CAAC,CAAC;AACnD,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAiC,CAAC,CAAC;AAE/E,QAAA,IAAI,OAAO;YAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAA8B,CAAC,KAAK,EAAE,CAAC;KAC/E;AAEO,IAAA,iBAAiB,CAAC,UAA+B,EAAA;AACrD,QAAA,MAAM,SAAS,GAAI,UAAkB,CAAC,WAAW,CAAC,CAAC;AACnD,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAiC,CAAC,CAAC;AAC/E,QAAA,IAAI,OAAO;YAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAA8B,CAAC,KAAK,EAAE,CAAC;KAC/E;AAEO,IAAA,gBAAgB,CAAC,GAAwB,EAAA;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;SACnB;KACJ;AAEO,IAAA,gBAAgB,CAAC,GAAwB,EAAA;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;SACnB;KACJ;AAEO,IAAA,MAAM,CAAC,KAAuB,EAAA;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,IAAI,CAAC;KACrD;AAEO,IAAA,MAAM,CAAC,KAAuB,EAAA;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,IAAI,CAAC;KACrD;AAEO,IAAA,sBAAsB,CAAC,GAAwB,EAAA;AACnD,QAAA,MAAM,OAAO,GAAwB,GAAG,CAAC,sBAAsB,CAAC;QAChE,OAAO,OAAO,IAAI,IAAI,CAAC;KAC1B;AAEO,IAAA,sBAAsB,CAAC,GAAwB,EAAA;AACnD,QAAA,MAAM,OAAO,GAAwB,GAAG,CAAC,kBAAkB,CAAC;QAC5D,OAAO,OAAO,IAAI,IAAI,CAAC;KAC1B;wGA9HQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;8BAG/C,SAAS,EAAA,CAAA;sBADf,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ACIjC,MAAO,mBAAoB,SAAQ,UAAU,CAAA;AAC7B,IAAA,EAAE,CAAQ;IAGZ,IAAI,GAAQ,IAAI,CAAC;AAEjC,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,KAAK,CAAC,EAAE,CAAC,CAAC;AACV,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB;AAGM,IAAA,SAAS,CAAC,KAAoB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAClB,YAAA,QAAQ,KAAK,CAAC,GAAG;AACb,gBAAA,KAAK,OAAO;oBACR,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACpC,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;AACV,gBAAA;oBACI,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;aACb;SACJ;KACJ;wGA1BQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;wDAKmB,IAAI,EAAA,CAAA;sBADnB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAWxC,SAAS,EAAA,CAAA;sBADf,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ICrB3B,oBAUX;AAVD,CAAA,UAAY,mBAAmB,EAAA;AAC3B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACrB,CAAC,EAVW,mBAAmB,KAAnB,mBAAmB,GAU9B,EAAA,CAAA,CAAA;;ICVW,gBAOX;AAPD,CAAA,UAAY,eAAe,EAAA;AACvB,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACjB,CAAC,EAPW,eAAe,KAAf,eAAe,GAO1B,EAAA,CAAA,CAAA;;ACPM,MAAM,yBAAyB,GAAG,CAAC,MAAc,KAAY;;AAEhE,IAAA,OAAO,MAAM;AACR,SAAA,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AACrB,SAAA,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACvB,SAAA,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AACvB,SAAA,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AACzB,SAAA,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AACvB,SAAA,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AACzB,SAAA,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AACrB,SAAA,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;AACvB,SAAA,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;AACtB,SAAA,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;;ACkBD;;;;;;;;;;;AAWG;MAgBU,qBAAqB,CAAA;AACb,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACrC,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACxC,IAAA,kBAAkB,GAAG,MAAM,CAAqB,gCAAgC,CAAC,CAAC;IAG5F,eAAe,GAA4B,IAAI,CAAC;;IAIhD,OAAO,GAAa,EAAE,CAAC;;AAIvB,IAAA,QAAQ,CAAO;;IAIf,MAAM,GAAoC,IAAI,CAAC;IAEtD,SAAS,GAAwB,EAAE,CAAC;IAEpC,gBAAgB,GAAmB,EAAE,CAAC;AAEtC,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,MAAM,GAAG;AACV,YAAA,QAAQ,EAAE;AACN,gBAAA,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,QAAQ;AAClD,gBAAA,UAAU,EAAE,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;AAC1G,aAAA;AACD,YAAA,MAAM,EAAE;AACJ,gBAAA,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,MAAM;AAChD,gBAAA,KAAK,EAAE,CAAC;AACX,aAAA;SACJ,CAAC;KACL;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;AAE1C,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE;AAC5F,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC;SAC9E;AACD,QAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;KACvC;AAEM,IAAA,OAAO,CAAC,KAAU,EAAA;AACrB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC/B;AAEM,IAAA,iBAAiB,CAAC,MAAoB,EAAA;QACzC,OAAO,MAAM,CAAC,WAAuB,CAAC;KACzC;AAEO,IAAA,WAAW,CAAC,MAAoB,EAAA;QACpC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;AAEtD,QAAA,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;YACjC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAEpD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;gBACxC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC;gBAExD,OAAO;AACH,oBAAA,KAAK,EAAE,MAAM;oBACb,YAAY,EAAE,MAAM,KAAK,UAAU;oBACnC,SAAS,EAAE,CAAC,WAAW,GAAG,SAAS,GAAG,IAAI;iBAC7C,CAAC;AACN,aAAC,CAAC,CAAC;SACN;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAEO,IAAA,2BAA2B,CAAC,OAAsB,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE;AACpD,YAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAChE;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE;AACtD,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SACjE;KACJ;AAEO,IAAA,qBAAqB,CAAC,OAAsB,EAAA;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAE9B,QAAA,MAAM,OAAO,GAAa,OAAO,CAAC,SAAS,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC;AAE3E,QAAA,MAAM,QAAQ,GAAW,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEvF,QAAA,MAAM,MAAM,GAA6B,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC;QAExF,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAE/F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YAC1C,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAClE;KACJ;AAEO,IAAA,kBAAkB,CAAC,MAAc,EAAA;AACrC,QAAA,OAAO,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;KACtD;AAEO,IAAA,oBAAoB,CAAC,MAAc,EAAA;QACvC,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAA,CAAA,CAAG,CAAC;KAClH;AAEO,IAAA,uBAAuB,CAAC,cAAmB,EAAA;QAC/C,QACI,cAAc,KAAK,IAAI;AACvB,YAAA,cAAc,KAAK,SAAS;AAC5B,aAAC,cAAc,EAAE,OAAO,EAAE,mBAAmB,IAAI,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;aACzF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACxD,aAAC,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EACtE;KACL;IAEO,uBAAuB,CAC3B,MAAc,EACd,WAAkB,EAClB,mBAA2B,EAC3B,cAAsB,EACtB,gBAAwB,EAAA;QAExB,IAAI,gBAAgB,KAAK,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE;AAC/C,YAAA,OAAO,cAAc,CAAC;SACzB;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC,MAAM,EAAE;YAC5C,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAClB,EAAE,EACF,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,cAAc,CAAC,CAC5D,CAAC;SACL;AAED,QAAA,OAAO,mBAAmB,CAAC;KAC9B;IAEO,iBAAiB,CAAC,SAAiB,EAAE,QAAa,EAAA;AACtD,QAAA,IAAI,cAAoB,CAAC;QAEzB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,KAAa,KAAI;YAC3C,IAAI,CAAC,cAAc,EAAE;AACjB,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,CAAC,KAAI;oBACxC,IAAI,CAAC,QAAQ,EAAE;wBACX,OAAO;qBACV;AAED,oBAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,wBAAA,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;qBAClC;yBAAM;wBACH,IAAI,cAAc,EAAE;AAChB,4BAAA,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;yBACxC;qBACJ;AACL,iBAAC,CAAC,CAAC;aACN;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,cAAc,CAAC;KACzB;AAEO,IAAA,gBAAgB,CAAC,MAAc,EAAA;QACnC,OAAO;AACH,YAAA,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM;YACtB,KAAK,EACD,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;kBAC7C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;AACnC,kBAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAG,CAAA,CAAA;SACnD,CAAC;KACL;IAEO,aAAa,CAAC,MAAc,EAAE,MAAgC,EAAA;AAClE,QAAA,OAAO,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;KAC7E;AAEO,IAAA,cAAc,CAAC,MAAc,EAAE,QAAa,EAAE,MAAgC,EAAA;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAClD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;AAClE,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE3B,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAmC,KAAI;YAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAmB,EAAE,QAAQ,CAAC,CAAC;AAE7E,YAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,EAAE;AAC9C,gBAAA,OAAO,UAAU,CAAC;aACrB;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAEpD,YAAA,QAAQ,MAAM,CAAC,IAAI;gBACf,KAAK,mBAAmB,CAAC,IAAI;AACzB,oBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAE/F,gBAAA,KAAK,mBAAmB,CAAC,QAAQ,EAAE;AAC/B,oBAAA,MAAM,mBAAmB,GAAG,cAAc,EAAE,OAAO,EAAE,mBAAmB;AACpE,0BAAE,cAAc,CAAC,OAAO,CAAC,mBAAmB;AAC5C,0BAAE,OAAO,MAAM,CAAC,mBAAmB,KAAK,UAAU;AAChD,8BAAE,MAAM,CAAC,mBAAmB,CAAC;AACvB,gCAAA,OAAO,EAAE,QAAQ;6BACpB,CAAC;AACJ,8BAAE,MAAM,CAAC,mBAAmB,CAAC;AAEnC,oBAAA,OAAO,mBAAmB;0BACpB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE;4BACxC,mBAAmB;yBACtB,CAAC;AACJ,0BAAE,kBAAkB,CACd,cAAc,EACd;AACI,4BAAA,gBAAgB,EAAE,GAAG;AACrB,4BAAA,kBAAkB,EAAE,GAAG;AACvB,4BAAA,KAAK,EAAE,CAAC;AACR,4BAAA,MAAM,EAAE,EAAE;AACV,4BAAA,MAAM,EAAE,EAAE;AACV,4BAAA,aAAa,EAAE,IAAI;AACnB,4BAAA,GAAG,aAAa;AACnB,yBAAA,EACD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAChC,CAAC;iBACX;gBAED,KAAK,mBAAmB,CAAC,IAAI;oBACzB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACtD,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAErD,KAAK,mBAAmB,CAAC,OAAO;oBAC5B,MAAM,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG,IAAI,CAAC;oBAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAElD,gBAAA,KAAK,mBAAmB,CAAC,MAAM,EAAE;AAC7B,oBAAA,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;AAE1B,oBAAA,MAAM,mBAAmB,GAAG,cAAc,EAAE,OAAO,EAAE,mBAAmB;AACpE,0BAAE,cAAc,CAAC,OAAO,CAAC,mBAAmB;AAC5C,0BAAE,OAAO,MAAM,CAAC,mBAAmB,KAAK,UAAU;AAChD,8BAAE,MAAM,CAAC,mBAAmB,CAAC;AACvB,gCAAA,OAAO,EAAE,QAAQ;6BACpB,CAAC;AACJ,8BAAE,MAAM,CAAC,mBAAmB,CAAC;AAEnC,oBAAA,OAAO,mBAAmB;0BACpB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE;4BACxC,mBAAmB;yBACtB,CAAC;AACJ,0BAAE,kBAAkB,CACd,cAAc,EACd;AACI,4BAAA,gBAAgB,EAAE,GAAG;AACrB,4BAAA,kBAAkB,EAAE,GAAG;AACvB,4BAAA,KAAK,EAAE,CAAC;AACR,4BAAA,MAAM,EAAE,EAAE;AACV,4BAAA,MAAM,EAAE,EAAE;AACV,4BAAA,aAAa,EAAE,IAAI;AACnB,4BAAA,GAAG,aAAa;AACnB,yBAAA,EACD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAChC,CAAC;iBACX;gBACD,KAAK,mBAAmB,CAAC,MAAM;AAC3B,oBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAE1C,gBAAA;AACI,oBAAA,OAAO,cAAc,CAAC;aAC7B;AACL,SAAC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;AAC7G,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CACrD,MAAM,EACN,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,gBAAgB,CACnB,CAAC;QAEF,OAAO;YACH,KAAK;AACL,YAAA,WAAW,EAAE,oBAAoB;YACjC,SAAS;YACT,UAAU;AACV,YAAA,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CACpC,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,KAAK,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAC5F;AACD,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;YACjD,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC;KACL;AAEO,IAAA,cAAc,CAAC,KAA2C,EAAA;AAC9D,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC7B,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC1C;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAEO,IAAA,iBAAiB,CAAC,QAAsD,EAAA;AAC5E,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE;AAC9B,YAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;gBAChC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC7C;AACD,YAAA,OAAO,QAAQ,CAAC;SACnB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAEO,IAAA,gBAAgB,CAAC,OAA8C,EAAA;AACnE,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;gBAC/B,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC5C;AACD,YAAA,OAAO,OAAO,CAAC;SAClB;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AAEO,IAAA,QAAQ,CAAC,KAAU,EAAA;QACvB,OAAO,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;KACxC;AAEO,IAAA,SAAS,CAAC,MAAW,EAAA;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;SAC9D;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CACX,oGAAoG,CACvG,CAAC;SACL;AAED,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;AACjC,YAAA,OAAO,MAAM,CAAC;SACjB;AAED,QAAA,OAAO,MAAM;AACR,aAAA,MAAM,CAAC,CAAC,KAAU,KAAK,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAC7D,aAAA,GAAG,CAAC,CAAC,KAAU,KAAI;AAChB,YAAA,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAG,EAAA,KAAK,EAAE,CAAC;YACxE,OAAO;gBACH,KAAK;aACR,CAAC;AACN,SAAC,CAAC,CAAC;KACV;AAEO,IAAA,iBAAiB,CAAC,MAAa,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;KACjF;AAEO,IAAA,sBAAsB,CAAC,MAAa,EAAA;QACxC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;KACrF;AAEO,IAAA,kBAAkB,CAAC,MAAa,EAAA;QACpC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;KACjH;AAEO,IAAA,qBAAqB,CAAC,OAAiB,EAAA;QAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;KACxE;wGAnXQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EC1DlC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wtHAgFA,ED/BQ,MAAA,EAAA,CAAA,0VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,2EACP,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAChB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EACd,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,kKACjB,kBAAkB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAGb,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAfjC,SAAS;+BAGI,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA;wBACL,OAAO;wBACP,OAAO;wBACP,gBAAgB;wBAChB,gBAAgB;wBAChB,cAAc;wBACd,iBAAiB;wBACjB,kBAAkB;AACrB,qBAAA,EAAA,QAAA,EAAA,wtHAAA,EAAA,MAAA,EAAA,CAAA,0VAAA,CAAA,EAAA,CAAA;wDAUM,eAAe,EAAA,CAAA;sBADrB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAKvC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAKC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAKC,MAAM,EAAA,CAAA;sBADZ,KAAK;;;IE7EE,mBAGX;AAHD,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EAHW,kBAAkB,KAAlB,kBAAkB,GAG7B,EAAA,CAAA,CAAA;;MCOqB,WAAW,CAAA;AACtB,IAAA,OAAO,QAAQ,CAAC,OAAmB,EAAE,SAAiB,EAAA;AACzD,QAAA,OAAO,CAAC,aAAa,CAAC,SAAS,GAAG,CAAG,EAAA,OAAO,CAAC,aAAa,CAAC,SAAS,CAAI,CAAA,EAAA,SAAS,EAAE,CAAC;KACvF;AAEM,IAAA,OAAO,WAAW,CAAC,OAAmB,EAAE,SAAiB,EAAA;QAC5D,IAAI,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACrD,YAAA,OAAO,CAAC,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;SAC5F;KACJ;AAEM,IAAA,OAAO,SAAS,CACnB,OAAA,GAA6B,EAAE,EAC/B,IAAc,GAAA,EAAE,EAChB,YAAA,GAAuB,GAAG,EAC1B,eAAuB,UAAU,EAAA;QAEjC,IAAI,GAAG,GAAG,QAAQ,CAAC;QAEnB,OAAO;AACF,aAAA,MAAM,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;AAC1D,aAAA,OAAO,CAAC,CAAC,MAAW,EAAE,CAAS,KAAI;YAChC,GAAG,IAAI,CAAI,CAAA,EAAA,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC;AAE5C,YAAA,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,IAAI,YAAY,CAAC;AACpD,SAAC,CAAC,CAAC;AAEP,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,MAAW,KAAI;YACzB,GAAG,IAAI,IAAI,CAAC;YAEZ,OAAO;AACF,iBAAA,MAAM,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;AAC1D,iBAAA,OAAO,CAAC,CAAC,MAAW,EAAE,CAAS,KAAI;AAChC,gBAAA,IAAI,QAAQ,CAAC;gBACb,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAW,KAC7C,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAC9C,CAAC;AAEF,oBAAA,QAAQ,GAAG,WAAW;AACjB,yBAAA,IAAI,EAAE;AACN,yBAAA,MAAM,CAAC,CAAC,KAAa,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAChE,yBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;iBAC/B;qBAAM;AACH,oBAAA,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;iBACnE;gBAED,IAAI,QAAQ,KAAK,IAAI;AAAE,oBAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;oBAClE,QAAQ,GAAG,EAAE,CAAC;AAEnB,gBAAA,GAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAG,CAAC;AAEvB,gBAAA,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,GAAG,IAAI,YAAY,CAAC;AACpD,aAAC,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,EAAE,yBAAyB;AAClC,SAAA,CAAC,CAAC;QAEH,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,gBAAgB,KAAK,UAAU,EAAE;YACzD,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;SAC3D;aAAM;YACH,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC5B,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAChC,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC7B,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrD,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;gBACrD,IAAI,CAAC,KAAK,EAAE,CAAC;aAChB;iBAAM;AACH,gBAAA,GAAG,GAAG,8BAA8B,GAAG,GAAG,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;aAC/B;AACD,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACnC;KACJ;AAEO,IAAA,OAAO,iBAAiB,CAAC,IAAS,EAAE,KAAU,EAAE,MAAc,EAAA;AAClE,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC;SACf;QACD,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;SACtB;aAAM,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;SACtB;aAAM;YACH,MAAM,MAAM,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,KAAK,GAAG,IAAI,CAAC;AACjB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;gBAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACvC,oBAAA,OAAO,IAAI,CAAC;iBACf;gBACD,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5B;YACD,OAAO,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SAClD;KACJ;IAEO,OAAO,WAAW,CAAC,GAAQ,EAAA;AAC/B,QAAA,OAAO,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;KAC9D;AAEO,IAAA,OAAO,YAAY,CAAC,IAAS,EAAE,MAAc,EAAA;AACjD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,QAAQ,MAAM,CAAC,IAAI;YACf,KAAK,mBAAmB,CAAC,MAAM;AAC3B,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA;AACI,gBAAA,OAAO,IAAI,CAAC;SACnB;KACJ;IAEO,OAAO,WAAW,CAAC,IAAS,EAAA;AAChC,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;SACxB;aAAM;AACH,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;AACJ,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,GAAQ,KAAK,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;;AChIhE,SAAU,mBAAmB,CAAC,IAA0B,EAAA;IAC1D,OAAO,IAAI,KAAK,mBAAmB,CAAC,MAAM,IAAI,IAAI,KAAK,mBAAmB,CAAC,QAAQ,CAAC;AACxF,CAAC;AAEK,SAAU,cAAc,CAAC,KAAU,EAAA;IACrC,OAAO,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;AACzC,CAAC;SAEe,gCAAgC,CAC5C,MAA2C,EAC3C,QAAa,EACb,uBAAkD,EAAA;IAElD,IAAI,uBAAuB,EAAE;AACzB,QAAA,OAAO,uBAAuB,CAAC;KAClC;AAED,IAAA,OAAO,OAAO,MAAM,CAAC,mBAAmB,KAAK,UAAU;UACjD,MAAM,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACnD,UAAE,MAAM,CAAC,mBAAmB,CAAC;AACrC,CAAC;AAEK,SAAU,kBAAkB,CAAC,MAA6B,EAAE,QAAa,EAAE,QAAQ,GAAG,CAAC,EAAA;AACzF,IAAA,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACjC,QAAA,OAAO,QAAQ,CAAC;KACnB;IAED,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAI,MAAM,CAAC,KAAgB,CAAC;AAClG;;ACXA,SAAS,sBAAsB,CAAC,IAAa,EAAA;AACzC,IAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAK,IAAe,CAAC;AAC/F,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAsB,EAAE,gBAAwB,EAAA;;;AAG1E,IAAA,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACzE,CAAC;AAED;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,MAAuB,EAAA;AACpD,IAAA,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE;QAC3B,OAAO,MAAM,CAAC,UAAsB,CAAC;KACxC;AAED,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAiD,CAAC;AAEvE,IAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC1B,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAEe,SAAA,kBAAkB,CAAC,OAA0B,EAAE,SAAsB,EAAA;AACjF,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpF,IAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACxB,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;AAE9B,QAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;YACjC,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE;AACrD,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAE/B,gBAAA,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE;oBAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;iBAC1C;aACJ;SACJ;AAED,QAAA,OAAO,MAAM,CAAC;AAClB,KAAC,CAAC,CAAC;AACP,CAAC;AAEK,SAAU,wBAAwB,CACpC,OAA0B,EAC1B,SAAsB,EACtB,cAA+C,EAC/C,aAAwC,EAAA;AAExC,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpF,IAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACxB,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;AAC7B,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;AAE9B,QAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;YACjC,KAAK,MAAM,SAAS,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE;AACrD,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAE/B,gBAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE;oBACzB,SAAS;iBACZ;AAED,gBAAA,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACjD,gBAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAEjD,gBAAA,IAAI,iBAAiB,CAAC,QAAQ,CAAC,EAAE;;;;AAI7B,oBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;oBACzB,SAAS;iBACZ;AAED,gBAAA,MAAM,uBAAuB,GAAG,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,SAAS,CAAC;gBAC5F,MAAM,mBAAmB,GAAG,gCAAgC,CAAC,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC;gBAEvG,IAAI,mBAAmB,EAAE;AACrB,oBAAA,MAAM,aAAa,GACf,mBAAmB,CAAC,KAAK,KAAK,SAAS;AACnC,0BAAE,IAAI,SAAS,CAAC,QAAkB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;0BACvD,QAAQ,CAAC;oBAEnB,MAAM,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,aAAgC,EAAE;wBACzE,MAAM,EAAE,aAAa,EAAE,MAAM;AAC7B,wBAAA,mBAAmB,EAAE;AACjB,4BAAA,GAAG,mBAAmB;AACtB,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,WAAW,EAAE,KAAK;AACrB,yBAAA;AACJ,qBAAA,CAAC,CAAC;oBACH,SAAS;iBACZ;gBAED,MAAM,gBAAgB,GAAG,aAAa,EAAE,MAAM,CAAC,gBAAgB,IAAI,GAAG,CAAC;AAEvE,gBAAA,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;;;AAGjC,oBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC;AACxC,0BAAE,oBAAoB,CAAC,QAA2B,EAAE,gBAAgB,CAAC;0BACnE,QAAQ,CAAC;oBACf,SAAS;iBACZ;AAED,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAClC,QAAQ,EACR;oBACI,gBAAgB;AAChB,oBAAA,kBAAkB,EAAE,EAAE;AACtB,oBAAA,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1C,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,aAAa,EAAE,IAAI;AACtB,iBAAA,EACD,cAAc,CAAC,QAAQ,CAAC,CAC3B,CAAC;aACL;SACJ;AAED,QAAA,OAAO,MAAM,CAAC;AAClB,KAAC,CAAC,CAAC;AACP;;MCpIa,oBAAoB,CAAA;AACZ,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACrC,IAAA,kBAAkB,GAAG,MAAM,CAAqB,gCAAgC,CAAC,CAAC;AAG5F,IAAA,YAAY,CAAU;AAGtB,IAAA,cAAc,CAAU;AAGxB,IAAA,KAAK,CAAS;IAGd,UAAU,GAAG,IAAI,CAAC;IAGlB,2BAA2B,GAAG,IAAI,CAAC;AAGnC,IAAA,aAAa,CAAkB;AAG/B,IAAA,cAAc,CAAwB;AAGtC,IAAA,sBAAsB,CAAe;AAGrC,IAAA,mBAAmB,CAAe;IAElC,kBAAkB,GAAG,KAAK,EAAsB,CAAC;IAEjD,gBAAgB,GAAG,EAAE,CAAC;AAEZ,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEzD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE;AACvC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,eAAe,EAAE;AACxF,gBAAA,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY;AAC9C,aAAA,CAAC,CAAC;SACN;KACJ;IAEO,kBAAkB,GAAA;AACtB,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAI,CAAA,EAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,CAAC;KAClF;IAEM,cAAc,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAG,EAAA,IAAI,CAAC,kBAAkB,EAAE,CAAA,aAAA,CAAe,CAAC,CAAC;KAC9E;IAEM,UAAU,GAAA;AACb,QAAA,MAAM,OAAO,GAAyB;YAClC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAG,EAAA,IAAI,CAAC,kBAAkB,EAAE,CAAA,mBAAA,CAAqB,EAAE,CAAC,MAAM,KACjG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CACjC;SACJ,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE;AAClC,YAAA,OAAO,CAAC,IAAI,CACR,IAAI,CAAC,gBAAgB,CACjB,gBAAgB,EAChB,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAyB,uBAAA,CAAA,EACrD,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CACjD,CACJ,CAAC;SACL;AAED,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,OAAO,CAAC,IAAI,CACR,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAoB,kBAAA,CAAA,EAAE,CAAC,MAAM,KACxF,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAChC,CACJ,CAAC;SACL;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE;AAC5B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM;gBACvD,OAAO,EAAE,CAAgB,aAAA,EAAA,MAAM,CAAE,CAAA;gBACjC,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;AACrB,aAAA,CAAC,CAAC,CAAC;AACJ,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;SAChC;AAED,QAAA,OAAO,OAAO,CAAC;KAClB;AAEO,IAAA,gBAAgB,CACpB,OAAe,EACf,KAAa,EACb,GAAyC,EAAA;AAEzC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9C,IAAI,WAAW,EAAE;YACb,OAAO;gBACH,OAAO;gBACP,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AACpC,gBAAA,OAAO,EAAE,MAAM,GAAG,CAAC,WAAW,CAAC;aAClC,CAAC;SACL;QAED,OAAO;YACH,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AACpC,YAAA,OAAO,EAAE;AACL,gBAAA;oBACI,OAAO,EAAE,CAAG,EAAA,OAAO,CAAM,IAAA,CAAA;oBACzB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,6CAA6C,CAAC;oBAC5E,OAAO,EAAE,MAAM,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC;AAC7C,iBAAA;AACD,gBAAA;oBACI,OAAO,EAAE,CAAG,EAAA,OAAO,CAAY,UAAA,CAAA;oBAC/B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mDAAmD,CAAC;oBAClF,OAAO,EAAE,MAAM,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC;AACnD,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;IAEO,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAClD;KACJ;IAEM,kBAAkB,GAAA;AACrB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAClD,YAAA,MAAM,YAAY,GAAG;AACjB,gBAAA,GAAG,MAAM;gBACT,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,gBAAA,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,gBAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;gBACpC,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,YAAY,EAAE,MAAM,CAAC,YAAY;aACpC,CAAC;AAEF,YAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;AAC7B,gBAAA,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC;aACnC;YAED,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBAChC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAC7C;qBAAM;AACH,oBAAA,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;iBAC1C;aACJ;AAED,YAAA,OAAO,YAAY,CAAC;AACxB,SAAC,CAAC,CAAC;KACN;IAEO,0BAA0B,CAAC,OAAc,EAAE,MAA0B,EAAA;QACzE,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAE5C,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC7C;QAED,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrD,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC1D;IAEO,uBAAuB,CAAC,OAAc,EAAE,MAA0B,EAAA;QACtE,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAChD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC1C;QAED,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACrD,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC1D;AAEO,IAAA,eAAe,CAAC,OAA0B,EAAE,SAAgB,EAAE,MAA0B,EAAA;AAC5F,QAAA,OAAO,MAAM,KAAK,kBAAkB,CAAC,GAAG;AACpC,cAAE,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC;AACxC,cAAE,wBAAwB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC;KAClH;IAEO,gBAAgB,CAAC,GAAQ,EAAE,IAAY,EAAA;AAC3C,QAAA,OAAO,IAAI;aACN,KAAK,CAAC,GAAG,CAAC;AACV,aAAA,MAAM,CAAC,CAAC,MAAW,EAAE,IAAS,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACzG;AAEO,IAAA,gBAAgB,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAU,EAAA;AACvD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;KACvD;AAEO,IAAA,iBAAiB,CAAC,GAAQ,EAAE,QAAkB,EAAE,KAAU,EAAA;AAC9D,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjB,YAAA,OAAO,GAAG,CAAC;SACd;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9E,QAAA,OAAO,GAAG,CAAC;KACd;IAEM,sBAAsB,CAAC,OAAc,EAAE,IAAW,EAAA;AACrD,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;SACf;QAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACzB,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;AAC1B,YAAA,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBAC3B,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5E,gBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;oBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACzD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;wBACjD,OAAO;qBACV;oBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oBACzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvD,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,CAAC,CAAC;KACN;IAEM,eAAe,CAAC,OAAc,EAAE,IAAW,EAAA;AAC9C,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC;SACf;QAED,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACzB,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;AAC1B,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBAC7B,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5E,gBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,SAAiB,KAAI;oBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACzD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;wBACjD,OAAO;qBACV;oBACD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBACjD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvD,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,CAAC,CAAC;KACN;IAEO,cAAc,CAAC,MAAW,EAAE,UAAe,EAAA;;QAE/C,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;AACtD,QAAA,IAAI,cAAc,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QACnD,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;;QAG7D,IAAI,cAAc,KAAK,eAAe,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5D,cAAc,GAAG,GAAG,MAAM,CAAC,UAAU,CAAG,EAAA,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;YAC3F,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SAC5D;;AAGD,QAAA,IAAI,cAAc,KAAK,eAAe,EAAE;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/D,cAAc,GAAG,GAAG,MAAM,CAAC,UAAU,CAAG,EAAA,OAAO,EAAE,CAAC;YAClD,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SAC5D;AAED,QAAA,OAAO,eAAe,CAAC;KAC1B;AAEO,IAAA,kBAAkB,CAAC,GAAW,EAAA;QAClC,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,KAAK,CAAI,CAAA,EAAA,KAAK,CAAC,WAAW,EAAE,CAAA,CAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAClG;IAEO,iBAAiB,GAAA;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,OAAO,CAAC;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AAExB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,UAAU,CAAC;AACnD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACtE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEtE,QAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,aAAa,CAAI,CAAA,EAAA,aAAa,EAAE,CAAC;KAC1D;AAEM,IAAA,iBAAiB,CAAC,MAAA,GAA6B,kBAAkB,CAAC,SAAS,EAAA;QAC9E,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtE,QAAA,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACrF;AAEM,IAAA,qBAAqB,CAAC,MAAA,GAA6B,kBAAkB,CAAC,SAAS,EAAA;QAClF,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACnE,QAAA,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACrF;AAEM,IAAA,MAAM,gBAAgB,CAAC,MAA6B,GAAA,kBAAkB,CAAC,SAAS,EAAA;QACnF,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,OAAO;SACV;AACD,QAAA,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAE7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1C,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEvD,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAE/D,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAEtE,QAAA,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACrF;wGAnUQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,2BAAA,EAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBjC,qeAiBA,EAAA,MAAA,EAAA,CAAA,qFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIc,eAAe,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAEhB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AAGI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EACd,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,qeAAA,EAAA,MAAA,EAAA,CAAA,qFAAA,CAAA,EAAA,CAAA;8BAOnB,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,KAAK,EAAA,CAAA;sBADX,KAAK;gBAIC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAIC,2BAA2B,EAAA,CAAA;sBADjC,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,sBAAsB,EAAA,CAAA;sBAD5B,KAAK;gBAIC,mBAAmB,EAAA,CAAA;sBADzB,KAAK;;;MExCG,WAAW,CAAA;wGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAHV,OAAA,EAAA,CAAA,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,CAAA,EAAA,OAAA,EAAA,CACrF,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;yGAEtF,WAAW,EAAA,OAAA,EAAA,CAHgC,qBAAqB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;;4FAGtF,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,CAAC;oBAChG,OAAO,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;AACnG,iBAAA,CAAA;;;ACVD;;AAEG;;;;"}