{ "version": 3, "sources": ["src/app/_services/recommendation.service.ts", "src/app/_models/dashboard/stream-type.enum.ts", "src/app/dashboard/_components/dashboard.component.ts", "src/app/dashboard/_components/dashboard.component.html", "src/app/_routes/dashboard-routing.module.ts"], "sourcesContent": ["import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { map } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { UtilityService } from '../shared/_services/utility.service';\r\nimport { PaginatedResult } from '../_models/pagination';\r\nimport { Series } from '../_models/series';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RecommendationService {\r\n\r\n private baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient, private utilityService: UtilityService) { }\r\n\r\n getQuickReads(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/quick-reads?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getQuickCatchupReads(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/quick-catchup-reads?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getHighlyRated(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/highly-rated?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getRediscover(libraryId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/rediscover?libraryId=' + libraryId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n\r\n getMoreIn(libraryId: number, genreId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n return this.httpClient.get>(this.baseUrl + 'recommended/more-in?libraryId=' + libraryId + '&genreId=' + genreId, {observe: 'response', params})\r\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\r\n }\r\n}\r\n", "export enum StreamType {\r\n OnDeck = 1,\r\n RecentlyUpdated = 2,\r\n NewlyAdded = 3,\r\n SmartFilter = 4,\r\n MoreInGenre = 5\r\n}\r\n", "import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, OnInit} from '@angular/core';\r\nimport {Title} from '@angular/platform-browser';\r\nimport {Router, RouterLink} from '@angular/router';\r\nimport {Observable, of, ReplaySubject, Subject, switchMap} from 'rxjs';\r\nimport {debounceTime, map, shareReplay, take, tap, throttleTime} from 'rxjs/operators';\r\nimport {FilterUtilitiesService} from 'src/app/shared/_services/filter-utilities.service';\r\nimport {Library} from 'src/app/_models/library/library';\r\nimport {RecentlyAddedItem} from 'src/app/_models/recently-added-item';\r\nimport {SortField} from 'src/app/_models/metadata/series-filter';\r\nimport {AccountService} from 'src/app/_services/account.service';\r\nimport {ImageService} from 'src/app/_services/image.service';\r\nimport {LibraryService} from 'src/app/_services/library.service';\r\nimport {EVENTS, MessageHubService} from 'src/app/_services/message-hub.service';\r\nimport {SeriesService} from 'src/app/_services/series.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CardItemComponent} from '../../cards/card-item/card-item.component';\r\nimport {SeriesCardComponent} from '../../cards/series-card/series-card.component';\r\nimport {CarouselReelComponent} from '../../carousel/_components/carousel-reel/carousel-reel.component';\r\nimport {AsyncPipe, NgForOf, NgTemplateOutlet} from '@angular/common';\r\nimport {\r\n SideNavCompanionBarComponent\r\n} from '../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component';\r\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\r\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\r\nimport {DashboardService} from \"../../_services/dashboard.service\";\r\nimport {MetadataService} from \"../../_services/metadata.service\";\r\nimport {RecommendationService} from \"../../_services/recommendation.service\";\r\nimport {Genre} from \"../../_models/metadata/genre\";\r\nimport {DashboardStream} from \"../../_models/dashboard/dashboard-stream\";\r\nimport {StreamType} from \"../../_models/dashboard/stream-type.enum\";\r\nimport {LoadingComponent} from \"../../shared/loading/loading.component\";\r\nimport {ScrobbleProvider, ScrobblingService} from \"../../_services/scrobbling.service\";\r\nimport {ToastrService} from \"ngx-toastr\";\r\nimport {ServerService} from \"../../_services/server.service\";\r\n\r\nenum StreamId {\r\n OnDeck,\r\n RecentlyUpdatedSeries,\r\n NewlyAddedSeries,\r\n MoreInGenre,\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-dashboard',\r\n templateUrl: './dashboard.component.html',\r\n styleUrls: ['./dashboard.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [SideNavCompanionBarComponent, RouterLink, CarouselReelComponent, SeriesCardComponent,\r\n CardItemComponent, AsyncPipe, TranslocoDirective, NgForOf, NgTemplateOutlet, LoadingComponent],\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly filterUtilityService = inject(FilterUtilitiesService);\r\n private readonly metadataService = inject(MetadataService);\r\n private readonly recommendationService = inject(RecommendationService);\r\n public readonly accountService = inject(AccountService);\r\n private readonly libraryService = inject(LibraryService);\r\n private readonly seriesService = inject(SeriesService);\r\n private readonly router = inject(Router);\r\n private readonly titleService = inject(Title);\r\n public readonly imageService = inject(ImageService);\r\n private readonly messageHub = inject(MessageHubService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly dashboardService = inject(DashboardService);\r\n private readonly scrobblingService = inject(ScrobblingService);\r\n private readonly toastr = inject(ToastrService);\r\n private readonly serverService = inject(ServerService);\r\n\r\n libraries$: Observable = this.libraryService.getLibraries().pipe(take(1), takeUntilDestroyed(this.destroyRef))\r\n isLoadingDashboard = true;\r\n isAdmin$: Observable = of(false);\r\n\r\n streams: Array = [];\r\n genre: Genre | undefined;\r\n refreshStreams$ = new Subject();\r\n refreshStreamsFromDashboardUpdate$ = new Subject();\r\n\r\n streamCount: number = 0;\r\n streamsLoaded: number = 0;\r\n\r\n /**\r\n * We use this Replay subject to slow the amount of times we reload the UI\r\n */\r\n private loadRecentlyAdded$: ReplaySubject = new ReplaySubject();\r\n protected readonly StreamType = StreamType;\r\n protected readonly StreamId = StreamId;\r\n\r\n constructor() {\r\n this.loadDashboard();\r\n\r\n this.refreshStreamsFromDashboardUpdate$.pipe(takeUntilDestroyed(this.destroyRef), debounceTime(1000),\r\n tap(() => {\r\n this.loadDashboard();\r\n }))\r\n .subscribe();\r\n\r\n this.refreshStreams$.pipe(takeUntilDestroyed(this.destroyRef), throttleTime(10_000),\r\n tap(() => {\r\n this.loadDashboard()\r\n }))\r\n .subscribe();\r\n\r\n\r\n this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\r\n // TODO: Make the event have a stream Id so I can refresh just that stream\r\n if (res.event === EVENTS.DashboardUpdate) {\r\n this.refreshStreamsFromDashboardUpdate$.next();\r\n } else if (res.event === EVENTS.SeriesAdded) {\r\n this.refreshStreams$.next();\r\n } else if (res.event === EVENTS.SeriesRemoved) {\r\n this.refreshStreams$.next();\r\n } else if (res.event === EVENTS.ScanSeries) {\r\n // We don't have events for when series are updated, but we do get events when a scan update occurs. Refresh recentlyAdded at that time.\r\n this.loadRecentlyAdded$.next();\r\n this.refreshStreams$.next();\r\n }\r\n });\r\n\r\n this.scrobblingService.hasTokenExpired(ScrobbleProvider.AniList).subscribe(hasExpired => {\r\n if (hasExpired) {\r\n this.toastr.error(translate('toasts.anilist-token-expired'));\r\n }\r\n this.cdRef.markForCheck();\r\n });\r\n\r\n\r\n this.isAdmin$ = this.accountService.currentUser$.pipe(\r\n takeUntilDestroyed(this.destroyRef),\r\n map(user => (user && this.accountService.hasAdminRole(user)) || false),\r\n shareReplay({bufferSize: 1, refCount: true})\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n this.titleService.setTitle('Kavita');\r\n }\r\n\r\n\r\n loadDashboard() {\r\n this.isLoadingDashboard = true;\r\n this.streamsLoaded = 0;\r\n this.streamCount = 0;\r\n this.cdRef.markForCheck();\r\n this.dashboardService.getDashboardStreams().subscribe(streams => {\r\n this.streams = streams;\r\n this.streamCount = streams.length;\r\n this.streams.forEach(s => {\r\n switch (s.streamType) {\r\n case StreamType.OnDeck:\r\n s.api = this.seriesService.getOnDeck(0, 1, 20)\r\n .pipe(map(d => d.result), tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.NewlyAdded:\r\n s.api = this.seriesService.getRecentlyAdded(1, 20)\r\n .pipe(map(d => d.result), tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.RecentlyUpdated:\r\n s.api = this.seriesService.getRecentlyUpdatedSeries().pipe(tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.SmartFilter:\r\n s.api = this.filterUtilityService.decodeFilter(s.smartFilterEncoded!).pipe(\r\n switchMap(filter => {\r\n return this.seriesService.getAllSeriesV2(0, 20, filter);\r\n }))\r\n .pipe(map(d => d.result),tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\r\n break;\r\n case StreamType.MoreInGenre:\r\n s.api = this.metadataService.getAllGenres().pipe(\r\n map(genres => {\r\n this.genre = genres[Math.floor(Math.random() * genres.length)];\r\n return this.genre;\r\n }),\r\n switchMap(genre => this.recommendationService.getMoreIn(0, genre.id, 0, 30)),\r\n map(p => p.result),\r\n tap(() => this.increment()),\r\n takeUntilDestroyed(this.destroyRef),\r\n shareReplay({bufferSize: 1, refCount: true})\r\n );\r\n break;\r\n }\r\n });\r\n this.isLoadingDashboard = false;\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n increment() {\r\n this.streamsLoaded++;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n reloadStream(streamId: number, onDeck = false) {\r\n const index = this.streams.findIndex(s => s.id === streamId);\r\n if (index < 0) return;\r\n if (onDeck) {\r\n // TODO: Need to figure out a better way to refresh just one stream\r\n this.refreshStreams$.next();\r\n this.cdRef.markForCheck();\r\n } else {\r\n this.streams[index] = {...this.streams[index]};\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n async handleRecentlyAddedChapterClick(item: RecentlyAddedItem) {\r\n await this.router.navigate(['library', item.libraryId, 'series', item.seriesId]);\r\n }\r\n\r\n async handleFilterSectionClick(stream: DashboardStream) {\r\n await this.router.navigateByUrl('all-series?' + stream.smartFilterEncoded);\r\n }\r\n\r\n handleSectionClick(streamId: StreamId) {\r\n if (streamId === StreamId.RecentlyUpdatedSeries) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.recently-updated-title');\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n if (filter.sortOptions) {\r\n filter.sortOptions.sortField = SortField.LastChapterAdded;\r\n filter.sortOptions.isAscending = false;\r\n }\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n } else if (streamId === StreamId.OnDeck) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.on-deck-title');\r\n\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.GreaterThan, value: '0'});\r\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.LessThan, value: '100'});\r\n if (filter.sortOptions) {\r\n filter.sortOptions.sortField = SortField.LastChapterAdded;\r\n filter.sortOptions.isAscending = false;\r\n }\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n } else if (streamId === StreamId.NewlyAddedSeries) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.recently-added-title');\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n if (filter.sortOptions) {\r\n filter.sortOptions.sortField = SortField.Created;\r\n filter.sortOptions.isAscending = false;\r\n }\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n } else if (streamId === StreamId.MoreInGenre) {\r\n const params: any = {};\r\n params['page'] = 1;\r\n params['title'] = translate('dashboard.more-in-genre-title', {genre: this.genre?.title});\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n filter.statements.push({field: FilterField.Genres, value: this.genre?.id + '', comparison: FilterComparison.MustContains});\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\r\n }\r\n }\r\n}\r\n", "\r\n\r\n\r\n @if (libraries$ | async; as libraries) {\r\n @if (libraries.length === 0) {\r\n @if (isAdmin$ | async; as isAdmin) {\r\n
\r\n @if (isAdmin) {\r\n
\r\n

{{t('no-libraries')}} {{t('server-settings-link')}}.

\r\n
\r\n } @else {\r\n
\r\n

{{t('not-granted')}}

\r\n
\r\n }\r\n
\r\n }\r\n }\r\n }\r\n\r\n @for(stream of streams; track stream.id) {\r\n @switch (stream.streamType) {\r\n @case (StreamType.OnDeck) {\r\n \r\n }\r\n @case (StreamType.RecentlyUpdated) {\r\n \r\n }\r\n @case (StreamType.NewlyAdded) {\r\n \r\n }\r\n @case (StreamType.SmartFilter) {\r\n \r\n }\r\n @case (StreamType.MoreInGenre) {\r\n \r\n }\r\n }\r\n\r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n \r\n @if(stream.api | async; as data) {\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 { Routes } from '@angular/router';\r\nimport { DashboardComponent } from '../dashboard/_components/dashboard.component';\r\n\r\n\r\nexport const routes: Routes = [\r\n {\r\n path: '',\r\n component: DashboardComponent,\r\n }\r\n];\r\n"], "mappings": "ysDAWA,IAAaA,IAAqB,IAAA,CAA5B,IAAOA,EAAP,MAAOA,CAAqB,CAIhCC,YAAoBC,EAAgCC,EAA8B,CAA9D,KAAAD,WAAAA,EAAgC,KAAAC,eAAAA,EAF5C,KAAAC,QAAUC,GAAYC,MAEwD,CAEtFC,cAAcC,EAAmBC,EAAkBC,EAAqB,CACtE,IAAIC,EAAS,IAAIC,EACjBD,OAAAA,EAAS,KAAKR,eAAeU,sBAAsBF,EAAQF,EAASC,CAAY,EACzE,KAAKR,WAAWY,IAA+B,KAAKV,QAAU,qCAAuCI,EAAW,CAACO,QAAS,WAAYJ,OAAAA,CAAM,CAAC,EACjJK,KAAKC,EAAIC,GAAY,KAAKf,eAAegB,sBAAsBD,CAAQ,CAAC,CAAC,CAC9E,CAEAE,qBAAqBZ,EAAmBC,EAAkBC,EAAqB,CAC7E,IAAIC,EAAS,IAAIC,EACjBD,OAAAA,EAAS,KAAKR,eAAeU,sBAAsBF,EAAQF,EAASC,CAAY,EACzE,KAAKR,WAAWY,IAA+B,KAAKV,QAAU,6CAA+CI,EAAW,CAACO,QAAS,WAAYJ,OAAAA,CAAM,CAAC,EACzJK,KAAKC,EAAIC,GAAY,KAAKf,eAAegB,sBAAsBD,CAAQ,CAAC,CAAC,CAC9E,CAEAG,eAAeb,EAAmBC,EAAkBC,EAAqB,CACvE,IAAIC,EAAS,IAAIC,EACjBD,OAAAA,EAAS,KAAKR,eAAeU,sBAAsBF,EAAQF,EAASC,CAAY,EACzE,KAAKR,WAAWY,IAA+B,KAAKV,QAAU,sCAAwCI,EAAW,CAACO,QAAS,WAAYJ,OAAAA,CAAM,CAAC,EAClJK,KAAKC,EAAIC,GAAY,KAAKf,eAAegB,sBAAsBD,CAAQ,CAAC,CAAC,CAC9E,CAEAI,cAAcd,EAAmBC,EAAkBC,EAAqB,CACtE,IAAIC,EAAS,IAAIC,EACjBD,OAAAA,EAAS,KAAKR,eAAeU,sBAAsBF,EAAQF,EAASC,CAAY,EACzE,KAAKR,WAAWY,IAA+B,KAAKV,QAAU,oCAAsCI,EAAW,CAACO,QAAS,WAAYJ,OAAAA,CAAM,CAAC,EAChJK,KAAKC,EAAIC,GAAY,KAAKf,eAAegB,sBAAsBD,CAAQ,CAAC,CAAC,CAC9E,CAEAK,UAAUf,EAAmBgB,EAAiBf,EAAkBC,EAAqB,CACnF,IAAIC,EAAS,IAAIC,EACjBD,OAAAA,EAAS,KAAKR,eAAeU,sBAAsBF,EAAQF,EAASC,CAAY,EACzE,KAAKR,WAAWY,IAA+B,KAAKV,QAAU,iCAAmCI,EAAY,YAAcgB,EAAS,CAACT,QAAS,WAAYJ,OAAAA,CAAM,CAAC,EACrKK,KAAKC,EAAIC,IAAY,KAAKf,eAAegB,sBAAsBD,EAAQ,CAAC,CAAC,CAC9E,yCAvCWlB,GAAqByB,EAAAC,EAAA,EAAAD,EAAAE,EAAA,CAAA,CAAA,wBAArB3B,EAAqB4B,QAArB5B,EAAqB6B,UAAAC,WAFpB,MAAM,CAAA,EAEd,IAAO9B,EAAP+B,SAAO/B,CAAqB,GAAA,ECXlC,IAAYgC,EAAZ,SAAYA,EAAU,CACpBA,OAAAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,gBAAA,CAAA,EAAA,kBACAA,EAAAA,EAAA,WAAA,CAAA,EAAA,aACAA,EAAAA,EAAA,YAAA,CAAA,EAAA,cACAA,EAAAA,EAAA,YAAA,CAAA,EAAA,cALUA,CAMZ,EANYA,GAAU,CAAA,CAAA,mFEQVC,EAAA,EAAA,MAAA,CAAA,EAA2C,EAAA,GAAA,EACtCC,EAAA,CAAA,EAAsBD,EAAA,EAAA,IAAA,EAAA,EAAsDC,EAAA,CAAA,EAA6BC,EAAA,EAAID,EAAA,EAAA,GAAA,EAACC,EAAA,EAAI,6BAAlHC,EAAA,CAAA,EAAAC,GAAA,GAAAC,EAAA,cAAA,EAAA,GAAA,EAA4EF,EAAA,CAAA,EAAAG,EAAAD,EAAA,sBAAA,CAAA,6BAGjFL,EAAA,EAAA,MAAA,CAAA,EAA2C,EAAA,GAAA,EACtCC,EAAA,CAAA,EAAoBC,EAAA,EAAI,6BAAxBC,EAAA,CAAA,EAAAG,EAAAD,EAAA,aAAA,CAAA,0BAPTL,EAAA,EAAA,MAAA,CAAA,EACEO,EAAA,EAAAC,GAAA,EAAA,EAAA,MAAA,CAAA,EAAe,EAAAC,GAAA,EAAA,CAAA,EASjBP,EAAA,SATEC,EAAA,EAAAO,EAAA,EAAAC,EAAA,EAAA,CAAA,6BAFJJ,EAAA,EAAAK,GAAA,EAAA,EAAA,MAAA,CAAA,kCAAAF,EAAA,GAAAG,EAAAC,EAAA,EAAA,EAAAC,EAAAC,QAAA,GAAA,EAAA,GAAAH,CAAA,yBADFN,EAAA,EAAAU,GAAA,EAAA,CAAA,OAAAP,EAAA,EAAAC,EAAAO,SAAA,EAAA,EAAA,EAAA,2BAoBIC,EAAA,EAAA,EAAA,kCAAcC,EAAA,mBAAAC,CAAA,EAA2B,0BAAAC,EAAA,EAAAC,EAAAC,CAAA,CAAA,4BAGzCL,EAAA,EAAA,EAAA,mCAAcC,EAAA,mBAAAK,CAAA,EAAoC,0BAAAH,EAAA,EAAAC,EAAAC,CAAA,CAAA,4BAGlDL,EAAA,EAAA,EAAA,mCAAcC,EAAA,mBAAAM,CAAA,EAAiC,0BAAAJ,EAAA,EAAAC,EAAAC,CAAA,CAAA,4BAG/CL,EAAA,EAAA,EAAA,kCAAcC,EAAA,mBAAAO,CAAA,EAAgC,0BAAAL,EAAA,EAAAC,EAAAC,CAAA,CAAA,4BAG9CL,EAAA,EAAA,EAAA,mCAAcC,EAAA,mBAAAQ,CAAA,EAAgC,0BAAAN,EAAA,EAAAC,EAAAC,CAAA,CAAA,sCAS1CxB,EAAA,EAAA,kBAAA,EAAA,EACiB6B,EAAA,SAAA,UAAA,CAAA,IAAAC,EAAAC,EAAAC,CAAA,EAAAC,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAUpB,EAAAqB,aAAAN,EAAAO,EAAA,CAAqB,CAAA,CAAA,EAAC,cAAA,UAAA,CAAA,IAAAP,EAAAC,EAAAC,CAAA,EAAAC,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAgBpB,EAAAqB,aAAAN,EAAAO,EAAA,CAAqB,CAAA,CAAA,EAAEnC,EAAA,4BADvEkB,EAAA,OAAAU,CAAA,EAAa,YAAAA,EAAAQ,SAAA,sCAFlCtC,EAAA,EAAA,oBAAA,EAAA,EAAwD6B,EAAA,eAAA,UAAA,CAAAE,EAAAQ,CAAA,EAAA,IAAAf,EAAAU,EAAA,CAAA,EAAAD,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAgBpB,EAAAyB,yBAAAhB,CAAA,CAAgC,CAAA,CAAA,EACtGjB,EAAA,EAAAkC,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAC,CAAA,EAIFxC,EAAA,+BALmBkB,EAAA,QAAAT,CAAA,EAAc,QAAAa,EAAAmB,IAAA,6BADnCpC,EAAA,EAAAqC,GAAA,EAAA,EAAA,oBAAA,EAAA,2CAAAlC,EAAA,GAAAmC,EAAA/B,EAAA,EAAA,EAAAU,EAAAsB,GAAA,GAAA,EAAA,GAAAD,CAAA,sCAcM7C,EAAA,EAAA,kBAAA,EAAA,EACiB6B,EAAA,SAAA,UAAA,CAAAE,EAAAgB,CAAA,EAAA,IAAAvB,EAAAU,EAAA,CAAA,EAAAD,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAUpB,EAAAqB,aAAAZ,EAAAa,GAAwB,EAAI,CAAC,CAAA,CAAA,EAAC,cAAA,UAAA,CAAAN,EAAAgB,CAAA,EAAA,IAAAvB,EAAAU,EAAA,CAAA,EAAAD,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAgBpB,EAAAqB,aAAAZ,EAAAa,EAAA,CAAuB,CAAA,CAAA,EAAEnC,EAAA,4BADjFkB,EAAA,OAAA4B,CAAA,EAAa,YAAAA,EAAAV,SAAA,EAA6B,WAAA,EAAA,sCAF/DtC,EAAA,EAAA,oBAAA,EAAA,EAA+D6B,EAAA,eAAA,UAAA,CAAAE,EAAAkB,CAAA,EAAA,IAAAlC,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAgBpB,EAAAmC,mBAAAnC,EAAAoC,SAAAC,MAAA,CAAmC,CAAA,CAAA,EAChH7C,EAAA,EAAA8C,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAX,CAAA,EAIFxC,EAAA,+BALmBkB,EAAA,QAAAT,CAAA,EAAc,QAAAN,EAAA,eAAA,CAAA,6BADnCE,EAAA,EAAA+C,GAAA,EAAA,EAAA,oBAAA,EAAA,2CAAA5C,EAAA,GAAAmC,EAAA/B,EAAA,EAAA,EAAAU,EAAAsB,GAAA,GAAA,EAAA,GAAAD,CAAA,sCAcM7C,EAAA,EAAA,gBAAA,EAAA,EAC+C6B,EAAA,UAAA,UAAA,CAAA,IAAA0B,EAAAxB,EAAAyB,CAAA,EAAAvB,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAWpB,EAAA0C,gCAAAF,CAAA,CAAqC,CAAA,CAAA,EAAuBrD,EAAA,mCADvGkB,EAAA,SAAAmC,CAAA,EAAe,QAAAA,EAAAG,UAAA,EAA0B,WAAA3C,EAAA4C,aAAAC,oBAAAL,EAAAM,QAAA,CAAA,EAA6D,yBAAA,EAAA,EACvE,QAAAN,EAAAO,KAAA,sCAHlD9D,EAAA,EAAA,oBAAA,EAAA,EAAwE6B,EAAA,eAAA,UAAA,CAAAE,EAAAgC,CAAA,EAAA,IAAAhD,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAgBpB,EAAAmC,mBAAAnC,EAAAoC,SAAAa,qBAAA,CAAkD,CAAA,CAAA,EACxIzD,EAAA,EAAA0D,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAvB,CAAA,EAIFxC,EAAA,+BALmBkB,EAAA,QAAAT,CAAA,EAAc,QAAAN,EAAA,wBAAA,CAAA,6BADnCE,EAAA,EAAA2D,GAAA,EAAA,EAAA,oBAAA,EAAA,2CAAAxD,EAAA,GAAAmC,EAAA/B,EAAA,EAAA,EAAAU,EAAAsB,GAAA,GAAA,EAAA,GAAAD,CAAA,sCAcM7C,EAAA,EAAA,kBAAA,EAAA,EAA4D6B,EAAA,cAAA,UAAA,CAAAE,EAAAoC,CAAA,EAAA,IAAA3C,EAAAU,EAAA,CAAA,EAAAD,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAepB,EAAAqB,aAAAZ,EAAAa,EAAA,CAAuB,CAAA,CAAA,EAAEnC,EAAA,4BAAnFkB,EAAA,OAAAgD,CAAA,EAAa,YAAAA,EAAA9B,SAAA,sCAFlCtC,EAAA,EAAA,oBAAA,EAAA,EAAsE6B,EAAA,eAAA,UAAA,CAAAE,EAAAsC,CAAA,EAAA,IAAAtD,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAgBpB,EAAAmC,mBAAAnC,EAAAoC,SAAAmB,gBAAA,CAA6C,CAAA,CAAA,EACjI/D,EAAA,EAAAgE,GAAA,EAAA,EAAA,cAAA,KAAA,EAAA7B,CAAA,EAGFxC,EAAA,+BAJmBkB,EAAA,QAAAT,CAAA,EAAc,QAAAN,EAAA,sBAAA,CAAA,6BADnCE,EAAA,EAAAiE,GAAA,EAAA,EAAA,oBAAA,EAAA,2CAAA9D,EAAA,GAAAmC,EAAA/B,EAAA,EAAA,EAAAU,EAAAsB,GAAA,GAAA,EAAA,GAAAD,CAAA,sCAaM7C,EAAA,EAAA,kBAAA,EAAA,EAA4D6B,EAAA,cAAA,UAAA,CAAAE,EAAA0C,CAAA,EAAA,IAAAjD,EAAAU,EAAA,CAAA,EAAAD,UAAAlB,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAepB,EAAAqB,aAAAZ,EAAAa,EAAA,CAAuB,CAAA,CAAA,EAAEnC,EAAA,4BAAnFkB,EAAA,OAAAsD,CAAA,EAAa,YAAAA,EAAApC,SAAA,sCAFlCtC,EAAA,EAAA,oBAAA,EAAA,EAA4F6B,EAAA,eAAA,UAAA,CAAAE,EAAA4C,CAAA,EAAA,IAAA5D,EAAAmB,EAAA,CAAA,EAAA,OAAAC,EAAgBpB,EAAAmC,mBAAAnC,EAAAoC,SAAAyB,WAAA,CAAwC,CAAA,CAAA,EAClJrE,EAAA,EAAAsE,GAAA,EAAA,EAAA,cAAA,KAAA,EAAAnC,CAAA,EAGFxC,EAAA,qCAJmBkB,EAAA,QAAAT,CAAA,EAAc,QAAAN,EAAA,sBAAAiB,EAAA,EAAAwD,GAAA/D,EAAAgE,OAAA,KAAA,KAAAhE,EAAAgE,MAAAC,KAAA,CAAA,CAAA,6BADnCzE,EAAA,EAAA0E,GAAA,EAAA,EAAA,oBAAA,EAAA,2CAAAvE,EAAA,GAAAmC,EAAA/B,EAAA,EAAA,EAAAU,EAAAsB,GAAA,GAAA,EAAA,GAAAD,CAAA,4BA9DAtC,EAAA,EAAA2E,GAAA,EAAA,CAAA,EAA2B,EAAAC,GAAA,EAAA,CAAA,EAGS,EAAAC,GAAA,EAAA,CAAA,EAGL,EAAAC,GAAA,EAAA,CAAA,EAGC,EAAAC,GAAA,EAAA,CAAA,EAGA,EAAAC,GAAA,EAAA,EAAA,cAAA,GAAA,EAAA7C,CAAA,EAMoB,EAAA8C,GAAA,EAAA,EAAA,cAAA,GAAA,EAAA9C,CAAA,EAWL,EAAA+C,GAAA,EAAA,EAAA,cAAA,GAAA,EAAA/C,CAAA,EAWS,GAAAgD,GAAA,EAAA,EAAA,cAAA,GAAA,EAAAhD,CAAA,EAWH,GAAAiD,GAAA,EAAA,EAAA,cAAA,GAAA,EAAAjD,CAAA,kCApDvDhC,EAAA,GAAAkF,EAAApE,EAAAqE,cAAA9E,EAAA+E,WAAA1C,OAAA,EAAAwC,IAAA7E,EAAA+E,WAAAC,gBAAA,EAAAH,IAAA7E,EAAA+E,WAAAE,WAAA,EAAAJ,IAAA7E,EAAA+E,WAAAG,YAAA,EAAAL,IAAA7E,EAAA+E,WAAAlB,YAAA,EAAA,EAAA,6BApBJsB,GAAA,CAAA,EACE3F,EAAA,EAAA4F,GAAA,EAAA,CAAA,eAkBAC,GAAA,EAAAC,GAAA,GAAA,EAAA,KAAA,KAAAC,EAAA,EA0EAC,EAAA,EAAA,cAAA,CAAA,yBA5FApG,EAAA,EAAAO,EAAA,GAAA8F,EAAA1F,EAAA,EAAA,EAAAC,EAAA0F,UAAA,GAAA,EAAA,GAAAD,CAAA,EAkBArG,EAAA,CAAA,EAAAuG,GAAA3F,EAAA4F,OAAA,EA0EaxG,EAAA,CAAA,EAAAiB,EAAA,UAAAL,EAAA6F,oBAAA7F,EAAA8F,cAAA9F,EAAA+F,aAAA,GD3Df,IAAK3D,EAAL,SAAKA,EAAQ,CACXA,OAAAA,EAAAA,EAAA,OAAA,CAAA,EAAA,SACAA,EAAAA,EAAA,sBAAA,CAAA,EAAA,wBACAA,EAAAA,EAAA,iBAAA,CAAA,EAAA,mBACAA,EAAAA,EAAA,YAAA,CAAA,EAAA,cAJGA,CAKL,EALKA,GAAQ,CAAA,CAAA,EAiBA4D,IAAkB,IAAA,CAAzB,IAAOA,EAAP,MAAOA,CAAkB,CAsC7BC,aAAA,CApCiB,KAAAC,WAAaC,EAAOC,EAAU,EAC9B,KAAAC,qBAAuBF,EAAOG,EAAsB,EACpD,KAAAC,gBAAkBJ,EAAOK,EAAe,EACxC,KAAAC,sBAAwBN,EAAOO,EAAqB,EACrD,KAAAC,eAAiBR,EAAOS,EAAc,EACrC,KAAAC,eAAiBV,EAAOW,EAAc,EACtC,KAAAC,cAAgBZ,EAAOa,EAAa,EACpC,KAAAC,OAASd,EAAOe,EAAM,EACtB,KAAAC,aAAehB,EAAOiB,EAAK,EAC5B,KAAAxE,aAAeuD,EAAOkB,EAAY,EACjC,KAAAC,WAAanB,EAAOoB,EAAiB,EACrC,KAAAC,MAAQrB,EAAOsB,EAAiB,EAChC,KAAAC,iBAAmBvB,EAAOwB,EAAgB,EAC1C,KAAAC,kBAAoBzB,EAAO0B,EAAiB,EAC5C,KAAAC,OAAS3B,EAAO4B,EAAa,EAC7B,KAAAC,cAAgB7B,EAAO8B,EAAa,EAErD,KAAAvC,WAAoC,KAAKmB,eAAeqB,aAAY,EAAGC,KAAKC,EAAK,CAAC,EAAGC,EAAmB,KAAKnC,UAAU,CAAC,EACxH,KAAAL,mBAAqB,GACrB,KAAA5F,SAAgCqI,EAAG,EAAK,EAExC,KAAA1C,QAAkC,CAAA,EAElC,KAAA2C,gBAAkB,IAAIC,EACtB,KAAAC,mCAAqC,IAAID,EAEzC,KAAA1C,YAAsB,EACtB,KAAAC,cAAwB,EAKhB,KAAA2C,mBAA0C,IAAIC,EACnC,KAAA5D,WAAaA,EACb,KAAA3C,SAAWA,EAG5B,KAAKwG,cAAa,EAElB,KAAKH,mCAAmCN,KAAKE,EAAmB,KAAKnC,UAAU,EAAG2C,EAAa,GAAI,EACjGC,EAAI,IAAK,CACP,KAAKF,cAAa,CACpB,CAAC,CAAC,EACDG,UAAS,EAEZ,KAAKR,gBAAgBJ,KAAKE,EAAmB,KAAKnC,UAAU,EAAG8C,EAAa,GAAM,EAC9EF,EAAI,IAAK,CACP,KAAKF,cAAa,CACpB,CAAC,CAAC,EACDG,UAAS,EAGd,KAAKzB,WAAW2B,UAAUd,KAAKE,EAAmB,KAAKnC,UAAU,CAAC,EAAE6C,UAAUG,GAAM,CAE9EA,EAAIC,QAAUC,EAAOC,gBACvB,KAAKZ,mCAAmCa,KAAI,EACnCJ,EAAIC,QAAUC,EAAOG,YAC9B,KAAKhB,gBAAgBe,KAAI,EAChBJ,EAAIC,QAAUC,EAAOI,cAC9B,KAAKjB,gBAAgBe,KAAI,EAChBJ,EAAIC,QAAUC,EAAOK,aAE9B,KAAKf,mBAAmBY,KAAI,EAC5B,KAAKf,gBAAgBe,KAAI,EAE7B,CAAC,EAED,KAAK1B,kBAAkB8B,gBAAgBC,GAAiBC,OAAO,EAAEb,UAAUc,GAAa,CAClFA,GACF,KAAK/B,OAAOgC,MAAMC,EAAU,8BAA8B,CAAC,EAE7D,KAAKvC,MAAMwC,aAAY,CACzB,CAAC,EAGD,KAAK/J,SAAW,KAAK0G,eAAesD,aAAa9B,KAC/CE,EAAmB,KAAKnC,UAAU,EAClCgE,EAAIC,GAASA,GAAQ,KAAKxD,eAAeyD,aAAaD,CAAI,GAAM,EAAK,EACrEE,EAAY,CAACC,WAAY,EAAGC,SAAU,EAAI,CAAC,CAAC,CAEhD,CAEAC,UAAQ,CACN,KAAKrD,aAAasD,SAAS,QAAQ,CACrC,CAGA7B,eAAa,CACX,KAAK/C,mBAAqB,GAC1B,KAAKE,cAAgB,EACrB,KAAKD,YAAc,EACnB,KAAK0B,MAAMwC,aAAY,EACvB,KAAKtC,iBAAiBgD,oBAAmB,EAAG3B,UAAUnD,GAAU,CAC9D,KAAKA,QAAUA,EACf,KAAKE,YAAcF,EAAQzF,OAC3B,KAAKyF,QAAQ+E,QAAQC,GAAI,CACvB,OAAQA,EAAE9F,WAAU,CAClB,KAAKC,EAAW1C,OACduI,EAAE7I,IAAM,KAAKgF,cAAc8D,UAAU,EAAG,EAAG,EAAE,EACxC1C,KAAK+B,EAAIY,GAAKA,EAAEC,MAAM,EAAGjC,EAAI,IAAM,KAAKkC,UAAS,CAAE,EAAG3C,EAAmB,KAAKnC,UAAU,EAAGmE,EAAY,CAACC,WAAY,EAAGC,SAAU,EAAI,CAAC,CAAC,EAC5I,MACF,KAAKxF,EAAWE,WACd2F,EAAE7I,IAAM,KAAKgF,cAAckE,iBAAiB,EAAG,EAAE,EAC5C9C,KAAK+B,EAAIY,GAAKA,EAAEC,MAAM,EAAGjC,EAAI,IAAM,KAAKkC,UAAS,CAAE,EAAG3C,EAAmB,KAAKnC,UAAU,EAAGmE,EAAY,CAACC,WAAY,EAAGC,SAAU,EAAI,CAAC,CAAC,EAC5I,MACF,KAAKxF,EAAWC,gBACd4F,EAAE7I,IAAM,KAAKgF,cAAcmE,yBAAwB,EAAG/C,KAAKW,EAAI,IAAM,KAAKkC,UAAS,CAAE,EAAG3C,EAAmB,KAAKnC,UAAU,EAAGmE,EAAY,CAACC,WAAY,EAAGC,SAAU,EAAI,CAAC,CAAC,EACzK,MACF,KAAKxF,EAAWG,YACd0F,EAAE7I,IAAM,KAAKsE,qBAAqB8E,aAAaP,EAAEQ,kBAAmB,EAAEjD,KACpEkD,EAAUC,GACD,KAAKvE,cAAcwE,eAAe,EAAG,GAAID,CAAM,CACvD,CAAC,EACCnD,KAAK+B,EAAIY,GAAKA,EAAEC,MAAM,EAAEjC,EAAI,IAAM,KAAKkC,UAAS,CAAE,EAAG3C,EAAmB,KAAKnC,UAAU,EAAGmE,EAAY,CAACC,WAAY,EAAGC,SAAU,EAAI,CAAC,CAAC,EAC3I,MACF,KAAKxF,EAAWlB,YACd+G,EAAE7I,IAAM,KAAKwE,gBAAgBiF,aAAY,EAAGrD,KACxC+B,EAAIuB,IACF,KAAKzH,MAAQyH,EAAOC,KAAKC,MAAMD,KAAKE,OAAM,EAAKH,EAAOtL,MAAM,CAAC,EACtD,KAAK6D,MACb,EACDqH,EAAUrH,GAAS,KAAKyC,sBAAsBoF,UAAU,EAAG7H,EAAM1C,GAAI,EAAG,EAAE,CAAC,EAC3E4I,EAAI4B,GAAKA,EAAEf,MAAM,EACjBjC,EAAI,IAAM,KAAKkC,UAAS,CAAE,EAC1B3C,EAAmB,KAAKnC,UAAU,EAClCmE,EAAY,CAACC,WAAY,EAAGC,SAAU,EAAI,CAAC,CAAC,EAEhD,KACJ,CACF,CAAC,EACD,KAAK1E,mBAAqB,GAC1B,KAAK2B,MAAMwC,aAAY,CACzB,CAAC,CACH,CAEAgB,WAAS,CACP,KAAKjF,gBACL,KAAKyB,MAAMwC,aAAY,CACzB,CAEA3I,aAAa0K,EAAkBC,EAAS,GAAK,CAC3C,IAAMC,EAAQ,KAAKrG,QAAQsG,UAAUtB,GAAKA,EAAEtJ,KAAOyK,CAAQ,EACvDE,EAAQ,IACRD,GAEF,KAAKzD,gBAAgBe,KAAI,EACzB,KAAK9B,MAAMwC,aAAY,IAEvB,KAAKpE,QAAQqG,CAAK,EAAIE,EAAA,GAAI,KAAKvG,QAAQqG,CAAK,GAC5C,KAAKzE,MAAMwC,aAAY,GAE3B,CAEMtH,gCAAgC0J,EAAuB,QAAAC,EAAA,sBAC3D,MAAM,KAAKpF,OAAOqF,SAAS,CAAC,UAAWF,EAAK7K,UAAW,SAAU6K,EAAKtJ,QAAQ,CAAC,CACjF,GAEMrB,yBAAyB8K,EAAuB,QAAAF,EAAA,sBACpD,MAAM,KAAKpF,OAAOuF,cAAc,cAAgBD,EAAOnB,kBAAkB,CAC3E,GAEAjJ,mBAAmB4J,EAAkB,CACnC,GAAIA,IAAa3J,EAASa,sBAAuB,CAC/C,IAAMwJ,EAAc,CAAA,EACpBA,EAAO,KAAU,EACjBA,EAAO,MAAW1C,EAAU,kCAAkC,EAC9D,IAAMuB,EAAS,KAAKjF,qBAAqBqG,qBAAoB,EACzDpB,EAAOqB,cACTrB,EAAOqB,YAAYC,UAAYC,EAAUC,iBACzCxB,EAAOqB,YAAYI,YAAc,IAEnC,KAAK1G,qBAAqB2G,sBAAsB,CAAC,YAAY,EAAG1B,EAAQmB,CAAM,EAAE1D,UAAS,CAC3F,SAAWgD,IAAa3J,EAASC,OAAQ,CACvC,IAAMoK,EAAc,CAAA,EACpBA,EAAO,KAAU,EACjBA,EAAO,MAAW1C,EAAU,yBAAyB,EAErD,IAAMuB,EAAS,KAAKjF,qBAAqBqG,qBAAoB,EAC7DpB,EAAO2B,WAAWC,KAAK,CAACC,MAAOC,EAAYC,aAAcC,WAAYC,EAAiBC,YAAaC,MAAO,GAAG,CAAC,EAC9GnC,EAAO2B,WAAWC,KAAK,CAACC,MAAOC,EAAYC,aAAcC,WAAYC,EAAiBG,SAAUD,MAAO,KAAK,CAAC,EACzGnC,EAAOqB,cACTrB,EAAOqB,YAAYC,UAAYC,EAAUC,iBACzCxB,EAAOqB,YAAYI,YAAc,IAEnC,KAAK1G,qBAAqB2G,sBAAsB,CAAC,YAAY,EAAG1B,EAAQmB,CAAM,EAAE1D,UAAS,CAC3F,SAAWgD,IAAa3J,EAASmB,iBAAkB,CACjD,IAAMkJ,EAAc,CAAA,EACpBA,EAAO,KAAU,EACjBA,EAAO,MAAW1C,EAAU,gCAAgC,EAC5D,IAAMuB,EAAS,KAAKjF,qBAAqBqG,qBAAoB,EACzDpB,EAAOqB,cACTrB,EAAOqB,YAAYC,UAAYC,EAAUc,QACzCrC,EAAOqB,YAAYI,YAAc,IAEnC,KAAK1G,qBAAqB2G,sBAAsB,CAAC,YAAY,EAAG1B,EAAQmB,CAAM,EAAE1D,UAAS,CAC3F,SAAWgD,IAAa3J,EAASyB,YAAa,CAC5C,IAAM4I,EAAc,CAAA,EACpBA,EAAO,KAAU,EACjBA,EAAO,MAAW1C,EAAU,gCAAiC,CAAC/F,MAAO,KAAKA,OAAOC,KAAK,CAAC,EACvF,IAAMqH,EAAS,KAAKjF,qBAAqBqG,qBAAoB,EAC7DpB,EAAO2B,WAAWC,KAAK,CAACC,MAAOC,EAAYQ,OAAQH,MAAO,KAAKzJ,OAAO1C,GAAK,GAAIgM,WAAYC,EAAiBM,YAAY,CAAC,EACzH,KAAKxH,qBAAqB2G,sBAAsB,CAAC,YAAY,EAAG1B,EAAQmB,CAAM,EAAE1D,UAAS,CAC3F,CACF,yCA7MW/C,EAAkB,sBAAlBA,EAAkB8H,UAAA,CAAA,CAAA,eAAA,CAAA,EAAAC,WAAA,GAAAC,SAAA,CAAAC,EAAA,EAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,CAAA,CAAA,cAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,CAAA,eAAA,EAAA,EAAA,CAAA,EAAA,YAAA,eAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,SAAA,wBAAA,EAAA,CAAA,aAAA,mBAAA,WAAA,WAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,CAAA,EAAA,mBAAA,yBAAA,EAAA,CAAA,EAAA,QAAA,OAAA,EAAA,CAAA,EAAA,eAAA,QAAA,OAAA,EAAA,CAAA,EAAA,SAAA,cAAA,OAAA,WAAA,EAAA,CAAA,EAAA,SAAA,cAAA,OAAA,YAAA,UAAA,EAAA,CAAA,EAAA,UAAA,SAAA,QAAA,WAAA,yBAAA,OAAA,EAAA,CAAA,EAAA,cAAA,OAAA,WAAA,CAAA,EAAAC,SAAA,SAAAC,EAAA1O,EAAA,CAAA0O,EAAA,ICrD/B9I,EAAA,EAAA,4BAAA,EAEAhG,EAAA,EAAA+O,GAAA,EAAA,EAAA,eAAA,CAAA,SAAiCnP,EAAA,EAAAiB,EAAA,gBAAA,WAAA,kBDgDrBmO,GAA8BC,GAAYC,GAAuBC,GACzEC,GAAmBC,GAAWC,GAA6BC,GAAkBC,EAAgB,EAAAC,gBAAA,CAAA,CAAA,EAE3F,IAAOjJ,EAAPkJ,SAAOlJ,CAAkB,GAAA,EEjDxB,IAAMmJ,GAAiB,CAC5B,CACEC,KAAM,GACNC,UAAWC,GACZ", "names": ["RecommendationService", "constructor", "httpClient", "utilityService", "baseUrl", "environment", "apiUrl", "getQuickReads", "libraryId", "pageNum", "itemsPerPage", "params", "HttpParams", "addPaginationIfExists", "get", "observe", "pipe", "map", "response", "createPaginatedResult", "getQuickCatchupReads", "getHighlyRated", "getRediscover", "getMoreIn", "genreId", "\u0275\u0275inject", "HttpClient", "UtilityService", "factory", "\u0275fac", "providedIn", "_RecommendationService", "StreamType", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "t_r1", "\u0275\u0275textInterpolate", "\u0275\u0275template", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Conditional_0_Conditional_1_Template", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Conditional_0_Conditional_2_Template", "\u0275\u0275conditional", "ctx", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Conditional_0_Template", "tmp_5_0", "\u0275\u0275pipeBind1", "ctx_r1", "isAdmin$", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Template", "length", "\u0275\u0275elementContainer", "\u0275\u0275property", "onDeck_r4", "\u0275\u0275pureFunction1", "_c0", "stream_r3", "recentlyUpdated_r5", "newlyUpdated_r6", "smartFilter_r7", "moreInGenre_r8", "\u0275\u0275listener", "item_r11", "\u0275\u0275restoreView", "_r10", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "reloadStream", "id", "libraryId", "_r9", "handleFilterSectionClick", "DashboardComponent_ng_container_1_For_4_ng_template_5_Conditional_0_ng_template_1_Template", "\u0275\u0275templateRefExtractor", "name", "DashboardComponent_ng_container_1_For_4_ng_template_5_Conditional_0_Template", "tmp_19_0", "api", "_r13", "item_r14", "_r12", "handleSectionClick", "StreamId", "OnDeck", "DashboardComponent_ng_container_1_For_4_ng_template_7_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_1_For_4_ng_template_7_Conditional_0_Template", "item_r17", "_r16", "handleRecentlyAddedChapterClick", "seriesName", "imageService", "getSeriesCoverImage", "seriesId", "count", "_r15", "RecentlyUpdatedSeries", "DashboardComponent_ng_container_1_For_4_ng_template_9_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_1_For_4_ng_template_9_Conditional_0_Template", "_r19", "item_r20", "_r18", "NewlyAddedSeries", "DashboardComponent_ng_container_1_For_4_ng_template_11_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_1_For_4_ng_template_11_Conditional_0_Template", "_r22", "item_r23", "_r21", "MoreInGenre", "DashboardComponent_ng_container_1_For_4_ng_template_13_Conditional_0_ng_template_1_Template", "_c1", "genre", "title", "DashboardComponent_ng_container_1_For_4_ng_template_13_Conditional_0_Template", "DashboardComponent_ng_container_1_For_4_Case_0_Template", "DashboardComponent_ng_container_1_For_4_Case_1_Template", "DashboardComponent_ng_container_1_For_4_Case_2_Template", "DashboardComponent_ng_container_1_For_4_Case_3_Template", "DashboardComponent_ng_container_1_For_4_Case_4_Template", "DashboardComponent_ng_container_1_For_4_ng_template_5_Template", "DashboardComponent_ng_container_1_For_4_ng_template_7_Template", "DashboardComponent_ng_container_1_For_4_ng_template_9_Template", "DashboardComponent_ng_container_1_For_4_ng_template_11_Template", "DashboardComponent_ng_container_1_For_4_ng_template_13_Template", "tmp_17_0", "streamType", "StreamType", "RecentlyUpdated", "NewlyAdded", "SmartFilter", "\u0275\u0275elementContainerStart", "DashboardComponent_ng_container_1_Conditional_1_Template", "\u0275\u0275repeaterCreate", "DashboardComponent_ng_container_1_For_4_Template", "_forTrack0", "\u0275\u0275element", "tmp_2_0", "libraries$", "\u0275\u0275repeater", "streams", "isLoadingDashboard", "streamCount", "streamsLoaded", "DashboardComponent", "constructor", "destroyRef", "inject", "DestroyRef", "filterUtilityService", "FilterUtilitiesService", "metadataService", "MetadataService", "recommendationService", "RecommendationService", "accountService", "AccountService", "libraryService", "LibraryService", "seriesService", "SeriesService", "router", "Router", "titleService", "Title", "ImageService", "messageHub", "MessageHubService", "cdRef", "ChangeDetectorRef", "dashboardService", "DashboardService", "scrobblingService", "ScrobblingService", "toastr", "ToastrService", "serverService", "ServerService", "getLibraries", "pipe", "take", "takeUntilDestroyed", "of", "refreshStreams$", "Subject", "refreshStreamsFromDashboardUpdate$", "loadRecentlyAdded$", "ReplaySubject", "loadDashboard", "debounceTime", "tap", "subscribe", "throttleTime", "messages$", "res", "event", "EVENTS", "DashboardUpdate", "next", "SeriesAdded", "SeriesRemoved", "ScanSeries", "hasTokenExpired", "ScrobbleProvider", "AniList", "hasExpired", "error", "translate", "markForCheck", "currentUser$", "map", "user", "hasAdminRole", "shareReplay", "bufferSize", "refCount", "ngOnInit", "setTitle", "getDashboardStreams", "forEach", "s", "getOnDeck", "d", "result", "increment", "getRecentlyAdded", "getRecentlyUpdatedSeries", "decodeFilter", "smartFilterEncoded", "switchMap", "filter", "getAllSeriesV2", "getAllGenres", "genres", "Math", "floor", "random", "getMoreIn", "p", "streamId", "onDeck", "index", "findIndex", "__spreadValues", "item", "__async", "navigate", "stream", "navigateByUrl", "params", "createSeriesV2Filter", "sortOptions", "sortField", "SortField", "LastChapterAdded", "isAscending", "applyFilterWithParams", "statements", "push", "field", "FilterField", "ReadProgress", "comparison", "FilterComparison", "GreaterThan", "value", "LessThan", "Created", "Genres", "MustContains", "selectors", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "DashboardComponent_ng_container_1_Template", "SideNavCompanionBarComponent", "RouterLink", "CarouselReelComponent", "SeriesCardComponent", "CardItemComponent", "AsyncPipe", "TranslocoDirective", "NgTemplateOutlet", "LoadingComponent", "changeDetection", "_DashboardComponent", "routes", "path", "component", "DashboardComponent"] }