{ "version": 3, "sources": ["src/app/_services/jumpbar.service.ts", "src/app/metadata-filter/filter-settings.ts", "src/app/_pipes/sort-field.pipe.ts", "src/app/_pipes/filter-field.pipe.ts", "src/app/_pipes/filter-comparison.pipe.ts", "src/app/metadata-filter/_components/metadata-filter-row/metadata-filter-row.component.ts", "src/app/metadata-filter/_components/metadata-filter-row/metadata-filter-row.component.html", "src/app/metadata-filter/_components/metadata-builder/metadata-builder.component.ts", "src/app/metadata-filter/_components/metadata-builder/metadata-builder.component.html", "src/app/metadata-filter/metadata-filter.component.ts", "src/app/metadata-filter/metadata-filter.component.html", "src/app/cards/card-detail-layout/card-detail-layout.component.ts", "src/app/cards/card-detail-layout/card-detail-layout.component.html"], "sourcesContent": ["import { Injectable } from '@angular/core';\r\nimport { JumpKey } from '../_models/jumpbar/jump-key';\r\n\r\nconst keySize = 25; // Height of the JumpBar button\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JumpbarService {\r\n\r\n resumeKeys: {[key: string]: string} = {};\r\n // Used for custom filtered urls\r\n resumeScroll: {[key: string]: number} = {};\r\n\r\n constructor() { }\r\n\r\n\r\n getResumeKey(key: string) {\r\n const k = key.toUpperCase();\r\n if (this.resumeKeys.hasOwnProperty(k)) return this.resumeKeys[k];\r\n return '';\r\n }\r\n\r\n getResumePosition(url: string) {\r\n if (this.resumeScroll.hasOwnProperty(url)) return this.resumeScroll[url];\r\n return 0;\r\n }\r\n\r\n saveResumeKey(key: string, value: string) {\r\n const k = key.toUpperCase();\r\n this.resumeKeys[k] = value;\r\n }\r\n\r\n saveResumePosition(url: string, value: number) {\r\n this.resumeScroll[url] = value;\r\n }\r\n\r\n generateJumpBar(jumpBarKeys: Array, currentSize: number) {\r\n const fullSize = (jumpBarKeys.length * keySize);\r\n if (currentSize >= fullSize) {\r\n return [...jumpBarKeys];\r\n }\r\n\r\n const jumpBarKeysToRender: Array = [];\r\n const targetNumberOfKeys = parseInt(Math.floor(currentSize / keySize) + '', 10);\r\n const removeCount = jumpBarKeys.length - targetNumberOfKeys - 3;\r\n if (removeCount <= 0) return [...jumpBarKeys];\r\n\r\n const removalTimes = Math.ceil(removeCount / 2);\r\n const midPoint = Math.floor(jumpBarKeys.length / 2);\r\n jumpBarKeysToRender.push(jumpBarKeys[0]);\r\n this._removeFirstPartOfJumpBar(midPoint, removalTimes, jumpBarKeys, jumpBarKeysToRender);\r\n jumpBarKeysToRender.push(jumpBarKeys[midPoint]);\r\n this._removeSecondPartOfJumpBar(midPoint, removalTimes, jumpBarKeys, jumpBarKeysToRender);\r\n jumpBarKeysToRender.push(jumpBarKeys[jumpBarKeys.length - 1]);\r\n\r\n return jumpBarKeysToRender;\r\n }\r\n\r\n _removeSecondPartOfJumpBar(midPoint: number, numberOfRemovals: number = 1, jumpBarKeys: Array, jumpBarKeysToRender: Array) {\r\n const removedIndexes: Array = [];\r\n for(let removal = 0; removal < numberOfRemovals; removal++) {\r\n let min = 100000000;\r\n let minIndex = -1;\r\n for(let i = midPoint + 1; i < jumpBarKeys.length - 2; i++) {\r\n if (jumpBarKeys[i].size < min && !removedIndexes.includes(i)) {\r\n min = jumpBarKeys[i].size;\r\n minIndex = i;\r\n }\r\n }\r\n removedIndexes.push(minIndex);\r\n }\r\n for(let i = midPoint + 1; i < jumpBarKeys.length - 2; i++) {\r\n if (!removedIndexes.includes(i)) jumpBarKeysToRender.push(jumpBarKeys[i]);\r\n }\r\n }\r\n\r\n _removeFirstPartOfJumpBar(midPoint: number, numberOfRemovals: number = 1, jumpBarKeys: Array, jumpBarKeysToRender: Array) {\r\n const removedIndexes: Array = [];\r\n\r\n for(let removal = 0; removal < numberOfRemovals; removal++) {\r\n let min = 100000000;\r\n let minIndex = -1;\r\n\r\n for(let i = 1; i < midPoint; i++) {\r\n if (jumpBarKeys[i].size < min && !removedIndexes.includes(i)) {\r\n min = jumpBarKeys[i].size;\r\n minIndex = i;\r\n }\r\n }\r\n removedIndexes.push(minIndex);\r\n }\r\n\r\n for(let i = 1; i < midPoint; i++) {\r\n if (!removedIndexes.includes(i)) jumpBarKeysToRender.push(jumpBarKeys[i]);\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param data An array of objects\r\n * @param keySelector A method to fetch a string from the object, which is used to classify the JumpKey\r\n * @returns\r\n */\r\n getJumpKeys(data :Array, keySelector: (data: any) => string) {\r\n const keys: {[key: string]: number} = {};\r\n data.forEach(obj => {\r\n let ch = keySelector(obj).charAt(0).toUpperCase();\r\n if (/\\d|\\#|!|%|@|\\(|\\)|\\^|\\.|_|\\*/g.test(ch)) {\r\n ch = '#';\r\n }\r\n if (!keys.hasOwnProperty(ch)) {\r\n keys[ch] = 0;\r\n }\r\n keys[ch] += 1;\r\n });\r\n return Object.keys(keys).map(k => {\r\n k = k.toUpperCase();\r\n return {\r\n key: k,\r\n size: keys[k],\r\n title: k\r\n }\r\n }).sort((a, b) => {\r\n if (a.key < b.key) return -1;\r\n if (a.key > b.key) return 1;\r\n return 0;\r\n });\r\n }\r\n}\r\n", "import { SeriesFilterV2 } from \"../_models/metadata/v2/series-filter-v2\";\r\n\r\nexport class FilterSettings {\r\n sortDisabled = false;\r\n presetsV2: SeriesFilterV2 | undefined;\r\n /**\r\n * The number of statements that can be on the filter. Set to 1 to disable adding more.\r\n */\r\n statementLimit: number = 0;\r\n saveDisabled: boolean = false;\r\n }\r\n", "import { Pipe, PipeTransform } from '@angular/core';\r\nimport {SortField} from \"../_models/metadata/series-filter\";\r\nimport {TranslocoService} from \"@jsverse/transloco\";\r\n\r\n@Pipe({\r\n name: 'sortField',\r\n standalone: true\r\n})\r\nexport class SortFieldPipe implements PipeTransform {\r\n\r\n constructor(private translocoService: TranslocoService) {\r\n }\r\n\r\n transform(value: SortField): string {\r\n switch (value) {\r\n case SortField.SortName:\r\n return this.translocoService.translate('sort-field-pipe.sort-name');\r\n case SortField.Created:\r\n return this.translocoService.translate('sort-field-pipe.created');\r\n case SortField.LastModified:\r\n return this.translocoService.translate('sort-field-pipe.last-modified');\r\n case SortField.LastChapterAdded:\r\n return this.translocoService.translate('sort-field-pipe.last-chapter-added');\r\n case SortField.TimeToRead:\r\n return this.translocoService.translate('sort-field-pipe.time-to-read');\r\n case SortField.ReleaseYear:\r\n return this.translocoService.translate('sort-field-pipe.release-year');\r\n case SortField.ReadProgress:\r\n return this.translocoService.translate('sort-field-pipe.read-progress');\r\n case SortField.AverageRating:\r\n return this.translocoService.translate('sort-field-pipe.average-rating');\r\n case SortField.Random:\r\n return this.translocoService.translate('sort-field-pipe.random');\r\n }\r\n\r\n }\r\n\r\n}\r\n", "import { Pipe, PipeTransform } from '@angular/core';\r\nimport { FilterField } from 'src/app/_models/metadata/v2/filter-field';\r\nimport {translate} from \"@jsverse/transloco\";\r\n\r\n@Pipe({\r\n name: 'filterField',\r\n standalone: true\r\n})\r\nexport class FilterFieldPipe implements PipeTransform {\r\n\r\n transform(value: FilterField): string {\r\n switch (value) {\r\n case FilterField.AgeRating:\r\n return translate('filter-field-pipe.age-rating');\r\n case FilterField.Characters:\r\n return translate('filter-field-pipe.characters');\r\n case FilterField.CollectionTags:\r\n return translate('filter-field-pipe.collection-tags');\r\n case FilterField.Colorist:\r\n return translate('filter-field-pipe.colorist');\r\n case FilterField.CoverArtist:\r\n return translate('filter-field-pipe.cover-artist');\r\n case FilterField.Editor:\r\n return translate('filter-field-pipe.editor');\r\n case FilterField.Formats:\r\n return translate('filter-field-pipe.formats');\r\n case FilterField.Genres:\r\n return translate('filter-field-pipe.genres');\r\n case FilterField.Inker:\r\n return translate('filter-field-pipe.inker');\r\n case FilterField.Imprint:\r\n return translate('filter-field-pipe.imprint');\r\n case FilterField.Team:\r\n return translate('filter-field-pipe.team');\r\n case FilterField.Location:\r\n return translate('filter-field-pipe.location');\r\n case FilterField.Languages:\r\n return translate('filter-field-pipe.languages');\r\n case FilterField.Libraries:\r\n return translate('filter-field-pipe.libraries');\r\n case FilterField.Letterer:\r\n return translate('filter-field-pipe.letterer');\r\n case FilterField.PublicationStatus:\r\n return translate('filter-field-pipe.publication-status');\r\n case FilterField.Penciller:\r\n return translate('filter-field-pipe.penciller');\r\n case FilterField.Publisher:\r\n return translate('filter-field-pipe.publisher');\r\n case FilterField.ReadProgress:\r\n return translate('filter-field-pipe.read-progress');\r\n case FilterField.ReadTime:\r\n return translate('filter-field-pipe.read-time');\r\n case FilterField.ReleaseYear:\r\n return translate('filter-field-pipe.release-year');\r\n case FilterField.SeriesName:\r\n return translate('filter-field-pipe.series-name');\r\n case FilterField.Summary:\r\n return translate('filter-field-pipe.summary');\r\n case FilterField.Tags:\r\n return translate('filter-field-pipe.tags');\r\n case FilterField.Translators:\r\n return translate('filter-field-pipe.translators');\r\n case FilterField.UserRating:\r\n return translate('filter-field-pipe.user-rating');\r\n case FilterField.Writers:\r\n return translate('filter-field-pipe.writers');\r\n case FilterField.Path:\r\n return translate('filter-field-pipe.path');\r\n case FilterField.FilePath:\r\n return translate('filter-field-pipe.file-path');\r\n case FilterField.WantToRead:\r\n return translate('filter-field-pipe.want-to-read');\r\n case FilterField.ReadingDate:\r\n return translate('filter-field-pipe.read-date');\r\n case FilterField.ReadLast:\r\n return translate('filter-field-pipe.read-last');\r\n case FilterField.AverageRating:\r\n return translate('filter-field-pipe.average-rating');\r\n default:\r\n throw new Error(`Invalid FilterField value: ${value}`);\r\n }\r\n }\r\n\r\n}\r\n", "import { Pipe, PipeTransform } from '@angular/core';\r\nimport { FilterComparison } from 'src/app/_models/metadata/v2/filter-comparison';\r\nimport {translate} from \"@jsverse/transloco\";\r\n\r\n@Pipe({\r\n name: 'filterComparison',\r\n standalone: true\r\n})\r\nexport class FilterComparisonPipe implements PipeTransform {\r\n\r\n transform(value: FilterComparison): string {\r\n switch (value) {\r\n case FilterComparison.BeginsWith:\r\n return translate('filter-comparison-pipe.begins-with');\r\n case FilterComparison.Contains:\r\n return translate('filter-comparison-pipe.contains');\r\n case FilterComparison.Equal:\r\n return translate('filter-comparison-pipe.equal');\r\n case FilterComparison.GreaterThan:\r\n return translate('filter-comparison-pipe.greater-than');\r\n case FilterComparison.GreaterThanEqual:\r\n return translate('filter-comparison-pipe.greater-than-or-equal');\r\n case FilterComparison.LessThan:\r\n return translate('filter-comparison-pipe.less-than');\r\n case FilterComparison.LessThanEqual:\r\n return translate('filter-comparison-pipe.less-than-or-equal');\r\n case FilterComparison.Matches:\r\n return translate('filter-comparison-pipe.matches');\r\n case FilterComparison.NotContains:\r\n return translate('filter-comparison-pipe.does-not-contain');\r\n case FilterComparison.NotEqual:\r\n return translate('filter-comparison-pipe.not-equal');\r\n case FilterComparison.EndsWith:\r\n return translate('filter-comparison-pipe.ends-with');\r\n case FilterComparison.IsBefore:\r\n return translate('filter-comparison-pipe.is-before');\r\n case FilterComparison.IsAfter:\r\n return translate('filter-comparison-pipe.is-after');\r\n case FilterComparison.IsInLast:\r\n return translate('filter-comparison-pipe.is-in-last');\r\n case FilterComparison.IsNotInLast:\r\n return translate('filter-comparison-pipe.is-not-in-last');\r\n case FilterComparison.MustContains:\r\n return translate('filter-comparison-pipe.must-contains');\r\n case FilterComparison.IsEmpty:\r\n return translate('filter-comparison-pipe.is-empty');\r\n default:\r\n throw new Error(`Invalid FilterComparison value: ${value}`);\r\n }\r\n }\r\n\r\n}\r\n", "import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {FilterStatement} from '../../../_models/metadata/v2/filter-statement';\r\nimport {BehaviorSubject, distinctUntilChanged, filter, map, Observable, of, startWith, switchMap, tap} from 'rxjs';\r\nimport {MetadataService} from 'src/app/_services/metadata.service';\r\nimport {mangaFormatFilters} from 'src/app/_models/metadata/series-filter';\r\nimport {PersonRole} from 'src/app/_models/metadata/person';\r\nimport {LibraryService} from 'src/app/_services/library.service';\r\nimport {CollectionTagService} from 'src/app/_services/collection-tag.service';\r\nimport {FilterComparison} from 'src/app/_models/metadata/v2/filter-comparison';\r\nimport {allFields, FilterField} from 'src/app/_models/metadata/v2/filter-field';\r\nimport {AsyncPipe, NgTemplateOutlet} from \"@angular/common\";\r\nimport {FilterFieldPipe} from \"../../../_pipes/filter-field.pipe\";\r\nimport {FilterComparisonPipe} from \"../../../_pipes/filter-comparison.pipe\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {Select2Module, Select2Option} from \"ng-select2-component\";\r\nimport {TagBadgeComponent} from \"../../../shared/tag-badge/tag-badge.component\";\r\nimport {\r\n NgbDate,\r\n NgbDateParserFormatter,\r\n NgbDatepicker,\r\n NgbInputDatepicker,\r\n NgbTooltip\r\n} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {TranslocoDirective} from \"@jsverse/transloco\";\r\n\r\nenum PredicateType {\r\n Text = 1,\r\n Number = 2,\r\n Dropdown = 3,\r\n Boolean = 4,\r\n Date = 5\r\n}\r\n\r\nclass FilterRowUi {\r\n unit = '';\r\n tooltip = ''\r\n constructor(unit: string = '', tooltip: string = '') {\r\n this.unit = unit;\r\n this.tooltip = tooltip;\r\n }\r\n}\r\n\r\nconst unitLabels: Map = new Map([\r\n [FilterField.ReadingDate, new FilterRowUi('unit-reading-date')],\r\n [FilterField.AverageRating, new FilterRowUi('unit-average-rating')],\r\n [FilterField.ReadProgress, new FilterRowUi('unit-reading-progress')],\r\n [FilterField.UserRating, new FilterRowUi('unit-user-rating')],\r\n [FilterField.ReadLast, new FilterRowUi('unit-read-last')],\r\n]);\r\n\r\nconst StringFields = [FilterField.SeriesName, FilterField.Summary, FilterField.Path, FilterField.FilePath];\r\nconst NumberFields = [\r\n FilterField.ReadTime, FilterField.ReleaseYear, FilterField.ReadProgress,\r\n FilterField.UserRating, FilterField.AverageRating, FilterField.ReadLast\r\n];\r\nconst DropdownFields = [\r\n FilterField.PublicationStatus, FilterField.Languages, FilterField.AgeRating,\r\n FilterField.Translators, FilterField.Characters, FilterField.Publisher,\r\n FilterField.Editor, FilterField.CoverArtist, FilterField.Letterer,\r\n FilterField.Colorist, FilterField.Inker, FilterField.Penciller,\r\n FilterField.Writers, FilterField.Genres, FilterField.Libraries,\r\n FilterField.Formats, FilterField.CollectionTags, FilterField.Tags,\r\n FilterField.Imprint, FilterField.Team, FilterField.Location\r\n];\r\nconst BooleanFields = [FilterField.WantToRead];\r\nconst DateFields = [FilterField.ReadingDate];\r\n\r\nconst DropdownFieldsWithoutMustContains = [\r\n FilterField.Libraries, FilterField.Formats, FilterField.AgeRating, FilterField.PublicationStatus\r\n];\r\nconst DropdownFieldsThatIncludeNumberComparisons = [\r\n FilterField.AgeRating\r\n];\r\nconst NumberFieldsThatIncludeDateComparisons = [\r\n FilterField.ReleaseYear\r\n];\r\n\r\nconst FieldsThatShouldIncludeIsEmpty = [\r\n FilterField.Summary, FilterField.UserRating, FilterField.Genres,\r\n FilterField.CollectionTags, FilterField.Tags, FilterField.ReleaseYear,\r\n FilterField.Translators, FilterField.Characters, FilterField.Publisher,\r\n FilterField.Editor, FilterField.CoverArtist, FilterField.Letterer,\r\n FilterField.Colorist, FilterField.Inker, FilterField.Penciller,\r\n FilterField.Writers, FilterField.Imprint, FilterField.Team,\r\n FilterField.Location,\r\n];\r\n\r\nconst StringComparisons = [\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,\r\n FilterComparison.BeginsWith,\r\n FilterComparison.EndsWith,\r\n FilterComparison.Matches];\r\nconst DateComparisons = [\r\n FilterComparison.IsBefore,\r\n FilterComparison.IsAfter,\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,];\r\nconst NumberComparisons = [\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,\r\n FilterComparison.LessThan,\r\n FilterComparison.LessThanEqual,\r\n FilterComparison.GreaterThan,\r\n FilterComparison.GreaterThanEqual];\r\nconst DropdownComparisons = [\r\n FilterComparison.Equal,\r\n FilterComparison.NotEqual,\r\n FilterComparison.Contains,\r\n FilterComparison.NotContains,\r\n FilterComparison.MustContains];\r\nconst BooleanComparisons = [\r\n FilterComparison.Equal\r\n]\r\n\r\n@Component({\r\n selector: 'app-metadata-row-filter',\r\n templateUrl: './metadata-filter-row.component.html',\r\n styleUrls: ['./metadata-filter-row.component.scss'],\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n AsyncPipe,\r\n FilterFieldPipe,\r\n FilterComparisonPipe,\r\n Select2Module,\r\n NgbTooltip,\r\n TranslocoDirective,\r\n NgbInputDatepicker\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MetadataFilterRowComponent implements OnInit {\r\n\r\n @Input() index: number = 0; // This is only for debugging\r\n /**\r\n * Slightly misleading as this is the initial state and will be updated on the filterStatement event emitter\r\n */\r\n @Input() preset!: FilterStatement;\r\n @Input() availableFields: Array = allFields;\r\n @Output() filterStatement = new EventEmitter();\r\n\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly dateParser = inject(NgbDateParserFormatter);\r\n\r\n protected readonly FilterComparison = FilterComparison;\r\n\r\n formGroup: FormGroup = new FormGroup({\r\n 'comparison': new FormControl(FilterComparison.Equal, []),\r\n 'filterValue': new FormControl('', []),\r\n });\r\n validComparisons$: BehaviorSubject = new BehaviorSubject([FilterComparison.Equal] as FilterComparison[]);\r\n predicateType$: BehaviorSubject = new BehaviorSubject(PredicateType.Text as PredicateType);\r\n dropdownOptions$ = of([]);\r\n\r\n loaded: boolean = false;\r\n protected readonly PredicateType = PredicateType;\r\n\r\n get UiLabel(): FilterRowUi | null {\r\n const field = parseInt(this.formGroup.get('input')!.value, 10) as FilterField;\r\n if (!unitLabels.has(field)) return null;\r\n return unitLabels.get(field) as FilterRowUi;\r\n }\r\n\r\n get MultipleDropdownAllowed() {\r\n const comp = parseInt(this.formGroup.get('comparison')?.value, 10) as FilterComparison;\r\n return comp === FilterComparison.Contains || comp === FilterComparison.NotContains || comp === FilterComparison.MustContains;\r\n }\r\n\r\n constructor(private readonly metadataService: MetadataService, private readonly libraryService: LibraryService,\r\n private readonly collectionTagService: CollectionTagService) {}\r\n\r\n ngOnInit() {\r\n this.formGroup.addControl('input', new FormControl(FilterField.SeriesName, []));\r\n\r\n this.formGroup.get('input')?.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe((val: string) => this.handleFieldChange(val));\r\n this.populateFromPreset();\r\n\r\n this.formGroup.get('filterValue')?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\r\n\r\n // Dropdown dynamic option selection\r\n this.dropdownOptions$ = this.formGroup.get('input')!.valueChanges.pipe(\r\n startWith(this.preset.value),\r\n distinctUntilChanged(),\r\n filter(() => {\r\n const inputVal = parseInt(this.formGroup.get('input')?.value, 10) as FilterField;\r\n return DropdownFields.includes(inputVal);\r\n }),\r\n switchMap((_) => this.getDropdownObservable()),\r\n takeUntilDestroyed(this.destroyRef)\r\n );\r\n\r\n\r\n this.formGroup!.valueChanges.pipe(\r\n distinctUntilChanged(),\r\n tap(_ => this.propagateFilterUpdate()),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe();\r\n\r\n this.loaded = true;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n propagateFilterUpdate() {\r\n const stmt = {\r\n comparison: parseInt(this.formGroup.get('comparison')?.value, 10) as FilterComparison,\r\n field: parseInt(this.formGroup.get('input')?.value, 10) as FilterField,\r\n value: this.formGroup.get('filterValue')?.value!\r\n };\r\n\r\n if (typeof stmt.value === 'object' && DateFields.includes(stmt.field)) {\r\n stmt.value = this.dateParser.format(stmt.value);\r\n }\r\n\r\n // Some ids can get through and be numbers, convert them to strings for the backend\r\n if (typeof stmt.value === 'number' && !Number.isNaN(stmt.value)) {\r\n stmt.value = stmt.value + '';\r\n }\r\n\r\n if (typeof stmt.value === 'boolean') {\r\n stmt.value = stmt.value + '';\r\n }\r\n\r\n if (stmt.comparison !== FilterComparison.IsEmpty) {\r\n if (!stmt.value && (![FilterField.SeriesName, FilterField.Summary].includes(stmt.field) && !BooleanFields.includes(stmt.field))) return;\r\n }\r\n\r\n this.filterStatement.emit(stmt);\r\n }\r\n\r\n populateFromPreset() {\r\n const val = this.preset.value === \"undefined\" || !this.preset.value ? '' : this.preset.value;\r\n this.formGroup.get('comparison')?.patchValue(this.preset.comparison);\r\n this.formGroup.get('input')?.patchValue(this.preset.field);\r\n\r\n if (StringFields.includes(this.preset.field)) {\r\n this.formGroup.get('filterValue')?.patchValue(val);\r\n } else if (BooleanFields.includes(this.preset.field)) {\r\n this.formGroup.get('filterValue')?.patchValue(val);\r\n } else if (DateFields.includes(this.preset.field)) {\r\n this.formGroup.get('filterValue')?.patchValue(this.dateParser.parse(val));\r\n }\r\n else if (DropdownFields.includes(this.preset.field)) {\r\n if (this.MultipleDropdownAllowed || val.includes(',')) {\r\n this.formGroup.get('filterValue')?.patchValue(val.split(',').map(d => parseInt(d, 10)));\r\n } else {\r\n if (this.preset.field === FilterField.Languages) {\r\n this.formGroup.get('filterValue')?.patchValue(val);\r\n } else {\r\n this.formGroup.get('filterValue')?.patchValue(parseInt(val, 10));\r\n }\r\n }\r\n } else {\r\n this.formGroup.get('filterValue')?.patchValue(parseInt(val, 10));\r\n }\r\n\r\n\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n getDropdownObservable(): Observable {\r\n const filterField = parseInt(this.formGroup.get('input')?.value, 10) as FilterField;\r\n switch (filterField) {\r\n case FilterField.PublicationStatus:\r\n return this.metadataService.getAllPublicationStatus().pipe(map(pubs => pubs.map(pub => {\r\n return {value: pub.value, label: pub.title}\r\n })));\r\n case FilterField.AgeRating:\r\n return this.metadataService.getAllAgeRatings().pipe(map(ratings => ratings.map(rating => {\r\n return {value: rating.value, label: rating.title}\r\n })));\r\n case FilterField.Genres:\r\n return this.metadataService.getAllGenres().pipe(map(genres => genres.map(genre => {\r\n return {value: genre.id, label: genre.title}\r\n })));\r\n case FilterField.Languages:\r\n return this.metadataService.getAllLanguages().pipe(map(statuses => statuses.map(status => {\r\n return {value: status.isoCode, label: status.title + ` (${status.isoCode})`}\r\n })));\r\n case FilterField.Formats:\r\n return of(mangaFormatFilters).pipe(map(statuses => statuses.map(status => {\r\n return {value: status.value, label: status.title}\r\n })));\r\n case FilterField.Libraries:\r\n return this.libraryService.getLibraries().pipe(map(libs => libs.map(lib => {\r\n return {value: lib.id, label: lib.name}\r\n })));\r\n case FilterField.Tags:\r\n return this.metadataService.getAllTags().pipe(map(statuses => statuses.map(status => {\r\n return {value: status.id, label: status.title}\r\n })));\r\n case FilterField.CollectionTags:\r\n return this.collectionTagService.allCollections().pipe(map(statuses => statuses.map(status => {\r\n return {value: status.id, label: status.title}\r\n })));\r\n case FilterField.Characters: return this.getPersonOptions(PersonRole.Character);\r\n case FilterField.Colorist: return this.getPersonOptions(PersonRole.Colorist);\r\n case FilterField.CoverArtist: return this.getPersonOptions(PersonRole.CoverArtist);\r\n case FilterField.Editor: return this.getPersonOptions(PersonRole.Editor);\r\n case FilterField.Inker: return this.getPersonOptions(PersonRole.Inker);\r\n case FilterField.Letterer: return this.getPersonOptions(PersonRole.Letterer);\r\n case FilterField.Penciller: return this.getPersonOptions(PersonRole.Penciller);\r\n case FilterField.Publisher: return this.getPersonOptions(PersonRole.Publisher);\r\n case FilterField.Imprint: return this.getPersonOptions(PersonRole.Imprint);\r\n case FilterField.Team: return this.getPersonOptions(PersonRole.Team);\r\n case FilterField.Location: return this.getPersonOptions(PersonRole.Location);\r\n case FilterField.Translators: return this.getPersonOptions(PersonRole.Translator);\r\n case FilterField.Writers: return this.getPersonOptions(PersonRole.Writer);\r\n }\r\n return of([]);\r\n }\r\n\r\n getPersonOptions(role: PersonRole) {\r\n return this.metadataService.getAllPeopleByRole(role).pipe(map(people => people.map(person => {\r\n return {value: person.id, label: person.name}\r\n })));\r\n }\r\n\r\n\r\n handleFieldChange(val: string) {\r\n const inputVal = parseInt(val, 10) as FilterField;\r\n\r\n\r\n if (StringFields.includes(inputVal)) {\r\n let comps = [...StringComparisons];\r\n\r\n if (FieldsThatShouldIncludeIsEmpty.includes(inputVal)) {\r\n comps.push(FilterComparison.IsEmpty);\r\n }\r\n\r\n this.validComparisons$.next([...new Set(comps)]);\r\n this.predicateType$.next(PredicateType.Text);\r\n\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue('');\r\n this.formGroup.get('comparison')?.patchValue(StringComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (NumberFields.includes(inputVal)) {\r\n const comps = [...NumberComparisons];\r\n\r\n if (NumberFieldsThatIncludeDateComparisons.includes(inputVal)) {\r\n comps.push(...DateComparisons);\r\n }\r\n if (FieldsThatShouldIncludeIsEmpty.includes(inputVal)) {\r\n comps.push(FilterComparison.IsEmpty);\r\n }\r\n\r\n this.validComparisons$.next([...new Set(comps)]);\r\n this.predicateType$.next(PredicateType.Number);\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(0);\r\n this.formGroup.get('comparison')?.patchValue(NumberComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (DateFields.includes(inputVal)) {\r\n const comps = [...DateComparisons];\r\n if (FieldsThatShouldIncludeIsEmpty.includes(inputVal)) {\r\n comps.push(FilterComparison.IsEmpty);\r\n }\r\n\r\n this.validComparisons$.next([...new Set(comps)]);\r\n this.predicateType$.next(PredicateType.Date);\r\n\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(false);\r\n this.formGroup.get('comparison')?.patchValue(DateComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (BooleanFields.includes(inputVal)) {\r\n let comps = [...DateComparisons];\r\n if (FieldsThatShouldIncludeIsEmpty.includes(inputVal)) {\r\n comps.push(FilterComparison.IsEmpty);\r\n }\r\n\r\n\r\n this.validComparisons$.next([...new Set(comps)]);\r\n this.predicateType$.next(PredicateType.Boolean);\r\n\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(false);\r\n this.formGroup.get('comparison')?.patchValue(BooleanComparisons[0]);\r\n }\r\n return;\r\n }\r\n\r\n if (DropdownFields.includes(inputVal)) {\r\n let comps = [...DropdownComparisons];\r\n if (DropdownFieldsThatIncludeNumberComparisons.includes(inputVal)) {\r\n comps.push(...NumberComparisons);\r\n }\r\n if (DropdownFieldsWithoutMustContains.includes(inputVal)) {\r\n comps = comps.filter(c => c !== FilterComparison.MustContains);\r\n }\r\n if (FieldsThatShouldIncludeIsEmpty.includes(inputVal)) {\r\n comps.push(FilterComparison.IsEmpty);\r\n }\r\n\r\n this.validComparisons$.next([...new Set(comps)]);\r\n this.predicateType$.next(PredicateType.Dropdown);\r\n if (this.loaded) {\r\n this.formGroup.get('filterValue')?.patchValue(0);\r\n this.formGroup.get('comparison')?.patchValue(comps[0]);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n\r\n\r\n onDateSelect(_: NgbDate) {\r\n this.propagateFilterUpdate();\r\n }\r\n updateIfDateFilled() {\r\n this.propagateFilterUpdate();\r\n }\r\n}\r\n", "\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n @if (formGroup.get('comparison')?.value !== FilterComparison.IsEmpty) {\r\n @if (predicateType$ | async; as predicateType) {\r\n @switch (predicateType) {\r\n @case (PredicateType.Text) {\r\n \r\n }\r\n @case (PredicateType.Number) {\r\n \r\n }\r\n @case (PredicateType.Boolean) {\r\n \r\n }\r\n @case (PredicateType.Date) {\r\n
\r\n \r\n \r\n
\r\n }\r\n @case (PredicateType.Dropdown) {\r\n @if (dropdownOptions$ | async; as opts) {\r\n \r\n \r\n }\r\n }\r\n }\r\n }\r\n }\r\n
\r\n\r\n
\r\n @if (UiLabel !== null) {\r\n {{t(UiLabel.unit)}}\r\n @if (UiLabel.tooltip) {\r\n \r\n }\r\n }\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n", "import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport {MetadataService} from 'src/app/_services/metadata.service';\r\nimport {Breakpoint, UtilityService} from 'src/app/shared/_services/utility.service';\r\nimport {SeriesFilterV2} from 'src/app/_models/metadata/v2/series-filter-v2';\r\nimport {NgForOf, NgIf, UpperCasePipe} from \"@angular/common\";\r\nimport {MetadataFilterRowComponent} from \"../metadata-filter-row/metadata-filter-row.component\";\r\nimport {FilterStatement} from \"../../../_models/metadata/v2/filter-statement\";\r\nimport {CardActionablesComponent} from \"../../../_single-module/card-actionables/card-actionables.component\";\r\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {FilterCombination} from \"../../../_models/metadata/v2/filter-combination\";\r\nimport {FilterUtilitiesService} from \"../../../shared/_services/filter-utilities.service\";\r\nimport {allFields} from \"../../../_models/metadata/v2/filter-field\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {distinctUntilChanged, tap} from \"rxjs/operators\";\r\nimport {translate, TranslocoDirective} from \"@jsverse/transloco\";\r\n\r\n@Component({\r\n selector: 'app-metadata-builder',\r\n templateUrl: './metadata-builder.component.html',\r\n styleUrls: ['./metadata-builder.component.scss'],\r\n standalone: true,\r\n imports: [\r\n NgIf,\r\n MetadataFilterRowComponent,\r\n NgForOf,\r\n CardActionablesComponent,\r\n FormsModule,\r\n NgbTooltip,\r\n UpperCasePipe,\r\n ReactiveFormsModule,\r\n TranslocoDirective\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MetadataBuilderComponent implements OnInit {\r\n\r\n @Input({required: true}) filter!: SeriesFilterV2;\r\n /**\r\n * The number of statements that can be. 0 means unlimited. -1 means none.\r\n */\r\n @Input() statementLimit = 0;\r\n @Input() availableFilterFields = allFields;\r\n @Output() update: EventEmitter = new EventEmitter();\r\n @Output() apply: EventEmitter = new EventEmitter();\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly metadataService = inject(MetadataService);\r\n protected readonly utilityService = inject(UtilityService);\r\n protected readonly filterUtilityService = inject(FilterUtilitiesService);\r\n private readonly destroyRef = inject(DestroyRef);\r\n protected readonly Breakpoint = Breakpoint;\r\n\r\n formGroup: FormGroup = new FormGroup({});\r\n\r\n groupOptions: Array<{value: FilterCombination, title: string}> = [\r\n {value: FilterCombination.Or, title: translate('metadata-builder.or')},\r\n {value: FilterCombination.And, title: translate('metadata-builder.and')},\r\n ];\r\n\r\n ngOnInit() {\r\n this.formGroup.addControl('comparison', new FormControl(this.filter?.combination || FilterCombination.Or, []));\r\n this.formGroup.valueChanges.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef), tap(values => {\r\n this.filter.combination = parseInt(this.formGroup.get('comparison')?.value, 10) as FilterCombination;\r\n this.update.emit(this.filter);\r\n })).subscribe();\r\n }\r\n\r\n addFilter() {\r\n this.filter.statements = [this.metadataService.createDefaultFilterStatement(), ...this.filter.statements];\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n removeFilter(index: number) {\r\n this.filter.statements = this.filter.statements.slice(0, index).concat(this.filter.statements.slice(index + 1))\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n updateFilter(index: number, filterStmt: FilterStatement) {\r\n this.metadataService.updateFilter(this.filter.statements, index, filterStmt);\r\n this.update.emit(this.filter);\r\n }\r\n\r\n}\r\n", "\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n", "import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {NgbCollapse, NgbModal, NgbRating, NgbTooltip} from '@ng-bootstrap/ng-bootstrap';\r\nimport {Breakpoint, UtilityService} from '../shared/_services/utility.service';\r\nimport {Library} from '../_models/library/library';\r\nimport {allSortFields, FilterEvent, FilterItem, SortField} from '../_models/metadata/series-filter';\r\nimport {ToggleService} from '../_services/toggle.service';\r\nimport {FilterSettings} from './filter-settings';\r\nimport {SeriesFilterV2} from '../_models/metadata/v2/series-filter-v2';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {TypeaheadComponent} from '../typeahead/_components/typeahead.component';\r\nimport {DrawerComponent} from '../shared/drawer/drawer.component';\r\nimport {AsyncPipe, NgClass, NgForOf, NgIf, NgTemplateOutlet} from '@angular/common';\r\nimport {translate, TranslocoModule} from \"@jsverse/transloco\";\r\nimport {SortFieldPipe} from \"../_pipes/sort-field.pipe\";\r\nimport {MetadataBuilderComponent} from \"./_components/metadata-builder/metadata-builder.component\";\r\nimport {allFields} from \"../_models/metadata/v2/filter-field\";\r\nimport {MetadataService} from \"../_services/metadata.service\";\r\nimport {FilterUtilitiesService} from \"../shared/_services/filter-utilities.service\";\r\nimport {FilterService} from \"../_services/filter.service\";\r\nimport {ToastrService} from \"ngx-toastr\";\r\nimport {\r\n Select2AutoCreateEvent,\r\n Select2Module,\r\n Select2Option,\r\n Select2UpdateEvent,\r\n Select2UpdateValue\r\n} from \"ng-select2-component\";\r\nimport {SmartFilter} from \"../_models/metadata/v2/smart-filter\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nconst ANIMATION_SPEED = 750;\r\n\r\n@Component({\r\n selector: 'app-metadata-filter',\r\n templateUrl: './metadata-filter.component.html',\r\n styleUrls: ['./metadata-filter.component.scss'],\r\n animations: [\r\n trigger(\r\n 'inOutAnimation',\r\n [\r\n transition(\r\n ':enter',\r\n [\r\n style({ height: 0, opacity: 0 }),\r\n animate('.5s ease-out',\r\n style({ height: 300, opacity: 1 }))\r\n ]\r\n ),\r\n transition(\r\n ':leave',\r\n [\r\n style({ height: 300, opacity: 1 }),\r\n animate('.5s ease-in',\r\n style({ height: 0, opacity: 0 }))\r\n ]\r\n )\r\n ]\r\n ),\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [NgIf, NgbCollapse, NgTemplateOutlet, DrawerComponent, NgbTooltip, TypeaheadComponent,\r\n ReactiveFormsModule, FormsModule, NgbRating, AsyncPipe, TranslocoModule, SortFieldPipe,\r\n MetadataBuilderComponent, NgForOf, Select2Module, NgClass]\r\n})\r\nexport class MetadataFilterComponent implements OnInit {\r\n\r\n /**\r\n * This toggles the opening/collapsing of the metadata filter code\r\n */\r\n @Input() filterOpen: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * Should filtering be shown on the page\r\n */\r\n @Input() filteringDisabled: boolean = false;\r\n\r\n @Input({required: true}) filterSettings!: FilterSettings;\r\n\r\n @Output() applyFilter: EventEmitter = new EventEmitter();\r\n\r\n @ContentChild('[ngbCollapse]') collapse!: NgbCollapse;\r\n private readonly destroyRef = inject(DestroyRef);\r\n public readonly utilityService = inject(UtilityService);\r\n public readonly filterUtilitiesService = inject(FilterUtilitiesService);\r\n\r\n\r\n /**\r\n * Controls the visibility of extended controls that sit below the main header.\r\n */\r\n filteringCollapsed: boolean = true;\r\n\r\n libraries: Array> = [];\r\n\r\n sortGroup!: FormGroup;\r\n isAscendingSort: boolean = true;\r\n\r\n updateApplied: number = 0;\r\n\r\n fullyLoaded: boolean = false;\r\n filterV2: SeriesFilterV2 | undefined;\r\n allSortFields = allSortFields;\r\n allFilterFields = allFields;\r\n\r\n smartFilters!: Array;\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly toastr = inject(ToastrService);\r\n\r\n\r\n constructor(public toggleService: ToggleService, private filterService: FilterService) {\r\n this.filterService.getAllFilters().subscribe(res => {\r\n this.smartFilters = res.map(r => {\r\n return {\r\n value: r,\r\n label: r.name,\r\n }\r\n });\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.filterSettings === undefined) {\r\n this.filterSettings = new FilterSettings();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.filterOpen) {\r\n this.filterOpen.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(openState => {\r\n this.filteringCollapsed = !openState;\r\n this.toggleService.set(!this.filteringCollapsed);\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n\r\n\r\n this.loadFromPresetsAndSetup();\r\n }\r\n\r\n // loadSavedFilter(event: Select2UpdateEvent) {\r\n // // Load the filter from the backend and update the screen\r\n // if (event.value === undefined || typeof(event.value) === 'string') return;\r\n // const smartFilter = event.value as SmartFilter;\r\n // this.filterV2 = this.filterUtilitiesService.decodeSeriesFilter(smartFilter.filter);\r\n // this.cdRef.markForCheck();\r\n // console.log('update event: ', event);\r\n // }\r\n //\r\n // createFilterValue(event: Select2AutoCreateEvent) {\r\n // // Create a new name and filter\r\n // if (!this.filterV2) return;\r\n // this.filterV2.name = event.value;\r\n // this.filterService.saveFilter(this.filterV2).subscribe(() => {\r\n //\r\n // const item = {\r\n // value: {\r\n // filter: this.filterUtilitiesService.encodeSeriesFilter(this.filterV2!),\r\n // name: event.value,\r\n // } as SmartFilter,\r\n // label: event.value\r\n // };\r\n // this.smartFilters.push(item);\r\n // this.sortGroup.get('name')?.setValue(item);\r\n // this.cdRef.markForCheck();\r\n // this.toastr.success(translate('toasts.smart-filter-updated'));\r\n // this.apply();\r\n // });\r\n //\r\n // console.log('create event: ', event);\r\n // }\r\n\r\n\r\n close() {\r\n this.filterOpen.emit(false);\r\n this.filteringCollapsed = true;\r\n this.toggleService.set(!this.filteringCollapsed);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n deepClone(obj: any): any {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n return obj.map(item => this.deepClone(item));\r\n }\r\n\r\n const clonedObj: any = {};\r\n\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n if (typeof obj[key] === 'object' && obj[key] !== null) {\r\n clonedObj[key] = this.deepClone(obj[key]);\r\n } else {\r\n clonedObj[key] = obj[key];\r\n }\r\n }\r\n }\r\n\r\n return clonedObj;\r\n }\r\n\r\n handleFilters(filter: SeriesFilterV2) {\r\n this.filterV2 = filter;\r\n }\r\n\r\n\r\n loadFromPresetsAndSetup() {\r\n this.fullyLoaded = false;\r\n\r\n this.filterV2 = this.deepClone(this.filterSettings.presetsV2);\r\n\r\n this.sortGroup = new FormGroup({\r\n sortField: new FormControl({value: this.filterV2?.sortOptions?.sortField || SortField.SortName, disabled: this.filterSettings.sortDisabled}, []),\r\n limitTo: new FormControl(this.filterV2?.limitTo || 0, []),\r\n name: new FormControl(this.filterV2?.name || '', [])\r\n });\r\n if (this.filterSettings?.presetsV2?.sortOptions) {\r\n this.isAscendingSort = this.filterSettings?.presetsV2?.sortOptions!.isAscending;\r\n }\r\n\r\n\r\n this.sortGroup.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n if (this.filterV2?.sortOptions === null) {\r\n this.filterV2.sortOptions = {\r\n isAscending: this.isAscendingSort,\r\n sortField: parseInt(this.sortGroup.get('sortField')?.value, 10)\r\n };\r\n }\r\n this.filterV2!.sortOptions!.sortField = parseInt(this.sortGroup.get('sortField')?.value, 10);\r\n this.filterV2!.limitTo = Math.max(parseInt(this.sortGroup.get('limitTo')?.value || '0', 10), 0);\r\n this.filterV2!.name = this.sortGroup.get('name')?.value || '';\r\n this.cdRef.markForCheck();\r\n });\r\n\r\n this.fullyLoaded = true;\r\n this.apply();\r\n }\r\n\r\n\r\n updateSortOrder() {\r\n if (this.filterSettings.sortDisabled) return;\r\n this.isAscendingSort = !this.isAscendingSort;\r\n if (this.filterV2?.sortOptions === null) {\r\n this.filterV2.sortOptions = {\r\n isAscending: this.isAscendingSort,\r\n sortField: SortField.SortName\r\n }\r\n }\r\n\r\n this.filterV2!.sortOptions!.isAscending = this.isAscendingSort;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n clear() {\r\n // Apply any presets which will trigger the \"apply\"\r\n this.loadFromPresetsAndSetup();\r\n }\r\n\r\n apply() {\r\n this.applyFilter.emit({isFirst: this.updateApplied === 0, filterV2: this.filterV2!});\r\n\r\n if (this.utilityService.getActiveBreakpoint() === Breakpoint.Mobile && this.updateApplied !== 0) {\r\n this.toggleSelected();\r\n }\r\n\r\n this.updateApplied++;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n save() {\r\n if (!this.filterV2) return;\r\n this.filterV2.name = this.sortGroup.get('name')?.value;\r\n this.filterService.saveFilter(this.filterV2).subscribe(() => {\r\n this.toastr.success(translate('toasts.smart-filter-updated'));\r\n this.apply();\r\n });\r\n }\r\n\r\n toggleSelected() {\r\n this.toggleService.toggle();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n setToggle(event: any) {\r\n this.toggleService.set(!this.filteringCollapsed);\r\n }\r\n\r\n protected readonly Breakpoint = Breakpoint;\r\n}\r\n", "\r\n \r\n \r\n
= Breakpoint.Tablet; else mobileView\" [@inOutAnimation]>\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n {{t('filter-title')}}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n Breakpoint.Tablet\" [ngTemplateOutlet]=\"buttons\">\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n", "import {DOCUMENT, NgClass, NgForOf, NgTemplateOutlet} from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild, DestroyRef,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n inject,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output, SimpleChange, SimpleChanges,\r\n TemplateRef,\r\n TrackByFunction,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {NavigationStart, Router} from '@angular/router';\r\nimport {VirtualScrollerComponent, VirtualScrollerModule} from '@iharbeck/ngx-virtual-scroller';\r\nimport {FilterSettings} from 'src/app/metadata-filter/filter-settings';\r\nimport {FilterUtilitiesService} from 'src/app/shared/_services/filter-utilities.service';\r\nimport {Breakpoint, UtilityService} from 'src/app/shared/_services/utility.service';\r\nimport {JumpKey} from 'src/app/_models/jumpbar/jump-key';\r\nimport {Library} from 'src/app/_models/library/library';\r\nimport {Pagination} from 'src/app/_models/pagination';\r\nimport {FilterEvent, FilterItem, SortField} from 'src/app/_models/metadata/series-filter';\r\nimport {ActionItem} from 'src/app/_services/action-factory.service';\r\nimport {JumpbarService} from 'src/app/_services/jumpbar.service';\r\nimport {LoadingComponent} from \"../../shared/loading/loading.component\";\r\n\r\n\r\nimport {NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {MetadataFilterComponent} from \"../../metadata-filter/metadata-filter.component\";\r\nimport {TranslocoDirective} from \"@jsverse/transloco\";\r\nimport {CardActionablesComponent} from \"../../_single-module/card-actionables/card-actionables.component\";\r\nimport {SeriesFilterV2} from \"../../_models/metadata/v2/series-filter-v2\";\r\nimport {filter, map} from \"rxjs/operators\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {tap} from \"rxjs\";\r\n\r\n\r\nconst ANIMATION_TIME_MS = 0;\r\n\r\n@Component({\r\n selector: 'app-card-detail-layout',\r\n standalone: true,\r\n imports: [LoadingComponent, VirtualScrollerModule, CardActionablesComponent, NgbTooltip, MetadataFilterComponent,\r\n TranslocoDirective, NgTemplateOutlet, NgClass, NgForOf],\r\n templateUrl: './card-detail-layout.component.html',\r\n styleUrls: ['./card-detail-layout.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CardDetailLayoutComponent implements OnInit, OnChanges {\r\n\r\n private readonly filterUtilityService = inject(FilterUtilitiesService);\r\n protected readonly utilityService = inject(UtilityService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly jumpbarService = inject(JumpbarService);\r\n private readonly router = inject(Router);\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n protected readonly Breakpoint = Breakpoint;\r\n\r\n @Input() header: string = '';\r\n @Input() isLoading: boolean = false;\r\n @Input() items: any[] = [];\r\n @Input() pagination!: Pagination;\r\n /**\r\n * Parent scroll for virtualize pagination\r\n */\r\n @Input() parentScroll!: Element | Window;\r\n\r\n // Filter Code\r\n @Input() filterOpen!: EventEmitter;\r\n /**\r\n * Should filtering be shown on the page\r\n */\r\n @Input() filteringDisabled: boolean = false;\r\n /**\r\n * Any actions to exist on the header for the parent collection (library, collection)\r\n */\r\n @Input() actions: ActionItem[] = [];\r\n /**\r\n * A trackBy to help with rendering. This is required as without it there are issues when scrolling\r\n */\r\n @Input({required: true}) trackByIdentity!: TrackByFunction;\r\n @Input() filterSettings!: FilterSettings;\r\n @Input() refresh!: EventEmitter;\r\n\r\n\r\n @Input() jumpBarKeys: Array = []; // This is approx 784 pixels tall, original keys\r\n jumpBarKeysToRender: Array = []; // What is rendered on screen\r\n\r\n @Output() itemClicked: EventEmitter = new EventEmitter();\r\n @Output() applyFilter: EventEmitter = new EventEmitter();\r\n\r\n @ContentChild('cardItem') itemTemplate!: TemplateRef;\r\n @ContentChild('noData') noDataTemplate!: TemplateRef;\r\n @ViewChild('.jump-bar') jumpBar!: ElementRef;\r\n\r\n @ViewChild(VirtualScrollerComponent) private virtualScroller!: VirtualScrollerComponent;\r\n\r\n filter: SeriesFilterV2 = this.filterUtilityService.createSeriesV2Filter();\r\n libraries: Array> = [];\r\n\r\n updateApplied: number = 0;\r\n bufferAmount: number = 1;\r\n\r\n\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document) {}\r\n\r\n\r\n @HostListener('window:resize', ['$event'])\r\n @HostListener('window:orientationchange', ['$event'])\r\n resizeJumpBar() {\r\n const currentSize = (this.document.querySelector('.viewport-container')?.getBoundingClientRect().height || 10) - 30;\r\n this.jumpBarKeysToRender = this.jumpbarService.generateJumpBar(this.jumpBarKeys, currentSize);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.trackByIdentity === undefined) {\r\n this.trackByIdentity = (_: number, item: any) => `${this.header}_${this.updateApplied}_${item?.libraryId}`;\r\n }\r\n\r\n if (this.filterSettings === undefined) {\r\n this.filterSettings = new FilterSettings();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.pagination === undefined) {\r\n this.pagination = {currentPage: 1, itemsPerPage: this.items.length, totalItems: this.items.length, totalPages: 1};\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.refresh) {\r\n this.refresh.subscribe(() => {\r\n this.cdRef.markForCheck();\r\n this.virtualScroller.refresh();\r\n });\r\n }\r\n\r\n this.router.events.pipe(\r\n filter(event => event instanceof NavigationStart),\r\n takeUntilDestroyed(this.destroyRef),\r\n map(evt => evt as NavigationStart),\r\n tap(_ => this.tryToSaveJumpKey()),\r\n ).subscribe();\r\n\r\n }\r\n\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.jumpBarKeysToRender = [...this.jumpBarKeys];\r\n this.resizeJumpBar();\r\n\r\n const startIndex = this.jumpbarService.getResumePosition(this.router.url);\r\n if (startIndex > 0) {\r\n setTimeout(() => this.virtualScroller.scrollToIndex(startIndex, true, 0, ANIMATION_TIME_MS), 10);\r\n return;\r\n }\r\n\r\n if (changes.hasOwnProperty('isLoading')) {\r\n const loadingChange = changes['isLoading'] as SimpleChange;\r\n if (loadingChange.previousValue === true && loadingChange.currentValue === false) {\r\n setTimeout(() => this.virtualScroller.scrollToIndex(0, true, 0, ANIMATION_TIME_MS), 10);\r\n }\r\n }\r\n }\r\n\r\n hasCustomSort() {\r\n if (this.filteringDisabled) return false;\r\n const hasCustomSort = this.filter?.sortOptions?.sortField != SortField.SortName || !this.filter?.sortOptions.isAscending;\r\n //const hasNonDefaultSortField = this.filterSettings?.presetsV2?.sortOptions?.sortField != SortField.SortName;\r\n\r\n return hasCustomSort;\r\n }\r\n\r\n performAction(action: ActionItem) {\r\n if (typeof action.callback === 'function') {\r\n action.callback(action, undefined);\r\n }\r\n }\r\n\r\n applyMetadataFilter(event: FilterEvent) {\r\n this.applyFilter.emit(event);\r\n this.updateApplied++;\r\n this.filter = event.filterV2;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n\r\n scrollTo(jumpKey: JumpKey) {\r\n if (this.hasCustomSort()) return;\r\n\r\n let targetIndex = 0;\r\n for(let i = 0; i < this.jumpBarKeys.length; i++) {\r\n if (this.jumpBarKeys[i].key === jumpKey.key) break;\r\n targetIndex += this.jumpBarKeys[i].size;\r\n }\r\n\r\n this.virtualScroller.scrollToIndex(targetIndex, true, 0, ANIMATION_TIME_MS);\r\n setTimeout(() => this.jumpbarService.saveResumePosition(this.router.url, this.virtualScroller.viewPortInfo.startIndex), ANIMATION_TIME_MS + 100);\r\n }\r\n\r\n tryToSaveJumpKey() {\r\n this.jumpbarService.saveResumePosition(this.router.url, this.virtualScroller.viewPortInfo.startIndex);\r\n }\r\n}\r\n", "\r\n\r\n @if (header.length > 0) {\r\n
\r\n
\r\n

