{"version":3,"file":"angular-calendar-timeline.mjs","sources":["../../../projects/angular-calendar-timeline/src/lib/helpers/date-helpers.ts","../../../projects/angular-calendar-timeline/src/lib/items-iterator/items-iterator.ts","../../../projects/angular-calendar-timeline/src/lib/zooms-handler/zooms-handler.ts","../../../projects/angular-calendar-timeline/src/lib/models/zoom.ts","../../../projects/angular-calendar-timeline/src/lib/zooms-handler/zooms.ts","../../../projects/angular-calendar-timeline/src/lib/helpers/row-determinant.ts","../../../projects/angular-calendar-timeline/src/lib/helpers/cache.ts","../../../projects/angular-calendar-timeline/src/lib/scale-generator/base-scale-generator.ts","../../../projects/angular-calendar-timeline/src/lib/formatters/day-scale-formatter.ts","../../../projects/angular-calendar-timeline/src/lib/scale-generator/day-scale-generator.ts","../../../projects/angular-calendar-timeline/src/lib/formatters/week-scale-formatter.ts","../../../projects/angular-calendar-timeline/src/lib/scale-generator/week-scale-generator.ts","../../../projects/angular-calendar-timeline/src/lib/formatters/month-scale-formatter.ts","../../../projects/angular-calendar-timeline/src/lib/scale-generator/month-scale-generator.ts","../../../projects/angular-calendar-timeline/src/lib/view-mode-adaptor/base-view-mode-adaptor.ts","../../../projects/angular-calendar-timeline/src/lib/view-mode-adaptor/days-view-mode-adaptor.ts","../../../projects/angular-calendar-timeline/src/lib/view-mode-adaptor/weeks-view-mode-adaptor.ts","../../../projects/angular-calendar-timeline/src/lib/view-mode-adaptor/months-view-mode-adaptor.ts","../../../projects/angular-calendar-timeline/src/lib/strategy-manager.ts","../../../projects/angular-calendar-timeline/src/lib/components/item/timeline-item.component.ts","../../../projects/angular-calendar-timeline/src/lib/components/item/timeline-item.component.html","../../../projects/angular-calendar-timeline/src/lib/components/date-marker/timeline-date-marker.component.ts","../../../projects/angular-calendar-timeline/src/lib/components/date-marker/timeline-date-marker.component.html","../../../projects/angular-calendar-timeline/src/lib/components/scale-header/timeline-scale-header.component.ts","../../../projects/angular-calendar-timeline/src/lib/components/scale-header/timeline-scale-header.component.html","../../../projects/angular-calendar-timeline/src/lib/components/panel/timeline-panel.component.ts","../../../projects/angular-calendar-timeline/src/lib/components/panel/timeline-panel.component.html","../../../projects/angular-calendar-timeline/src/lib/timeline.component.ts","../../../projects/angular-calendar-timeline/src/lib/timeline.component.html","../../../projects/angular-calendar-timeline/src/lib/timeline.module.ts","../../../projects/angular-calendar-timeline/src/public-api.ts","../../../projects/angular-calendar-timeline/src/angular-calendar-timeline.ts"],"sourcesContent":["import { DateInput } from \"../models\";\r\n\r\nexport class DateHelpers {\r\n  static generateDateId(date: Date): string {\r\n    return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}-${date.getHours()}-${date.getMinutes()}`;\r\n  }\r\n\r\n  static lastDayOfMonth(date: DateInput): Date {\r\n    const dateWithLastDayOfMonth = new Date(date);\r\n    dateWithLastDayOfMonth.setMonth(dateWithLastDayOfMonth.getMonth() + 1);\r\n    dateWithLastDayOfMonth.setDate(0);\r\n\r\n    return dateWithLastDayOfMonth;\r\n  }\r\n\r\n  static getDaysInMonth(date: Date): number {\r\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\r\n  }\r\n\r\n  static firstMondayOfMonth(date: Date): Date {\r\n    const firstDay = new Date(new Date(date).setDate(1));\r\n    const monday = DateHelpers.firstDayOfWeek(firstDay);\r\n\r\n    return monday.getMonth() === date.getMonth() ? monday : new Date(monday.setDate(monday.getDate() + 7));\r\n  }\r\n\r\n  static firstDayOfWeek(date: DateInput): Date {\r\n    date = new Date(date);\r\n    const first = date.getDate() - date.getDay() + 1;\r\n\r\n    return new Date(new Date(date).setDate(first));\r\n  }\r\n\r\n  static lastDayOfWeek(date: DateInput): Date {\r\n    date = new Date(date);\r\n    const dayOfWeek = date.getDay();\r\n    const diffToSunday = (dayOfWeek === 0) ? 0 : 7 - dayOfWeek;\r\n    date.setDate(date.getDate() + diffToSunday);\r\n\r\n    return date;\r\n  }\r\n\r\n  static dayBeginningTime(day: Date): Date {\r\n    day = new Date(day);\r\n    day.setHours(0, 0, 0, 0);\r\n\r\n    return day;\r\n  }\r\n\r\n  static dayEndingTime(day: Date): Date {\r\n    day = new Date(day);\r\n    day.setHours(23, 59, 59, 999);\r\n\r\n    return day;\r\n  }\r\n}\r\n\r\nexport enum MillisecondsToTime {\r\n  Minute = 1000 * 60,\r\n  Day = 86400000,\r\n  Week = MillisecondsToTime.Day * 7\r\n}\r\n","import { ITimelineItem, IItemsIterator } from \"../models\";\r\n\r\nexport class ItemsIterator implements IItemsIterator {\r\n  private _items: ITimelineItem[] = [];\r\n\r\n  get items(): ITimelineItem[] {\r\n    return this._items;\r\n  }\r\n\r\n  setItems(items: ITimelineItem[]) {\r\n    this._items = items;\r\n    this._validate();\r\n    this._createItemsLevels();\r\n  }\r\n\r\n  isEmpty(): boolean {\r\n    return !this._items?.length;\r\n  }\r\n\r\n  getFirstItem(onlyVisible: boolean): ITimelineItem {\r\n    let firstItem = null;\r\n\r\n    this.forEach((item, parent) => {\r\n      if (!item.startDate || !item.endDate) {\r\n        return;\r\n      }\r\n\r\n      if (!firstItem || new Date(firstItem.startDate).getTime() > new Date(item.startDate).getTime()) {\r\n        firstItem = item;\r\n      }\r\n    }, onlyVisible);\r\n\r\n    return firstItem;\r\n  }\r\n\r\n  getLastItem(onlyVisible: boolean): ITimelineItem {\r\n    let lastItem = null;\r\n\r\n    this.forEach((item, parent) => {\r\n      if (!item.startDate || !item.endDate) {\r\n        return;\r\n      }\r\n\r\n      if (!lastItem || new Date(lastItem.endDate).getTime() < new Date(item.endDate).getTime()) {\r\n        lastItem = item;\r\n      }\r\n    }, onlyVisible);\r\n\r\n    return lastItem;\r\n  }\r\n\r\n  forEach(handler: (item: ITimelineItem, parent: (ITimelineItem | null)) => void, onlyVisible = false): void {\r\n    function iterateAll(items: ITimelineItem[], parent: ITimelineItem | null): void {\r\n      (items ?? []).forEach(item => {\r\n        handler(item, parent);\r\n        iterateAll(item.streamItems ?? [], item);\r\n        if (!onlyVisible || item.childrenItemsExpanded) {\r\n          iterateAll(item.childrenItems ?? [], item);\r\n        }\r\n      });\r\n    }\r\n\r\n    iterateAll(this._items, null);\r\n  }\r\n\r\n  private _createItemsLevels(): void {\r\n    this.forEach((item, parent) => {\r\n      if (item.streamItems) {\r\n        item._streamLevels = this._createItemLevels(item);\r\n      }\r\n    });\r\n  }\r\n\r\n  private _createItemLevels(item: ITimelineItem): ITimelineItem[][] {\r\n    const levels: ITimelineItem[][] = [];\r\n\r\n    item.streamItems.forEach(item => {\r\n      let isLevelFound = false;\r\n      let currentLevelIndex = 0;\r\n        while (!isLevelFound) {\r\n\r\n        const levelItems = levels[currentLevelIndex];\r\n        if (!levelItems) {\r\n          levels[currentLevelIndex] = [item];\r\n          isLevelFound = true;\r\n          break;\r\n        }\r\n\r\n        const isItemCollides = levelItems.some(levelItem => this._isItemsCollides(levelItem, item));\r\n        if (!isItemCollides) {\r\n          levels[currentLevelIndex].push(item);\r\n          isLevelFound = true;\r\n          break;\r\n        }\r\n\r\n        currentLevelIndex++;\r\n      }\r\n    })\r\n\r\n    return levels;\r\n  }\r\n\r\n  private _isItemsCollides(item1: ITimelineItem, item2: ITimelineItem): boolean {\r\n    const item1Start = item1._left;\r\n    const item1End = item1._left + item1._width;\r\n    const item2Start = item2._left;\r\n    const item2End = item2._left + item2._width;\r\n\r\n    return item1Start === item2Start || item1End === item2End ||\r\n      item1End > item2Start && item1Start < item2End ||\r\n      item2End > item1Start && item2Start < item1End;\r\n  }\r\n\r\n  private _validate(): void {\r\n    this.forEach((item: ITimelineItem) => {\r\n      if ((item.startDate && !item.endDate) || (item.endDate && !item.startDate)) {\r\n        this._removeItemDates(item);\r\n      }\r\n\r\n      if (item.streamItems) {\r\n        this._removeItemDates(item);\r\n      }\r\n    });\r\n  }\r\n\r\n  private _removeItemDates(item: ITimelineItem): void {\r\n    delete item.startDate;\r\n    delete item.endDate;\r\n  }\r\n}\r\n","import { BehaviorSubject, Observable } from \"rxjs\";\r\nimport { ITimelineZoom, TimelineViewMode } from \"../models/zoom\";\r\nimport { IIndexedZoom, IZoomsHandler } from \"../models\";\r\n\r\nexport class ZoomsHandler<ViewMode = TimelineViewMode> implements IZoomsHandler<ViewMode> {\r\n  private _zooms: IIndexedZoom<ViewMode>[];\r\n  private _activeZoom$ = new BehaviorSubject<IIndexedZoom<ViewMode>>(null);\r\n\r\n  activeZoom$: Observable<IIndexedZoom<ViewMode>> = this._activeZoom$.asObservable();\r\n\r\n  get activeZoom(): IIndexedZoom<ViewMode> {\r\n    return this._activeZoom$.value;\r\n  }\r\n\r\n  get zooms(): IIndexedZoom<ViewMode>[] {\r\n    return this._zooms;\r\n  }\r\n\r\n  constructor(zooms: ITimelineZoom<ViewMode>[]) {\r\n    this.setZooms(zooms);\r\n  }\r\n\r\n  setZooms(zooms: ITimelineZoom<ViewMode>[]): void {\r\n    this._zooms = (zooms ?? []).map((item, index) => ({...item, index}));\r\n    this._activeZoom$.next(this.getLastZoom());\r\n  }\r\n\r\n  getFirstZoom(): IIndexedZoom<ViewMode> {\r\n    return this._zooms[0];\r\n  }\r\n\r\n  getLastZoom(): IIndexedZoom<ViewMode> {\r\n    return this._zooms[this._zooms.length - 1];\r\n  }\r\n\r\n  zoomIn(): void {\r\n    let newZoomIndex = this.activeZoom.index + 1;\r\n    const lastZoomIndex = this.getLastZoom().index;\r\n    if (newZoomIndex > lastZoomIndex) {\r\n      newZoomIndex = lastZoomIndex;\r\n    }\r\n\r\n    this.changeActiveZoom(this._zooms[newZoomIndex]);\r\n  }\r\n\r\n  zoomOut(): void {\r\n    let newZoomIndex = this.activeZoom.index - 1;\r\n    const firstZoomIndex = this.getFirstZoom().index;\r\n    if (newZoomIndex < firstZoomIndex) {\r\n      newZoomIndex = firstZoomIndex;\r\n    }\r\n\r\n    this.changeActiveZoom(this._zooms[newZoomIndex]);\r\n  }\r\n\r\n  changeActiveZoom(zoom: ITimelineZoom<ViewMode>): void {\r\n    if (zoom) {\r\n      this._activeZoom$.next(this._zooms[this._findZoomIndex(zoom)]);\r\n    }\r\n  }\r\n\r\n  isZoomActive(zoom: ITimelineZoom<ViewMode>): boolean {\r\n    return this._findZoomIndex(zoom) === this.activeZoom.index;\r\n  }\r\n\r\n  private _findZoomIndex(zoom: ITimelineZoom<ViewMode>): number {\r\n    return this._zooms.findIndex(i => i.columnWidth === zoom.columnWidth && i.viewMode === zoom.viewMode);\r\n  }\r\n}\r\n","export enum TimelineViewMode {\r\n  Month = 101,\r\n  Week = 102,\r\n  Day = 103\r\n}\r\n\r\nexport interface ITimelineZoom<ViewMode = TimelineViewMode> {\r\n  viewMode: ViewMode;\r\n\r\n  columnWidth: number;\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { ITimelineZoom, TimelineViewMode } from \"../models\";\r\n\r\nexport const ZOOMS = new InjectionToken<ITimelineZoom[]>('Zooms');\r\n\r\nexport const DefaultZooms: ITimelineZoom[] = [\r\n  {columnWidth: 45, viewMode: TimelineViewMode.Month},\r\n  {columnWidth: 60, viewMode: TimelineViewMode.Month},\r\n  {columnWidth: 80, viewMode: TimelineViewMode.Month},\r\n  {columnWidth: 110, viewMode: TimelineViewMode.Month},\r\n  {columnWidth: 140, viewMode: TimelineViewMode.Month},\r\n  {columnWidth: 200, viewMode: TimelineViewMode.Month},\r\n  {columnWidth: 240, viewMode: TimelineViewMode.Month},\r\n  {columnWidth: 60, viewMode: TimelineViewMode.Week},\r\n  {columnWidth: 80, viewMode: TimelineViewMode.Week},\r\n  {columnWidth: 110, viewMode: TimelineViewMode.Week},\r\n  {columnWidth: 140, viewMode: TimelineViewMode.Week},\r\n  {columnWidth: 200, viewMode: TimelineViewMode.Week},\r\n  {columnWidth: 240, viewMode: TimelineViewMode.Week},\r\n  {columnWidth: 45, viewMode: TimelineViewMode.Day},\r\n  {columnWidth: 60, viewMode: TimelineViewMode.Day},\r\n  {columnWidth: 80, viewMode: TimelineViewMode.Day},\r\n  {columnWidth: 110, viewMode: TimelineViewMode.Day},\r\n  {columnWidth: 140, viewMode: TimelineViewMode.Day},\r\n  {columnWidth: 200, viewMode: TimelineViewMode.Day},\r\n  {columnWidth: 240, viewMode: TimelineViewMode.Day},\r\n];\r\n","import { IItemsIterator, ITimelineItem } from \"../models\";\r\n\r\ninterface IRow {\r\n  items: ITimelineItem[];\r\n  stream: ITimelineItem;\r\n}\r\n\r\nexport class RowDeterminant {\r\n  rows: IRow[];\r\n\r\n  constructor(private _itemsIterator: IItemsIterator) {\r\n    this._generateMap();\r\n  }\r\n\r\n  private _generateMap(): void {\r\n    const map: IRow[] = [];\r\n    const iterate = (items: ITimelineItem[]): void => {\r\n      (items ?? []).forEach(item => {\r\n        if (item.streamItems) {\r\n          item._streamLevels.forEach((levelArr, index) => {\r\n            map.push({stream: item, items: levelArr})\r\n          });\r\n        } else {\r\n          map.push({stream: item, items: [item]});\r\n        }\r\n\r\n        if (item.childrenItemsExpanded) {\r\n          iterate(item.childrenItems ?? []);\r\n        }\r\n      });\r\n    }\r\n\r\n    iterate(this._itemsIterator.items);\r\n    this.rows = map;\r\n  }\r\n\r\n  getRowIndexByItem(item: ITimelineItem): number {\r\n    let index;\r\n\r\n    for (let i = 0; i < this.rows.length; i++) {\r\n      const group = this.rows[i];\r\n\r\n      if (item.id === group.stream.id) {\r\n        index = i;\r\n        break;\r\n      }\r\n\r\n      const hasChild = group.items.find(i => i.id === item.id);\r\n      if (hasChild) {\r\n        index = i;\r\n      }\r\n    }\r\n\r\n    return index;\r\n  }\r\n\r\n  getStreamByRowIndex(index: number): ITimelineItem | undefined {\r\n    return this.rows[index]?.stream;\r\n  }\r\n}\r\n\r\n","import { DateHelpers } from \"./date-helpers\";\r\n\r\nexport function DatesCacheDecorator(): Function {\r\n    return function(target: any, methodName: string, descriptor: PropertyDescriptor) {\r\n        if (!target.__datesCache) {\r\n            target.__datesCache = new Map<string, unknown>();\r\n        }\r\n\r\n        const originalMethod = descriptor.value;\r\n\r\n        descriptor.value = function(...args: Date[]) {\r\n            const cacheKey = `${methodName}-${[...args].map(date => DateHelpers.generateDateId(date)).join('-')}`;\r\n\r\n            if (target.__datesCache.has(cacheKey)) {\r\n                return target.__datesCache.get(cacheKey);\r\n            }\r\n\r\n            const result = originalMethod.apply(this, args);\r\n            target.__datesCache.set(cacheKey, result);\r\n\r\n            return result;\r\n        };\r\n    };\r\n}\r\n","import {\r\n  DateInput,\r\n  IItemsIterator,\r\n  IScale,\r\n  IScaleColumn,\r\n  IScaleFormatter,\r\n  IScaleGenerator,\r\n  IScaleGeneratorConfig,\r\n  IScaleGroup\r\n} from \"../models\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { DateHelpers } from \"../helpers/date-helpers\";\r\nimport { DatesCacheDecorator } from \"../helpers/cache\";\r\n\r\n@Injectable()\r\nexport abstract class BaseScaleGenerator implements IScaleGenerator {\r\n  protected _config: IScaleGeneratorConfig;\r\n\r\n  public formatter: IScaleFormatter;\r\n\r\n  constructor() {\r\n    this._config = this._getConfig();\r\n    this.formatter = this._config.formatter;\r\n  }\r\n\r\n  protected abstract _getConfig(): IScaleGeneratorConfig;\r\n\r\n  protected abstract _validateStartDate(startDate: DateInput): Date;\r\n\r\n  protected abstract _validateEndDate(endDate: DateInput): Date;\r\n\r\n  protected abstract _generateGroups(date: Date): IScaleGroup[];\r\n\r\n  protected abstract _getColumnIndex(date: Date): number;\r\n\r\n  protected abstract _getNextColumnDate(date: Date): Date;\r\n\r\n  public getStartDate(itemsBuilder: IItemsIterator): Date {\r\n    if (this._config.getStartDate) {\r\n      return this._config.getStartDate(itemsBuilder);\r\n    }\r\n\r\n    const firstItem = itemsBuilder.getFirstItem(false);\r\n    const now = Date.now();\r\n    const firstItemTime = new Date(firstItem?.startDate ?? now).getTime();\r\n\r\n    return this._validateStartDate(firstItemTime < now ? firstItemTime : now);\r\n  }\r\n\r\n  public getEndDate(itemsBuilder: IItemsIterator): Date {\r\n    if (this._config.getEndDate) {\r\n      return this._config.getEndDate(itemsBuilder);\r\n    }\r\n\r\n    const lastItem = itemsBuilder.getLastItem(false);\r\n    const now = Date.now();\r\n    const lastItemDate = new Date(lastItem?.endDate ?? now);\r\n\r\n    return this._validateEndDate(lastItemDate.getTime() < now ? now : lastItemDate);\r\n  }\r\n\r\n  @DatesCacheDecorator()\r\n  generateScale(startDate: Date, endDate: Date): IScale {\r\n    let currentDate: Date = new Date(startDate);\r\n    const endTime: number = endDate.getTime();\r\n    const columns: IScaleColumn[] = [];\r\n    while (currentDate.getTime() <= endTime) {\r\n      const date = new Date(currentDate);\r\n      columns.push({\r\n        id: DateHelpers.generateDateId(date),\r\n        date: date,\r\n        index: this._getColumnIndex(date),\r\n        groups: this._generateGroups(date),\r\n      });\r\n\r\n      currentDate = this._getNextColumnDate(currentDate);\r\n    }\r\n\r\n    return {\r\n      startDate,\r\n      endDate,\r\n      columns\r\n    };\r\n  }\r\n}\r\n","import { IScaleColumn, IScaleFormatter, IScaleGroup } from \"../models\";\r\nimport { formatDate } from \"@angular/common\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\r\nexport class DayScaleFormatter implements IScaleFormatter {\r\n  formatColumn(column: IScaleColumn, columnWidth: number, locale: string): string {\r\n    if (columnWidth < 65)\r\n      return formatDate(column.date, 'dd', locale);\r\n\r\n    if (columnWidth > 180)\r\n      return formatDate(column.date, 'EEEE dd/MM', locale);\r\n\r\n    return formatDate(column.date, 'EEE dd/MM', locale);\r\n  }\r\n\r\n  formatGroup(group: IScaleGroup, locale: string): string {\r\n    return formatDate(group.date, 'LLLL', locale);\r\n  }\r\n}\r\n","import { BaseScaleGenerator } from './base-scale-generator';\r\nimport { DateInput, IScaleGenerator, IScaleGeneratorConfig, IScaleGroup } from '../models';\r\nimport { DateHelpers } from \"../helpers/date-helpers\";\r\nimport { inject, Injectable, InjectionToken } from \"@angular/core\";\r\nimport { DayScaleFormatter } from \"../formatters/day-scale-formatter\";\r\n\r\nexport const DAY_SCALE_GENERATOR_CONFIG = new InjectionToken<IScaleGeneratorConfig>('Day scale config');\r\n\r\n\r\nconst DefaultConfig: IScaleGeneratorConfig = {\r\n  formatter: new DayScaleFormatter(),\r\n}\r\n\r\n@Injectable()\r\nexport class DefaultDayScaleGenerator extends BaseScaleGenerator implements IScaleGenerator {\r\n  protected _getConfig(): IScaleGeneratorConfig {\r\n    return {...DefaultConfig, ...inject(DAY_SCALE_GENERATOR_CONFIG, {})};\r\n  }\r\n\r\n  protected _validateStartDate(startDate: DateInput): Date {\r\n    const countOfEmptyMonthsBefore = 1;\r\n    startDate = new Date(startDate);\r\n    startDate.setDate(1);\r\n    startDate = DateHelpers.dayBeginningTime(startDate);\r\n    startDate.setMonth(startDate.getMonth() - countOfEmptyMonthsBefore);\r\n\r\n    return startDate;\r\n  }\r\n\r\n  protected _validateEndDate(endDate: DateInput): Date {\r\n    const countOfEmptyMonthsAfter = 1;\r\n    endDate = new Date(endDate);\r\n    return new Date(DateHelpers.lastDayOfMonth(endDate).setMonth(endDate.getMonth() + countOfEmptyMonthsAfter));\r\n  }\r\n\r\n  protected _generateGroups(date: Date): IScaleGroup[] {\r\n    date = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0, 0);\r\n    return [{date, id: DateHelpers.generateDateId(date), coverageInPercents: 100}];\r\n  }\r\n\r\n  protected _getColumnIndex(date: Date): number {\r\n    return date.getDate();\r\n  }\r\n\r\n  protected _getNextColumnDate(date: Date): Date {\r\n    return new Date(date.setDate(date.getDate() + 1));\r\n  }\r\n}\r\n\r\n@Injectable()\r\nexport class DayScaleGenerator extends DefaultDayScaleGenerator {\r\n}\r\n","import { IScaleColumn, IScaleFormatter, IScaleGroup } from \"../models\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { formatDate, FormStyle, getLocaleDayNames, TranslationWidth } from \"@angular/common\";\r\n\r\n@Injectable()\r\nexport class WeekScaleFormatter implements IScaleFormatter {\r\n  formatColumn(column: IScaleColumn, columnWidth: number, locale: string): string {\r\n    if (columnWidth > 100) {\r\n      const days = getLocaleDayNames(locale, FormStyle.Format, TranslationWidth.Abbreviated);\r\n\r\n      return `${days[1]}-${days[0]} (${column.index})`\r\n    }\r\n\r\n    return String(column.index);\r\n  }\r\n\r\n  formatGroup(group: IScaleGroup, locale: string): string {\r\n    return formatDate(group.date, 'LLLL y', locale);\r\n  }\r\n}\r\n","import { BaseScaleGenerator } from './base-scale-generator';\r\nimport { DateInput, IScaleGenerator, IScaleGeneratorConfig, IScaleGroup } from '../models';\r\nimport { DateHelpers } from \"../helpers/date-helpers\";\r\nimport { WeekScaleFormatter } from \"../formatters/week-scale-formatter\";\r\nimport { inject, Injectable, InjectionToken } from \"@angular/core\";\r\n\r\nexport const WEEK_SCALE_GENERATOR_CONFIG = new InjectionToken<IScaleGeneratorConfig>('Week scale config');\r\n\r\nconst DefaultConfig: IScaleGeneratorConfig = {\r\n  formatter: new WeekScaleFormatter(),\r\n}\r\n\r\n@Injectable()\r\nexport class DefaultWeekScaleGenerator extends BaseScaleGenerator implements IScaleGenerator {\r\n  protected _getConfig(): IScaleGeneratorConfig {\r\n    return {...DefaultConfig, ...inject(WEEK_SCALE_GENERATOR_CONFIG, {})};\r\n  }\r\n\r\n  protected _validateStartDate(startDate: DateInput): Date {\r\n    const countOfEmptyMonthsBefore = 1;\r\n    const newDate: Date = new Date(startDate);\r\n    newDate.setMonth(newDate.getMonth() - countOfEmptyMonthsBefore);\r\n\r\n    return DateHelpers.firstMondayOfMonth(newDate);\r\n  }\r\n\r\n  protected _validateEndDate(endDate: DateInput): Date {\r\n    const countOfEmptyMonthsAfter = 1;\r\n    const newDate: Date = new Date(endDate);\r\n    newDate.setMonth(newDate.getMonth() + countOfEmptyMonthsAfter);\r\n\r\n    return DateHelpers.lastDayOfWeek(newDate);\r\n  }\r\n\r\n  protected _generateGroups(date: Date): IScaleGroup[] {\r\n    const weekStart: Date = DateHelpers.firstDayOfWeek(date);\r\n    const weekEnd: Date = DateHelpers.lastDayOfWeek(date);\r\n    const weekRelatedToTwoMonths: boolean = weekStart.getMonth() !== weekEnd.getMonth();\r\n\r\n    const weekStartGroupDate: Date = new Date(weekStart.getFullYear(), weekStart.getMonth(), 1, 0, 0, 0, 0);\r\n\r\n    const groups: IScaleGroup[] = [\r\n      {date: weekStartGroupDate, id: DateHelpers.generateDateId(weekStartGroupDate), coverageInPercents: 100}\r\n    ];\r\n\r\n    if (weekRelatedToTwoMonths) {\r\n      groups[0].coverageInPercents = (DateHelpers.getDaysInMonth(weekStart) - (weekStart.getDate() - 1)) / 7 * 100;\r\n\r\n      const weekEndGroupDate: Date = new Date(weekEnd.getFullYear(), weekEnd.getMonth(), 1, 0, 0, 0, 0);\r\n\r\n      groups.push({\r\n        date: weekEndGroupDate,\r\n        id: DateHelpers.generateDateId(weekEndGroupDate),\r\n        coverageInPercents: 100 - groups[0].coverageInPercents\r\n      })\r\n    }\r\n\r\n    return groups;\r\n  }\r\n\r\n  protected _getColumnIndex(date: Date): number {\r\n    const weekMonday: Date = DateHelpers.firstDayOfWeek(date);\r\n\r\n    return Math.ceil(weekMonday.getDate() / 7);\r\n  }\r\n\r\n  protected _getNextColumnDate(date: Date): Date {\r\n    return new Date(date.setDate(date.getDate() + 7));\r\n  }\r\n}\r\n\r\n@Injectable()\r\nexport class WeekScaleGenerator extends DefaultWeekScaleGenerator {\r\n}\r\n","import { IScaleColumn, IScaleFormatter, IScaleGroup } from \"../models\";\r\nimport { formatDate } from \"@angular/common\";\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n@Injectable()\r\nexport class MonthScaleFormatter implements IScaleFormatter {\r\n  formatColumn(column: IScaleColumn, columnWidth: number, locale: string): string {\r\n    if (columnWidth < 65)\r\n      return String(column.index);\r\n\r\n    if (columnWidth > 180)\r\n      return formatDate(column.date, 'LLLL', locale);\r\n\r\n    return formatDate(column.date, 'LLL', locale);\r\n  }\r\n\r\n  formatGroup(group: IScaleGroup, locale: string): string {\r\n    return String(group.date.getFullYear());\r\n  }\r\n}\r\n","import { BaseScaleGenerator } from './base-scale-generator';\r\nimport { DateInput, IScaleGenerator, IScaleGeneratorConfig, IScaleGroup } from '../models';\r\nimport { DateHelpers } from \"../helpers/date-helpers\";\r\nimport { inject, Injectable, InjectionToken } from \"@angular/core\";\r\nimport { MonthScaleFormatter } from \"../formatters/month-scale-formatter\";\r\n\r\nexport const MONTH_SCALE_GENERATOR_CONFIG = new InjectionToken<IScaleGeneratorConfig>('Month scale config');\r\n\r\nconst DefaultConfig: IScaleGeneratorConfig = {\r\n  formatter: new MonthScaleFormatter(),\r\n}\r\n\r\n@Injectable()\r\nexport class DefaultMonthScaleGenerator extends BaseScaleGenerator implements IScaleGenerator {\r\n  protected _getConfig(): IScaleGeneratorConfig {\r\n    return {...DefaultConfig, ...inject(MONTH_SCALE_GENERATOR_CONFIG, {})};\r\n  }\r\n\r\n  protected _validateStartDate(startDate: DateInput): Date {\r\n    const newDate = new Date(startDate);\r\n    const countOfEmptyYearsBefore = 1;\r\n    newDate.setDate(1);\r\n    newDate.setMonth(0);\r\n    newDate.setFullYear(newDate.getFullYear() - countOfEmptyYearsBefore);\r\n\r\n    return newDate;\r\n  }\r\n\r\n  protected _validateEndDate(endDate: DateInput): Date {\r\n    const newDate = DateHelpers.lastDayOfMonth(endDate);\r\n    const countOfEmptyYearsAfter = 1;\r\n    newDate.setMonth(11);\r\n    newDate.setFullYear(newDate.getFullYear() + countOfEmptyYearsAfter);\r\n\r\n    return newDate;\r\n  }\r\n\r\n  protected _generateGroups(date: Date): IScaleGroup[] {\r\n    date = new Date(date.getFullYear(), 1, 0, 0, 0, 0, 0);\r\n    return [{date, id: DateHelpers.generateDateId(date), coverageInPercents: 100}];\r\n  }\r\n\r\n  protected _getColumnIndex(date: Date): number {\r\n    return date.getMonth() + 1;\r\n  }\r\n\r\n  protected _getNextColumnDate(date: Date): Date {\r\n    return new Date(date.setMonth(date.getMonth() + 1));\r\n  }\r\n}\r\n\r\n@Injectable()\r\nexport class MonthScaleGenerator extends DefaultMonthScaleGenerator {\r\n}\r\n","import { IViewModeAdaptor } from \"../models\";\r\n\r\nexport abstract class BaseViewModeAdaptor implements IViewModeAdaptor {\r\n  abstract getBeginningDateOfColumn(date: Date): Date;\r\n  abstract getEndingDateOfColumn(date: Date): Date;\r\n  abstract addColumnToDate(date: Date, columns: number): Date;\r\n  abstract getUniqueColumnsWithinRange(date: Date, date2: Date): number;\r\n  abstract getDurationInColumns(startDate: Date, endDate: Date): number;\r\n\r\n  getMiddleDate(startDate: Date, endDate: Date): Date {\r\n    const uniqueColumns = this.getUniqueColumnsWithinRange(startDate, endDate);\r\n\r\n    return this.addColumnToDate(this.getBeginningDateOfColumn(startDate), uniqueColumns / 2);\r\n  }\r\n}\r\n","import { DatesCacheDecorator } from '../helpers/cache';\r\nimport { DateHelpers, MillisecondsToTime } from \"../helpers/date-helpers\";\r\nimport { BaseViewModeAdaptor} from \"./base-view-mode-adaptor\";\r\nimport { IViewModeAdaptor } from \"../models\";\r\n\r\nexport class DaysViewModeAdaptor extends BaseViewModeAdaptor implements IViewModeAdaptor {\r\n  @DatesCacheDecorator()\r\n  getUniqueColumnsWithinRange(start: Date, end: Date): number {\r\n    const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\r\n    const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\r\n\r\n    return Math.round(Math.abs((startDate.getTime() - endDate.getTime()) / MillisecondsToTime.Day)) + 1;\r\n  }\r\n\r\n  @DatesCacheDecorator()\r\n  getDurationInColumns(startDate: Date, endDate: Date): number {\r\n    return Math.abs((startDate.getTime() - endDate.getTime()) / MillisecondsToTime.Day);\r\n  }\r\n\r\n  addColumnToDate(date: Date, days: number): Date {\r\n    const newDate = new Date(date);\r\n    newDate.setDate(date.getDate() + days);\r\n    newDate.setHours(newDate.getHours() + ((days % 1) * 24));\r\n\r\n    return newDate;\r\n  }\r\n\r\n  getEndingDateOfColumn(date: Date): Date {\r\n    return DateHelpers.dayEndingTime(date);\r\n  }\r\n\r\n  getBeginningDateOfColumn(date: Date): Date {\r\n    return DateHelpers.dayBeginningTime(date);\r\n  }\r\n}\r\n","import { DatesCacheDecorator } from '../helpers/cache';\r\nimport { DateHelpers, MillisecondsToTime } from \"../helpers/date-helpers\";\r\nimport { BaseViewModeAdaptor} from \"./base-view-mode-adaptor\";\r\nimport { IViewModeAdaptor } from \"../models\";\r\n\r\nexport class WeeksViewModeAdaptor extends BaseViewModeAdaptor implements IViewModeAdaptor {\r\n  @DatesCacheDecorator()\r\n  getUniqueColumnsWithinRange(start: Date, end: Date): number {\r\n    const monday = DateHelpers.firstDayOfWeek(start);\r\n    const last = DateHelpers.lastDayOfWeek(end);\r\n\r\n    return Math.round(this.getDurationInColumns(monday, last));\r\n  }\r\n\r\n  @DatesCacheDecorator()\r\n  getDurationInColumns(startDate: Date, endDate: Date): number {\r\n    return Math.abs((startDate.getTime() - endDate.getTime()) / MillisecondsToTime.Week);\r\n  }\r\n\r\n  addColumnToDate(date: Date, weeks: number): Date {\r\n    const newDate = new Date(date);\r\n    newDate.setDate(date.getDate() + (7 * weeks));\r\n    newDate.setHours(newDate.getHours() + (((weeks / 7) % 1) * 24));\r\n\r\n    return newDate;\r\n  }\r\n\r\n  getBeginningDateOfColumn(date: Date): Date {\r\n    const start = DateHelpers.firstDayOfWeek(new Date(date));\r\n\r\n    return DateHelpers.dayBeginningTime(start);\r\n  }\r\n\r\n  getEndingDateOfColumn(date: Date): Date {\r\n    const end = DateHelpers.lastDayOfWeek(new Date(date));\r\n\r\n    return DateHelpers.dayEndingTime(end);\r\n  }\r\n}\r\n","import { DatesCacheDecorator } from '../helpers/cache';\r\nimport { DateHelpers } from \"../helpers/date-helpers\";\r\nimport { BaseViewModeAdaptor} from \"./base-view-mode-adaptor\";\r\nimport { IViewModeAdaptor } from \"../models\";\r\n\r\nexport class MonthsViewModeAdaptor extends BaseViewModeAdaptor implements IViewModeAdaptor {\r\n  getBeginningDateOfColumn(date: Date): Date {\r\n    const start = new Date(date);\r\n    start.setDate(1);\r\n\r\n    return DateHelpers.dayBeginningTime(start);\r\n  }\r\n\r\n  getEndingDateOfColumn(date: Date): Date {\r\n    const end = new Date(date);\r\n    end.setDate(DateHelpers.lastDayOfMonth(date).getDate());\r\n\r\n    return DateHelpers.dayEndingTime(end);\r\n  }\r\n\r\n  @DatesCacheDecorator()\r\n  getUniqueColumnsWithinRange(startDate: Date, endDate: Date): number {\r\n    const diff = this._getCountOfFullMonths(startDate, endDate);\r\n\r\n    return (diff < 0 ? 0 : diff) + 1;\r\n  }\r\n\r\n  @DatesCacheDecorator()\r\n  getDurationInColumns(startDate: Date, endDate: Date): number {\r\n    const diff = this._getCountOfFullMonths(startDate, endDate);\r\n    const firstMonthCompletedPercent = ((startDate.getDate() - 1) + (startDate.getHours() / 24)) / DateHelpers.getDaysInMonth(startDate);\r\n    const secondMonthCompletedPercent = ((endDate.getDate() - 1) + (endDate.getHours() / 24)) / DateHelpers.getDaysInMonth(endDate);\r\n\r\n    return diff - firstMonthCompletedPercent + secondMonthCompletedPercent;\r\n  }\r\n\r\n  addColumnToDate(date: Date, months: number): Date {\r\n    const newDate = new Date(date);\r\n    newDate.setMonth(date.getMonth() + months);\r\n    const days = DateHelpers.getDaysInMonth(newDate) * (months % 1);\r\n    newDate.setDate(newDate.getDate() + days);\r\n    newDate.setHours(newDate.getHours() + ((days % 1) * 24));\r\n\r\n    return newDate;\r\n  }\r\n\r\n  private _getCountOfFullMonths(startDate: Date, endDate: Date): number {\r\n    const yearsDiff = endDate.getFullYear() - startDate.getFullYear();\r\n    const startMonth = startDate.getMonth();\r\n    const endMonth = endDate.getMonth() + (12 * yearsDiff);\r\n\r\n    return endMonth - startMonth;\r\n  }\r\n}\r\n","import {\r\n  IViewModeAdaptor,\r\n  IScaleGenerator,\r\n  TimelineViewMode\r\n} from \"./models\";\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { DayScaleGenerator } from \"./scale-generator/day-scale-generator\";\r\nimport { WeekScaleGenerator } from \"./scale-generator/week-scale-generator\";\r\nimport { MonthScaleGenerator } from \"./scale-generator/month-scale-generator\";\r\nimport { DaysViewModeAdaptor } from \"./view-mode-adaptor/days-view-mode-adaptor\";\r\nimport { WeeksViewModeAdaptor } from \"./view-mode-adaptor/weeks-view-mode-adaptor\";\r\nimport { MonthsViewModeAdaptor } from \"./view-mode-adaptor/months-view-mode-adaptor\";\r\n\r\nexport interface IStrategyManager<ViewMode = TimelineViewMode> {\r\n  getScaleGenerator(viewMode: ViewMode): IScaleGenerator;\r\n\r\n  getViewModeAdaptor(viewMode: ViewMode): IViewModeAdaptor;\r\n}\r\n\r\n@Injectable()\r\nexport class DefaultStrategyManager<ViewMode> implements IStrategyManager<ViewMode> {\r\n  protected _generatorsDictionary = {\r\n    [TimelineViewMode.Day]: this._dayGenerator,\r\n    [TimelineViewMode.Week]: this._weekGenerator,\r\n    [TimelineViewMode.Month]: this._monthGenerator,\r\n  };\r\n\r\n  protected _calculatorsDictionary = {\r\n    [TimelineViewMode.Day]: new DaysViewModeAdaptor(),\r\n    [TimelineViewMode.Week]: new WeeksViewModeAdaptor(),\r\n    [TimelineViewMode.Month]: new MonthsViewModeAdaptor(),\r\n  };\r\n\r\n  constructor(@Inject(DayScaleGenerator) protected _dayGenerator: IScaleGenerator,\r\n              @Inject(WeekScaleGenerator) protected _weekGenerator: IScaleGenerator,\r\n              @Inject(MonthScaleGenerator) protected _monthGenerator: IScaleGenerator,\r\n  ) {\r\n  }\r\n\r\n  getViewModeAdaptor(viewMode: ViewMode): IViewModeAdaptor {\r\n    return this._calculatorsDictionary[viewMode as unknown as TimelineViewMode];\r\n  }\r\n\r\n  getScaleGenerator(viewMode: ViewMode): IScaleGenerator {\r\n    return this._generatorsDictionary[viewMode as unknown as TimelineViewMode];\r\n  }\r\n}\r\n\r\n@Injectable()\r\nexport class StrategyManager<ViewMode = TimelineViewMode> extends DefaultStrategyManager<ViewMode> {\r\n}\r\n","import {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  Output, Renderer2,\r\n  TemplateRef\r\n} from '@angular/core';\r\nimport { ResizeEvent } from \"angular-resizable-element\";\r\nimport { DragEndEvent } from \"angular-draggable-droppable/lib/draggable.directive\";\r\nimport { ITimelineItem, IScale } from \"../../models\";\r\n\r\n@Component({\r\n  selector: 'timeline-item',\r\n  templateUrl: './timeline-item.component.html',\r\n  styleUrls: ['./timeline-item.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TimelineItemComponent {\r\n  private _item: ITimelineItem;\r\n\r\n  private _scale: IScale;\r\n\r\n  isInScaleRange = true;\r\n\r\n  isItemResizingStarted = false;\r\n\r\n  @Input() set item(item: ITimelineItem | undefined) {\r\n    this._item = item;\r\n    item.updateView = () => this._cdr.detectChanges();\r\n    this._checkIsInScaleRange();\r\n  };\r\n\r\n  @Input() set scale(scale: IScale | undefined) {\r\n    this._scale = scale;\r\n    this._checkIsInScaleRange();\r\n  };\r\n\r\n  @Input() rowContainer: HTMLElement;\r\n\r\n  @Input() height: number;\r\n\r\n  @Input() rowHeight: number;\r\n\r\n  @Input() locale: string;\r\n\r\n  @Input() contentTemplate: TemplateRef<{ $implicit: ITimelineItem, locale: string }> | undefined;\r\n\r\n  @Output() itemResized = new EventEmitter<{ event: ResizeEvent, item: ITimelineItem }>();\r\n\r\n  @Output() itemMoved = new EventEmitter<{ event: DragEndEvent, item: ITimelineItem }>();\r\n\r\n  get item(): ITimelineItem {\r\n    return this._item;\r\n  }\r\n\r\n  constructor(private _cdr: ChangeDetectorRef,\r\n              private _renderer: Renderer2) {\r\n  }\r\n\r\n  onItemResizeStart(event: ResizeEvent): void {\r\n    this.isItemResizingStarted = true;\r\n    this._cdr.markForCheck();\r\n  }\r\n\r\n  onItemResizeEnd(event: ResizeEvent): void {\r\n    this.itemResized.emit({event, item: this._item});\r\n    setTimeout(() => this.isItemResizingStarted = false);\r\n  }\r\n\r\n  onItemDragStart(event): void {\r\n    this._setRowZIndex(1000);\r\n  }\r\n\r\n  onItemDropped(event: DragEndEvent): void {\r\n    if (!this.isItemResizingStarted) {\r\n      this.itemMoved.emit({event, item: this._item});\r\n    }\r\n\r\n    this._setRowZIndex(1);\r\n  }\r\n\r\n  private _checkIsInScaleRange(): void {\r\n    if (!this._item || !this._scale) {\r\n      return;\r\n    }\r\n\r\n    if (!this._item.startDate || !this._item.endDate) {\r\n      this.isInScaleRange = true;\r\n      this._cdr.markForCheck();\r\n      return;\r\n    }\r\n\r\n    this.isInScaleRange = this._scale.startDate.getTime() <= this._item.startDate.getTime()\r\n      && this._scale.endDate.getTime() >= this._item.endDate.getTime();\r\n    this._cdr.markForCheck();\r\n  }\r\n\r\n  private _setRowZIndex(index: number): void {\r\n    this._renderer.setStyle(this.rowContainer, 'z-index', index);\r\n  }\r\n}\r\n","<div class=\"timeline-item\"\r\n     *ngIf=\"isInScaleRange\"\r\n     ghostElementPositioning='absolute'\r\n     mwlResizable\r\n     mwlDraggable\r\n     [dragActiveClass]=\"'timeline-item_dragging'\"\r\n     (dragStart)='onItemDragStart($event)'\r\n     (dragEnd)='onItemDropped($event)'\r\n     (resizeEnd)='onItemResizeEnd($event)'\r\n     (resizeStart)='onItemResizeStart($event)'\r\n     [dragAxis]=\"{y: item.canDragY, x: item.canDragX}\"\r\n     [enableGhostResize]='true'\r\n     [dragSnapGrid]=\"{y: rowHeight}\"\r\n     [style.height.px]='height'\r\n     [style.left.px]='item?._left'\r\n     [style.width.px]='item?._width'>\r\n  <div class=\"item-custom-template\" *ngIf=\"contentTemplate; else nameTemplate\">\r\n    <ng-container [ngTemplateOutlet]=\"contentTemplate\"\r\n                  [ngTemplateOutletContext]=\"{$implicit: item, locale: locale}\"\r\n    ></ng-container>\r\n  </div>\r\n\r\n  <ng-template #nameTemplate>\r\n   <div class=\"default-content\">\r\n     {{item.name}}\r\n   </div>\r\n  </ng-template>\r\n\r\n  <div *ngIf='item.canResizeLeft'\r\n       [resizeEdges]='{ left: item.canResizeLeft }'\r\n       class='resize-handle-left'\r\n       mwlResizeHandle\r\n  ></div>\r\n  <div *ngIf='item.canResizeRight'\r\n       [resizeEdges]='{ right: item.canResizeRight }'\r\n       class='resize-handle-right'\r\n       mwlResizeHandle\r\n  ></div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, TemplateRef } from '@angular/core';\r\nimport { IScale } from \"../../models\";\r\n\r\n@Component({\r\n  selector: 'timeline-date-marker',\r\n  templateUrl: './timeline-date-marker.component.html',\r\n  styleUrls: ['./timeline-date-marker.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimelineDateMarkerComponent {\r\n  isInScaleRange: boolean = true;\r\n\r\n  @Input() leftPosition: number = 0;\r\n\r\n  @Input() headerHeight: number;\r\n\r\n  @Input() customTemplate: TemplateRef<{ leftPosition: number }> | undefined;\r\n\r\n  @Input() set scale(scale: IScale) {\r\n    this._checkIsInScaleRange(scale);\r\n  };\r\n\r\n  constructor(private _cdr: ChangeDetectorRef) {\r\n  }\r\n\r\n  private _checkIsInScaleRange(scale: IScale): void {\r\n    const now = Date.now();\r\n    this.isInScaleRange = scale.startDate.getTime() <= now && scale.endDate.getTime() >= now;\r\n    this._cdr.detectChanges();\r\n  }\r\n}\r\n","<ng-container *ngIf=\"isInScaleRange\">\r\n  <ng-container *ngIf=\"customTemplate; else defaultDateMarkerTemplate\"\r\n                [ngTemplateOutlet]=\"customTemplate\"\r\n                [ngTemplateOutletContext]=\"{leftPosition: leftPosition}\">\r\n  </ng-container>\r\n\r\n  <ng-template #defaultDateMarkerTemplate>\r\n    <div [style.left.px]=\"leftPosition\"\r\n         [style.height]=\"'calc(100% - ' + headerHeight + 'px)'\"\r\n         class='date-marker'></div>\r\n  </ng-template>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { IIdObject, ITimelineZoom, IScale, IScaleColumn, IScaleFormatter, IScaleGroup } from \"../../models\";\r\n\r\ninterface IGeneratedGroup {\r\n  id: string;\r\n\r\n  name: string;\r\n\r\n  width: number;\r\n}\r\n\r\n@Component({\r\n  selector: 'timeline-scale-header',\r\n  templateUrl: 'timeline-scale-header.component.html',\r\n  styleUrls: ['timeline-scale-header.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TimelineScaleHeaderComponent implements OnChanges {\r\n  @Input() height: number;\r\n\r\n  @Input() scale: IScale;\r\n\r\n  @Input() formatter: IScaleFormatter;\r\n\r\n  @Input() locale: string;\r\n\r\n  @Input() zoom: ITimelineZoom<any>;\r\n\r\n  public groups: IGeneratedGroup[] = [];\r\n\r\n  get columns(): IScaleColumn[] {\r\n    return this.scale?.columns ?? [];\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    this._generateGroups();\r\n  }\r\n\r\n  trackById(index: number, item: IIdObject): number | string {\r\n    return item.id;\r\n  }\r\n\r\n  private _groupColumnGroups(): { [groupId: string]: IScaleGroup[] } {\r\n    return this.scale.columns.reduce((groupsMap, column) => {\r\n      column.groups.forEach(group => {\r\n        groupsMap[group.id] = groupsMap[group.id] ?? [];\r\n        groupsMap[group.id].push(group);\r\n      });\r\n\r\n      return groupsMap;\r\n    }, {})\r\n  }\r\n\r\n  private _generateGroups(): void {\r\n    const groupedGroups = this._groupColumnGroups();\r\n\r\n    this.groups = Object.keys(groupedGroups).map(groupId => ({\r\n      id: groupId,\r\n      name: this.formatter.formatGroup(groupedGroups[groupId][0], this.locale),\r\n      width: groupedGroups[groupId].reduce((acc, curr) => acc + this.zoom.columnWidth * curr.coverageInPercents / 100, 0)\r\n    }));\r\n  }\r\n}\r\n\r\n\r\n","<div class='wrapper' [style.height.px]=\"height\">\r\n  <div class='groups' *ngIf=\"groups.length\">\r\n    <div *ngFor='let group of groups; trackBy: trackById; index as i'\r\n         [style.width.px]='group.width' class='group'>\r\n      <div>{{group.name}}</div>\r\n    </div>\r\n  </div>\r\n  <div class='columns'>\r\n    <div *ngFor='let column of columns; trackBy: trackById'>\r\n      <div class='column' [style.width.px]='zoom.columnWidth'>\r\n        {{formatter.formatColumn(column, zoom.columnWidth, locale)}}\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n","import {\r\n  ChangeDetectionStrategy, ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  Output,\r\n  SimpleChanges,\r\n  TemplateRef\r\n} from \"@angular/core\";\r\nimport { ResizeEvent } from \"angular-resizable-element\";\r\nimport { ITimelineItem, IIdObject } from \"../../models\";\r\n\r\n@Component({\r\n  selector: 'timeline-panel',\r\n  templateUrl: 'timeline-panel.component.html',\r\n  styleUrls: ['timeline-panel.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TimelinePanelComponent implements OnChanges {\r\n  @Input() items: ITimelineItem[] = [];\r\n\r\n  @Input() label: string;\r\n\r\n  @Input() width: number;\r\n\r\n  @Input() resizable: boolean;\r\n\r\n  @Input() minWidth: number;\r\n\r\n  @Input() maxWidth: number;\r\n\r\n  @Input() headerHeight: number;\r\n\r\n  @Input() rowHeight: number;\r\n\r\n  @Input() locale: string;\r\n\r\n  @Input() childGroupOffset: number = 15;\r\n\r\n  @Input() itemTemplate: TemplateRef<{ item: ITimelineItem, index: number, depth: number, locale: string }>\r\n\r\n  @Output() widthChanged = new EventEmitter<number>();\r\n\r\n  constructor(private _cdr: ChangeDetectorRef) {\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (Object.keys(changes).some(key => ['width', 'minWidth', 'maxWidth'].includes(key))) {\r\n      this._validateWidth();\r\n    }\r\n  }\r\n\r\n  trackById(index: number, item: IIdObject): number | string {\r\n    return item.id;\r\n  }\r\n\r\n  handleResize(event: ResizeEvent) {\r\n    const newWidth = event.rectangle.width;\r\n\r\n    if (newWidth < this.minWidth || newWidth > this.maxWidth)\r\n      return;\r\n\r\n    this.width = newWidth;\r\n    this.widthChanged.emit(this.width);\r\n  }\r\n\r\n  toggleExpand(item: ITimelineItem): void {\r\n    item.childrenItemsExpanded = !item.childrenItemsExpanded;\r\n    this._cdr.markForCheck();\r\n  }\r\n\r\n  private _validateWidth(): void {\r\n    if (this.width < this.minWidth) {\r\n      this.width = this.minWidth;\r\n    }\r\n\r\n    if (this.width > this.maxWidth) {\r\n      this.width = this.maxWidth;\r\n    }\r\n  }\r\n}\r\n","<div class='panel resize-handle-right'\r\n     mwlResizable\r\n     (resizing)='handleResize($event)'\r\n     [style.width.px]='width'>\r\n\r\n  <div mwlResizeHandle [resizeEdges]=\"{right: resizable}\"></div>\r\n\r\n  <div class='label' [style.height.px]=\"headerHeight\">{{label}}</div>\r\n\r\n  <ng-container *ngFor='let item of items; trackBy: trackById; let index = index'\r\n                [ngTemplateOutlet]='itemsIterationTemplate'\r\n                [ngTemplateOutletContext]='{item: item, index: index, depth: 0}'>\r\n  </ng-container>\r\n\r\n  <ng-template #itemsIterationTemplate let-item='item' let-index='index' let-depth='depth'>\r\n\r\n    <ng-container [ngTemplateOutlet]='itemTemplate || defaultItemTemplate'\r\n                  [ngTemplateOutletContext]='{item: item, index: index, depth: depth, locale: locale}'>\r\n    </ng-container>\r\n    \r\n    <div *ngIf='item.childrenItemsExpanded'>\r\n      <ng-container *ngFor='let innerItem of (item.childrenItems || []); trackBy: trackById;  let index = index'\r\n                    [ngTemplateOutletContext]='{item: innerItem, index: index, depth: depth + 1, locale: locale}'\r\n                    [ngTemplateOutlet]='itemsIterationTemplate'\r\n      ></ng-container>\r\n    </div>\r\n  </ng-template>\r\n</div>\r\n\r\n<ng-template #defaultItemTemplate let-item='item' let-index='index' let-depth='depth'>\r\n  <div [style.height.px]='rowHeight * (item.streamItems ? item?._streamLevels?.length || 1 : 1)'\r\n       [style.width.px]='width'\r\n       [class.can-collapse]='item.childrenItems && item.childrenItems.length'\r\n       class='panel-item'>\r\n\r\n    <div [style.marginLeft.px]='depth * childGroupOffset' (click)='toggleExpand(item)' class='item-content'>\r\n      <div class='collapse-icon'\r\n           [class.collapsed]='!item.childrenItemsExpanded'>\r\n      </div>\r\n\r\n      <span class='item-name' title=\"{{item.name}}\">{{item.name}}</span>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n","import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  HostListener,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  Output,\r\n  PLATFORM_ID,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport { ResizeEvent } from 'angular-resizable-element';\r\nimport { interval, Subject, takeUntil } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport {\r\n  IViewModeAdaptor,\r\n  IIdObject,\r\n  IItemsIterator,\r\n  IScale,\r\n  IScaleGenerator,\r\n  ITimelineItem,\r\n  ITimelineZoom, IZoomsHandler, IScaleColumn, IItemTimeChangedEvent, IItemRowChangedEvent, TimelineViewMode\r\n} from './models';\r\nimport { isPlatformBrowser } from \"@angular/common\";\r\nimport { MillisecondsToTime } from \"./helpers/date-helpers\";\r\nimport { ItemsIterator } from \"./items-iterator/items-iterator\";\r\nimport { ZoomsHandler } from \"./zooms-handler/zooms-handler\";\r\nimport { DefaultZooms } from \"./zooms-handler/zooms\";\r\nimport { DragEndEvent } from \"angular-draggable-droppable/lib/draggable.directive\";\r\nimport { StrategyManager } from \"./strategy-manager\";\r\nimport { RowDeterminant } from \"./helpers/row-determinant\";\r\n\r\n@Component({\r\n  selector: 'timeline-calendar',\r\n  templateUrl: './timeline.component.html',\r\n  styleUrls: ['./timeline.component.scss'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TimelineComponent<ViewMode = TimelineViewMode> implements AfterViewInit, OnDestroy {\r\n  /**\r\n   * Indicates the current shown date in the middle of user`s screen.\r\n   */\r\n  public currentDate: Date = new Date();\r\n\r\n  /**\r\n   *  Scale generator changes depending on current view type.\r\n   */\r\n  public scaleGenerator: IScaleGenerator;\r\n\r\n  /**\r\n   * View mode adaptor changes depending on current view type.\r\n   */\r\n  public viewModeAdaptor: IViewModeAdaptor;\r\n\r\n  public dateMarkerLeftPosition: number = 0;\r\n\r\n  public scale: IScale | undefined;\r\n\r\n  public itemsIterator: IItemsIterator = new ItemsIterator();\r\n\r\n  public zoomsHandler: IZoomsHandler<ViewMode> = new ZoomsHandler<ViewMode>(DefaultZooms as any);\r\n\r\n  private _ignoreNextScrollEvent: boolean = false;\r\n\r\n  private _destroy$: Subject<void> = new Subject<void>();\r\n\r\n  /**\r\n   * Emits event when startDate and endDate of some item was changed by resizing/moving it.\r\n   */\r\n  @Output() itemTimeChanged: EventEmitter<IItemTimeChangedEvent> = new EventEmitter();\r\n\r\n  /**\r\n   * Emits event when item was moved by Y axis.\r\n   */\r\n  @Output() itemRowChanged: EventEmitter<IItemRowChangedEvent> = new EventEmitter();\r\n\r\n  /**\r\n   * Emits event when current zoom was changed.\r\n   */\r\n  @Output() zoomChanged: EventEmitter<ITimelineZoom<ViewMode>> = new EventEmitter<ITimelineZoom<ViewMode>>();\r\n\r\n  /**\r\n   * Emits event when user clicked somewhere on time grid.\r\n   */\r\n  @Output() timeGridClicked: EventEmitter<{originalEvent: Event, row: ITimelineItem, column: IScaleColumn}> = new EventEmitter();\r\n\r\n  /**\r\n   * The locale used to format dates. By default is 'en'\r\n   */\r\n  @Input() locale: string = 'en';\r\n\r\n  /**\r\n   * Height of the each row in pixels. By default is 40.\r\n   */\r\n  @Input() rowHeight: number = 40;\r\n\r\n  /**\r\n   * Height of the each timeline item in pixels. Can't be bigger then 'rowHeight' property. By default is 30.\r\n   */\r\n  @Input() itemHeight: number = 30;\r\n\r\n  /**\r\n   * Height of top dates panel in pixels. By default is 60.\r\n   */\r\n  @Input() headerHeight: number = 60;\r\n\r\n  /**\r\n   * The label of left panel. By default is empty.\r\n   */\r\n  @Input() panelLabel: string = '';\r\n\r\n  /**\r\n   * Width of left panel in pixels. By default is 160.\r\n   */\r\n  @Input() panelWidth: number = 160;\r\n\r\n  /**\r\n   * Minimal width of left panel in pixels. By default is 50.\r\n   */\r\n  @Input() minPanelWidth: number = 50;\r\n\r\n  /**\r\n   * Maximal width of left panel in pixels. By default is 400.\r\n   */\r\n  @Input() maxPanelWidth: number = 400;\r\n\r\n  /**\r\n   *  Sets the left displacement in pixels between parent and child groups in left panel. By default is 15.\r\n   */\r\n  @Input() offsetForChildPanelItem: number = 15;\r\n\r\n  /**\r\n   * Can resize panel. By default is true.\r\n   */\r\n  @Input() isPanelResizable: boolean = true;\r\n\r\n  /**\r\n   * If false then date marker will be not visible.\r\n   */\r\n  @Input() showDateMarket: boolean = true;\r\n\r\n  /**\r\n   * Custom template for item in left panel.\r\n   */\r\n  @Input() panelItemTemplate: TemplateRef<{ item: ITimelineItem, index: number, depth: number, locale: string }>\r\n\r\n  /**\r\n   * Custom template for item in timeline.\r\n   */\r\n  @Input() itemContentTemplate: TemplateRef<{ $implicit: ITimelineItem, locale: string }> | undefined;\r\n\r\n  /**\r\n   * Custom template for separators between columns.\r\n   */\r\n  @Input() columnSeparatorTemplate: TemplateRef<{column: IScaleColumn, index: number, columnWidth: number, headerHeight: number}> | undefined;\r\n\r\n  /**\r\n   * Custom template for marker that indicates current time.\r\n   */\r\n  @Input() dateMarkerTemplate: TemplateRef<{ leftPosition: number }> | undefined;\r\n\r\n  /**\r\n   * Register array of custom zooms.\r\n   * Current zoom can be changed to any existed in this array by calling method \"changeZoom()\"\r\n   */\r\n  @Input() set zooms(value: ITimelineZoom<ViewMode>[]) {\r\n    this.zoomsHandler.setZooms(value);\r\n  }\r\n\r\n  /**\r\n   * The items of timeline.\r\n   */\r\n  @Input()\r\n  set items(items: ITimelineItem[]) {\r\n    this.itemsIterator.setItems(items);\r\n    this.redraw();\r\n  }\r\n\r\n  /**\r\n   * Visible timeline width (container visible width - panel width = timeline visible width).\r\n   */\r\n  get visibleScaleWidth(): number {\r\n    return this._elementRef.nativeElement.clientWidth - this.panelWidth;\r\n  }\r\n\r\n  /**\r\n   * Active zoom.\r\n   */\r\n  get zoom(): ITimelineZoom<ViewMode> {\r\n    return this.zoomsHandler.activeZoom;\r\n  }\r\n\r\n  /**\r\n   * Registered zooms list.\r\n   */\r\n  get zooms(): ITimelineZoom<ViewMode>[] {\r\n    return this.zoomsHandler.zooms;\r\n  }\r\n\r\n  constructor(private _cdr: ChangeDetectorRef,\r\n              private _strategyManager: StrategyManager<ViewMode>,\r\n              @Inject(ElementRef) private _elementRef: ElementRef,\r\n              @Inject(PLATFORM_ID) private _platformId: object) {\r\n    this._setStrategies(this.zoom);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.zoomsHandler.activeZoom$\r\n      .pipe(takeUntil(this._destroy$))\r\n      .subscribe((zoom) => {\r\n        this._setStrategies(zoom);\r\n        this.redraw();\r\n        this.zoomChanged.emit(zoom);\r\n      });\r\n\r\n    if (isPlatformBrowser(this._platformId)) {\r\n      interval(MillisecondsToTime.Minute)\r\n        .pipe(startWith(''), takeUntil(this._destroy$))\r\n        .subscribe(() => this._recalculateDateMarkerPosition());\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Recalculate and update view.\r\n   */\r\n  redraw(): void {\r\n    this._generateScale();\r\n    this._updateItemsPosition();\r\n    this.itemsIterator.setItems([...this.itemsIterator.items]);\r\n    this._recalculateDateMarkerPosition();\r\n    this._ignoreNextScrollEvent = true;\r\n    this._cdr.detectChanges();\r\n    this.attachCameraToDate(this.currentDate);\r\n  }\r\n\r\n  /**\r\n   * Set horizontal scroll in the middle of the date\r\n   */\r\n  attachCameraToDate(date: Date): void {\r\n    this.currentDate = date;\r\n    const duration = this.viewModeAdaptor.getDurationInColumns(this.scale.startDate, date);\r\n    const scrollLeft = (duration * this.zoom.columnWidth) - (this.visibleScaleWidth / 2);\r\n    this._ignoreNextScrollEvent = true;\r\n\r\n    if (this._elementRef.nativeElement) {\r\n      this._elementRef.nativeElement.scrollLeft = scrollLeft < 0 ? 0 : scrollLeft;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Automatically chooses the most optimal zoom and sets horizontal scroll to the center of the items.\r\n   * Padding sets minimal spacing from left and right to the first and last items.\r\n   */\r\n  fitToContent(paddings: number): void {\r\n    const firstItem = this.itemsIterator.getFirstItem(true);\r\n    const lastItem = this.itemsIterator.getLastItem(true);\r\n\r\n    if (!firstItem || !lastItem)\r\n      return;\r\n\r\n    const startDate = new Date(firstItem.startDate);\r\n    const endDate = new Date(lastItem.endDate);\r\n    const zoom = this._calculateOptimalZoom(startDate, endDate, paddings);\r\n    const viewModeAdaptor = this._strategyManager.getViewModeAdaptor(zoom.viewMode);\r\n\r\n    this.currentDate = new Date(viewModeAdaptor.getMiddleDate(startDate, endDate));\r\n\r\n    if (this.zoomsHandler.isZoomActive(zoom)) {\r\n      this.attachCameraToDate(this.currentDate);\r\n    } else {\r\n      this.changeZoom(zoom);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Change zoom to one of the existed\r\n   */\r\n  changeZoom(zoom: ITimelineZoom<ViewMode>): void {\r\n    this.zoomsHandler.changeActiveZoom(zoom);\r\n  }\r\n\r\n  /**\r\n   * Find zoom by its index and change\r\n   */\r\n  changeZoomByIndex(index: number): void {\r\n    const zoom = this.zoomsHandler.zooms.find(zoom => zoom.index === index);\r\n    if (zoom) {\r\n      this.zoomsHandler.changeActiveZoom(zoom);\r\n    } else {\r\n      console.error(`Cannot find zoom with index ${index}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Changes zoom to the max value\r\n   */\r\n  zoomFullIn(): void {\r\n    this.zoomsHandler.changeActiveZoom(this.zoomsHandler.getLastZoom());\r\n  }\r\n\r\n  /**\r\n   * Changes zoom to the min value\r\n   */\r\n  zoomFullOut(): void {\r\n    this.zoomsHandler.changeActiveZoom(this.zoomsHandler.getFirstZoom());\r\n  }\r\n\r\n  /**\r\n   * Changes zoom for 1 step back\r\n   */\r\n  zoomIn(): void {\r\n    this.zoomsHandler.zoomIn();\r\n  }\r\n\r\n  /**\r\n   * Changes zoom for 1 step forward\r\n   */\r\n  zoomOut(): void {\r\n    this.zoomsHandler.zoomOut();\r\n  }\r\n\r\n  /**\r\n   * Accepts the relative coordinates to the timeline container and returns the row and column.\r\n   */\r\n  getCellByCoordinates(x: number, y: number): {row: ITimelineItem | undefined, column: IScaleColumn} {\r\n    const rowDeterminant = new RowDeterminant(this.itemsIterator);\r\n    const rowIndex = Math.floor((y - this.headerHeight) / this.rowHeight);\r\n    const row: ITimelineItem = rowDeterminant.getStreamByRowIndex(rowIndex);\r\n\r\n    const columnIndex = Math.floor((x - this.panelWidth) / this.zoom.columnWidth);\r\n    const column: IScaleColumn = this.scale.columns[columnIndex];\r\n\r\n    return {column, row};\r\n  }\r\n\r\n  _getCurrentDate(): Date {\r\n    const currentScrollLeft = this._elementRef.nativeElement.scrollLeft ?? 0;\r\n    const scrollLeftToCenterScreen = currentScrollLeft + (this.visibleScaleWidth / 2);\r\n    const columns = Math.round(scrollLeftToCenterScreen / this.zoom.columnWidth);\r\n\r\n    return this.viewModeAdaptor.addColumnToDate(this.scale.startDate, columns);\r\n  }\r\n\r\n  _onItemMoved(event: DragEndEvent, item: ITimelineItem): void {\r\n    if (event.y) {\r\n      this._onItemMovedVertically(event, item);\r\n    }\r\n\r\n    if (event.x) {\r\n      this._onItemMovedHorizontally(event, item);\r\n    }\r\n  }\r\n\r\n  private _onItemMovedHorizontally(event: DragEndEvent, item: ITimelineItem): void {\r\n    const transferColumns = Math.round(event.x / this.zoom.columnWidth);\r\n    const newStartDate = this.viewModeAdaptor.addColumnToDate(new Date(item.startDate), transferColumns);\r\n    const newEndDate = this.viewModeAdaptor.addColumnToDate(new Date(item.endDate), transferColumns);\r\n    this.itemTimeChanged.emit({item, newStartDate, newEndDate});\r\n  }\r\n\r\n  private _onItemMovedVertically(event: DragEndEvent, item: ITimelineItem): void {\r\n    const rowDeterminant = new RowDeterminant(this.itemsIterator);\r\n    const rowIndex = rowDeterminant.getRowIndexByItem(item);\r\n    const transferRows = event.y / this.rowHeight;\r\n    const newRowIndex = rowIndex + transferRows;\r\n\r\n    if (rowIndex === newRowIndex)\r\n      return;\r\n\r\n    const oldRow = rowDeterminant.getStreamByRowIndex(rowIndex);\r\n    const newRow = rowDeterminant.getStreamByRowIndex(newRowIndex);\r\n\r\n    this.itemRowChanged.emit({item, oldRow, newRow});\r\n  }\r\n\r\n  private _calculateOptimalZoom(startDate: Date, endDate: Date, paddings = 15): ITimelineZoom<ViewMode> {\r\n    let possibleZoom: ITimelineZoom<ViewMode> = this.zoomsHandler.getFirstZoom();\r\n\r\n    for (let i = this.zoomsHandler.getLastZoom().index; i >= this.zoomsHandler.getFirstZoom().index; i--) {\r\n      const currentZoom = this.zoomsHandler.zooms[i];\r\n      const viewModeAdaptor = this._strategyManager.getViewModeAdaptor(currentZoom.viewMode);\r\n      const countOfColumns = viewModeAdaptor.getUniqueColumnsWithinRange(startDate, endDate);\r\n\r\n      if (countOfColumns * currentZoom.columnWidth < (this.visibleScaleWidth - paddings * 2)) {\r\n        possibleZoom = currentZoom;\r\n        break;\r\n      }\r\n    }\r\n\r\n    return possibleZoom;\r\n  }\r\n\r\n  _trackById(index: number, item: IIdObject): number | string {\r\n    return item.id;\r\n  }\r\n\r\n  _handleContentClick(event: MouseEvent): void {\r\n    const scrollLeft: number = this._elementRef.nativeElement.scrollLeft;\r\n    const scrollTop: number = this._elementRef.nativeElement.scrollTop;\r\n    const rect = this._elementRef.nativeElement.getBoundingClientRect();\r\n    const xClick = event.clientX - rect.left + scrollLeft;\r\n    const yClick = event.clientY - rect.top + scrollTop;\r\n    const cell = this.getCellByCoordinates(xClick, yClick);\r\n\r\n    this.timeGridClicked.emit({originalEvent: event, column: cell.column, row: cell.row});\r\n  }\r\n\r\n  _onItemResized(event: ResizeEvent, item: ITimelineItem): void {\r\n    const calculateNewDate = (movedPx: number, oldDate: Date): Date => {\r\n      const countOfColumnsMoved = Math.round(movedPx as number / this.zoom.columnWidth);\r\n      return this.viewModeAdaptor.addColumnToDate(oldDate, countOfColumnsMoved);\r\n    }\r\n\r\n    if (event.edges.left) {\r\n      const newStartDate = calculateNewDate(<number>event.edges.left, new Date(item.startDate));\r\n      const isNewStartDateValid: boolean =\r\n        this.viewModeAdaptor.getBeginningDateOfColumn(newStartDate).getTime() <= new Date(item.endDate).getTime();\r\n      if (isNewStartDateValid) {\r\n        this.itemTimeChanged.emit({item, newStartDate});\r\n      }\r\n    } else {\r\n      const newEndDate = calculateNewDate(<number>event.edges.right, new Date(item.endDate));\r\n      const isNewEndDateValid: boolean =\r\n        this.viewModeAdaptor.getEndingDateOfColumn(newEndDate).getTime() >= new Date(item.startDate).getTime();\r\n      if (isNewEndDateValid) {\r\n        this.itemTimeChanged.emit({item, newEndDate});\r\n      }\r\n    }\r\n  }\r\n\r\n  @HostListener('scroll', ['$event'])\r\n  private _onScroll(event: Event): void {\r\n    if (!this._ignoreNextScrollEvent) {\r\n      this.currentDate = this._getCurrentDate();\r\n    }\r\n    this._ignoreNextScrollEvent = false;\r\n  }\r\n\r\n  private _generateScale(): void {\r\n    const scaleStartDate = this.scaleGenerator.getStartDate(this.itemsIterator);\r\n    const scaleEndDate = this.scaleGenerator.getEndDate(this.itemsIterator);\r\n    this.scale = this.scaleGenerator.generateScale(scaleStartDate, scaleEndDate);\r\n  }\r\n\r\n  private _updateItemsPosition(): void {\r\n    this.itemsIterator.forEach((item) => this._updateItemPosition(item));\r\n  }\r\n\r\n  private _updateItemPosition(item: ITimelineItem<ViewMode>): void {\r\n    item._width = this._calculateItemWidth(item);\r\n    item._left = this._calculateItemLeftPosition(item);\r\n    item.updateView && item.updateView();\r\n  }\r\n\r\n  private _calculateItemLeftPosition(item: ITimelineItem<ViewMode>): number {\r\n    if (!item.startDate || !item.endDate)\r\n      return 0;\r\n\r\n    const columnsOffsetFromStart = this.viewModeAdaptor.getUniqueColumnsWithinRange(this.scale.startDate, new Date(item.startDate)) - 1;\r\n\r\n    return columnsOffsetFromStart * this.zoom.columnWidth;\r\n  }\r\n\r\n  private _calculateItemWidth(item: ITimelineItem<ViewMode>): number {\r\n    if (!item.startDate || !item.endDate)\r\n      return 0;\r\n\r\n    const columnsOccupied = this.viewModeAdaptor.getUniqueColumnsWithinRange(new Date(item.startDate), new Date(item.endDate));\r\n\r\n    return columnsOccupied * this.zoom.columnWidth;\r\n  }\r\n\r\n  private _recalculateDateMarkerPosition(): void {\r\n    const countOfColumns = this.viewModeAdaptor.getDurationInColumns(this.scale.startDate, new Date());\r\n\r\n    this.dateMarkerLeftPosition = countOfColumns * this.zoom.columnWidth;\r\n  }\r\n\r\n  private _setStrategies(zoom: ITimelineZoom<ViewMode>): void {\r\n    this.viewModeAdaptor = this._strategyManager.getViewModeAdaptor(zoom.viewMode);\r\n    this.scaleGenerator = this._strategyManager.getScaleGenerator(zoom.viewMode);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this._destroy$.next();\r\n    this._destroy$.complete();\r\n  }\r\n}\r\n","<timeline-panel\r\n  (widthChanged)=\"panelWidth = $event\"\r\n  [width]=\"panelWidth\"\r\n  [maxWidth]=\"maxPanelWidth\"\r\n  [minWidth]=\"minPanelWidth\"\r\n  [resizable]=\"isPanelResizable\"\r\n  [itemTemplate]=\"panelItemTemplate\"\r\n  [label]=\"panelLabel\"\r\n  [headerHeight]=\"headerHeight\"\r\n  [items]=\"itemsIterator.items\"\r\n  [locale]=\"locale\"\r\n  [childGroupOffset]=\"offsetForChildPanelItem\"\r\n  [rowHeight]=\"rowHeight\">\r\n</timeline-panel>\r\n\r\n<div class='content-wrapper' (click)=\"_handleContentClick($event)\">\r\n  <timeline-scale-header\r\n    [height]=\"headerHeight\"\r\n    [formatter]=\"scaleGenerator.formatter\"\r\n    [zoom]='zoom'\r\n    [scale]='scale'\r\n    [locale]=\"locale\"\r\n  ></timeline-scale-header>\r\n\r\n  <div class=\"column-separators\">\r\n    <ng-container *ngFor='let date of scale?.columns; index as i; trackBy: _trackById'>\r\n      <div class=\"line\" *ngIf=\"!columnSeparatorTemplate\"\r\n           [style.left.px]='zoom.columnWidth * (i + 1)'\r\n           [style.height]=\"'calc(100% - ' + headerHeight + 'px)'\">\r\n      </div>\r\n\r\n      <ng-template [ngTemplateOutlet]=\"columnSeparatorTemplate\"\r\n                   [ngTemplateOutletContext]=\"{column: date, index: i, columnWidth: zoom.columnWidth, headerHeight: headerHeight}\">\r\n      </ng-template>\r\n    </ng-container>\r\n  </div>\r\n\r\n  <timeline-date-marker *ngIf=\"showDateMarket\"\r\n                        [leftPosition]=\"dateMarkerLeftPosition\"\r\n                        [headerHeight]=\"headerHeight\"\r\n                        [scale]=\"scale\"\r\n                        [customTemplate]=\"dateMarkerTemplate\"\r\n  ></timeline-date-marker>\r\n\r\n  <div class='timeline-items' *ngIf=\"!itemsIterator.isEmpty()\">\r\n    <ng-container *ngFor='let group of itemsIterator.items; trackBy: _trackById;'>\r\n      <ng-container *ngIf=\"!group.streamItems\">\r\n        <div [style.height.px]='rowHeight' #rowContainer class='item-row'>\r\n          <ng-container [ngTemplateOutlet]='itemTemplate'\r\n                        [ngTemplateOutletContext]='{$implicit: group, rowContainer: rowContainer}'\r\n          ></ng-container>\r\n        </div>\r\n      </ng-container>\r\n\r\n      <ng-container [ngTemplateOutlet]='itemsIterationTemplate'\r\n                    [ngTemplateOutletContext]='{$implicit: group}'\r\n      ></ng-container>\r\n    </ng-container>\r\n\r\n    <ng-template #itemTemplate let-item let-rowContainer=\"rowContainer\">\r\n      <timeline-item [item]='item'\r\n                     [rowContainer]='rowContainer'\r\n                     [scale]=\"scale\"\r\n                     [height]=\"itemHeight\"\r\n                     [rowHeight]=\"rowHeight\"\r\n                     [locale]=\"locale\"\r\n                     (itemResized)=\"_onItemResized($event.event, $event.item)\"\r\n                     (itemMoved)=\"_onItemMoved($event.event, $event.item)\"\r\n                     [contentTemplate]='itemContentTemplate'\r\n      ></timeline-item>\r\n    </ng-template>\r\n\r\n    <ng-template #itemsIterationTemplate let-group>\r\n        <div *ngFor='let streamLevel of (group._streamLevels || []); trackBy: _trackById;'>\r\n          <div [style.height.px]='rowHeight' class='item-row' #rowContainer>\r\n            <ng-container *ngFor=\"let item of streamLevel\">\r\n              <ng-container [ngTemplateOutlet]=\"itemTemplate\"\r\n                            [ngTemplateOutletContext]=\"{$implicit: item, rowContainer: rowContainer}\"\r\n              ></ng-container>\r\n            </ng-container>\r\n          </div>\r\n        </div>\r\n\r\n      <div [style.height.px]='rowHeight' class='item-row' *ngIf=\"group?._streamLevels?.length === 0\">\r\n      </div>\r\n\r\n      <ng-container *ngIf='group.childrenItemsExpanded'>\r\n        <div *ngFor='let item of (group.childrenItems || []); trackBy: _trackById;'>\r\n          <div [style.height.px]='rowHeight' *ngIf=\"!item.streamItems\" class='item-row' #rowContainer>\r\n            <ng-container [ngTemplateOutlet]=\"itemTemplate\"\r\n                          [ngTemplateOutletContext]=\"{$implicit: item, rowContainer: rowContainer}\"\r\n            ></ng-container>\r\n          </div>\r\n\r\n          <ng-container [ngTemplateOutlet]='itemsIterationTemplate'\r\n                        [ngTemplateOutletContext]='{$implicit: item}'\r\n          ></ng-container>\r\n        </div>\r\n      </ng-container>\r\n    </ng-template>\r\n  </div>\r\n</div>\r\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TimelineComponent } from './timeline.component';\r\nimport { TimelineItemComponent } from './components/item/timeline-item.component';\r\nimport { ResizableModule } from 'angular-resizable-element';\r\nimport { DragAndDropModule } from 'angular-draggable-droppable';\r\nimport { TimelineDateMarkerComponent } from './components/date-marker/timeline-date-marker.component';\r\nimport { TimelineScaleHeaderComponent } from './components/scale-header/timeline-scale-header.component';\r\nimport { DAY_SCALE_GENERATOR_CONFIG, DayScaleGenerator } from \"./scale-generator/day-scale-generator\";\r\nimport { WEEK_SCALE_GENERATOR_CONFIG, WeekScaleGenerator } from \"./scale-generator/week-scale-generator\";\r\nimport { MONTH_SCALE_GENERATOR_CONFIG, MonthScaleGenerator } from \"./scale-generator/month-scale-generator\";\r\nimport { TimelinePanelComponent } from \"./components/panel/timeline-panel.component\";\r\nimport { IScaleGeneratorConfig, ITimelineZoom } from \"./models\";\r\nimport { StrategyManager } from \"./strategy-manager\";\r\n\r\ninterface ITimelineModuleInitializationConfig {\r\n  /**\r\n   * Provide it when you want to extend current timeline logic and add some new view types.\r\n   * Should be provided StrategyManager class with IStrategyManager implementation.\r\n   */\r\n  strategyManager?: Provider;\r\n\r\n  /**\r\n   * Should be provided DayScaleGenerator class with IScaleGenerator implementation.\r\n   */\r\n  dayScaleGenerator?: Provider;\r\n\r\n  /**\r\n   * Should be provided WeekScaleGenerator class with IScaleGenerator implementation.\r\n   */\r\n  weekScaleGenerator?: Provider;\r\n\r\n  /**\r\n   * Should be provided MonthScaleGenerator class with IScaleGenerator implementation.\r\n   */\r\n  monthScaleGenerator?: Provider;\r\n\r\n  /**\r\n   * List of zooms.\r\n   */\r\n  zooms?: ITimelineZoom[];\r\n\r\n  /**\r\n   * Settings for the scale generation in day mode.\r\n   */\r\n  dayScaleConfig?: Partial<IScaleGeneratorConfig>;\r\n\r\n  /**\r\n   * Settings for the scale generation in week mode.\r\n   */\r\n  weekScaleConfig?: Partial<IScaleGeneratorConfig>;\r\n\r\n  /**\r\n   * Settings for the scale generation in month mode.\r\n   */\r\n  monthScaleConfig?: Partial<IScaleGeneratorConfig>;\r\n}\r\n\r\n@NgModule({\r\n  declarations: [\r\n    TimelineComponent,\r\n    TimelineItemComponent,\r\n    TimelineDateMarkerComponent,\r\n    TimelineScaleHeaderComponent,\r\n    TimelinePanelComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ResizableModule,\r\n    DragAndDropModule,\r\n  ],\r\n  exports: [\r\n    TimelineComponent,\r\n  ],\r\n})\r\nexport class TimelineModule {\r\n  static forChild(config?: ITimelineModuleInitializationConfig): ModuleWithProviders<TimelineModule> {\r\n    return {\r\n      ngModule: TimelineModule,\r\n      providers: [\r\n        config?.strategyManager ?? StrategyManager,\r\n        config?.dayScaleGenerator ?? DayScaleGenerator,\r\n        config?.weekScaleGenerator ?? WeekScaleGenerator,\r\n        config?.monthScaleGenerator ?? MonthScaleGenerator,\r\n        {\r\n          provide: DAY_SCALE_GENERATOR_CONFIG,\r\n          useValue: config?.dayScaleConfig\r\n        },\r\n        {\r\n          provide: WEEK_SCALE_GENERATOR_CONFIG,\r\n          useValue: config?.weekScaleConfig\r\n        },\r\n        {\r\n          provide: MONTH_SCALE_GENERATOR_CONFIG,\r\n          useValue: config?.monthScaleConfig\r\n        },\r\n      ]\r\n    }\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of angular-calendar-timeline\r\n */\r\n\r\nexport * from './lib/timeline.module';\r\nexport * from './lib/timeline.component';\r\nexport * from './lib/models';\r\nexport * from './lib/strategy-manager';\r\nexport { DefaultZooms } from \"./lib/zooms-handler/zooms\";\r\nexport { DayScaleGenerator } from \"./lib/scale-generator/day-scale-generator\";\r\nexport { WeekScaleGenerator } from \"./lib/scale-generator/week-scale-generator\";\r\nexport { MonthScaleGenerator } from \"./lib/scale-generator/month-scale-generator\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DefaultConfig","i1.StrategyManager","i2","i3.TimelineItemComponent","i4.TimelineDateMarkerComponent","i5.TimelineScaleHeaderComponent","i6.TimelinePanelComponent"],"mappings":";;;;;;;;;;;;MAEa,WAAW,CAAA;IACtB,OAAO,cAAc,CAAC,IAAU,EAAA;QAC9B,OAAO,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,UAAU,EAAE,CAAA,CAAE,CAAC;KAC7G;IAED,OAAO,cAAc,CAAC,IAAe,EAAA;AACnC,QAAA,MAAM,sBAAsB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,sBAAsB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AACvE,QAAA,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAElC,QAAA,OAAO,sBAAsB,CAAC;KAC/B;IAED,OAAO,cAAc,CAAC,IAAU,EAAA;QAC9B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KACvE;IAED,OAAO,kBAAkB,CAAC,IAAU,EAAA;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAEpD,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACxG;IAED,OAAO,cAAc,CAAC,IAAe,EAAA;AACnC,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEjD,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;KAChD;IAED,OAAO,aAAa,CAAC,IAAe,EAAA;AAClC,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAChC,QAAA,MAAM,YAAY,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,CAAC;AAE5C,QAAA,OAAO,IAAI,CAAC;KACb;IAED,OAAO,gBAAgB,CAAC,GAAS,EAAA;AAC/B,QAAA,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzB,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,OAAO,aAAa,CAAC,GAAS,EAAA;AAC5B,QAAA,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAE9B,QAAA,OAAO,GAAG,CAAC;KACZ;AACF,CAAA;AAED,IAAY,kBAIX,CAAA;AAJD,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAkB,CAAA;AAClB,IAAA,kBAAA,CAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,QAAA,CAAA,GAAA,KAAc,CAAA;AACd,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,SAAA,CAAA,GAAA,MAAiC,CAAA;AACnC,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,GAI7B,EAAA,CAAA,CAAA;;MC3DY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;QACU,IAAM,CAAA,MAAA,GAAoB,EAAE,CAAC;KA8HtC;AA5HC,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAED,IAAA,QAAQ,CAAC,KAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,OAAO,GAAA;AACL,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;KAC7B;AAED,IAAA,YAAY,CAAC,WAAoB,EAAA;QAC/B,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,KAAI;YAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACpC,OAAO;aACR;YAED,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC9F,SAAS,GAAG,IAAI,CAAC;aAClB;SACF,EAAE,WAAW,CAAC,CAAC;AAEhB,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,WAAW,CAAC,WAAoB,EAAA;QAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,KAAI;YAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACpC,OAAO;aACR;YAED,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBACxF,QAAQ,GAAG,IAAI,CAAC;aACjB;SACF,EAAE,WAAW,CAAC,CAAC;AAEhB,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,OAAO,CAAC,OAAsE,EAAE,WAAW,GAAG,KAAK,EAAA;AACjG,QAAA,SAAS,UAAU,CAAC,KAAsB,EAAE,MAA4B,EAAA;YACtE,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,IAAG;AAC3B,gBAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACtB,UAAU,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBAC9C,UAAU,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;iBAC5C;AACH,aAAC,CAAC,CAAC;SACJ;AAED,QAAA,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC/B;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,KAAI;AAC5B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aACnD;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,iBAAiB,CAAC,IAAmB,EAAA;QAC3C,MAAM,MAAM,GAAsB,EAAE,CAAC;AAErC,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,IAAG;YAC9B,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;YACxB,OAAO,CAAC,YAAY,EAAE;AAEtB,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAC7C,IAAI,CAAC,UAAU,EAAE;AACf,oBAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACnC,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM;iBACP;AAED,gBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC5F,IAAI,CAAC,cAAc,EAAE;oBACnB,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrC,YAAY,GAAG,IAAI,CAAC;oBACpB,MAAM;iBACP;AAED,gBAAA,iBAAiB,EAAE,CAAC;aACrB;AACH,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,gBAAgB,CAAC,KAAoB,EAAE,KAAoB,EAAA;AACjE,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AAE5C,QAAA,OAAO,UAAU,KAAK,UAAU,IAAI,QAAQ,KAAK,QAAQ;AACvD,YAAA,QAAQ,GAAG,UAAU,IAAI,UAAU,GAAG,QAAQ;AAC9C,YAAA,QAAQ,GAAG,UAAU,IAAI,UAAU,GAAG,QAAQ,CAAC;KAClD;IAEO,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAmB,KAAI;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC1E,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aAC7B;AAED,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,gBAAgB,CAAC,IAAmB,EAAA;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AACF;;MC7HY,YAAY,CAAA;AAMvB,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;KAChC;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAED,IAAA,WAAA,CAAY,KAAgC,EAAA;AAZpC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAyB,IAAI,CAAC,CAAC;AAEzE,QAAA,IAAA,CAAA,WAAW,GAAuC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAWjF,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACtB;AAED,IAAA,QAAQ,CAAC,KAAgC,EAAA;QACvC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,EAAC,GAAG,IAAI,EAAE,KAAK,EAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KAC5C;IAED,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACvB;IAED,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAC5C;IAED,MAAM,GAAA;QACJ,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;AAC/C,QAAA,IAAI,YAAY,GAAG,aAAa,EAAE;YAChC,YAAY,GAAG,aAAa,CAAC;SAC9B;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;KAClD;IAED,OAAO,GAAA;QACL,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC;AACjD,QAAA,IAAI,YAAY,GAAG,cAAc,EAAE;YACjC,YAAY,GAAG,cAAc,CAAC;SAC/B;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;KAClD;AAED,IAAA,gBAAgB,CAAC,IAA6B,EAAA;QAC5C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChE;KACF;AAED,IAAA,YAAY,CAAC,IAA6B,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;KAC5D;AAEO,IAAA,cAAc,CAAC,IAA6B,EAAA;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;KACvG;AACF;;ICpEW,iBAIX;AAJD,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,GAAA,CAAA,GAAA,OAAW,CAAA;AACX,IAAA,gBAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,GAAA,CAAA,GAAA,MAAU,CAAA;AACV,IAAA,gBAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,GAAA,GAAA,CAAA,GAAA,KAAS,CAAA;AACX,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,GAI3B,EAAA,CAAA,CAAA;;ACDM,MAAM,KAAK,GAAG,IAAI,cAAc,CAAkB,OAAO,CAAC,CAAC;AAErD,MAAA,YAAY,GAAoB;IAC3C,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAC;IACnD,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAC;IACnD,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAC;IACnD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAC;IACpD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAC;IACpD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAC;IACpD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAC;IACpD,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,EAAC;IAClD,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,EAAC;IAClD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,EAAC;IACnD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,EAAC;IACnD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,EAAC;IACnD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,EAAC;IACnD,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAC;IACjD,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAC;IACjD,EAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAC;IACjD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAC;IAClD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAC;IAClD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAC;IAClD,EAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,EAAC;;;MClBvC,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAoB,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAChD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,YAAY,GAAA;QAClB,MAAM,GAAG,GAAW,EAAE,CAAC;AACvB,QAAA,MAAM,OAAO,GAAG,CAAC,KAAsB,KAAU;YAC/C,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,IAAG;AAC3B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;AAC7C,wBAAA,GAAG,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAA;AAC3C,qBAAC,CAAC,CAAC;iBACJ;qBAAM;AACL,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC;iBACzC;AAED,gBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,oBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;iBACnC;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAA;AAED,QAAA,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;KACjB;AAED,IAAA,iBAAiB,CAAC,IAAmB,EAAA;AACnC,QAAA,IAAI,KAAK,CAAC;AAEV,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC/B,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;aACP;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,QAAQ,EAAE;gBACZ,KAAK,GAAG,CAAC,CAAC;aACX;SACF;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,mBAAmB,CAAC,KAAa,EAAA;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACjC;AACF;;SCzDe,mBAAmB,GAAA;AAC/B,IAAA,OAAO,UAAS,MAAW,EAAE,UAAkB,EAAE,UAA8B,EAAA;AAC3E,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,CAAC,YAAY,GAAG,IAAI,GAAG,EAAmB,CAAC;SACpD;AAED,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;AAExC,QAAA,UAAU,CAAC,KAAK,GAAG,UAAS,GAAG,IAAY,EAAA;AACvC,YAAA,MAAM,QAAQ,GAAG,CAAG,EAAA,UAAU,CAAI,CAAA,EAAA,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAEtG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACnC,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAC5C;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE1C,YAAA,OAAO,MAAM,CAAC;AAClB,SAAC,CAAC;AACN,KAAC,CAAC;AACN;;MCRsB,kBAAkB,CAAA;AAKtC,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;KACzC;AAcM,IAAA,YAAY,CAAC,YAA4B,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;SAChD;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,QAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,SAAS,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAEtE,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,GAAG,GAAG,GAAG,aAAa,GAAG,GAAG,CAAC,CAAC;KAC3E;AAEM,IAAA,UAAU,CAAC,YAA4B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAC9C;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACjD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;AAExD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC;KACjF;IAGD,aAAa,CAAC,SAAe,EAAE,OAAa,EAAA;AAC1C,QAAA,IAAI,WAAW,GAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5C,QAAA,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAmB,EAAE,CAAC;AACnC,QAAA,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,OAAO,EAAE;AACvC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC;AACpC,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACjC,gBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AACnC,aAAA,CAAC,CAAC;AAEH,YAAA,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;SACpD;QAED,OAAO;YACL,SAAS;YACT,OAAO;YACP,OAAO;SACR,CAAC;KACH;+GApEmB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;AA+CtC,UAAA,CAAA;AADC,IAAA,mBAAmB,EAAE;AAsBrB,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA,CAAA;4FApEmB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;wDAgDT,aAAa,EAAA,EAAA,EAAA,EAAA,CAAA;;MCzDF,iBAAiB,CAAA;AAC5B,IAAA,YAAY,CAAC,MAAoB,EAAE,WAAmB,EAAE,MAAc,EAAA;QACpE,IAAI,WAAW,GAAG,EAAE;YAClB,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE/C,IAAI,WAAW,GAAG,GAAG;YACnB,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAEvD,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;KACrD;IAED,WAAW,CAAC,KAAkB,EAAE,MAAc,EAAA;QAC5C,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/C;+GAbU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;ACEJ,MAAM,0BAA0B,GAAG,IAAI,cAAc,CAAwB,kBAAkB,CAAC,CAAC;AAGxG,MAAMA,eAAa,GAA0B;IAC3C,SAAS,EAAE,IAAI,iBAAiB,EAAE;CACnC,CAAA;AAGK,MAAO,wBAAyB,SAAQ,kBAAkB,CAAA;IACpD,UAAU,GAAA;AAClB,QAAA,OAAO,EAAC,GAAGA,eAAa,EAAE,GAAG,MAAM,CAAC,0BAA0B,EAAE,EAAE,CAAC,EAAC,CAAC;KACtE;AAES,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QAC/C,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,QAAA,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAChC,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrB,QAAA,SAAS,GAAG,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACpD,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,wBAAwB,CAAC,CAAC;AAEpE,QAAA,OAAO,SAAS,CAAC;KAClB;AAES,IAAA,gBAAgB,CAAC,OAAkB,EAAA;QAC3C,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,QAAA,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,uBAAuB,CAAC,CAAC,CAAC;KAC7G;AAES,IAAA,eAAe,CAAC,IAAU,EAAA;QAClC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpE,QAAA,OAAO,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAC,CAAC,CAAC;KAChF;AAES,IAAA,eAAe,CAAC,IAAU,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACvB;AAES,IAAA,kBAAkB,CAAC,IAAU,EAAA;AACrC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACnD;+GAhCU,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAxB,wBAAwB,EAAA,CAAA,CAAA,EAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;AAqCL,MAAO,iBAAkB,SAAQ,wBAAwB,CAAA;+GAAlD,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;MC5CE,kBAAkB,CAAA;AAC7B,IAAA,YAAY,CAAC,MAAoB,EAAE,WAAmB,EAAE,MAAc,EAAA;AACpE,QAAA,IAAI,WAAW,GAAG,GAAG,EAAE;AACrB,YAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAEvF,YAAA,OAAO,CAAG,EAAA,IAAI,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,CAAC,CAAC,CAAK,EAAA,EAAA,MAAM,CAAC,KAAK,GAAG,CAAA;SACjD;AAED,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC7B;IAED,WAAW,CAAC,KAAkB,EAAE,MAAc,EAAA;QAC5C,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;KACjD;+GAbU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;ACEJ,MAAM,2BAA2B,GAAG,IAAI,cAAc,CAAwB,mBAAmB,CAAC,CAAC;AAE1G,MAAMA,eAAa,GAA0B;IAC3C,SAAS,EAAE,IAAI,kBAAkB,EAAE;CACpC,CAAA;AAGK,MAAO,yBAA0B,SAAQ,kBAAkB,CAAA;IACrD,UAAU,GAAA;AAClB,QAAA,OAAO,EAAC,GAAGA,eAAa,EAAE,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,CAAC,EAAC,CAAC;KACvE;AAES,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QAC/C,MAAM,wBAAwB,GAAG,CAAC,CAAC;AACnC,QAAA,MAAM,OAAO,GAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,wBAAwB,CAAC,CAAC;AAEhE,QAAA,OAAO,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;KAChD;AAES,IAAA,gBAAgB,CAAC,OAAkB,EAAA;QAC3C,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,QAAA,MAAM,OAAO,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,uBAAuB,CAAC,CAAC;AAE/D,QAAA,OAAO,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC3C;AAES,IAAA,eAAe,CAAC,IAAU,EAAA;QAClC,MAAM,SAAS,GAAS,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,OAAO,GAAS,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,sBAAsB,GAAY,SAAS,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEpF,MAAM,kBAAkB,GAAS,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAExG,QAAA,MAAM,MAAM,GAAkB;AAC5B,YAAA,EAAC,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,WAAW,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAC;SACxG,CAAC;QAEF,IAAI,sBAAsB,EAAE;YAC1B,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YAE7G,MAAM,gBAAgB,GAAS,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAElG,MAAM,CAAC,IAAI,CAAC;AACV,gBAAA,IAAI,EAAE,gBAAgB;AACtB,gBAAA,EAAE,EAAE,WAAW,CAAC,cAAc,CAAC,gBAAgB,CAAC;gBAChD,kBAAkB,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB;AACvD,aAAA,CAAC,CAAA;SACH;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAES,IAAA,eAAe,CAAC,IAAU,EAAA;QAClC,MAAM,UAAU,GAAS,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;KAC5C;AAES,IAAA,kBAAkB,CAAC,IAAU,EAAA;AACrC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACnD;+GAvDU,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAzB,yBAAyB,EAAA,CAAA,CAAA,EAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;;AA4DL,MAAO,kBAAmB,SAAQ,yBAAyB,CAAA;+GAApD,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;MClEE,mBAAmB,CAAA;AAC9B,IAAA,YAAY,CAAC,MAAoB,EAAE,WAAmB,EAAE,MAAc,EAAA;QACpE,IAAI,WAAW,GAAG,EAAE;AAClB,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,WAAW,GAAG,GAAG;YACnB,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEjD,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;KAC/C;IAED,WAAW,CAAC,KAAkB,EAAE,MAAc,EAAA;QAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KACzC;+GAbU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;ACEJ,MAAM,4BAA4B,GAAG,IAAI,cAAc,CAAwB,oBAAoB,CAAC,CAAC;AAE5G,MAAM,aAAa,GAA0B;IAC3C,SAAS,EAAE,IAAI,mBAAmB,EAAE;CACrC,CAAA;AAGK,MAAO,0BAA2B,SAAQ,kBAAkB,CAAA;IACtD,UAAU,GAAA;AAClB,QAAA,OAAO,EAAC,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC,4BAA4B,EAAE,EAAE,CAAC,EAAC,CAAC;KACxE;AAES,IAAA,kBAAkB,CAAC,SAAoB,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AAClC,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,uBAAuB,CAAC,CAAC;AAErE,QAAA,OAAO,OAAO,CAAC;KAChB;AAES,IAAA,gBAAgB,CAAC,OAAkB,EAAA;QAC3C,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,QAAA,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,sBAAsB,CAAC,CAAC;AAEpE,QAAA,OAAO,OAAO,CAAC;KAChB;AAES,IAAA,eAAe,CAAC,IAAU,EAAA;QAClC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,QAAA,OAAO,CAAC,EAAC,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,EAAC,CAAC,CAAC;KAChF;AAES,IAAA,eAAe,CAAC,IAAU,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC5B;AAES,IAAA,kBAAkB,CAAC,IAAU,EAAA;AACrC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACrD;+GAnCU,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAA1B,0BAA0B,EAAA,CAAA,CAAA,EAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;;AAwCL,MAAO,mBAAoB,SAAQ,0BAA0B,CAAA;+GAAtD,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MCjDW,mBAAmB,CAAA;IAOvC,aAAa,CAAC,SAAe,EAAE,OAAa,EAAA;QAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE3E,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;KAC1F;AACF;;ACTK,MAAO,mBAAoB,SAAQ,mBAAmB,CAAA;IAE1D,2BAA2B,CAAC,KAAW,EAAE,GAAS,EAAA;QAChD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KACrG;IAGD,oBAAoB,CAAC,SAAe,EAAE,OAAa,EAAA;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC;KACrF;IAED,eAAe,CAAC,IAAU,EAAE,IAAY,EAAA;AACtC,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,QAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAEzD,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,qBAAqB,CAAC,IAAU,EAAA;AAC9B,QAAA,OAAO,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACxC;AAED,IAAA,wBAAwB,CAAC,IAAU,EAAA;AACjC,QAAA,OAAO,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;KAC3C;AACF,CAAA;AA3BC,UAAA,CAAA;AADC,IAAA,mBAAmB,EAAE;AAMrB,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,6BAAA,EAAA,IAAA,CAAA,CAAA;AAGD,UAAA,CAAA;AADC,IAAA,mBAAmB,EAAE;AAGrB,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;;ACZG,MAAO,oBAAqB,SAAQ,mBAAmB,CAAA;IAE3D,2BAA2B,CAAC,KAAW,EAAE,GAAS,EAAA;QAChD,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAE5C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;KAC5D;IAGD,oBAAoB,CAAC,SAAe,EAAE,OAAa,EAAA;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;KACtF;IAED,eAAe,CAAC,IAAU,EAAE,KAAa,EAAA;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAEhE,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,wBAAwB,CAAC,IAAU,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEzD,QAAA,OAAO,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KAC5C;AAED,IAAA,qBAAqB,CAAC,IAAU,EAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAEtD,QAAA,OAAO,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KACvC;AACF,CAAA;AA/BC,UAAA,CAAA;AADC,IAAA,mBAAmB,EAAE;AAMrB,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,6BAAA,EAAA,IAAA,CAAA,CAAA;AAGD,UAAA,CAAA;AADC,IAAA,mBAAmB,EAAE;AAGrB,CAAA,EAAA,oBAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;;ACZG,MAAO,qBAAsB,SAAQ,mBAAmB,CAAA;AAC5D,IAAA,wBAAwB,CAAC,IAAU,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEjB,QAAA,OAAO,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KAC5C;AAED,IAAA,qBAAqB,CAAC,IAAU,EAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAExD,QAAA,OAAO,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KACvC;IAGD,2BAA2B,CAAC,SAAe,EAAE,OAAa,EAAA;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE5D,QAAA,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;KAClC;IAGD,oBAAoB,CAAC,SAAe,EAAE,OAAa,EAAA;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC5D,QAAA,MAAM,0BAA0B,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACrI,QAAA,MAAM,2BAA2B,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAEhI,QAAA,OAAO,IAAI,GAAG,0BAA0B,GAAG,2BAA2B,CAAC;KACxE;IAED,eAAe,CAAC,IAAU,EAAE,MAAc,EAAA;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAC1C,QAAA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAEzD,QAAA,OAAO,OAAO,CAAC;KAChB;IAEO,qBAAqB,CAAC,SAAe,EAAE,OAAa,EAAA;QAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;AAClE,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AACxC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC;QAEvD,OAAO,QAAQ,GAAG,UAAU,CAAC;KAC9B;AACF,CAAA;AAhCC,UAAA,CAAA;AADC,IAAA,mBAAmB,EAAE;AAKrB,CAAA,EAAA,qBAAA,CAAA,SAAA,EAAA,6BAAA,EAAA,IAAA,CAAA,CAAA;AAGD,UAAA,CAAA;AADC,IAAA,mBAAmB,EAAE;AAOrB,CAAA,EAAA,qBAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;;MCdU,sBAAsB,CAAA;AAajC,IAAA,WAAA,CAAiD,aAA8B,EAC7B,cAA+B,EAC9B,eAAgC,EAAA;QAFlC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAiB;QAC7B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAiB;QAC9B,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AAdzE,QAAA,IAAA,CAAA,qBAAqB,GAAG;AAChC,YAAA,CAAC,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa;AAC1C,YAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc;AAC5C,YAAA,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe;SAC/C,CAAC;AAEQ,QAAA,IAAA,CAAA,sBAAsB,GAAG;AACjC,YAAA,CAAC,gBAAgB,CAAC,GAAG,GAAG,IAAI,mBAAmB,EAAE;AACjD,YAAA,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,oBAAoB,EAAE;AACnD,YAAA,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,qBAAqB,EAAE;SACtD,CAAC;KAMD;AAED,IAAA,kBAAkB,CAAC,QAAkB,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAuC,CAAC,CAAC;KAC7E;AAED,IAAA,iBAAiB,CAAC,QAAkB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAuC,CAAC,CAAC;KAC5E;AAzBU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAab,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,iBAAiB,EACjB,EAAA,EAAA,KAAA,EAAA,kBAAkB,aAClB,mBAAmB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAf5B,sBAAsB,EAAA,CAAA,CAAA,EAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;;0BAcI,MAAM;2BAAC,iBAAiB,CAAA;;0BACxB,MAAM;2BAAC,kBAAkB,CAAA;;0BACzB,MAAM;2BAAC,mBAAmB,CAAA;;AAcnC,MAAO,eAA6C,SAAQ,sBAAgC,CAAA;+GAArF,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;mHAAf,eAAe,EAAA,CAAA,CAAA,EAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;MC7BE,qBAAqB,CAAA;IAShC,IAAa,IAAI,CAAC,IAA+B,EAAA;AAC/C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;IAED,IAAa,KAAK,CAAC,KAAyB,EAAA;AAC1C,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;AAgBD,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,WAAoB,CAAA,IAAuB,EACvB,SAAoB,EAAA;QADpB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAmB;QACvB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAlCxC,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC;QAEtB,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;AAuBpB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA+C,CAAC;AAE9E,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAgD,CAAC;KAQtF;AAED,IAAA,iBAAiB,CAAC,KAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;KAC1B;AAED,IAAA,eAAe,CAAC,KAAkB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;QACjD,UAAU,CAAC,MAAM,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,CAAC;KACtD;AAED,IAAA,eAAe,CAAC,KAAK,EAAA;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC1B;AAED,IAAA,aAAa,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;SAChD;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;KACvB;IAEO,oBAAoB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC/B,OAAO;SACR;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AAChD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,OAAO;SACR;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;AAClF,eAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AACnE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;KAC1B;AAEO,IAAA,aAAa,CAAC,KAAa,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;KAC9D;+GAlFU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,8RCnBlC,k3CAuCA,EAAA,MAAA,EAAA,CAAA,+iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,kCAAA,EAAA,cAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDpBa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,k3CAAA,EAAA,MAAA,EAAA,CAAA,+iBAAA,CAAA,EAAA,CAAA;8GAWlC,IAAI,EAAA,CAAA;sBAAhB,KAAK;gBAMO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAKG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;ME1CI,2BAA2B,CAAA;IAStC,IAAa,KAAK,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAClC;;AAED,IAAA,WAAA,CAAoB,IAAuB,EAAA;QAAvB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAmB;QAZ3C,IAAc,CAAA,cAAA,GAAY,IAAI,CAAC;QAEtB,IAAY,CAAA,YAAA,GAAW,CAAC,CAAC;KAWjC;AAEO,IAAA,oBAAoB,CAAC,KAAa,EAAA;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC;AACzF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;KAC3B;+GApBU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,sLCTxC,wgBAYA,EAAA,MAAA,EAAA,CAAA,yJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDHa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;+BACE,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wgBAAA,EAAA,MAAA,EAAA,CAAA,yJAAA,CAAA,EAAA,CAAA;sFAKtC,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEO,KAAK,EAAA,CAAA;sBAAjB,KAAK;;;MEDK,4BAA4B,CAAA;AANzC,IAAA,WAAA,GAAA;QAiBS,IAAM,CAAA,MAAA,GAAsB,EAAE,CAAC;AAkCvC,KAAA;AAhCC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;KAClC;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,SAAS,CAAC,KAAa,EAAE,IAAe,EAAA;QACtC,OAAO,IAAI,CAAC,EAAE,CAAC;KAChB;IAEO,kBAAkB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,KAAI;AACrD,YAAA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AAC5B,gBAAA,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBAChD,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,SAAS,CAAC;SAClB,EAAE,EAAE,CAAC,CAAA;KACP;IAEO,eAAe,GAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAEhD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK;AACvD,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AACxE,YAAA,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;AACpH,SAAA,CAAC,CAAC,CAAC;KACL;+GA5CU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,wLCjBzC,ukBAgBA,EAAA,MAAA,EAAA,CAAA,ivBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDCa,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;+BACE,uBAAuB,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,ukBAAA,EAAA,MAAA,EAAA,CAAA,ivBAAA,CAAA,EAAA,CAAA;8BAGtC,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;MEPK,sBAAsB,CAAA;AAyBjC,IAAA,WAAA,CAAoB,IAAuB,EAAA;QAAvB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAmB;QAxBlC,IAAK,CAAA,KAAA,GAAoB,EAAE,CAAC;QAkB5B,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;AAI7B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU,CAAC;KAGnD;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;YACrF,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;KACF;IAED,SAAS,CAAC,KAAa,EAAE,IAAe,EAAA;QACtC,OAAO,IAAI,CAAC,EAAE,CAAC;KAChB;AAED,IAAA,YAAY,CAAC,KAAkB,EAAA;AAC7B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;QAEvC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;YACtD,OAAO;AAET,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;AAED,IAAA,YAAY,CAAC,IAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,qBAAqB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;KAC1B;IAEO,cAAc,GAAA;QACpB,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC5B;QAED,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC5B;KACF;+GA7DU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,kYCnBnC,k8DA4CA,EAAA,MAAA,EAAA,CAAA,uqCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FDzBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,k8DAAA,EAAA,MAAA,EAAA,CAAA,uqCAAA,CAAA,EAAA,CAAA;sFAGtC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;;;MEAI,iBAAiB,CAAA;AA2H5B;;;AAGG;IACH,IAAa,KAAK,CAAC,KAAgC,EAAA;AACjD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACnC;AAED;;AAEG;IACH,IACI,KAAK,CAAC,KAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED;;AAEG;AACH,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;KACrE;AAED;;AAEG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;KACrC;AAED;;AAEG;AACH,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;KAChC;AAED,IAAA,WAAA,CAAoB,IAAuB,EACvB,gBAA2C,EACvB,WAAuB,EACtB,WAAmB,EAAA;QAHxC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAmB;QACvB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAA2B;QACvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QACtB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAQ;AAnK5D;;AAEG;AACI,QAAA,IAAA,CAAA,WAAW,GAAS,IAAI,IAAI,EAAE,CAAC;QAY/B,IAAsB,CAAA,sBAAA,GAAW,CAAC,CAAC;AAInC,QAAA,IAAA,CAAA,aAAa,GAAmB,IAAI,aAAa,EAAE,CAAC;AAEpD,QAAA,IAAA,CAAA,YAAY,GAA4B,IAAI,YAAY,CAAW,YAAmB,CAAC,CAAC;QAEvF,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;AAExC,QAAA,IAAA,CAAA,SAAS,GAAkB,IAAI,OAAO,EAAQ,CAAC;AAEvD;;AAEG;AACO,QAAA,IAAA,CAAA,eAAe,GAAwC,IAAI,YAAY,EAAE,CAAC;AAEpF;;AAEG;AACO,QAAA,IAAA,CAAA,cAAc,GAAuC,IAAI,YAAY,EAAE,CAAC;AAElF;;AAEG;AACO,QAAA,IAAA,CAAA,WAAW,GAA0C,IAAI,YAAY,EAA2B,CAAC;AAE3G;;AAEG;AACO,QAAA,IAAA,CAAA,eAAe,GAAmF,IAAI,YAAY,EAAE,CAAC;AAE/H;;AAEG;QACM,IAAM,CAAA,MAAA,GAAW,IAAI,CAAC;AAE/B;;AAEG;QACM,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AAEhC;;AAEG;QACM,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;AAEjC;;AAEG;QACM,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;AAEnC;;AAEG;QACM,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;AAEjC;;AAEG;QACM,IAAU,CAAA,UAAA,GAAW,GAAG,CAAC;AAElC;;AAEG;QACM,IAAa,CAAA,aAAA,GAAW,EAAE,CAAC;AAEpC;;AAEG;QACM,IAAa,CAAA,aAAA,GAAW,GAAG,CAAC;AAErC;;AAEG;QACM,IAAuB,CAAA,uBAAA,GAAW,EAAE,CAAC;AAE9C;;AAEG;QACM,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;AAE1C;;AAEG;QACM,IAAc,CAAA,cAAA,GAAY,IAAI,CAAC;AAgEtC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC;IAED,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,CAAC,WAAW;AAC1B,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACvC,YAAA,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC;AAChC,iBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC9C,SAAS,CAAC,MAAM,IAAI,CAAC,8BAA8B,EAAE,CAAC,CAAC;SAC3D;KACF;AAED;;AAEG;IACH,MAAM,GAAA;QACJ,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC3C;AAED;;AAEG;AACH,IAAA,kBAAkB,CAAC,IAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACvF,QAAA,MAAM,UAAU,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;SAC7E;KACF;AAED;;;AAGG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAEtD,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ;YACzB,OAAO;QAET,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEhF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAE/E,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3C;aAAM;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvB;KACF;AAED;;AAEG;AACH,IAAA,UAAU,CAAC,IAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;KAC1C;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAa,EAAA;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACxE,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SAC1C;aAAM;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAA,CAAE,CAAC,CAAC;SACvD;KACF;AAED;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;KACrE;AAED;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;KACtE;AAED;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;KAC5B;AAED;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;KAC7B;AAED;;AAEG;IACH,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAA;QACvC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,GAAG,GAAkB,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAExE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAiB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAE7D,QAAA,OAAO,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC;KACtB;IAED,eAAe,GAAA;QACb,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,IAAI,CAAC,CAAC;QACzE,MAAM,wBAAwB,GAAG,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAClF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE7E,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KAC5E;IAED,YAAY,CAAC,KAAmB,EAAE,IAAmB,EAAA;AACnD,QAAA,IAAI,KAAK,CAAC,CAAC,EAAE;AACX,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC1C;AAED,QAAA,IAAI,KAAK,CAAC,CAAC,EAAE;AACX,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;SAC5C;KACF;IAEO,wBAAwB,CAAC,KAAmB,EAAE,IAAmB,EAAA;AACvE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACpE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC,CAAC;AACrG,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;AACjG,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAC,CAAC,CAAC;KAC7D;IAEO,sBAAsB,CAAC,KAAmB,EAAE,IAAmB,EAAA;QACrE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAC9C,QAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;QAE5C,IAAI,QAAQ,KAAK,WAAW;YAC1B,OAAO;QAET,MAAM,MAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC,CAAC;KAClD;AAEO,IAAA,qBAAqB,CAAC,SAAe,EAAE,OAAa,EAAE,QAAQ,GAAG,EAAE,EAAA;QACzE,IAAI,YAAY,GAA4B,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QAE7E,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACpG,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,cAAc,GAAG,eAAe,CAAC,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAEvF,YAAA,IAAI,cAAc,GAAG,WAAW,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,GAAG,QAAQ,GAAG,CAAC,CAAC,EAAE;gBACtF,YAAY,GAAG,WAAW,CAAC;gBAC3B,MAAM;aACP;SACF;AAED,QAAA,OAAO,YAAY,CAAC;KACrB;IAED,UAAU,CAAC,KAAa,EAAE,IAAe,EAAA;QACvC,OAAO,IAAI,CAAC,EAAE,CAAC;KAChB;AAED,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACnC,MAAM,UAAU,GAAW,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC;QACrE,MAAM,SAAS,GAAW,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACtD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC;KACvF;IAED,cAAc,CAAC,KAAkB,EAAE,IAAmB,EAAA;AACpD,QAAA,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,OAAa,KAAU;AAChE,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;AAC5E,SAAC,CAAA;AAED,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AACpB,YAAA,MAAM,YAAY,GAAG,gBAAgB,CAAS,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1F,MAAM,mBAAmB,GACvB,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YAC5G,IAAI,mBAAmB,EAAE;gBACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAC;aACjD;SACF;aAAM;AACL,YAAA,MAAM,UAAU,GAAG,gBAAgB,CAAS,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACvF,MAAM,iBAAiB,GACrB,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YACzG,IAAI,iBAAiB,EAAE;gBACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,UAAU,EAAC,CAAC,CAAC;aAC/C;SACF;KACF;AAGO,IAAA,SAAS,CAAC,KAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SAC3C;AACD,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;KACrC;IAEO,cAAc,GAAA;AACpB,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5E,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;KAC9E;IAEO,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;KACtE;AAEO,IAAA,mBAAmB,CAAC,IAA6B,EAAA;QACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;KACtC;AAEO,IAAA,0BAA0B,CAAC,IAA6B,EAAA;QAC9D,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;AAClC,YAAA,OAAO,CAAC,CAAC;QAEX,MAAM,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;AAEpI,QAAA,OAAO,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;KACvD;AAEO,IAAA,mBAAmB,CAAC,IAA6B,EAAA;QACvD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO;AAClC,YAAA,OAAO,CAAC,CAAC;QAEX,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3H,QAAA,OAAO,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;KAChD;IAEO,8BAA8B,GAAA;AACpC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAEnG,IAAI,CAAC,sBAAsB,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;KACtE;AAEO,IAAA,cAAc,CAAC,IAA6B,EAAA;AAClD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9E;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAC3B;+GAhcU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAmKR,UAAU,EAAA,EAAA,EAAA,KAAA,EACV,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AApKpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,ozBC1C9B,s5IAsGA,EAAA,MAAA,EAAA,CAAA,+cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,4BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FD5Da,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;+BACE,mBAAmB,EAAA,eAAA,EAGZ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,s5IAAA,EAAA,MAAA,EAAA,CAAA,+cAAA,CAAA,EAAA,CAAA;;0BAqKlC,MAAM;2BAAC,UAAU,CAAA;;0BACjB,MAAM;2BAAC,WAAW,CAAA;yCArIrB,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAKG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAKG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAKG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAKE,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAKG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAKG,uBAAuB,EAAA,CAAA;sBAA/B,KAAK;gBAKG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAKG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAKG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAKG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAKG,uBAAuB,EAAA,CAAA;sBAA/B,KAAK;gBAKG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAMO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAQF,KAAK,EAAA,CAAA;sBADR,KAAK;gBAmQE,SAAS,EAAA,CAAA;sBADhB,YAAY;uBAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEvWvB,cAAc,CAAA;IACzB,OAAO,QAAQ,CAAC,MAA4C,EAAA;QAC1D,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE;gBACT,MAAM,EAAE,eAAe,IAAI,eAAe;gBAC1C,MAAM,EAAE,iBAAiB,IAAI,iBAAiB;gBAC9C,MAAM,EAAE,kBAAkB,IAAI,kBAAkB;gBAChD,MAAM,EAAE,mBAAmB,IAAI,mBAAmB;AAClD,gBAAA;AACE,oBAAA,OAAO,EAAE,0BAA0B;oBACnC,QAAQ,EAAE,MAAM,EAAE,cAAc;AACjC,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,2BAA2B;oBACpC,QAAQ,EAAE,MAAM,EAAE,eAAe;AAClC,iBAAA;AACD,gBAAA;AACE,oBAAA,OAAO,EAAE,4BAA4B;oBACrC,QAAQ,EAAE,MAAM,EAAE,gBAAgB;AACnC,iBAAA;AACF,aAAA;SACF,CAAA;KACF;+GAvBU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBAfvB,iBAAiB;YACjB,qBAAqB;YACrB,2BAA2B;YAC3B,4BAA4B;AAC5B,YAAA,sBAAsB,aAGtB,YAAY;YACZ,eAAe;AACf,YAAA,iBAAiB,aAGjB,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;AAGR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YARvB,YAAY;YACZ,eAAe;YACf,iBAAiB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAMR,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjB1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;wBACjB,qBAAqB;wBACrB,2BAA2B;wBAC3B,4BAA4B;wBAC5B,sBAAsB;AACvB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,eAAe;wBACf,iBAAiB;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;AAClB,qBAAA;AACF,iBAAA,CAAA;;;AC1ED;;AAEG;;ACFH;;AAEG;;;;"}