\r\n @if (actions.length > 0) {\r\n \r\n  \r\n \r\n }\r\n\r\n \r\n {{header}} \r\n @if (pagination !== undefined) {\r\n {{pagination.totalItems}}\r\n }\r\n \r\n\r\n

\r\n
\r\n
\r\n }\r\n\r\n \r\n
\r\n
\r\n
\r\n @if (items.length === 0 && !isLoading) {\r\n

\r\n }\r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n @if (jumpBarKeysToRender.length >= 4 && items.length > 0 && scroll.viewPortInfo.maxScrollPosition > 0) {\r\n \r\n }\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n @if (items.length === 0 && !isLoading) {\r\n
\r\n

\r\n \r\n

\r\n
\r\n }\r\n\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n @for(jumpKey of jumpBarKeysToRender; track jumpKey.key; let i = $index) {\r\n \r\n }\r\n
\r\n
\r\n
\r\n"], "mappings": "69CAGA,IAAMA,GAAU,GAKHC,IAAc,IAAA,CAArB,MAAOA,CAAc,CAMzBC,aAAA,CAJA,KAAAC,WAAsC,CAAA,EAEtC,KAAAC,aAAwC,CAAA,CAExB,CAGhBC,aAAaC,EAAW,CACtB,IAAMC,EAAID,EAAIE,YAAW,EACzB,OAAI,KAAKL,WAAWM,eAAeF,CAAC,EAAU,KAAKJ,WAAWI,CAAC,EACxD,EACT,CAEAG,kBAAkBC,EAAW,CAC3B,OAAI,KAAKP,aAAaK,eAAeE,CAAG,EAAU,KAAKP,aAAaO,CAAG,EAChE,CACT,CAEAC,cAAcN,EAAaO,EAAa,CACtC,IAAMN,EAAID,EAAIE,YAAW,EACzB,KAAKL,WAAWI,CAAC,EAAIM,CACvB,CAEAC,mBAAmBH,EAAaE,EAAa,CAC3C,KAAKT,aAAaO,CAAG,EAAIE,CAC3B,CAEAE,gBAAgBC,EAA6BC,EAAmB,CAC9D,IAAMC,EAAYF,EAAYG,OAASnB,GACvC,GAAIiB,GAAeC,EACjB,MAAO,CAAC,GAAGF,CAAW,EAGxB,IAAMI,EAAsC,CAAA,EACtCC,EAAqBC,SAASC,KAAKC,MAAMP,EAAcjB,EAAO,EAAI,GAAI,EAAE,EACxEyB,EAAcT,EAAYG,OAASE,EAAqB,EAC9D,GAAII,GAAe,EAAG,MAAO,CAAC,GAAGT,CAAW,EAE5C,IAAMU,EAAeH,KAAKI,KAAKF,EAAc,CAAC,EACxCG,EAAWL,KAAKC,MAAMR,EAAYG,OAAS,CAAC,EAClDC,OAAAA,EAAoBS,KAAKb,EAAY,CAAC,CAAC,EACvC,KAAKc,0BAA0BF,EAAUF,EAAcV,EAAaI,CAAmB,EACvFA,EAAoBS,KAAKb,EAAYY,CAAQ,CAAC,EAC9C,KAAKG,2BAA2BH,EAAUF,EAAcV,EAAaI,CAAmB,EACxFA,EAAoBS,KAAKb,EAAYA,EAAYG,OAAS,CAAC,CAAC,EAErDC,CACT,CAEAW,2BAA2BH,EAAkBI,EAA2B,EAAGhB,EAA6BI,EAAmC,CACzI,IAAMa,EAAgC,CAAA,EACtC,QAAQC,EAAU,EAAGA,EAAUF,EAAkBE,IAAW,CAC1D,IAAIC,EAAM,IACNC,EAAW,GACf,QAAQC,EAAIT,EAAW,EAAGS,EAAIrB,EAAYG,OAAS,EAAGkB,IAChDrB,EAAYqB,CAAC,EAAEC,KAAOH,GAAO,CAACF,EAAeM,SAASF,CAAC,IACzDF,EAAMnB,EAAYqB,CAAC,EAAEC,KACrBF,EAAWC,GAGfJ,EAAeJ,KAAKO,CAAQ,CAC9B,CACA,QAAQC,EAAIT,EAAW,EAAGS,EAAIrB,EAAYG,OAAS,EAAGkB,IAC/CJ,EAAeM,SAASF,CAAC,GAAGjB,EAAoBS,KAAKb,EAAYqB,CAAC,CAAC,CAE5E,CAEAP,0BAA0BF,EAAkBI,EAA2B,EAAGhB,EAA6BI,EAAmC,CACxI,IAAMa,EAAgC,CAAA,EAEtC,QAAQC,EAAU,EAAGA,EAAUF,EAAkBE,IAAW,CAC1D,IAAIC,EAAM,IACNC,EAAW,GAEf,QAAQC,EAAI,EAAGA,EAAIT,EAAUS,IACvBrB,EAAYqB,CAAC,EAAEC,KAAOH,GAAO,CAACF,EAAeM,SAASF,CAAC,IACzDF,EAAMnB,EAAYqB,CAAC,EAAEC,KACrBF,EAAWC,GAGfJ,EAAeJ,KAAKO,CAAQ,CAC9B,CAEA,QAAQC,EAAI,EAAGA,EAAIT,EAAUS,IACtBJ,EAAeM,SAASF,CAAC,GAAGjB,EAAoBS,KAAKb,EAAYqB,CAAC,CAAC,CAE5E,CAQCG,YAAYC,EAAkBC,EAAkC,CAC/D,IAAMC,EAAgC,CAAA,EACtCF,OAAAA,EAAKG,QAAQC,GAAM,CACjB,IAAIC,EAAKJ,EAAYG,CAAG,EAAEE,OAAO,CAAC,EAAEvC,YAAW,EAC3C,gCAAgCwC,KAAKF,CAAE,IACzCA,EAAK,KAEFH,EAAKlC,eAAeqC,CAAE,IACzBH,EAAKG,CAAE,EAAI,GAEbH,EAAKG,CAAE,GAAK,CACd,CAAC,EACMG,OAAON,KAAKA,CAAI,EAAEO,IAAI3C,IAC3BA,EAAIA,EAAEC,YAAW,EACV,CACLF,IAAKC,EACL+B,KAAMK,EAAKpC,CAAC,EACZ4C,MAAO5C,GAEV,EAAE6C,KAAK,CAACC,EAAGC,IACND,EAAE/C,IAAMgD,EAAEhD,IAAY,GACtB+C,EAAE/C,IAAMgD,EAAEhD,IAAY,EACnB,CACR,CACH,iDAxHWL,EAAc,CAAA,kCAAdA,EAAcsD,QAAdtD,EAAcuD,UAAAC,WAFb,MAAM,CAAA,CAAA,SAEPxD,CAAc,GAAA,ECNrB,IAAOyD,GAAP,KAAqB,CAA3BC,aAAA,CACI,KAAAC,aAAe,GAKf,KAAAC,eAAyB,EACzB,KAAAC,aAAwB,EAC1B,GCFF,IAAaC,IAAa,IAAA,CAApB,MAAOA,CAAa,CAExBC,YAAoBC,EAAkC,CAAlC,KAAAA,iBAAAA,CACpB,CAEAC,UAAUC,EAAgB,CACxB,OAAQA,EAAK,CACX,KAAKC,EAAUC,SACb,OAAO,KAAKJ,iBAAiBK,UAAU,2BAA2B,EACpE,KAAKF,EAAUG,QACb,OAAO,KAAKN,iBAAiBK,UAAU,yBAAyB,EAClE,KAAKF,EAAUI,aACb,OAAO,KAAKP,iBAAiBK,UAAU,+BAA+B,EACxE,KAAKF,EAAUK,iBACb,OAAO,KAAKR,iBAAiBK,UAAU,oCAAoC,EAC7E,KAAKF,EAAUM,WACb,OAAO,KAAKT,iBAAiBK,UAAU,8BAA8B,EACvE,KAAKF,EAAUO,YACb,OAAO,KAAKV,iBAAiBK,UAAU,8BAA8B,EACvE,KAAKF,EAAUQ,aACb,OAAO,KAAKX,iBAAiBK,UAAU,+BAA+B,EACxE,KAAKF,EAAUS,cACb,OAAO,KAAKZ,iBAAiBK,UAAU,gCAAgC,EACzE,KAAKF,EAAUU,OACb,OAAO,KAAKb,iBAAiBK,UAAU,wBAAwB,CACnE,CAEF,iDA3BWP,GAAagB,EAAAC,GAAA,EAAA,CAAA,CAAA,CAAA,kDAAbjB,EAAakB,KAAA,GAAAC,WAAA,EAAA,CAAA,CAAA,SAAbnB,CAAa,GAAA,ECA1B,IAAaoB,IAAe,IAAA,CAAtB,MAAOA,CAAe,CAE1BC,UAAUC,EAAkB,CAC1B,OAAQA,EAAK,CACX,KAAKC,EAAYC,UACf,OAAOC,EAAU,8BAA8B,EACjD,KAAKF,EAAYG,WACf,OAAOD,EAAU,8BAA8B,EACjD,KAAKF,EAAYI,eACf,OAAOF,EAAU,mCAAmC,EACtD,KAAKF,EAAYK,SACf,OAAOH,EAAU,4BAA4B,EAC/C,KAAKF,EAAYM,YACf,OAAOJ,EAAU,gCAAgC,EACnD,KAAKF,EAAYO,OACf,OAAOL,EAAU,0BAA0B,EAC7C,KAAKF,EAAYQ,QACf,OAAON,EAAU,2BAA2B,EAC9C,KAAKF,EAAYS,OACf,OAAOP,EAAU,0BAA0B,EAC7C,KAAKF,EAAYU,MACf,OAAOR,EAAU,yBAAyB,EAC5C,KAAKF,EAAYW,QACf,OAAOT,EAAU,2BAA2B,EAC9C,KAAKF,EAAYY,KACf,OAAOV,EAAU,wBAAwB,EAC3C,KAAKF,EAAYa,SACf,OAAOX,EAAU,4BAA4B,EAC/C,KAAKF,EAAYc,UACf,OAAOZ,EAAU,6BAA6B,EAChD,KAAKF,EAAYe,UACf,OAAOb,EAAU,6BAA6B,EAChD,KAAKF,EAAYgB,SACf,OAAOd,EAAU,4BAA4B,EAC/C,KAAKF,EAAYiB,kBACf,OAAOf,EAAU,sCAAsC,EACzD,KAAKF,EAAYkB,UACf,OAAOhB,EAAU,6BAA6B,EAChD,KAAKF,EAAYmB,UACf,OAAOjB,EAAU,6BAA6B,EAChD,KAAKF,EAAYoB,aACf,OAAOlB,EAAU,iCAAiC,EACpD,KAAKF,EAAYqB,SACf,OAAOnB,EAAU,6BAA6B,EAChD,KAAKF,EAAYsB,YACf,OAAOpB,EAAU,gCAAgC,EACnD,KAAKF,EAAYuB,WACf,OAAOrB,EAAU,+BAA+B,EAClD,KAAKF,EAAYwB,QACf,OAAOtB,EAAU,2BAA2B,EAC9C,KAAKF,EAAYyB,KACf,OAAOvB,EAAU,wBAAwB,EAC3C,KAAKF,EAAY0B,YACf,OAAOxB,EAAU,+BAA+B,EAClD,KAAKF,EAAY2B,WACf,OAAOzB,EAAU,+BAA+B,EAClD,KAAKF,EAAY4B,QACf,OAAO1B,EAAU,2BAA2B,EAC9C,KAAKF,EAAY6B,KACf,OAAO3B,EAAU,wBAAwB,EAC3C,KAAKF,EAAY8B,SACf,OAAO5B,EAAU,6BAA6B,EAChD,KAAKF,EAAY+B,WACf,OAAO7B,EAAU,gCAAgC,EACnD,KAAKF,EAAYgC,YACf,OAAO9B,EAAU,6BAA6B,EAC9C,KAAKF,EAAYiC,SACjB,OAAO/B,EAAU,6BAA6B,EAChD,KAAKF,EAAYkC,cACf,OAAOhC,EAAU,kCAAkC,EACrD,QACE,MAAM,IAAIiC,MAAM,8BAA8BpC,CAAK,EAAE,CACzD,CACF,iDAzEWF,EAAe,CAAA,oDAAfA,EAAeuC,KAAA,GAAAC,WAAA,EAAA,CAAA,CAAA,SAAfxC,CAAe,GAAA,ECA5B,IAAayC,IAAoB,IAAA,CAA3B,MAAOA,CAAoB,CAE/BC,UAAUC,EAAuB,CAC/B,OAAQA,EAAK,CACX,KAAKC,EAAiBC,WACpB,OAAOC,EAAU,oCAAoC,EACvD,KAAKF,EAAiBG,SACpB,OAAOD,EAAU,iCAAiC,EACpD,KAAKF,EAAiBI,MACpB,OAAOF,EAAU,8BAA8B,EACjD,KAAKF,EAAiBK,YACpB,OAAOH,EAAU,qCAAqC,EACxD,KAAKF,EAAiBM,iBACpB,OAAOJ,EAAU,8CAA8C,EACjE,KAAKF,EAAiBO,SACpB,OAAOL,EAAU,kCAAkC,EACrD,KAAKF,EAAiBQ,cACpB,OAAON,EAAU,2CAA2C,EAC9D,KAAKF,EAAiBS,QACpB,OAAOP,EAAU,gCAAgC,EACnD,KAAKF,EAAiBU,YACpB,OAAOR,EAAU,yCAAyC,EAC5D,KAAKF,EAAiBW,SACpB,OAAOT,EAAU,kCAAkC,EACrD,KAAKF,EAAiBY,SACpB,OAAOV,EAAU,kCAAkC,EACrD,KAAKF,EAAiBa,SACpB,OAAOX,EAAU,kCAAkC,EACrD,KAAKF,EAAiBc,QACpB,OAAOZ,EAAU,iCAAiC,EACpD,KAAKF,EAAiBe,SACpB,OAAOb,EAAU,mCAAmC,EACtD,KAAKF,EAAiBgB,YACpB,OAAOd,EAAU,uCAAuC,EAC1D,KAAKF,EAAiBiB,aACpB,OAAOf,EAAU,sCAAsC,EACzD,KAAKF,EAAiBkB,QACpB,OAAOhB,EAAU,iCAAiC,EACpD,QACE,MAAM,IAAIiB,MAAM,mCAAmCpB,CAAK,EAAE,CAC9D,CACF,iDAzCWF,EAAoB,CAAA,yDAApBA,EAAoBuB,KAAA,GAAAC,WAAA,EAAA,CAAA,CAAA,SAApBxB,CAAoB,GAAA,yCEFbyB,EAAA,EAAA,SAAA,CAAA,EAAwBC,EAAA,CAAA,qBAAuBC,EAAA,0BAAvCC,EAAA,QAAAC,CAAA,EAAgBC,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAH,CAAA,CAAA,6BAQxBJ,EAAA,EAAA,SAAA,CAAA,EAA6BC,EAAA,CAAA,0BAAiCC,EAAA,0BAAtDC,EAAA,QAAAK,CAAA,EAAqBH,EAAA,EAAAC,EAAAC,EAAA,EAAA,EAAAC,CAAA,CAAA,yBAU3BC,EAAA,EAAA,QAAA,EAAA,wBAGAA,EAAA,EAAA,QAAA,EAAA,wBAGAA,EAAA,EAAA,QAAA,EAAA,qCAGAT,EAAA,EAAA,MAAA,EAAA,EAAyB,EAAA,QAAA,GAAA,CAAA,EAMrBU,EAAA,aAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAcF,EAAAG,aAAAN,CAAA,CAAoB,CAAA,CAAA,EAAC,OAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAC3BF,EAAAI,mBAAA,CAAoB,CAAA,CAAA,EAN9BhB,EAAA,EAUAF,EAAA,EAAA,SAAA,EAAA,EAAoEU,EAAA,QAAA,UAAA,CAAAE,EAAAC,CAAA,EAAA,IAAAM,EAAAC,EAAA,CAAA,EAAA,OAAAJ,EAASG,EAAAE,OAAA,CAAU,CAAA,CAAA,EAAgBnB,EAAA,EAAS,4BAKhHO,EAAA,EAAA,UAAA,EAAA,kBAASN,EAAA,OAAAmB,CAAA,EAAa,oBAAA,EAAA,EAEa,WAAAR,EAAAS,uBAAA,EACU,iBAAA,EAAA,EACb,aAAA,EAAA,6BALlCC,EAAA,EAAAC,GAAA,EAAA,EAAA,UAAA,EAAA,kCAAAC,GAAAC,EAAApB,EAAA,EAAA,EAAAO,EAAAc,gBAAA,GAAA,EAAA,GAAAD,CAAA,4BAzBFH,EAAA,EAAAK,GAAA,EAAA,EAAA,QAAA,EAAA,EAA4B,EAAAC,GAAA,EAAA,EAAA,QAAA,EAAA,EAGE,EAAAC,GAAA,EAAA,EAAA,QAAA,EAAA,EAGC,EAAAC,GAAA,EAAA,EAAA,MAAA,EAAA,EAGH,EAAAC,GAAA,EAAA,CAAA,oBAV9BP,GAAAQ,EAAAZ,KAAAR,EAAAqB,cAAAC,KAAA,EAAAF,IAAApB,EAAAqB,cAAAE,OAAA,EAAAH,IAAApB,EAAAqB,cAAAG,QAAA,EAAAJ,IAAApB,EAAAqB,cAAAI,KAAA,EAAAL,IAAApB,EAAAqB,cAAAK,SAAA,EAAA,EAAA,6BADFhB,EAAA,EAAAiB,GAAA,EAAA,CAAA,kCAAAf,GAAAgB,EAAAnC,EAAA,EAAA,EAAAO,EAAA6B,cAAA,GAAA,EAAA,GAAAD,CAAA,4BA8CEjC,EAAA,EAAA,IAAA,EAAA,kCAAqDN,EAAA,aAAAyC,EAAA9B,EAAA+B,QAAAC,OAAA,CAAA,6BAFvD9C,EAAA,EAAA,OAAA,EAAA,EAAyBC,EAAA,CAAA,EAAmBC,EAAA,EAC5CsB,EAAA,EAAAuB,GAAA,EAAA,EAAA,IAAA,EAAA,kCADyB1C,EAAA,EAAAC,EAAAsC,EAAA9B,EAAA+B,QAAAG,IAAA,CAAA,EACzB3C,EAAA,EAAAqB,EAAAZ,EAAA+B,QAAAC,QAAA,EAAA,EAAA,6BAlEhBG,EAAA,CAAA,EACIjD,EAAA,EAAA,OAAA,CAAA,EAA8B,EAAA,MAAA,CAAA,EACL,EAAA,MAAA,CAAA,EACsB,EAAA,SAAA,CAAA,EAEjCkD,GAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,EAAAC,EAAA,EAGFlD,EAAA,EAAS,EAGbF,EAAA,EAAA,MAAA,CAAA,EAAuC,EAAA,SAAA,CAAA,EAEjCkD,GAAA,EAAAG,GAAA,EAAA,EAAA,SAAA,EAAAD,EAAA,gBAGFlD,EAAA,EAAS,EAGbF,EAAA,GAAA,MAAA,CAAA,EACEwB,EAAA,GAAA8B,GAAA,EAAA,CAAA,EAyCFpD,EAAA,EAEAF,EAAA,GAAA,MAAA,EAAA,EACEwB,EAAA,GAAA+B,GAAA,EAAA,CAAA,EAMFrD,EAAA,EAEAsD,GAAA,GAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EACJtD,EAAA,EAAM,wBAxEJG,EAAA,EAAAF,EAAA,YAAAW,EAAA2C,SAAA,EAIQpD,EAAA,CAAA,EAAAqD,GAAA5C,EAAA6C,eAAA,EAQAtD,EAAA,CAAA,EAAAqD,GAAAnD,EAAA,GAAA,EAAAO,EAAA8C,iBAAA,CAAA,EAOJvD,EAAA,CAAA,EAAAqB,IAAAQ,EAAApB,EAAA2C,UAAAI,IAAA,YAAA,IAAA,KAAA,KAAA3B,EAAA4B,SAAAhD,EAAAiD,iBAAAC,QAAA,GAAA,EAAA,EA4CA3D,EAAA,CAAA,EAAAqB,EAAAZ,EAAA+B,UAAA,KAAA,GAAA,EAAA,GD5Bd,IAAKV,EAAL,SAAKA,EAAa,CAChBA,OAAAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OACAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,SAAA,CAAA,EAAA,WACAA,EAAAA,EAAA,QAAA,CAAA,EAAA,UACAA,EAAAA,EAAA,KAAA,CAAA,EAAA,OALGA,CAML,EANKA,GAAa,CAAA,CAAA,EAQZ8B,GAAN,KAAiB,CAGfC,YAAYlB,EAAe,GAAIF,EAAkB,GAAE,CAFnD,KAAAE,KAAO,GACP,KAAAF,QAAU,GAER,KAAKE,KAAOA,EACZ,KAAKF,QAAUA,CACjB,GAGIqB,GAA4C,IAAIC,IAAI,CACtD,CAACC,EAAYC,YAAa,IAAIL,GAAY,mBAAmB,CAAC,EAC9D,CAACI,EAAYE,cAAe,IAAIN,GAAY,qBAAqB,CAAC,EAClE,CAACI,EAAYG,aAAc,IAAIP,GAAY,uBAAuB,CAAC,EACnE,CAACI,EAAYI,WAAY,IAAIR,GAAY,kBAAkB,CAAC,EAC5D,CAACI,EAAYK,SAAU,IAAIT,GAAY,gBAAgB,CAAC,CAAC,CAC5D,EAEKU,GAAe,CAACN,EAAYO,WAAYP,EAAYQ,QAASR,EAAYS,KAAMT,EAAYU,QAAQ,EACnGC,GAAe,CACnBX,EAAYY,SAAUZ,EAAYa,YAAab,EAAYG,aAC3DH,EAAYI,WAAYJ,EAAYE,cAAeF,EAAYK,QAAQ,EAEnES,GAAiB,CACrBd,EAAYe,kBAAmBf,EAAYgB,UAAWhB,EAAYiB,UAClEjB,EAAYkB,YAAalB,EAAYmB,WAAYnB,EAAYoB,UAC7DpB,EAAYqB,OAAQrB,EAAYsB,YAAatB,EAAYuB,SACzDvB,EAAYwB,SAAUxB,EAAYyB,MAAOzB,EAAY0B,UACrD1B,EAAY2B,QAAS3B,EAAY4B,OAAQ5B,EAAY6B,UACrD7B,EAAY8B,QAAS9B,EAAY+B,eAAgB/B,EAAYgC,KAC7DhC,EAAYiC,QAASjC,EAAYkC,KAAMlC,EAAYmC,QAAQ,EAEvDC,GAAgB,CAACpC,EAAYqC,UAAU,EACvCC,GAAa,CAACtC,EAAYC,WAAW,EAErCsC,GAAoC,CACxCvC,EAAY6B,UAAW7B,EAAY8B,QAAS9B,EAAYiB,UAAWjB,EAAYe,iBAAiB,EAE5FyB,GAA6C,CACjDxC,EAAYiB,SAAS,EAEjBwB,GAAyC,CAC7CzC,EAAYa,WAAW,EAGnB6B,GAAiC,CACrC1C,EAAYQ,QAASR,EAAYI,WAAYJ,EAAY4B,OACzD5B,EAAY+B,eAAgB/B,EAAYgC,KAAMhC,EAAYa,YAC1Db,EAAYkB,YAAalB,EAAYmB,WAAYnB,EAAYoB,UAC7DpB,EAAYqB,OAAQrB,EAAYsB,YAAatB,EAAYuB,SACzDvB,EAAYwB,SAAUxB,EAAYyB,MAAOzB,EAAY0B,UACrD1B,EAAY2B,QAAS3B,EAAYiC,QAASjC,EAAYkC,KACtDlC,EAAYmC,QAAQ,EAGhBQ,GAAoB,CACxBjD,EAAiBkD,MACjBlD,EAAiBmD,SACjBnD,EAAiBoD,WACjBpD,EAAiBqD,SACjBrD,EAAiBsD,OAAO,EACpBC,GAAkB,CACtBvD,EAAiBwD,SACjBxD,EAAiByD,QACjBzD,EAAiBkD,MACjBlD,EAAiBmD,QAAQ,EACrBO,GAAoB,CACxB1D,EAAiBkD,MACjBlD,EAAiBmD,SACjBnD,EAAiB2D,SACjB3D,EAAiB4D,cACjB5D,EAAiB6D,YACjB7D,EAAiB8D,gBAAgB,EAC7BC,GAAsB,CAC1B/D,EAAiBkD,MACjBlD,EAAiBmD,SACjBnD,EAAiBgE,SACjBhE,EAAiBiE,YACjBjE,EAAiBkE,YAAY,EACzBC,GAAqB,CACzBnE,EAAiBkD,KAAK,EAoBXkB,IAA0B,IAAA,CAAjC,MAAOA,CAA0B,CA4BrC,IAAItF,SAAO,CACT,IAAMuF,EAAQC,SAAS,KAAK5E,UAAUI,IAAI,OAAO,EAAGC,MAAO,EAAE,EAC7D,OAAKK,GAAWmE,IAAIF,CAAK,EAClBjE,GAAWN,IAAIuE,CAAK,EADQ,IAErC,CAEA,IAAI7G,yBAAuB,CACzB,IAAMgH,EAAOF,SAAS,KAAK5E,UAAUI,IAAI,YAAY,GAAGC,MAAO,EAAE,EACjE,OAAOyE,IAASxE,EAAiBgE,UAAYQ,IAASxE,EAAiBiE,aAAeO,IAASxE,EAAiBkE,YAClH,CAEA/D,YAA6BsE,EAAmDC,EAC7DC,EAA0C,CADhC,KAAAF,gBAAAA,EAAmD,KAAAC,eAAAA,EAC7D,KAAAC,qBAAAA,EAtCV,KAAAC,MAAgB,EAKhB,KAAAhF,gBAAsCiF,GACrC,KAAAC,gBAAkB,IAAIC,EAGf,KAAAC,MAAQC,EAAOC,CAAiB,EAChC,KAAAC,WAAaF,EAAOG,CAAU,EAC9B,KAAAC,WAAaJ,EAAOK,EAAsB,EAExC,KAAAtF,iBAAmBA,EAEtC,KAAAN,UAAuB,IAAI6F,GAAU,CACnC,WAAc,IAAIC,EAA8BxF,EAAiBkD,MAAO,CAAA,CAAE,EAC1E,YAAe,IAAIsC,EAA6B,GAAI,CAAA,CAAE,EACvD,EACD,KAAA3F,kBAAyD,IAAI4F,GAAgB,CAACzF,EAAiBkD,KAAK,CAAuB,EAC3H,KAAAtE,eAAiD,IAAI6G,GAAgBrH,EAAcC,IAAqB,EACxG,KAAAR,iBAAmB6H,GAAoB,CAAA,CAAE,EAEzC,KAAAC,OAAkB,GACC,KAAAvH,cAAgBA,CAc6B,CAEhEwH,UAAQ,CACN,KAAKlG,UAAUmG,WAAW,QAAS,IAAIL,EAAyBlF,EAAYO,WAAY,CAAA,CAAE,CAAC,EAE3F,KAAKnB,UAAUI,IAAI,OAAO,GAAGgG,aAAaC,KAAKC,GAAoB,EAAIC,EAAmB,KAAKd,UAAU,CAAC,EAAEe,UAAWC,GAAgB,KAAKC,kBAAkBD,CAAG,CAAC,EAClK,KAAKE,mBAAkB,EAEvB,KAAK3G,UAAUI,IAAI,aAAa,GAAGgG,aAAaC,KAAKE,EAAmB,KAAKd,UAAU,CAAC,EAAEe,UAAS,EAGnG,KAAKrI,iBAAmB,KAAK6B,UAAUI,IAAI,OAAO,EAAGgG,aAAaC,KAChEO,GAAU,KAAKC,OAAOxG,KAAK,EAC3BiG,GAAoB,EACpBQ,GAAO,IAAK,CACV,IAAMC,EAAWnC,SAAS,KAAK5E,UAAUI,IAAI,OAAO,GAAGC,MAAO,EAAE,EAChE,OAAOqB,GAAesF,SAASD,CAAQ,CACzC,CAAC,EACDE,GAAWC,GAAM,KAAKC,sBAAqB,CAAE,EAC7CZ,EAAmB,KAAKd,UAAU,CAAC,EAIrC,KAAKzF,UAAWoG,aAAaC,KAC3BC,GAAoB,EACpBc,GAAIF,GAAK,KAAKG,sBAAqB,CAAE,EACrCd,EAAmB,KAAKd,UAAU,CAAC,EACnCe,UAAS,EAEX,KAAKP,OAAS,GACd,KAAKX,MAAMgC,aAAY,CACzB,CAEAD,uBAAqB,CACnB,IAAME,EAAO,CACXC,WAAY5C,SAAS,KAAK5E,UAAUI,IAAI,YAAY,GAAGC,MAAO,EAAE,EAChEsE,MAAOC,SAAS,KAAK5E,UAAUI,IAAI,OAAO,GAAGC,MAAO,EAAE,EACtDA,MAAO,KAAKL,UAAUI,IAAI,aAAa,GAAGC,OAGxC,OAAOkH,EAAKlH,OAAU,UAAY6C,GAAW8D,SAASO,EAAK5C,KAAK,IAClE4C,EAAKlH,MAAQ,KAAKsF,WAAW8B,OAAOF,EAAKlH,KAAK,GAI5C,OAAOkH,EAAKlH,OAAU,UAAY,CAACzB,OAAO8I,MAAMH,EAAKlH,KAAK,IAC5DkH,EAAKlH,MAAQkH,EAAKlH,MAAQ,IAGxB,OAAOkH,EAAKlH,OAAU,YACxBkH,EAAKlH,MAAQkH,EAAKlH,MAAQ,IAGxBkH,EAAAA,EAAKC,aAAelH,EAAiBC,SACnC,CAACgH,EAAKlH,OAAU,CAAC,CAACO,EAAYO,WAAYP,EAAYQ,OAAO,EAAE4F,SAASO,EAAK5C,KAAK,GAAK,CAAC3B,GAAcgE,SAASO,EAAK5C,KAAK,IAG/H,KAAKS,gBAAgBuC,KAAKJ,CAAI,CAChC,CAEAZ,oBAAkB,CAChB,IAAMF,EAAM,KAAKI,OAAOxG,QAAU,aAAe,CAAC,KAAKwG,OAAOxG,MAAQ,GAAK,KAAKwG,OAAOxG,MACvF,KAAKL,UAAUI,IAAI,YAAY,GAAGwH,WAAW,KAAKf,OAAOW,UAAU,EACnE,KAAKxH,UAAUI,IAAI,OAAO,GAAGwH,WAAW,KAAKf,OAAOlC,KAAK,EAErDzD,GAAa8F,SAAS,KAAKH,OAAOlC,KAAK,EACzC,KAAK3E,UAAUI,IAAI,aAAa,GAAGwH,WAAWnB,CAAG,EACxCzD,GAAcgE,SAAS,KAAKH,OAAOlC,KAAK,EACjD,KAAK3E,UAAUI,IAAI,aAAa,GAAGwH,WAAWnB,CAAG,EACxCvD,GAAW8D,SAAS,KAAKH,OAAOlC,KAAK,EAC9C,KAAK3E,UAAUI,IAAI,aAAa,GAAGwH,WAAW,KAAKjC,WAAWkC,MAAMpB,CAAG,CAAC,EAEjE/E,GAAesF,SAAS,KAAKH,OAAOlC,KAAK,EAC5C,KAAK7G,yBAA2B2I,EAAIO,SAAS,GAAG,EAClD,KAAKhH,UAAUI,IAAI,aAAa,GAAGwH,WAAWnB,EAAIqB,MAAM,GAAG,EAAEC,IAAIC,GAAKpD,SAASoD,EAAG,EAAE,CAAC,CAAC,EAElF,KAAKnB,OAAOlC,QAAU/D,EAAYgB,UACpC,KAAK5B,UAAUI,IAAI,aAAa,GAAGwH,WAAWnB,CAAG,EAEjD,KAAKzG,UAAUI,IAAI,aAAa,GAAGwH,WAAWhD,SAAS6B,EAAK,EAAE,CAAC,EAInE,KAAKzG,UAAUI,IAAI,aAAa,GAAGwH,WAAWhD,SAAS6B,EAAK,EAAE,CAAC,EAIjE,KAAKnB,MAAMgC,aAAY,CACzB,CAEAH,uBAAqB,CAEjB,OADoBvC,SAAS,KAAK5E,UAAUI,IAAI,OAAO,GAAGC,MAAO,EAAE,EAChD,CACjB,KAAKO,EAAYe,kBACf,OAAO,KAAKoD,gBAAgBkD,wBAAuB,EAAG5B,KAAK0B,EAAIG,GAAQA,EAAKH,IAAII,IACvE,CAAC9H,MAAO8H,EAAI9H,MAAO+H,MAAOD,EAAIE,KAAK,EAC3C,CAAC,CAAC,EACL,KAAKzH,EAAYiB,UACf,OAAO,KAAKkD,gBAAgBuD,iBAAgB,EAAGjC,KAAK0B,EAAIQ,GAAWA,EAAQR,IAAIS,IACtE,CAACnI,MAAOmI,EAAOnI,MAAO+H,MAAOI,EAAOH,KAAK,EACjD,CAAC,CAAC,EACL,KAAKzH,EAAY4B,OACf,OAAO,KAAKuC,gBAAgB0D,aAAY,EAAGpC,KAAK0B,EAAIW,GAAUA,EAAOX,IAAIY,IAChE,CAACtI,MAAOsI,EAAMC,GAAIR,MAAOO,EAAMN,KAAK,EAC5C,CAAC,CAAC,EACL,KAAKzH,EAAYgB,UACf,OAAO,KAAKmD,gBAAgB8D,gBAAe,EAAGxC,KAAK0B,EAAIe,GAAYA,EAASf,IAAIgB,IACvE,CAAC1I,MAAO0I,EAAOC,QAASZ,MAAOW,EAAOV,MAAQ,KAAKU,EAAOC,OAAO,GAAG,EAC5E,CAAC,CAAC,EACL,KAAKpI,EAAY8B,QACf,OAAOsD,GAAGiD,EAAkB,EAAE5C,KAAK0B,EAAIe,GAAYA,EAASf,IAAIgB,IACvD,CAAC1I,MAAO0I,EAAO1I,MAAO+H,MAAOW,EAAOV,KAAK,EACjD,CAAC,CAAC,EACL,KAAKzH,EAAY6B,UACf,OAAO,KAAKuC,eAAekE,aAAY,EAAG7C,KAAK0B,EAAIoB,GAAQA,EAAKpB,IAAIqB,IAC3D,CAAC/I,MAAO+I,EAAIR,GAAIR,MAAOgB,EAAIC,IAAI,EACvC,CAAC,CAAC,EACL,KAAKzI,EAAYgC,KACf,OAAO,KAAKmC,gBAAgBuE,WAAU,EAAGjD,KAAK0B,EAAIe,GAAYA,EAASf,IAAIgB,IAClE,CAAC1I,MAAO0I,EAAOH,GAAIR,MAAOW,EAAOV,KAAK,EAC9C,CAAC,CAAC,EACL,KAAKzH,EAAY+B,eACf,OAAO,KAAKsC,qBAAqBsE,eAAc,EAAGlD,KAAK0B,EAAIe,GAAYA,EAASf,IAAIgB,IAC3E,CAAC1I,MAAO0I,EAAOH,GAAIR,MAAOW,EAAOV,KAAK,EAC9C,CAAC,CAAC,EACL,KAAKzH,EAAYmB,WAAY,OAAO,KAAKyH,iBAAiBC,EAAWC,SAAS,EAC9E,KAAK9I,EAAYwB,SAAU,OAAO,KAAKoH,iBAAiBC,EAAWrH,QAAQ,EAC3E,KAAKxB,EAAYsB,YAAa,OAAO,KAAKsH,iBAAiBC,EAAWvH,WAAW,EACjF,KAAKtB,EAAYqB,OAAQ,OAAO,KAAKuH,iBAAiBC,EAAWxH,MAAM,EACvE,KAAKrB,EAAYyB,MAAO,OAAO,KAAKmH,iBAAiBC,EAAWpH,KAAK,EACrE,KAAKzB,EAAYuB,SAAU,OAAO,KAAKqH,iBAAiBC,EAAWtH,QAAQ,EAC3E,KAAKvB,EAAY0B,UAAW,OAAO,KAAKkH,iBAAiBC,EAAWnH,SAAS,EAC7E,KAAK1B,EAAYoB,UAAW,OAAO,KAAKwH,iBAAiBC,EAAWzH,SAAS,EAC7E,KAAKpB,EAAYiC,QAAS,OAAO,KAAK2G,iBAAiBC,EAAW5G,OAAO,EACzE,KAAKjC,EAAYkC,KAAM,OAAO,KAAK0G,iBAAiBC,EAAW3G,IAAI,EACnE,KAAKlC,EAAYmC,SAAU,OAAO,KAAKyG,iBAAiBC,EAAW1G,QAAQ,EAC3E,KAAKnC,EAAYkB,YAAa,OAAO,KAAK0H,iBAAiBC,EAAWE,UAAU,EAChF,KAAK/I,EAAY2B,QAAS,OAAO,KAAKiH,iBAAiBC,EAAWG,MAAM,CAC1E,CACA,OAAO5D,GAAG,CAAA,CAAE,CAChB,CAEAwD,iBAAiBK,EAAgB,CAC/B,OAAO,KAAK9E,gBAAgB+E,mBAAmBD,CAAI,EAAExD,KAAK0B,EAAIgC,GAAUA,EAAOhC,IAAIiC,IAC1E,CAAC3J,MAAO2J,EAAOpB,GAAIR,MAAO4B,EAAOX,IAAI,EAC7C,CAAC,CAAC,CACL,CAGA3C,kBAAkBD,EAAW,CAC3B,IAAMM,EAAWnC,SAAS6B,EAAK,EAAE,EAGjC,GAAIvF,GAAa8F,SAASD,CAAQ,EAAG,CACnC,IAAIkD,EAAQ,CAAC,GAAG1G,EAAiB,EAE7BD,GAA+B0D,SAASD,CAAQ,GAClDkD,EAAMC,KAAK5J,EAAiBC,OAAO,EAGrC,KAAKJ,kBAAkBgK,KAAK,CAAC,GAAG,IAAIC,IAAIH,CAAK,CAAC,CAAC,EAC/C,KAAK/K,eAAeiL,KAAKzL,EAAcC,IAAI,EAEvC,KAAKsH,SACP,KAAKjG,UAAUI,IAAI,aAAa,GAAGwH,WAAW,EAAE,EAChD,KAAK5H,UAAUI,IAAI,YAAY,GAAGwH,WAAWrE,GAAkB,CAAC,CAAC,GAEnE,MACF,CAEA,GAAIhC,GAAayF,SAASD,CAAQ,EAAG,CACnC,IAAMkD,EAAQ,CAAC,GAAGjG,EAAiB,EAE/BX,GAAuC2D,SAASD,CAAQ,GAC1DkD,EAAMC,KAAK,GAAGrG,EAAe,EAE3BP,GAA+B0D,SAASD,CAAQ,GAClDkD,EAAMC,KAAK5J,EAAiBC,OAAO,EAGrC,KAAKJ,kBAAkBgK,KAAK,CAAC,GAAG,IAAIC,IAAIH,CAAK,CAAC,CAAC,EAC/C,KAAK/K,eAAeiL,KAAKzL,EAAcE,MAAM,EACzC,KAAKqH,SACP,KAAKjG,UAAUI,IAAI,aAAa,GAAGwH,WAAW,CAAC,EAC/C,KAAK5H,UAAUI,IAAI,YAAY,GAAGwH,WAAW5D,GAAkB,CAAC,CAAC,GAEnE,MACF,CAEA,GAAId,GAAW8D,SAASD,CAAQ,EAAG,CACjC,IAAMkD,EAAQ,CAAC,GAAGpG,EAAe,EAC7BP,GAA+B0D,SAASD,CAAQ,GAClDkD,EAAMC,KAAK5J,EAAiBC,OAAO,EAGrC,KAAKJ,kBAAkBgK,KAAK,CAAC,GAAG,IAAIC,IAAIH,CAAK,CAAC,CAAC,EAC/C,KAAK/K,eAAeiL,KAAKzL,EAAcI,IAAI,EAEvC,KAAKmH,SACP,KAAKjG,UAAUI,IAAI,aAAa,GAAGwH,WAAW,EAAK,EACnD,KAAK5H,UAAUI,IAAI,YAAY,GAAGwH,WAAW/D,GAAgB,CAAC,CAAC,GAEjE,MACF,CAEA,GAAIb,GAAcgE,SAASD,CAAQ,EAAG,CACpC,IAAIkD,EAAQ,CAAC,GAAGpG,EAAe,EAC3BP,GAA+B0D,SAASD,CAAQ,GAClDkD,EAAMC,KAAK5J,EAAiBC,OAAO,EAIrC,KAAKJ,kBAAkBgK,KAAK,CAAC,GAAG,IAAIC,IAAIH,CAAK,CAAC,CAAC,EAC/C,KAAK/K,eAAeiL,KAAKzL,EAAcG,OAAO,EAE1C,KAAKoH,SACP,KAAKjG,UAAUI,IAAI,aAAa,GAAGwH,WAAW,EAAK,EACnD,KAAK5H,UAAUI,IAAI,YAAY,GAAGwH,WAAWnD,GAAmB,CAAC,CAAC,GAEpE,MACF,CAEA,GAAI/C,GAAesF,SAASD,CAAQ,EAAG,CACrC,IAAIkD,EAAQ,CAAC,GAAG5F,EAAmB,EAC/BjB,GAA2C4D,SAASD,CAAQ,GAC9DkD,EAAMC,KAAK,GAAGlG,EAAiB,EAE7Bb,GAAkC6D,SAASD,CAAQ,IACrDkD,EAAQA,EAAMnD,OAAOuD,GAAKA,IAAM/J,EAAiBkE,YAAY,GAE3DlB,GAA+B0D,SAASD,CAAQ,GAClDkD,EAAMC,KAAK5J,EAAiBC,OAAO,EAGrC,KAAKJ,kBAAkBgK,KAAK,CAAC,GAAG,IAAIC,IAAIH,CAAK,CAAC,CAAC,EAC/C,KAAK/K,eAAeiL,KAAKzL,EAAcK,QAAQ,EAC3C,KAAKkH,SACP,KAAKjG,UAAUI,IAAI,aAAa,GAAGwH,WAAW,CAAC,EAC/C,KAAK5H,UAAUI,IAAI,YAAY,GAAGwH,WAAWqC,EAAM,CAAC,CAAC,GAEvD,MACF,CACF,CAIAzM,aAAa0J,EAAU,CACrB,KAAKG,sBAAqB,CAC5B,CACA5J,oBAAkB,CAChB,KAAK4J,sBAAqB,CAC5B,iDAnSW3C,GAA0B4F,EAAAC,EAAA,EAAAD,EAAAE,EAAA,EAAAF,EAAAG,EAAA,CAAA,CAAA,CAAA,+BAA1B/F,EAA0BgG,UAAA,CAAA,CAAA,yBAAA,CAAA,EAAAC,OAAA,CAAAzF,MAAA,QAAA2B,OAAA,SAAA3G,gBAAA,iBAAA,EAAA0K,QAAA,CAAAxF,gBAAA,iBAAA,EAAAyF,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,mBAAAC,GAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,IAAA,eAAA,EAAA,CAAA,EAAA,YAAA,eAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,MAAA,KAAA,EAAA,CAAA,EAAA,WAAA,OAAA,SAAA,MAAA,EAAA,CAAA,kBAAA,QAAA,EAAA,cAAA,MAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,WAAA,OAAA,SAAA,MAAA,EAAA,CAAA,kBAAA,aAAA,EAAA,WAAA,aAAA,EAAA,CAAA,EAAA,WAAA,SAAA,MAAA,EAAA,CAAA,EAAA,MAAA,OAAA,MAAA,EAAA,CAAA,OAAA,OAAA,eAAA,OAAA,kBAAA,cAAA,EAAA,eAAA,MAAA,EAAA,CAAA,OAAA,SAAA,YAAA,UAAA,kBAAA,cAAA,MAAA,IAAA,EAAA,eAAA,MAAA,EAAA,CAAA,OAAA,WAAA,kBAAA,cAAA,EAAA,mBAAA,OAAA,OAAA,EAAA,YAAA,QAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,cAAA,aAAA,OAAA,KAAA,kBAAA,cAAA,gBAAA,GAAA,EAAA,eAAA,EAAA,aAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,MAAA,wBAAA,WAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,cAAA,EAAA,OAAA,oBAAA,WAAA,iBAAA,YAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,cAAA,OAAA,EAAA,KAAA,iBAAA,OAAA,EAAA,YAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAzN,EAAA,CAAAyN,EAAA,SC/IvCvN,EAAA,EAAAwN,GAAA,GAAA,EAAA,eAAA,CAAA,QAAiC7O,EAAA,gBAAA,qBAAA,iBDoI7B8O,GAAmBC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GACnBC,GACAC,GACAC,GACAC,GAAaC,GACbC,GACAC,EACAC,EAAkB,EAAAC,OAAA,CAAA;uEAAA,EAAAC,gBAAA,CAAA,CAAA,CAAA,SAITpI,CAA0B,GAAA,gDGvIPqI,EAAA,EAAA,SAAA,EAAA,EAA6DC,EAAA,CAAA,EAAaC,EAAA,0BAAjCC,EAAA,QAAAC,EAAAC,KAAA,EAAoBC,EAAA,EAAAC,EAAAH,EAAAI,KAAA,sCAezDR,EAAA,EAAA,SAAA,GAAA,CAAA,EAAgGS,EAAA,QAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,EAAAC,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAE,aAAAL,CAAA,CAAe,CAAA,CAAA,EACpHM,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAA8BC,EAAA,CAAA,EAA8BC,EAAA,EAAO,2CAFjBC,EAAA,aAAAgB,EAAA,cAAAC,EAAA,EAAAC,GAAAT,CAAA,CAAA,CAAA,EAEpBN,EAAA,CAAA,EAAAC,EAAAY,EAAA,cAAAC,EAAA,EAAAC,GAAAT,CAAA,CAAA,CAAA,sCANlDZ,EAAA,EAAA,MAAA,CAAA,EAAkF,EAAA,MAAA,EAAA,EACvD,EAAA,0BAAA,EAAA,EACwFS,EAAA,kBAAA,SAAAa,EAAA,CAAA,IAAAV,EAAAF,EAAAa,CAAA,EAAAT,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAAmBD,EAAAS,aAAAZ,EAAAU,CAAA,CAAuB,CAAA,CAAA,EACjJtB,EAAA,EAAA,MAAA,EAAA,EACIyB,EAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,EAAA,EAIJxB,EAAA,EAAM,EACgB,EACxB,6CARuBI,EAAA,CAAA,EAAAH,EAAA,QAAAS,EAAA,GAAA,EAAiB,SAAAe,CAAA,EAAsB,kBAAAZ,EAAAa,qBAAA,EAEmEtB,EAAA,CAAA,EAAAH,EAAA,OAAAS,EAAAG,EAAAc,OAAAC,WAAAC,OAAA,GAAAhB,EAAAc,OAAAC,WAAAC,OAAA,CAAA,sCApBnJC,EAAA,CAAA,EACIhC,EAAA,EAAA,MAAA,CAAA,EAA6B,EAAA,MAAA,CAAA,EACH,EAAA,MAAA,CAAA,EACI,EAAA,SAAA,CAAA,EAEdyB,EAAA,EAAAQ,GAAA,EAAA,EAAA,SAAA,EAAA,EACJ/B,EAAA,EAAS,EAGbF,EAAA,EAAA,MAAA,CAAA,EAAsB,EAAA,SAAA,EAAA,EACyBS,EAAA,QAAA,UAAA,CAAAC,EAAAwB,CAAA,EAAA,IAAAnB,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAoB,UAAA,CAAW,CAAA,CAAA,EAC3DjB,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAAiDC,EAAA,EAAA,EAAiBC,EAAA,EAAO,EACpE,EACP,EAEVuB,EAAA,GAAAW,GAAA,EAAA,EAAA,MAAA,EAAA,EAaJlC,EAAA,yCAxBwCI,EAAA,CAAA,EAAAH,EAAA,UAAAY,EAAAsB,YAAA,EAKqC/B,EAAA,CAAA,EAAAH,EAAA,aAAAgB,EAAA,UAAA,CAAA,EAA4B,WAAAJ,EAAAuB,iBAAA,IAAAvB,EAAAuB,eAAA,GAAAvB,EAAAc,OAAAC,WAAAC,QAAAhB,EAAAuB,cAAA,EAExChC,EAAA,CAAA,EAAAC,EAAAY,EAAA,UAAA,CAAA,EAIhBb,EAAA,EAAAH,EAAA,UAAAY,EAAAc,OAAAC,UAAA,6BAqBjC9B,EAAA,EAAA,SAAA,EAAA,EAA6DC,EAAA,CAAA,EAAaC,EAAA,0BAAjCC,EAAA,QAAAoC,EAAAlC,KAAA,EAAoBC,EAAA,EAAAC,EAAAgC,EAAA/B,KAAA,sCAezDR,EAAA,EAAA,SAAA,GAAA,CAAA,EAAsFS,EAAA,QAAA,UAAA,CAAAC,EAAA8B,CAAA,EAAA,IAAAC,EAAA5B,EAAA,EAAAC,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAE,aAAAwB,CAAA,CAAe,CAAA,CAAA,EAC1GvB,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAA8BC,EAAA,CAAA,EAAoBC,EAAA,EAAO,+BAFPC,EAAA,aAAAgB,EAAA,aAAA,CAAA,EAEpBb,EAAA,CAAA,EAAAC,EAAAY,EAAA,aAAA,CAAA,sCANlDnB,EAAA,EAAA,MAAA,EAAA,EAAkF,EAAA,MAAA,EAAA,EACvD,EAAA,0BAAA,EAAA,EACkFS,EAAA,kBAAA,SAAAa,EAAA,CAAA,IAAAmB,EAAA/B,EAAAgC,CAAA,EAAA5B,MAAAC,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAAmBD,EAAAS,aAAAiB,EAAAnB,CAAA,CAAuB,CAAA,CAAA,EAC3ItB,EAAA,EAAA,MAAA,EAAA,EACIyB,EAAA,EAAAkB,GAAA,EAAA,EAAA,SAAA,EAAA,EAIJzC,EAAA,EAAM,EACgB,EACxB,6CARuBI,EAAA,CAAA,EAAAH,EAAA,QAAAsC,CAAA,EAAW,SAAAG,CAAA,EAAsB,kBAAA7B,EAAAa,qBAAA,EAE+DtB,EAAA,CAAA,EAAAH,EAAA,OAAAsC,EAAA1B,EAAAc,OAAAC,WAAAC,OAAA,GAAAhB,EAAAc,OAAAC,WAAAC,OAAA,CAAA,sCAnBrI/B,EAAA,EAAA,MAAA,CAAA,EAA6B,EAAA,MAAA,EAAA,EACH,EAAA,MAAA,EAAA,EACW,EAAA,SAAA,CAAA,EAErByB,EAAA,EAAAoB,GAAA,EAAA,EAAA,SAAA,EAAA,EACJ3C,EAAA,EAAS,EAGbF,EAAA,EAAA,MAAA,EAAA,EAA4B,EAAA,SAAA,EAAA,EACKS,EAAA,QAAA,UAAA,CAAAC,EAAAoC,CAAA,EAAA,IAAA/B,EAAAF,EAAA,CAAA,EAAA,OAAAG,EAASD,EAAAoB,UAAA,CAAW,CAAA,CAAA,EAC7CjB,EAAA,EAAA,IAAA,EAAA,EACAlB,EAAA,EAAA,OAAA,EAAA,EAAiDC,EAAA,CAAA,EAAiBC,EAAA,EAAO,EACpE,EACP,EAEVuB,EAAA,GAAAsB,GAAA,EAAA,EAAA,MAAA,EAAA,EAYJ7C,EAAA,qCAvBwCI,EAAA,CAAA,EAAAH,EAAA,UAAAY,EAAAsB,YAAA,EAKuB/B,EAAA,CAAA,EAAAH,EAAA,aAAAgB,EAAA,UAAA,CAAA,EAEEb,EAAA,CAAA,EAAAC,EAAAY,EAAA,UAAA,CAAA,EAIhBb,EAAA,EAAAH,EAAA,UAAAY,EAAAc,OAAAC,UAAA,6BAlD7DE,EAAA,CAAA,EACIhC,EAAA,EAAA,OAAA,CAAA,EACIyB,EAAA,EAAAuB,GAAA,GAAA,EAAA,eAAA,CAAA,EAAmG,EAAAC,GAAA,GAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,EA8DvGhD,EAAA,8BA/DMI,EAAA,EAAAH,EAAA,YAAAY,EAAAoC,SAAA,EACa7C,EAAA,EAAAH,EAAA,OAAAY,EAAAqC,eAAAC,oBAAA,IAAAtC,EAAAuC,WAAAC,OAAA,EAAmE,WAAAC,CAAA,6BAH9FxB,EAAA,CAAA,EACIP,EAAA,EAAAgC,GAAA,EAAA,EAAA,eAAA,CAAA,sBAAenD,EAAA,EAAAH,EAAA,OAAAY,EAAAc,MAAA,GD2CnB,IAAa6B,IAAwB,IAAA,CAA/B,MAAOA,CAAwB,CAlBrCC,aAAA,CAwBW,KAAArB,eAAiB,EACjB,KAAAV,sBAAwBgC,GACvB,KAAAC,OAAuC,IAAIC,EAC3C,KAAAC,MAA4B,IAAID,EAEzB,KAAAE,MAAQC,EAAOC,CAAiB,EAChC,KAAAC,gBAAkBF,EAAOG,EAAe,EACtC,KAAAhB,eAAiBa,EAAOI,EAAc,EACtC,KAAAC,qBAAuBL,EAAOM,EAAsB,EACrD,KAAAC,WAAaP,EAAOQ,CAAU,EAC7B,KAAAnB,WAAaA,EAEhC,KAAAH,UAAuB,IAAIuB,GAAU,CAAA,CAAE,EAEvC,KAAArC,aAAiE,CAC/D,CAAChC,MAAOsE,GAAkBC,GAAIpE,MAAOqE,EAAU,qBAAqB,CAAC,EACrE,CAACxE,MAAOsE,GAAkBG,IAAKtE,MAAOqE,EAAU,sBAAsB,CAAC,CAAC,EAG1EE,UAAQ,CACN,KAAK5B,UAAU6B,WAAW,aAAc,IAAIC,EAA+B,KAAKpD,QAAQqD,aAAeP,GAAkBC,GAAI,CAAA,CAAE,CAAC,EAChI,KAAKzB,UAAUgC,aAAaC,KAAKC,GAAoB,EAAIC,EAAmB,KAAKd,UAAU,EAAGe,GAAIC,GAAS,CACzG,KAAK3D,OAAOqD,YAAcO,SAAS,KAAKtC,UAAUuC,IAAI,YAAY,GAAGrF,MAAO,EAAE,EAC9E,KAAKwD,OAAO8B,KAAK,KAAK9D,MAAM,CAC9B,CAAC,CAAC,EAAE+D,UAAS,CACf,CAEAzD,WAAS,CACP,KAAKN,OAAOC,WAAa,CAAC,KAAKqC,gBAAgB0B,6BAA4B,EAAI,GAAG,KAAKhE,OAAOC,UAAU,EACxG,KAAKkC,MAAM8B,aAAY,CACzB,CAEA7E,aAAaH,EAAa,CACxB,KAAKe,OAAOC,WAAa,KAAKD,OAAOC,WAAWiE,MAAM,EAAGjF,CAAK,EAAEkF,OAAO,KAAKnE,OAAOC,WAAWiE,MAAMjF,EAAQ,CAAC,CAAC,EAC9G,KAAKkD,MAAM8B,aAAY,CACzB,CAEAtE,aAAaV,EAAemF,EAA2B,CACrD,KAAK9B,gBAAgB3C,aAAa,KAAKK,OAAOC,WAAYhB,EAAOmF,CAAU,EAC3E,KAAKpC,OAAO8B,KAAK,KAAK9D,MAAM,CAC9B,iDA9CW6B,EAAwB,CAAA,+BAAxBA,EAAwBwC,UAAA,CAAA,CAAA,sBAAA,CAAA,EAAAC,OAAA,CAAAtE,OAAA,SAAAS,eAAA,iBAAAV,sBAAA,uBAAA,EAAAwE,QAAA,CAAAvC,OAAA,SAAAE,MAAA,OAAA,EAAAsC,WAAA,GAAAC,SAAA,CAAAC,CAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,aAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,CAAA,EAAA,YAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,OAAA,UAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,MAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,kBAAA,aAAA,EAAA,aAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAA,SAAA,EAAA,CAAA,OAAA,SAAA,EAAA,MAAA,WAAA,EAAA,QAAA,aAAA,UAAA,EAAA,CAAA,cAAA,OAAA,EAAA,KAAA,WAAA,SAAA,EAAA,CAAA,cAAA,OAAA,EAAA,iBAAA,EAAA,CAAA,QAAA,WAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,kBAAA,QAAA,SAAA,iBAAA,EAAA,CAAA,EAAA,WAAA,MAAA,EAAA,CAAA,OAAA,SAAA,QAAA,eAAA,EAAA,aAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,SAAA,EAAA,MAAA,WAAA,EAAA,QAAA,YAAA,EAAA,CAAA,cAAA,OAAA,EAAA,WAAA,UAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,MAAA,EAAA,CAAA,EAAA,WAAA,QAAA,EAAA,CAAA,EAAA,WAAA,OAAA,EAAA,CAAA,EAAA,MAAA,WAAA,EAAA,QAAA,YAAA,EAAA,CAAA,QAAA,WAAA,EAAA,QAAA,SAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,WAAA,OAAA,OAAA,CAAA,EAAAC,SAAA,SAAAC,EAAAC,EAAA,CAAAD,EAAA,GC5CrCnF,EAAA,EAAAqF,GAAA,EAAA,EAAA,eAAA,CAAA,OAAiC3G,EAAA,gBAAA,kBAAA,iBDgC7B4G,GACAC,GACAC,GAEAC,GAAWC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GACXC,GAEAC,GAAmBC,GAAAC,GACnBC,CAAkB,EAAAC,gBAAA,CAAA,CAAA,CAAA,SAITpE,CAAwB,GAAA,mHGzC/BqE,EAAA,EAAA,KAAA,EACEC,EAAA,EAAA,CAAA,EACFC,EAAA,uCAFqEC,EAAA,kBAAAC,MAAA,EACrDC,EAAA,EAAAF,EAAA,mBAAAG,CAAA,EAAkC,0BAAAC,EAAA,EAAAC,GAAAC,CAAA,CAAA,sCAIhDT,EAAA,EAAA,KAAA,EAAK,EAAA,aAAA,EAAA,CAAA,EAC+EU,EAAA,eAAA,UAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAgBF,EAAAG,cAAAC,IAAkB,EAAK,CAAC,CAAA,CAAA,EACxHjB,EAAA,EAAA,KAAA,EAAA,EACEkB,EAAA,CAAA,EACFhB,EAAA,EACAF,EAAA,EAAA,MAAA,EAAA,EAEEC,EAAA,EAAA,EAAA,EACFC,EAAA,EAAM,EACK,iDARuBG,EAAA,EAAAF,EAAA,SAAAM,CAAA,EAAiB,UAAAU,GAAA,EAAAC,EAAA,CAAA,EAA4B,QAAA,GAAA,EAE7Ef,EAAA,CAAA,EAAAgB,GAAA,IAAAC,EAAA,cAAA,EAAA,GAAA,EAIcjB,EAAA,CAAA,EAAAF,EAAA,mBAAAG,CAAA,6BAbxBiB,EAAA,CAAA,EACEC,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAAuF,EAAAC,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,uCAAjFtB,EAAA,EAAAF,EAAA,OAAAyB,GAAAf,EAAAgB,WAAAC,MAAA,EAA6C,WAAAC,CAAA,6BAFvDR,EAAA,CAAA,EACEC,EAAA,EAAAQ,GAAA,EAAA,EAAA,eAAA,CAAA,uBAAe3B,EAAA,EAAAF,EAAA,OAAAU,EAAAoB,eAAAC,oBAAA,CAAA,4BAyCHC,EAAA,EAAA,IAAA,EAAA,4BAA0BhC,EAAA,QAAAmB,EAAA,eAAA,CAAA,4BAExBa,EAAA,EAAA,IAAA,EAAA,4BAA4BhC,EAAA,QAAAmB,EAAA,gBAAA,CAAA,6BAI9BtB,EAAA,EAAA,SAAA,EAAA,EAA4DkB,EAAA,CAAA,mBAAqBhB,EAAA,0BAArCC,EAAA,QAAAiC,CAAA,EAAgB/B,EAAA,EAAAgC,EAAAC,EAAA,EAAA,EAAAF,CAAA,CAAA,4BAiBlEnC,EAAA,EAAA,EAAA,uBAA+EE,EAAA,mBAAAoC,CAAA,6BAEjFvC,EAAA,EAAA,MAAA,EAAA,EACEC,EAAA,EAAA,EAAA,EACFC,EAAA,wBADgBG,EAAA,EAAAF,EAAA,mBAAAoC,CAAA,sCA7CpBvC,EAAA,EAAA,MAAA,EAAA,EAAyE,EAAA,MAAA,EAAA,EAC3B,EAAA,uBAAA,EAAA,EAIpBU,EAAA,SAAA,SAAA8B,EAAA,CAAA7B,EAAA8B,CAAA,EAAA,IAAA5B,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAUF,EAAA6B,cAAAF,CAAA,CAAqB,CAAA,CAAA,EACrDtC,EAAA,EAAuB,EAEzBF,EAAA,EAAA,OAAA,EAAA,EAAsD,EAAA,MAAA,EAAA,EAC9B,EAAA,MAAA,EAAA,EACW,EAAA,MAAA,EAAA,EACA,EAAA,QAAA,EAAA,EACckB,EAAA,CAAA,EAAoBhB,EAAA,EAC7DiC,EAAA,EAAA,QAAA,EAAA,EACFjC,EAAA,EAAM,EAERF,EAAA,GAAA,MAAA,EAAA,EAA+B,GAAA,QAAA,EAAA,EACkBkB,EAAA,EAAA,EAAsBhB,EAAA,EACnEF,EAAA,GAAA,SAAA,EAAA,EAAiDU,EAAA,QAAA,UAAA,CAAAC,EAAA8B,CAAA,EAAA,IAAA5B,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAA8B,gBAAA,CAAiB,CAAA,CAAA,EACzEnB,EAAA,GAAAoB,GAAA,EAAA,EAAA,IAAA,EAAA,EAA8F,GAAAC,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAlB,CAAA,EAIhGzB,EAAA,EACAF,EAAA,GAAA,SAAA,EAAA,EACEwB,EAAA,GAAAsB,GAAA,EAAA,EAAA,SAAA,EAAA,EACF5C,EAAA,EAAS,EAEbF,EAAA,GAAA,MAAA,EAAA,EAAgH,GAAA,QAAA,EAAA,EAClEkB,EAAA,EAAA,EAA0BhB,EAAA,EACtEiC,EAAA,GAAA,QAAA,EAAA,EAUFjC,EAAA,EAEAsB,EAAA,GAAAuB,GAAA,EAAA,EAAA,eAAA,EAAA,EACF7C,EAAA,EACAsB,EAAA,GAAAwB,GAAA,EAAA,EAAA,MAAA,EAAA,EAGF9C,EAAA,EAAO,6CA7CiBG,EAAA,CAAA,EAAAF,EAAA,SAAAU,EAAAoC,QAAA,EAAmB,wBAAApC,EAAAqC,eAAA,EACsB,iBAAArC,EAAAsC,eAAAC,cAAA,EAK3D/C,EAAA,EAAAF,EAAA,YAAAU,EAAAwC,SAAA,EAI2ChD,EAAA,CAAA,EAAAgC,EAAAf,EAAA,aAAA,CAAA,EAKIjB,EAAA,CAAA,EAAAgC,EAAAf,EAAA,eAAA,CAAA,EACyEjB,EAAA,EAAAF,EAAA,WAAAU,EAAAsC,eAAAG,YAAA,EAC5DjD,EAAA,EAAAF,EAAA,OAAAU,EAAA0C,eAAA,EAAuB,WAAAC,CAAA,EAMrDnD,EAAA,CAAA,EAAAF,EAAA,UAAAU,EAAA4C,aAAA,EAGApD,EAAA,EAAAF,EAAA,UAAAI,EAAA,GAAAmD,GAAA7C,EAAAoB,eAAAC,oBAAA,GAAArB,EAAAgB,WAAA8B,MAAA,CAAA,EACctD,EAAA,CAAA,EAAAgC,EAAAf,EAAA,mBAAA,CAAA,EAa/BjB,EAAA,CAAA,EAAAF,EAAA,OAAAU,EAAAoB,eAAAC,oBAAA,EAAArB,EAAAgB,WAAAC,MAAA,EAEMzB,EAAA,EAAAF,EAAA,OAAAU,EAAAoB,eAAAC,oBAAA,GAAArB,EAAAgB,WAAAC,MAAA,4BA5C3BN,EAAA,EAAAoC,GAAA,GAAA,GAAA,MAAA,EAAA,kBAA0CzD,EAAA,OAAAU,EAAAgD,aAAAhD,EAAAoC,QAAA,sCAqD1CjD,EAAA,EAAA,MAAA,EAAA,EAAwE,EAAA,SAAA,EAAA,EACzBU,EAAA,QAAA,UAAA,CAAAC,EAAAmD,CAAA,EAAA,IAAAjD,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAkD,MAAA,CAAO,CAAA,CAAA,EAAE5B,EAAA,EAAA,IAAA,EAAA,EAAqEjB,EAAA,CAAA,EAAchB,EAAA,EAClJF,EAAA,EAAA,SAAA,EAAA,EAAsCU,EAAA,QAAA,UAAA,CAAAC,EAAAmD,CAAA,EAAA,IAAAjD,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAmD,MAAA,CAAO,CAAA,CAAA,EAAE7B,EAAA,EAAA,IAAA,EAAA,EAAwDjB,EAAA,CAAA,EAAchB,EAAA,EAAS,EAEzIF,EAAA,EAAA,MAAA,EAAA,EAAyC,EAAA,SAAA,EAAA,EACAU,EAAA,QAAA,UAAA,CAAAC,EAAAmD,CAAA,EAAA,IAAAjD,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAoD,KAAA,CAAM,CAAA,CAAA,EACpD9B,EAAA,EAAA,IAAA,EAAA,EACAjB,EAAA,EAAA,EACFhB,EAAA,EAAS,sCAP2HG,EAAA,CAAA,EAAAgC,EAAAf,EAAA,OAAA,CAAA,EACpBjB,EAAA,CAAA,EAAAgC,EAAAf,EAAA,OAAA,CAAA,EAGxDjB,EAAA,CAAA,EAAAF,EAAA,WAAAU,EAAAsC,eAAAe,cAAA,GAAAC,EAAAtD,EAAAwC,UAAAe,IAAA,MAAA,IAAA,MAAAD,EAAAE,MAAA,EAEtDhE,EAAA,CAAA,EAAAgB,GAAA,IAAAC,EAAA,MAAA,EAAA,GAAA,6BApFRC,EAAA,CAAA,EACEC,EAAA,EAAA8C,GAAA,EAAA,EAAA,eAAA,CAAA,eAsBA9C,EAAA,EAAA+C,GAAA,EAAA,EAAA,cAAA,KAAA,EAAA5C,CAAA,EAAgD,EAAA6C,GAAA,GAAA,EAAA,cAAA,KAAA,EAAA7C,CAAA,sBAtBjCtB,EAAA,EAAAF,EAAA,OAAAmC,EAAA,EAAA,EAAAzB,EAAAG,cAAAyD,YAAA,CAAA,GD4EjB,IAAaC,IAAuB,IAAA,CAA9B,MAAOA,CAAuB,CA6ClCC,YAAmBC,EAAsCC,EAA4B,CAAlE,KAAAD,cAAAA,EAAsC,KAAAC,cAAAA,EAxChD,KAAAC,WAAoC,IAAIC,EAKxC,KAAAC,kBAA6B,GAI5B,KAAAC,YAAyC,IAAIF,EAGtC,KAAAG,WAAaC,EAAOC,CAAU,EAC/B,KAAAC,eAAiBF,EAAOG,EAAc,EACtC,KAAAC,uBAAyBJ,EAAOK,EAAsB,EAMtE,KAAAC,mBAA8B,GAE9B,KAAAC,UAAwC,CAAA,EAGxC,KAAAC,gBAA2B,GAE3B,KAAAC,cAAwB,EAExB,KAAAC,YAAuB,GAEvB,KAAAC,cAAgBA,GAChB,KAAAC,gBAAkBC,GAID,KAAAC,MAAQd,EAAOe,CAAiB,EAChC,KAAAC,OAAShB,EAAOiB,EAAa,EAuL3B,KAAAC,WAAaA,EAnL9B,KAAKxB,cAAcyB,cAAa,EAAGC,UAAUC,GAAM,CACjD,KAAKC,aAAeD,EAAIE,IAAIC,IACnB,CACLC,MAAOD,EACPE,MAAOF,EAAEG,MAEZ,CACH,CAAC,CACH,CAEAC,UAAQ,CACF,KAAKC,iBAAmBC,SAC1B,KAAKD,eAAiB,IAAIE,GAC1B,KAAKjB,MAAMkB,aAAY,GAGrB,KAAKrC,YACP,KAAKA,WAAWsC,KAAKC,EAAmB,KAAKnC,UAAU,CAAC,EAAEqB,UAAUe,GAAY,CAC9E,KAAK7B,mBAAqB,CAAC6B,EAC3B,KAAK1C,cAAc2C,IAAI,CAAC,KAAK9B,kBAAkB,EAC/C,KAAKQ,MAAMkB,aAAY,CACzB,CAAC,EAKH,KAAKK,wBAAuB,CAC9B,CAmCAC,OAAK,CACH,KAAK3C,WAAW4C,KAAK,EAAK,EAC1B,KAAKjC,mBAAqB,GAC1B,KAAKb,cAAc2C,IAAI,CAAC,KAAK9B,kBAAkB,EAC/C,KAAKQ,MAAMkB,aAAY,CACzB,CAEAQ,UAAUC,EAAQ,CAChB,GAAIA,IAAQ,MAAQ,OAAOA,GAAQ,SACjC,OAAOA,EAGT,GAAIA,aAAeC,MACjB,OAAOD,EAAIlB,IAAIoB,GAAQ,KAAKH,UAAUG,CAAI,CAAC,EAG7C,IAAMC,EAAiB,CAAA,EAEvB,QAAWC,KAAOJ,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAKI,CAAG,IAC3C,OAAOJ,EAAII,CAAG,GAAM,UAAYJ,EAAII,CAAG,IAAM,KAC/CD,EAAUC,CAAG,EAAI,KAAKL,UAAUC,EAAII,CAAG,CAAC,EAExCD,EAAUC,CAAG,EAAIJ,EAAII,CAAG,GAK9B,OAAOD,CACT,CAEAM,cAAcC,EAAsB,CAClC,KAAKC,SAAWD,CAClB,CAGAd,yBAAuB,CACrB,KAAK3B,YAAc,GAEnB,KAAK0C,SAAW,KAAKZ,UAAU,KAAKX,eAAewB,SAAS,EAE5D,KAAKC,UAAY,IAAIC,GAAU,CAC7BC,UAAW,IAAIC,EAAY,CAAChC,MAAO,KAAK2B,UAAUM,aAAaF,WAAaG,EAAUC,SAAUC,SAAU,KAAKhC,eAAeiC,YAAY,EAAG,CAAA,CAAE,EAC/IC,QAAS,IAAIN,EAAY,KAAKL,UAAUW,SAAW,EAAG,CAAA,CAAE,EACxDpC,KAAM,IAAI8B,EAAY,KAAKL,UAAUzB,MAAQ,GAAI,CAAA,CAAE,EACpD,EACG,KAAKE,gBAAgBwB,WAAWK,cAClC,KAAKlD,gBAAkB,KAAKqB,gBAAgBwB,WAAWK,YAAaM,aAItE,KAAKV,UAAUW,aAAahC,KAAKC,EAAmB,KAAKnC,UAAU,CAAC,EAAEqB,UAAU,IAAK,CACjF,KAAKgC,UAAUM,cAAgB,OACjC,KAAKN,SAASM,YAAc,CAC1BM,YAAa,KAAKxD,gBAClBgD,UAAWU,SAAS,KAAKZ,UAAUa,IAAI,WAAW,GAAG1C,MAAO,EAAE,IAGlE,KAAK2B,SAAUM,YAAaF,UAAYU,SAAS,KAAKZ,UAAUa,IAAI,WAAW,GAAG1C,MAAO,EAAE,EAC3F,KAAK2B,SAAUW,QAAUK,KAAKC,IAAIH,SAAS,KAAKZ,UAAUa,IAAI,SAAS,GAAG1C,OAAS,IAAK,EAAE,EAAG,CAAC,EAC9F,KAAK2B,SAAUzB,KAAO,KAAK2B,UAAUa,IAAI,MAAM,GAAG1C,OAAS,GAC3D,KAAKX,MAAMkB,aAAY,CACvB,CAAC,EAED,KAAKtB,YAAc,GACnB,KAAK4D,MAAK,CACZ,CAGAC,iBAAe,CACT,KAAK1C,eAAeiC,eACxB,KAAKtD,gBAAkB,CAAC,KAAKA,gBACzB,KAAK4C,UAAUM,cAAgB,OACjC,KAAKN,SAASM,YAAc,CAC1BM,YAAa,KAAKxD,gBAClBgD,UAAWG,EAAUC,WAIzB,KAAKR,SAAUM,YAAaM,YAAc,KAAKxD,gBAC/C,KAAKM,MAAMkB,aAAY,EACzB,CAEAwC,OAAK,CAEH,KAAKnC,wBAAuB,CAC9B,CAEAiC,OAAK,CACH,KAAKxE,YAAYyC,KAAK,CAACkC,QAAS,KAAKhE,gBAAkB,EAAG2C,SAAU,KAAKA,QAAS,CAAC,EAE/E,KAAKlD,eAAewE,oBAAmB,IAAOxD,EAAWyD,QAAU,KAAKlE,gBAAkB,GAC5F,KAAKmE,eAAc,EAGrB,KAAKnE,gBACL,KAAKK,MAAMkB,aAAY,CACzB,CAEA6C,MAAI,CACG,KAAKzB,WACV,KAAKA,SAASzB,KAAO,KAAK2B,UAAUa,IAAI,MAAM,GAAG1C,MACjD,KAAK/B,cAAcoF,WAAW,KAAK1B,QAAQ,EAAEhC,UAAU,IAAK,CAC1D,KAAKJ,OAAO+D,QAAQC,EAAU,6BAA6B,CAAC,EAC5D,KAAKV,MAAK,CACZ,CAAC,EACH,CAEAM,gBAAc,CACZ,KAAKnF,cAAcwF,OAAM,EACzB,KAAKnE,MAAMkB,aAAY,CACzB,CAEAkD,UAAUC,EAAU,CAClB,KAAK1F,cAAc2C,IAAI,CAAC,KAAK9B,kBAAkB,CACjD,iDA/NWf,GAAuB6F,EAAAC,EAAA,EAAAD,EAAAE,EAAA,CAAA,CAAA,CAAA,+BAAvB/F,EAAuBgG,UAAA,CAAA,CAAA,qBAAA,CAAA,EAAAC,eAAA,SAAAC,EAAAC,EAAAC,EAAA,IAAAF,EAAA,kjEC7EpCG,EAAA,EAAAC,GAAA,EAAA,EAAA,eAAA,CAAA,OAAiCC,EAAA,gBAAA,iBAAA,iBDyErBC,GAAmBC,GAAkBC,GAC7CC,GAAmBC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAEC,GAAwBC,GAAWC,GAAeC,EAAEC,GACzEC,GAA0BC,GAASC,GAAeC,EAAO,EAAAC,OAAA,CAAA;mEAAA,EAAAC,KAAA,CAAAC,UA3B/C,CACVC,GACE,iBACA,CACEC,GACE,SACA,CACEC,GAAM,CAAEC,OAAQ,EAAGC,QAAS,CAAC,CAAE,EAC/BC,GAAQ,eACNH,GAAM,CAAEC,OAAQ,IAAKC,QAAS,CAAC,CAAE,CAAC,CAAC,CACtC,EAEHH,GACE,SACA,CACEC,GAAM,CAAEC,OAAQ,IAAKC,QAAS,CAAC,CAAE,EACjCC,GAAQ,cACNH,GAAM,CAAEC,OAAQ,EAAGC,QAAS,CAAC,CAAE,CAAC,CAAC,CACpC,CACF,CACF,CACF,CACF,EAAAE,gBAAA,CAAA,CAAA,CAAA,SAOUxI,CAAuB,GAAA,yNGtExByI,EAAA,EAAA,MAAA,EAAM,EAAA,uBAAA,EAAA,EACkBC,EAAA,gBAAA,SAAAC,EAAA,CAAAC,EAAAC,CAAA,EAAA,IAAAC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAAiBF,EAAAG,cAAAN,CAAA,CAAqB,CAAA,CAAA,EAAyCO,EAAA,EAAuBC,EAAA,EAAA,OAAA,EAC9HD,EAAA,qBADgEE,EAAA,EAAAC,EAAA,UAAAP,EAAAQ,OAAA,EAAmB,UAAAR,EAAAS,MAAA,6BAOjFd,EAAA,EAAA,OAAA,EAAA,EAC2EU,EAAA,CAAA,EAAyBD,EAAA,qGAAzBE,EAAA,EAAAI,EAAAV,EAAAW,WAAAC,UAAA,6BAbrFjB,EAAA,EAAA,MAAA,CAAA,EAA+B,EAAA,MAAA,EAAA,EACJ,EAAA,IAAA,EAErBkB,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,EAMAnB,EAAA,EAAA,MAAA,EACIU,EAAA,CAAA,EACFQ,EAAA,EAAAE,GAAA,EAAA,EAAA,OAAA,EAAA,EAIFX,EAAA,EAAO,EAEJ,EACD,mBAfFE,EAAA,CAAA,EAAAU,EAAAhB,EAAAQ,QAAAS,OAAA,EAAA,EAAA,EAAA,EAOIX,EAAA,CAAA,EAAAY,GAAA,IAAAlB,EAAAS,OAAA,OAAA,EACFH,EAAA,EAAAU,EAAAhB,EAAAW,aAAAQ,OAAA,EAAA,EAAA,6BAgBFxB,EAAA,EAAA,GAAA,EAAGyB,EAAA,EAAA,EAAA,EAAiEhB,EAAA,mBAAnDE,EAAA,EAAAC,EAAA,mBAAAP,EAAAqB,cAAA,sCAKf1B,EAAA,EAAA,MAAA,EAAA,EACKC,EAAA,QAAA,UAAA,CAAAE,EAAAwB,CAAA,EAAA,IAAAtB,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAuB,iBAAA,CAAkB,CAAA,CAAA,EAI9BH,EAAA,EAAA,EAAA,EACFhB,EAAA,2DAHKoB,GAAA,KAAA,kBAAAC,EAAA,EAAA,wBAEWnB,EAAA,EAAAC,EAAA,mBAAAP,EAAA0B,YAAA,EAAiC,0BAAAC,GAAA,EAAAC,GAAAC,EAAAC,EAAAC,aAAAC,qBAAAP,CAAA,CAAA,4BAQvDL,EAAA,EAAA,EAAA,uBAAcb,EAAA,mBAAA0B,CAAA,EAA4B,0BAAAC,GAAA,EAAAC,EAAA,CAAA,sCAOxCxC,EAAA,EAAA,MAAA,EAAA,EAAoHC,EAAA,QAAA,UAAA,CAAAE,EAAAsC,CAAA,EAAA,IAAApC,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAuB,iBAAA,CAAkB,CAAA,CAAA,EAC7IH,EAAA,EAAA,EAAA,EACFhB,EAAA,6CAFiJoB,GAAA,KAAA,kBAAAa,EAAA,EAAA,wBACjI/B,EAAA,EAAAC,EAAA,mBAAAP,EAAA0B,YAAA,EAAiC,0BAAAC,GAAA,EAAAC,GAAAU,EAAAD,CAAA,CAAA,6BAMnD1C,EAAA,EAAA,MAAA,EAAA,EAA2C,EAAA,GAAA,EAEvCyB,EAAA,EAAA,EAAA,EACFhB,EAAA,EAAI,mBADYE,EAAA,CAAA,EAAAC,EAAA,mBAAAP,EAAAqB,cAAA,6BAXpB1B,EAAA,EAAA,mBAAA,GAAA,CAAA,EAAwE,EAAA,MAAA,GAAA,CAAA,EAEpEkB,EAAA,EAAA0B,GAAA,EAAA,EAAA,MAAA,EAAA,EAGFnC,EAAA,EAAM,EAGRS,EAAA,EAAA2B,GAAA,EAAA,EAAA,MAAA,EAAA,0BAR0BjC,EAAA,QAAAP,EAAAyC,KAAA,EAAe,eAAAzC,EAAA0C,YAAA,EAEiBpC,EAAA,CAAA,EAAAC,EAAA,UAAAoC,EAAAC,aAAA,EAAyB,eAAA5C,EAAA6C,eAAA,EAMnFvC,EAAA,EAAAU,EAAAhB,EAAAyC,MAAAxB,SAAA,GAAA,CAAAjB,EAAA8C,UAAA,EAAA,EAAA,sCAeInD,EAAA,EAAA,SAAA,EAAA,EACQC,EAAA,QAAA,UAAA,CAAA,IAAAmD,EAAAjD,EAAAkD,CAAA,EAAAC,UAAAjD,EAAAC,EAAA,CAAA,EAAA,OAAAC,EAASF,EAAAkD,SAAAH,CAAA,CAAiB,CAAA,CAAA,EAChCpD,EAAA,EAAA,MAAA,EAAA,EAA+B,EAAA,MAAA,EAAA,EACEU,EAAA,CAAA,EAAiBD,EAAA,EAChDT,EAAA,EAAA,MAAA,EAAA,EAA8BU,EAAA,CAAA,EAAgBD,EAAA,EAAM,EAChD,mCALiCG,EAAA,UAAA4C,EAAA,EAAAC,GAAApD,EAAAqD,cAAA,CAAA,CAAA,EAGN/C,EAAA,CAAA,EAAAI,EAAAqC,EAAAO,KAAA,EACDhD,EAAA,CAAA,EAAAI,EAAAqC,EAAAQ,IAAA,6BANtC5D,EAAA,EAAA,MAAA,EAAA,EACE6D,GAAA,EAAAC,GAAA,EAAA,EAAA,SAAA,GAAAC,EAAA,EASFtD,EAAA,mBATEE,EAAA,EAAAqD,GAAA3D,EAAA4D,mBAAA,sCA3ENC,EAAA,CAAA,EAEEhD,EAAA,EAAAiD,GAAA,EAAA,EAAA,MAAA,CAAA,EAuBAnE,EAAA,EAAA,sBAAA,CAAA,EAAiFC,EAAA,cAAA,SAAAC,EAAA,CAAAC,EAAAiE,CAAA,EAAA,IAAA/D,EAAAC,EAAA,EAAA,OAAAC,EAAeF,EAAAgE,oBAAAnE,CAAA,CAA2B,CAAA,CAAA,EAAEO,EAAA,EAC7HT,EAAA,EAAA,MAAA,CAAA,EAA6F,EAAA,MAAA,CAAA,EAC5D,EAAA,MAAA,CAAA,EAE3BkB,EAAA,EAAAoD,GAAA,EAAA,EAAA,GAAA,EAIAtE,EAAA,EAAA,mBAAA,GAAA,CAAA,EAA8J,EAAA,MAAA,GAAA,CAAA,EAE1JkB,EAAA,GAAAqD,GAAA,EAAA,EAAA,MAAA,EAAA,EAOF9D,EAAA,EAAM,EACW,EACf,EAGRS,EAAA,GAAAsD,GAAA,EAAA,EAAA,eAAA,EAAA,EAGF/D,EAAA,EAEAS,EAAA,GAAAuD,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,EAmBAC,EAAA,GAAA,cAAA,EAAA,EAEAzD,EAAA,GAAA0D,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAF,CAAA,+BAvEA/D,EAAA,EAAAU,EAAAhB,EAAAS,OAAAQ,OAAA,EAAA,EAAA,EAAA,EAuBqBX,EAAA,EAAAC,EAAA,iBAAAP,EAAAwE,cAAA,EAAiC,aAAAxE,EAAAyE,UAAA,EACjBnE,EAAA,EAAAC,EAAA,UAAA4C,EAAA,GAAAuB,GAAA1E,EAAAyC,MAAAxB,SAAA,GAAA,CAAAjB,EAAA8C,SAAA,CAAA,EAG/BxC,EAAA,CAAA,EAAAU,EAAAhB,EAAAyC,MAAAxB,SAAA,GAAA,CAAAjB,EAAA8C,UAAA,EAAA,EAAA,EAIkBxC,EAAA,EAAAC,EAAA,UAAA4C,EAAA,GAAAuB,GAAA1E,EAAAyC,MAAAxB,SAAA,GAAA,CAAAjB,EAAA8C,SAAA,CAAA,EAAuD,QAAA9C,EAAAyC,KAAA,EAAwB,eAAAzC,EAAA0C,YAAA,EAA8B,eAAA1C,EAAA2E,YAAA,EAIrGrE,EAAA,CAAA,EAAAC,EAAA,UAAAuB,EAAAc,aAAA,EAAyB,eAAA5C,EAAA6C,eAAA,EAUvDvC,EAAA,EAAAU,EAAAhB,EAAA4D,oBAAA3C,QAAA,GAAAjB,EAAAyC,MAAAxB,OAAA,GAAAa,EAAAC,aAAA6C,kBAAA,EAAA,GAAA,EAAA,EAwBWtE,EAAA,CAAA,EAAAC,EAAA,UAAAP,EAAA8C,SAAA,GD5Bf,IAAM+B,GAAoB,EAWbC,IAAyB,IAAA,CAAhC,MAAOA,CAAyB,CA0DpCC,YAAsCC,EAAkB,CAAlB,KAAAA,SAAAA,EAxDrB,KAAAC,qBAAuBC,EAAOC,EAAsB,EAClD,KAAAC,eAAiBF,EAAOG,EAAc,EACxC,KAAAC,MAAQJ,EAAOK,CAAiB,EAChC,KAAAC,eAAiBN,EAAOO,EAAc,EACtC,KAAAC,OAASR,EAAOS,EAAM,EACtB,KAAAC,WAAaV,EAAOW,CAAU,EAE5B,KAAAC,WAAaA,EAEvB,KAAArF,OAAiB,GACjB,KAAAqC,UAAqB,GACrB,KAAAL,MAAe,CAAA,EAYf,KAAAsD,kBAA6B,GAI7B,KAAAvF,QAA6B,CAAA,EAS7B,KAAAwF,YAA8B,CAAA,EACvC,KAAApC,oBAAsC,CAAA,EAE5B,KAAAqC,YAAiC,IAAIC,EACrC,KAAAC,YAAyC,IAAID,EAQvD,KAAAE,OAAyB,KAAKnB,qBAAqBoB,qBAAoB,EACvE,KAAAC,UAAwC,CAAA,EAExC,KAAAC,cAAwB,EACxB,KAAA7D,aAAuB,CAIoC,CAK3D8D,eAAa,CACX,IAAMC,GAAe,KAAKzB,SAAS0B,cAAc,qBAAqB,GAAGC,sBAAqB,EAAGC,QAAU,IAAM,GACjH,KAAKhD,oBAAsB,KAAK4B,eAAeqB,gBAAgB,KAAKb,YAAaS,CAAW,EAC5F,KAAKnB,MAAMwB,aAAY,CACzB,CAEAC,UAAQ,CACF,KAAKlE,kBAAoB1B,SAC3B,KAAK0B,gBAAkB,CAACmE,EAAWC,IAAc,GAAG,KAAKxG,MAAM,IAAI,KAAK8F,aAAa,IAAIU,GAAMC,SAAS,IAGtG,KAAK1C,iBAAmBrD,SAC1B,KAAKqD,eAAiB,IAAI2C,GAC1B,KAAK7B,MAAMwB,aAAY,GAGrB,KAAKnG,aAAeQ,SACtB,KAAKR,WAAa,CAACyG,YAAa,EAAGC,aAAc,KAAK5E,MAAMxB,OAAQL,WAAY,KAAK6B,MAAMxB,OAAQqG,WAAY,CAAC,EAChH,KAAKhC,MAAMwB,aAAY,GAGrB,KAAKS,SACP,KAAKA,QAAQC,UAAU,IAAK,CAC1B,KAAKlC,MAAMwB,aAAY,EACvB,KAAKW,gBAAgBF,QAAO,CAC9B,CAAC,EAGH,KAAK7B,OAAOgC,OAAOC,KACjBvB,GAAOwB,GAASA,aAAiBC,EAAe,EAChDC,EAAmB,KAAKlC,UAAU,EAClCmC,EAAIC,GAAOA,CAAsB,EACjCC,GAAIjB,GAAK,KAAKzF,iBAAgB,CAAE,CAAC,EACjCiG,UAAS,CAEb,CAGAU,YAAYC,EAAsB,CAChC,KAAKvE,oBAAsB,CAAC,GAAG,KAAKoC,WAAW,EAC/C,KAAKQ,cAAa,EAElB,IAAM4B,EAAa,KAAK5C,eAAe6C,kBAAkB,KAAK3C,OAAO4C,GAAG,EACxE,GAAIF,EAAa,EAAG,CAClBG,WAAW,IAAM,KAAKd,gBAAgBe,cAAcJ,EAAY,GAAM,EAAGvD,EAAiB,EAAG,EAAE,EAC/F,MACF,CAEA,GAAIsD,EAAQM,eAAe,WAAW,EAAG,CACvC,IAAMC,EAAgBP,EAAQ,UAC1BO,EAAcC,gBAAkB,IAAQD,EAAcE,eAAiB,IACzEL,WAAW,IAAM,KAAKd,gBAAgBe,cAAc,EAAG,GAAM,EAAG3D,EAAiB,EAAG,EAAE,CAE1F,CACF,CAEAxB,eAAa,CACX,OAAI,KAAK0C,kBAA0B,GACb,KAAKK,QAAQyC,aAAaC,WAAaC,EAAUC,UAAY,CAAC,KAAK5C,QAAQyC,YAAYI,WAI/G,CAEA9I,cAAc+I,EAAuB,CAC/B,OAAOA,EAAOC,UAAa,YAC7BD,EAAOC,SAASD,EAAQ/H,MAAS,CAErC,CAEA6C,oBAAoB4D,EAAkB,CACpC,KAAKzB,YAAYiD,KAAKxB,CAAK,EAC3B,KAAKrB,gBACL,KAAKH,OAASwB,EAAMyB,SACpB,KAAK/D,MAAMwB,aAAY,CACzB,CAGA5D,SAASoG,EAAgB,CACvB,GAAI,KAAKjG,cAAa,EAAI,OAE1B,IAAIkG,EAAc,EAClB,QAAQC,EAAI,EAAGA,EAAI,KAAKxD,YAAY/E,QAC9B,KAAK+E,YAAYwD,CAAC,EAAEC,MAAQH,EAAQG,IADED,IAE1CD,GAAe,KAAKvD,YAAYwD,CAAC,EAAEjG,KAGrC,KAAKkE,gBAAgBe,cAAce,EAAa,GAAM,EAAG1E,EAAiB,EAC1E0D,WAAW,IAAM,KAAK/C,eAAekE,mBAAmB,KAAKhE,OAAO4C,IAAK,KAAKb,gBAAgB1F,aAAaqG,UAAU,EAAGvD,GAAoB,GAAG,CACjJ,CAEAtD,kBAAgB,CACd,KAAKiE,eAAekE,mBAAmB,KAAKhE,OAAO4C,IAAK,KAAKb,gBAAgB1F,aAAaqG,UAAU,CACtG,iDA5JWtD,GAAyB6E,EA0DhBC,EAAQ,CAAA,CAAA,CAAA,+BA1DjB9E,EAAyB+E,UAAA,CAAA,CAAA,wBAAA,CAAA,EAAAC,eAAA,SAAAC,EAAAC,EAAAC,EAAA,IAAAF,EAAA,6JAgDzBG,GAAwB,CAAA,oHAhDxBtK,EAAA,SAAA,SAAAC,EAAA,CAAA,OAAAmK,EAAAxD,cAAA3G,CAAA,CAAqB,EAAA,GAAAsK,EAAA,EAAI,oBAAA,SAAAtK,EAAA,CAAA,OAAzBmK,EAAAxD,cAAA3G,CAAA,CAAqB,EAAA,GAAAsK,EAAA,s1CCtDlCtJ,EAAA,EAAAuJ,GAAA,GAAA,GAAA,eAAA,CAAA,OAAiC7J,EAAA,gBAAA,oBAAA,iBDgDrB8J,GAAkBC,GAAqBJ,GAAEK,GAAsCC,GACvFC,EAAoBC,GAAkBC,GAASC,EAAO,EAAAC,OAAA,CAAA;sEAAA,EAAAC,gBAAA,CAAA,CAAA,CAAA,SAK7ChG,CAAyB,GAAA", "names": ["keySize", "JumpbarService", "constructor", "resumeKeys", "resumeScroll", "getResumeKey", "key", "k", "toUpperCase", "hasOwnProperty", "getResumePosition", "url", "saveResumeKey", "value", "saveResumePosition", "generateJumpBar", "jumpBarKeys", "currentSize", "fullSize", "length", "jumpBarKeysToRender", "targetNumberOfKeys", "parseInt", "Math", "floor", "removeCount", "removalTimes", "ceil", "midPoint", "push", "_removeFirstPartOfJumpBar", "_removeSecondPartOfJumpBar", "numberOfRemovals", "removedIndexes", "removal", "min", "minIndex", "i", "size", "includes", "getJumpKeys", "data", "keySelector", "keys", "forEach", "obj", "ch", "charAt", "test", "Object", "map", "title", "sort", "a", "b", "factory", "\u0275fac", "providedIn", "FilterSettings", "constructor", "sortDisabled", "statementLimit", "saveDisabled", "SortFieldPipe", "constructor", "translocoService", "transform", "value", "SortField", "SortName", "translate", "Created", "LastModified", "LastChapterAdded", "TimeToRead", "ReleaseYear", "ReadProgress", "AverageRating", "Random", "\u0275\u0275directiveInject", "TranslocoService", "pure", "standalone", "FilterFieldPipe", "transform", "value", "FilterField", "AgeRating", "translate", "Characters", "CollectionTags", "Colorist", "CoverArtist", "Editor", "Formats", "Genres", "Inker", "Imprint", "Team", "Location", "Languages", "Libraries", "Letterer", "PublicationStatus", "Penciller", "Publisher", "ReadProgress", "ReadTime", "ReleaseYear", "SeriesName", "Summary", "Tags", "Translators", "UserRating", "Writers", "Path", "FilePath", "WantToRead", "ReadingDate", "ReadLast", "AverageRating", "Error", "pure", "standalone", "FilterComparisonPipe", "transform", "value", "FilterComparison", "BeginsWith", "translate", "Contains", "Equal", "GreaterThan", "GreaterThanEqual", "LessThan", "LessThanEqual", "Matches", "NotContains", "NotEqual", "EndsWith", "IsBefore", "IsAfter", "IsInLast", "IsNotInLast", "MustContains", "IsEmpty", "Error", "pure", "standalone", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "field_r1", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "\u0275\u0275pipeBind1", "comparison_r2", "\u0275\u0275element", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r3", "ctx_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "onDateSelect", "updateIfDateFilled", "d_r5", "\u0275\u0275reference", "toggle", "ctx", "MultipleDropdownAllowed", "\u0275\u0275template", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Conditional_0_Case_4_Conditional_0_Template", "\u0275\u0275conditional", "tmp_6_0", "dropdownOptions$", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Conditional_0_Case_0_Template", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Conditional_0_Case_1_Template", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Conditional_0_Case_2_Template", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Conditional_0_Case_3_Template", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Conditional_0_Case_4_Template", "tmp_5_0", "PredicateType", "Text", "Number", "Boolean", "Date", "Dropdown", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Conditional_0_Template", "tmp_3_0", "predicateType$", "t_r6", "UiLabel", "tooltip", "MetadataFilterRowComponent_ng_container_0_Conditional_15_Conditional_2_Template", "unit", "\u0275\u0275elementContainerStart", "\u0275\u0275repeaterCreate", "MetadataFilterRowComponent_ng_container_0_For_6_Template", "\u0275\u0275repeaterTrackByIdentity", "MetadataFilterRowComponent_ng_container_0_For_10_Template", "MetadataFilterRowComponent_ng_container_0_Conditional_13_Template", "MetadataFilterRowComponent_ng_container_0_Conditional_15_Template", "\u0275\u0275projection", "formGroup", "\u0275\u0275repeater", "availableFields", "validComparisons$", "get", "value", "FilterComparison", "IsEmpty", "FilterRowUi", "constructor", "unitLabels", "Map", "FilterField", "ReadingDate", "AverageRating", "ReadProgress", "UserRating", "ReadLast", "StringFields", "SeriesName", "Summary", "Path", "FilePath", "NumberFields", "ReadTime", "ReleaseYear", "DropdownFields", "PublicationStatus", "Languages", "AgeRating", "Translators", "Characters", "Publisher", "Editor", "CoverArtist", "Letterer", "Colorist", "Inker", "Penciller", "Writers", "Genres", "Libraries", "Formats", "CollectionTags", "Tags", "Imprint", "Team", "Location", "BooleanFields", "WantToRead", "DateFields", "DropdownFieldsWithoutMustContains", "DropdownFieldsThatIncludeNumberComparisons", "NumberFieldsThatIncludeDateComparisons", "FieldsThatShouldIncludeIsEmpty", "StringComparisons", "Equal", "NotEqual", "BeginsWith", "EndsWith", "Matches", "DateComparisons", "IsBefore", "IsAfter", "NumberComparisons", "LessThan", "LessThanEqual", "GreaterThan", "GreaterThanEqual", "DropdownComparisons", "Contains", "NotContains", "MustContains", "BooleanComparisons", "MetadataFilterRowComponent", "field", "parseInt", "has", "comp", "metadataService", "libraryService", "collectionTagService", "index", "allFields", "filterStatement", "EventEmitter", "cdRef", "inject", "ChangeDetectorRef", "destroyRef", "DestroyRef", "dateParser", "NgbDateParserFormatter", "FormGroup", "FormControl", "BehaviorSubject", "of", "loaded", "ngOnInit", "addControl", "valueChanges", "pipe", "distinctUntilChanged", "takeUntilDestroyed", "subscribe", "val", "handleFieldChange", "populateFromPreset", "startWith", "preset", "filter", "inputVal", "includes", "switchMap", "_", "getDropdownObservable", "tap", "propagateFilterUpdate", "markForCheck", "stmt", "comparison", "format", "isNaN", "emit", "patchValue", "parse", "split", "map", "d", "getAllPublicationStatus", "pubs", "pub", "label", "title", "getAllAgeRatings", "ratings", "rating", "getAllGenres", "genres", "genre", "id", "getAllLanguages", "statuses", "status", "isoCode", "mangaFormatFilters", "getLibraries", "libs", "lib", "name", "getAllTags", "allCollections", "getPersonOptions", "PersonRole", "Character", "Translator", "Writer", "role", "getAllPeopleByRole", "people", "person", "comps", "push", "next", "Set", "c", "\u0275\u0275directiveInject", "MetadataService", "LibraryService", "CollectionTagService", "selectors", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "ngContentSelectors", "_c0", "decls", "vars", "consts", "template", "rf", "MetadataFilterRowComponent_ng_container_0_Template", "ReactiveFormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "DefaultValueAccessor", "NumberValueAccessor", "CheckboxControlValueAccessor", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "MinValidator", "FormGroupDirective", "FormControlName", "AsyncPipe", "FilterFieldPipe", "FilterComparisonPipe", "Select2Module", "Select2", "NgbTooltip", "TranslocoDirective", "NgbInputDatepicker", "styles", "changeDetection", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "opt_r2", "value", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "title", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r6", "i_r5", "\u0275\u0275nextContext", "index", "ctx_r2", "\u0275\u0275resetView", "removeFilter", "\u0275\u0275element", "t_r7", "\u0275\u0275pureFunction1", "_c0", "$event", "_r4", "updateFilter", "\u0275\u0275template", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_div_11_button_4_Template", "filterStmt_r8", "availableFilterFields", "filter", "statements", "length", "\u0275\u0275elementContainerStart", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_option_5_Template", "_r1", "addFilter", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_div_11_Template", "groupOptions", "statementLimit", "opt_r10", "_r13", "i_r12", "_r11", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_div_10_button_4_Template", "filterStmt_r14", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_option_4_Template", "_r9", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_div_10_Template", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_container_2_Template", "MetadataBuilderComponent_ng_container_0_ng_container_1_ng_template_3_Template", "\u0275\u0275templateRefExtractor", "formGroup", "utilityService", "getActiveBreakpoint", "Breakpoint", "Desktop", "mobileView_r15", "MetadataBuilderComponent_ng_container_0_ng_container_1_Template", "MetadataBuilderComponent", "constructor", "allFields", "update", "EventEmitter", "apply", "cdRef", "inject", "ChangeDetectorRef", "metadataService", "MetadataService", "UtilityService", "filterUtilityService", "FilterUtilitiesService", "destroyRef", "DestroyRef", "FormGroup", "FilterCombination", "Or", "translate", "And", "ngOnInit", "addControl", "FormControl", "combination", "valueChanges", "pipe", "distinctUntilChanged", "takeUntilDestroyed", "tap", "values", "parseInt", "get", "emit", "subscribe", "createDefaultFilterStatement", "markForCheck", "slice", "concat", "filterStmt", "selectors", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "MetadataBuilderComponent_ng_container_0_Template", "NgIf", "MetadataFilterRowComponent", "NgForOf", "FormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "NgbTooltip", "ReactiveFormsModule", "FormGroupDirective", "FormControlName", "TranslocoDirective", "changeDetection", "\u0275\u0275elementStart", "\u0275\u0275elementContainer", "\u0275\u0275elementEnd", "\u0275\u0275property", "undefined", "\u0275\u0275advance", "filterSection_r2", "\u0275\u0275pureFunction1", "_c1", "isOpen_r1", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "ctx_r3", "\u0275\u0275nextContext", "\u0275\u0275resetView", "toggleService", "set", "\u0275\u0275text", "\u0275\u0275pureFunction0", "_c2", "\u0275\u0275textInterpolate1", "t_r5", "\u0275\u0275elementContainerStart", "\u0275\u0275template", "MetadataFilterComponent_ng_container_0_ng_container_1_ng_container_1_div_1_Template", "MetadataFilterComponent_ng_container_0_ng_container_1_ng_container_1_ng_template_2_Template", "\u0275\u0275templateRefExtractor", "activeBreakpoint_r6", "Breakpoint", "Tablet", "mobileView_r7", "MetadataFilterComponent_ng_container_0_ng_container_1_ng_container_1_Template", "utilityService", "getActiveBreakpoint", "\u0275\u0275element", "field_r9", "\u0275\u0275textInterpolate", "\u0275\u0275pipeBind1", "buttons_r10", "$event", "_r8", "handleFilters", "updateSortOrder", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_i_14_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_ng_template_15_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_option_18_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_ng_container_23_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_div_24_Template", "filterV2", "allFilterFields", "filterSettings", "statementLimit", "sortGroup", "sortDisabled", "isAscendingSort", "descSort_r11", "allSortFields", "_c3", "Mobile", "MetadataFilterComponent_ng_container_0_ng_template_3_div_0_Template", "fullyLoaded", "_r12", "clear", "apply", "save", "saveDisabled", "tmp_7_0", "get", "value", "MetadataFilterComponent_ng_container_0_ng_container_1_Template", "MetadataFilterComponent_ng_container_0_ng_template_3_Template", "MetadataFilterComponent_ng_container_0_ng_template_5_Template", "toggleState$", "MetadataFilterComponent", "constructor", "toggleService", "filterService", "filterOpen", "EventEmitter", "filteringDisabled", "applyFilter", "destroyRef", "inject", "DestroyRef", "utilityService", "UtilityService", "filterUtilitiesService", "FilterUtilitiesService", "filteringCollapsed", "libraries", "isAscendingSort", "updateApplied", "fullyLoaded", "allSortFields", "allFilterFields", "allFields", "cdRef", "ChangeDetectorRef", "toastr", "ToastrService", "Breakpoint", "getAllFilters", "subscribe", "res", "smartFilters", "map", "r", "value", "label", "name", "ngOnInit", "filterSettings", "undefined", "FilterSettings", "markForCheck", "pipe", "takeUntilDestroyed", "openState", "set", "loadFromPresetsAndSetup", "close", "emit", "deepClone", "obj", "Array", "item", "clonedObj", "key", "Object", "prototype", "hasOwnProperty", "call", "handleFilters", "filter", "filterV2", "presetsV2", "sortGroup", "FormGroup", "sortField", "FormControl", "sortOptions", "SortField", "SortName", "disabled", "sortDisabled", "limitTo", "isAscending", "valueChanges", "parseInt", "get", "Math", "max", "apply", "updateSortOrder", "clear", "isFirst", "getActiveBreakpoint", "Mobile", "toggleSelected", "save", "saveFilter", "success", "translate", "toggle", "setToggle", "event", "\u0275\u0275directiveInject", "ToggleService", "FilterService", "selectors", "contentQueries", "rf", "ctx", "dirIndex", "\u0275\u0275template", "MetadataFilterComponent_ng_container_0_Template", "\u0275\u0275property", "NgIf", "NgTemplateOutlet", "DrawerComponent", "ReactiveFormsModule", "\u0275NgNoValidate", "NgSelectOption", "\u0275NgSelectMultipleOption", "DefaultValueAccessor", "NumberValueAccessor", "SelectControlValueAccessor", "NgControlStatus", "NgControlStatusGroup", "FormGroupDirective", "FormControlName", "FormsModule", "AsyncPipe", "TranslocoModule", "TranslocoDirective", "SortFieldPipe", "MetadataBuilderComponent", "NgForOf", "Select2Module", "NgClass", "styles", "data", "animation", "trigger", "transition", "style", "height", "opacity", "animate", "changeDetection", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r2", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "performAction", "\u0275\u0275elementEnd", "\u0275\u0275text", "\u0275\u0275advance", "\u0275\u0275property", "actions", "header", "\u0275\u0275textInterpolate", "pagination", "totalItems", "\u0275\u0275template", "CardDetailLayoutComponent_ng_container_0_Conditional_1_Conditional_3_Template", "CardDetailLayoutComponent_ng_container_0_Conditional_1_Conditional_6_Template", "\u0275\u0275conditional", "length", "\u0275\u0275textInterpolate1", "undefined", "\u0275\u0275elementContainer", "noDataTemplate", "_r5", "tryToSaveJumpKey", "\u0275\u0275propertyInterpolate1", "i_r7", "itemTemplate", "\u0275\u0275pureFunction2", "_c5", "item_r6", "scroll_r8", "viewPortInfo", "startIndexWithBuffer", "jumpBar_r9", "\u0275\u0275pureFunction0", "_c6", "_r10", "i_r12", "item_r11", "CardDetailLayoutComponent_ng_container_0_ng_template_13_div_4_Template", "CardDetailLayoutComponent_ng_container_0_ng_template_13_Conditional_5_Template", "items", "bufferAmount", "scroll_r13", "viewPortItems", "trackByIdentity", "isLoading", "jumpKey_r15", "_r14", "$implicit", "scrollTo", "\u0275\u0275pureFunction1", "_c7", "hasCustomSort", "title", "size", "\u0275\u0275repeaterCreate", "CardDetailLayoutComponent_ng_container_0_ng_template_16_For_2_Template", "_forTrack0", "\u0275\u0275repeater", "jumpBarKeysToRender", "\u0275\u0275elementContainerStart", "CardDetailLayoutComponent_ng_container_0_Conditional_1_Template", "_r1", "applyMetadataFilter", "CardDetailLayoutComponent_ng_container_0_Conditional_6_Template", "CardDetailLayoutComponent_ng_container_0_div_11_Template", "CardDetailLayoutComponent_ng_container_0_Conditional_12_Template", "CardDetailLayoutComponent_ng_container_0_ng_template_13_Template", "\u0275\u0275templateRefExtractor", "\u0275\u0275element", "CardDetailLayoutComponent_ng_container_0_ng_template_16_Template", "filterSettings", "filterOpen", "_c3", "parentScroll", "maxScrollPosition", "ANIMATION_TIME_MS", "CardDetailLayoutComponent", "constructor", "document", "filterUtilityService", "inject", "FilterUtilitiesService", "utilityService", "UtilityService", "cdRef", "ChangeDetectorRef", "jumpbarService", "JumpbarService", "router", "Router", "destroyRef", "DestroyRef", "Breakpoint", "filteringDisabled", "jumpBarKeys", "itemClicked", "EventEmitter", "applyFilter", "filter", "createSeriesV2Filter", "libraries", "updateApplied", "resizeJumpBar", "currentSize", "querySelector", "getBoundingClientRect", "height", "generateJumpBar", "markForCheck", "ngOnInit", "_", "item", "libraryId", "FilterSettings", "currentPage", "itemsPerPage", "totalPages", "refresh", "subscribe", "virtualScroller", "events", "pipe", "event", "NavigationStart", "takeUntilDestroyed", "map", "evt", "tap", "ngOnChanges", "changes", "startIndex", "getResumePosition", "url", "setTimeout", "scrollToIndex", "hasOwnProperty", "loadingChange", "previousValue", "currentValue", "sortOptions", "sortField", "SortField", "SortName", "isAscending", "action", "callback", "emit", "filterV2", "jumpKey", "targetIndex", "i", "key", "saveResumePosition", "\u0275\u0275directiveInject", "DOCUMENT", "selectors", "contentQueries", "rf", "ctx", "dirIndex", "VirtualScrollerComponent", "\u0275\u0275resolveWindow", "CardDetailLayoutComponent_ng_container_0_Template", "LoadingComponent", "VirtualScrollerModule", "CardActionablesComponent", "MetadataFilterComponent", "TranslocoDirective", "NgTemplateOutlet", "NgClass", "NgForOf", "styles", "changeDetection"] }