ngx-timeago
Version:
Live updating timestamps in Angular 6+.
1 lines • 28.4 kB
Source Map (JSON)
{"version":3,"file":"ngx-timeago.mjs","sources":["../../../lib/src/util.ts","../../../lib/src/timeago.intl.ts","../../../lib/src/timeago.formatter.ts","../../../lib/src/timeago.clock.ts","../../../lib/src/timeago.directive.ts","../../../lib/src/timeago.pipe.ts","../../../lib/src/timeago.module.ts","../../../lib/src/ngx-timeago.ts"],"sourcesContent":["export function isDefined(value: any): boolean {\n return typeof value !== 'undefined' && value !== null;\n}\n\nexport function coerceBooleanProperty(value: any): boolean {\n return value != null && `${value}` !== 'false';\n}\n\nexport function dateParser(date: any): Date {\n const parsed = new Date(date);\n if (!Number.isNaN(parsed.valueOf())) {\n return parsed;\n }\n\n const parts: string[] = String(date).match(/\\d+/g);\n if (parts === null || parts.length <= 2) {\n return parsed;\n } else {\n const [firstP, secondP, ...restPs] = parts.map(x => parseInt(x, 10));\n return new Date(Date.UTC(firstP, secondP - 1, ...restPs));\n }\n}\n\nexport const MINUTE = 60;\nexport const HOUR = MINUTE * 60;\nexport const DAY = HOUR * 24;\nexport const WEEK = DAY * 7;\nexport const MONTH = DAY * 30;\nexport const YEAR = DAY * 365;\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { StringOrFn, NumberArray } from './timeago.formatter';\n\nexport interface IL10nsStrings {\n prefixAgo?: StringOrFn;\n prefixFromNow?: StringOrFn;\n suffixAgo?: StringOrFn;\n suffixFromNow?: StringOrFn;\n second?: StringOrFn;\n seconds?: StringOrFn;\n minute?: StringOrFn;\n minutes?: StringOrFn;\n hour?: StringOrFn;\n hours?: StringOrFn;\n day?: StringOrFn;\n days?: StringOrFn;\n week?: StringOrFn;\n weeks?: StringOrFn;\n month?: StringOrFn;\n months?: StringOrFn;\n year?: StringOrFn;\n years?: StringOrFn;\n wordSeparator?: string;\n numbers?: NumberArray;\n};\n\n/**\n * To modify the text displayed, create a new instance of TimeagoIntl and\n * include it in a custom provider\n */\n@Injectable()\nexport class TimeagoIntl {\n\n strings: IL10nsStrings;\n\n /**\n * Stream that emits whenever the l10n strings are changed\n * Use this to notify directives if the l10n strings have changed after initialization.\n */\n readonly changes: Subject<void> = new Subject<void>();\n}\n","import { Injectable } from '@angular/core';\nimport { TimeagoIntl } from './timeago.intl';\nimport { MINUTE, HOUR, DAY, WEEK, MONTH, YEAR } from './util';\n\nexport type Unit = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';\n\nexport type Suffix = 'ago' | 'from now';\n\nexport type StringOrFn = ((value: number, millisDelta: number) => string) | string;\n\nexport type NumberArray = [ string, string, string, string, string, string, string, string, string, string ];\n\nconst defaultFormattter = function(then: number): {value: number, unit: Unit, suffix: Suffix} {\n const now = Date.now();\n const seconds = Math.round(Math.abs(now - then) / 1000);\n const suffix: Suffix = then < now ? 'ago' : 'from now';\n\n const [value, unit]: [number, Unit] =\n seconds < MINUTE\n ? [Math.round(seconds), 'second']\n : seconds < HOUR\n ? [Math.round(seconds / MINUTE), 'minute']\n : seconds < DAY\n ? [Math.round(seconds / HOUR), 'hour']\n : seconds < WEEK\n ? [Math.round(seconds / DAY), 'day']\n : seconds < MONTH\n ? [Math.round(seconds / WEEK), 'week']\n : seconds < YEAR\n ? [Math.round(seconds / MONTH), 'month']\n : [Math.round(seconds / YEAR), 'year'];\n\n return {value, unit, suffix};\n}\n\nexport abstract class TimeagoFormatter {\n abstract format(then: number): string\n}\n\n@Injectable()\nexport class TimeagoDefaultFormatter extends TimeagoFormatter {\n format(then: number): string {\n const {suffix, value, unit} = defaultFormattter(then);\n return this.parse(value, unit, suffix);\n }\n\n private parse(value: number, unit: Unit, suffix: Suffix): string {\n if (value !== 1) {\n unit += 's';\n }\n return value + ' ' + unit + ' ' + suffix;\n }\n}\n\n@Injectable()\nexport class TimeagoCustomFormatter extends TimeagoFormatter {\n constructor(private intl: TimeagoIntl) {\n super();\n }\n\n format(then: number): string {\n const {suffix, value, unit} = defaultFormattter(then);\n return this.parse(value, unit, suffix, Date.now(), then);\n }\n\n private parse(value: number, unit: Unit, suffix: Suffix, now: number, then: number) {\n /** convert weeks to days if strings don't handle weeks */\n if (unit === 'week' && !this.intl.strings.week && !this.intl.strings.weeks) {\n const days = Math.round(Math.abs(now - then) / (1000 * 60 * 60 * 24));\n value = days;\n unit = 'day';\n }\n\n /** create a normalize function for given value */\n const normalize = this.normalizeFn(value, now - then, this.intl.strings.numbers);\n\n /** The eventual return value stored in an array so that the wordSeparator can be used */\n const dateString: string[] = [];\n\n /** handle prefixes */\n if (suffix === 'ago' && this.intl.strings.prefixAgo) {\n dateString.push(normalize(this.intl.strings.prefixAgo));\n }\n if (suffix === 'from now' && this.intl.strings.prefixFromNow) {\n dateString.push(normalize(this.intl.strings.prefixFromNow));\n }\n\n /** Handle Main number and unit */\n const isPlural = value > 1;\n if (isPlural) {\n const stringFn: StringOrFn = this.intl.strings[unit + 's'] || this.intl.strings[unit] || '%d ' + unit;\n dateString.push(normalize(stringFn));\n } else {\n const stringFn: StringOrFn = this.intl.strings[unit] || this.intl.strings[unit + 's'] || '%d ' + unit;\n dateString.push(normalize(stringFn));\n }\n\n /** Handle Suffixes */\n if (suffix === 'ago' && this.intl.strings.suffixAgo) {\n dateString.push(normalize(this.intl.strings.suffixAgo));\n }\n if (suffix === 'from now' && this.intl.strings.suffixFromNow) {\n dateString.push(normalize(this.intl.strings.suffixFromNow));\n }\n\n /** join the array into a string and return it */\n const wordSeparator = typeof this.intl.strings.wordSeparator === 'string' ? this.intl.strings.wordSeparator : ' ';\n return dateString.join(wordSeparator);\n }\n\n /**\n * If the numbers array is present, format numbers with it,\n * otherwise just cast the number to a string and return it\n */\n private normalizeNumber(numbers: NumberArray, value: number) {\n return numbers && numbers.length === 10\n ? String(value).split('')\n .map((digit: string) => digit.match(/^[0-9]$/) ? numbers[parseInt(digit, 10)] : digit)\n .join('')\n : String(value);\n }\n\n /**\n * Take a string or a function that takes number of days and returns a string\n * and provide a uniform API to create string parts\n */\n private normalizeFn(value: number, millisDelta: number, numbers?: NumberArray) {\n return (stringOrFn: StringOrFn) =>\n typeof stringOrFn === 'function'\n ? stringOrFn(value, millisDelta).replace(/%d/g, this.normalizeNumber(numbers, value))\n : stringOrFn.replace(/%d/g, this.normalizeNumber(numbers, value));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of, empty, timer } from 'rxjs';\nimport { expand, skip } from 'rxjs/operators';\nimport { MINUTE, HOUR, DAY } from './util';\n\nexport abstract class TimeagoClock {\n abstract tick(then: number): Observable<any>;\n}\n\n@Injectable()\nexport class TimeagoDefaultClock extends TimeagoClock {\n tick(then: number): Observable<any> {\n return of(0)\n .pipe(\n expand(() => {\n const now = Date.now();\n const seconds = Math.round(Math.abs(now - then) / 1000);\n\n const period =\n seconds < MINUTE\n ? 1000\n : seconds < HOUR\n ? 1000 * MINUTE\n : seconds < DAY\n ? 1000 * HOUR\n : 0;\n\n return period ? timer(period) : empty();\n }),\n skip(1)\n );\n }\n}\n","import { Directive, Input, ElementRef, Optional, OnChanges, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { Subscription, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { TimeagoClock } from './timeago.clock';\nimport { TimeagoFormatter } from './timeago.formatter';\nimport { TimeagoIntl } from './timeago.intl';\nimport { isDefined, coerceBooleanProperty, dateParser } from './util';\n\n@Directive({\n selector: '[timeago]',\n exportAs: 'timeago',\n})\nexport class TimeagoDirective implements OnChanges, OnDestroy {\n private intlSubscription: Subscription;\n private clockSubscription: Subscription;\n\n /**\n * Emits on:\n * - Input change\n * - Intl change\n * - Clock tick\n */\n stateChanges = new Subject<void>();\n\n /** The Date to display. An actual Date object or something that can be fed to new Date. */\n @Input()\n get date(): any {\n return this._date;\n }\n set date(date: any) {\n this._date = dateParser(date).valueOf();\n if (this._date) {\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.clockSubscription = this.clock.tick(this.date)\n .pipe(filter(() => this.live, this))\n .subscribe(() => this.stateChanges.next());\n } else {\n throw new SyntaxError(`Wrong parameter in TimeagoDirective. Expected a valid date, received: ${date}`);\n }\n }\n private _date: number;\n\n /** If the directive should update itself over time */\n @Input()\n get live(): boolean {\n return this._live;\n }\n set live(live: boolean) {\n this._live = coerceBooleanProperty(live);\n }\n private _live = true;\n\n constructor(@Optional() intl: TimeagoIntl,\n private cd: ChangeDetectorRef,\n formatter: TimeagoFormatter,\n element: ElementRef,\n private clock: TimeagoClock) {\n if (intl) {\n this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next());\n }\n this.stateChanges.subscribe(() => {\n this.setContent(element.nativeElement, formatter.format(this.date));\n this.cd.markForCheck();\n });\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n setContent(node: any, content: string) {\n if (isDefined(node.textContent)) {\n node.textContent = content;\n } else {\n node.data = content;\n }\n }\n\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n this.intlSubscription = undefined;\n }\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.stateChanges.complete();\n }\n}\n","import { Injectable, OnDestroy, Pipe, PipeTransform, Optional, ChangeDetectorRef } from '@angular/core';\nimport { Subscription, Subject } from 'rxjs';\nimport { TimeagoClock } from './timeago.clock';\nimport { TimeagoFormatter } from './timeago.formatter';\nimport { TimeagoIntl } from './timeago.intl';\nimport { isDefined, coerceBooleanProperty, dateParser } from './util';\nimport { filter } from 'rxjs/operators';\n\n@Injectable()\n@Pipe({\n name: 'timeago',\n pure: false, // required to update the value when stateChanges emits\n})\nexport class TimeagoPipe implements PipeTransform, OnDestroy {\n private intlSubscription: Subscription;\n private clockSubscription: Subscription;\n\n private date: number;\n private value: string;\n private live = true;\n\n /**\n * Emits on:\n * - Input change\n * - Intl change\n * - Clock tick\n */\n stateChanges = new Subject<void>();\n\n constructor(@Optional() intl: TimeagoIntl,\n cd: ChangeDetectorRef,\n formatter: TimeagoFormatter,\n private clock: TimeagoClock) {\n if (intl) {\n this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next());\n }\n this.stateChanges.subscribe(() => {\n this.value = formatter.format(this.date);\n cd.markForCheck();\n });\n }\n\n transform(date: any, ...args: any[]) {\n const _date = dateParser(date).valueOf();\n let _live: boolean;\n\n _live = isDefined(args[0])\n ? coerceBooleanProperty(args[0])\n : this.live;\n\n if (this.date === _date && this.live === _live) {\n return this.value;\n }\n\n this.date = _date;\n this.live = _live;\n\n if (this.date) {\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.clockSubscription = this.clock.tick(this.date)\n .pipe(filter(() => this.live, this))\n .subscribe(() => this.stateChanges.next());\n this.stateChanges.next();\n } else {\n throw new SyntaxError(`Wrong parameter in TimeagoPipe. Expected a valid date, received: ${date}`);\n }\n\n return this.value;\n }\n\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n this.intlSubscription = undefined;\n }\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.stateChanges.complete();\n }\n}\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { TimeagoDirective } from './timeago.directive';\nimport { TimeagoPipe } from './timeago.pipe';\nimport { TimeagoClock, TimeagoDefaultClock } from './timeago.clock';\nimport { TimeagoFormatter, TimeagoDefaultFormatter } from './timeago.formatter';\n\nexport interface TimeagoModuleConfig {\n clock?: Provider;\n intl?: Provider;\n formatter?: Provider;\n}\n\n@NgModule({\n declarations: [\n TimeagoDirective,\n TimeagoPipe,\n ],\n exports: [\n TimeagoDirective,\n TimeagoPipe,\n ],\n})\nexport class TimeagoModule {\n /**\n * Use this method in your root module to provide the TimeagoModule\n */\n static forRoot(config: TimeagoModuleConfig = {}): ModuleWithProviders<TimeagoModule> {\n return {\n ngModule: TimeagoModule,\n providers: [\n config.clock || {provide: TimeagoClock, useClass: TimeagoDefaultClock},\n config.intl || [],\n config.formatter || {provide: TimeagoFormatter, useClass: TimeagoDefaultFormatter},\n ],\n };\n }\n\n /**\n * Use this method in your other (non root) modules to import the directive/pipe\n */\n static forChild(config: TimeagoModuleConfig = {}): ModuleWithProviders<TimeagoModule> {\n return {\n ngModule: TimeagoModule,\n providers: [\n config.clock || {provide: TimeagoClock, useClass: TimeagoDefaultClock},\n config.intl || [],\n config.formatter || {provide: TimeagoFormatter, useClass: TimeagoDefaultFormatter},\n ],\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.TimeagoIntl","i2.TimeagoFormatter","i3.TimeagoClock"],"mappings":";;;;;AAAM,SAAU,SAAS,CAAC,KAAU,EAAA;IAClC,OAAO,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC;AACxD,CAAC;AAEK,SAAU,qBAAqB,CAAC,KAAU,EAAA;IAC9C,OAAO,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,CAAA,CAAE,KAAK,OAAO,CAAC;AACjD,CAAC;AAEK,SAAU,UAAU,CAAC,IAAS,EAAA;AAClC,IAAA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;AACnC,QAAA,OAAO,MAAM,CAAC;AACf,KAAA;IAED,MAAM,KAAK,GAAa,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AACvC,QAAA,OAAO,MAAM,CAAC;AACf,KAAA;AAAM,SAAA;QACL,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;AAC3D,KAAA;AACH,CAAC;AAEM,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,CAAC;AACzB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AACtB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AACrB,MAAM,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC;AACvB,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG;;ACH5B,CAAC;AAEF;;;AAGG;AACH,MACa,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;AAKE;;;AAGG;AACM,QAAA,IAAA,CAAA,OAAO,GAAkB,IAAI,OAAO,EAAQ,CAAC;AACvD,KAAA;8GATY,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAX,WAAW,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;;ACnBX,MAAM,iBAAiB,GAAG,UAAS,IAAY,EAAA;AAC7C,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACxD,IAAA,MAAM,MAAM,GAAW,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,UAAU,CAAC;IAEvD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GACjB,OAAO,GAAG,MAAM;UACZ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;UAC/B,OAAO,GAAG,IAAI;AACd,cAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,QAAQ,CAAC;cACxC,OAAO,GAAG,GAAG;AACb,kBAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC;kBACpC,OAAO,GAAG,IAAI;AACd,sBAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC;sBAClC,OAAO,GAAG,KAAK;AACf,0BAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC;0BACpC,OAAO,GAAG,IAAI;AACd,8BAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,OAAO,CAAC;AACxC,8BAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;AAErD,IAAA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC;AAC/B,CAAC,CAAA;MAEqB,gBAAgB,CAAA;AAErC,CAAA;AAED,MACa,uBAAwB,SAAQ,gBAAgB,CAAA;AAC3D,IAAA,MAAM,CAAC,IAAY,EAAA;AACjB,QAAA,MAAM,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;KACxC;AAEO,IAAA,KAAK,CAAC,KAAa,EAAE,IAAU,EAAE,MAAc,EAAA;QACrD,IAAI,KAAK,KAAK,CAAC,EAAE;YACf,IAAI,IAAI,GAAG,CAAC;AACb,SAAA;QACD,OAAO,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC;KAC1C;8GAXU,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA,EAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;;AAeX,MACa,sBAAuB,SAAQ,gBAAgB,CAAA;AAC1D,IAAA,WAAA,CAAoB,IAAiB,EAAA;AACnC,QAAA,KAAK,EAAE,CAAC;QADU,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAa;KAEpC;AAED,IAAA,MAAM,CAAC,IAAY,EAAA;AACjB,QAAA,MAAM,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;KAC1D;IAEO,KAAK,CAAC,KAAa,EAAE,IAAU,EAAE,MAAc,EAAE,GAAW,EAAE,IAAY,EAAA;;QAEhF,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YACtE,KAAK,GAAG,IAAI,CAAC;YACb,IAAI,GAAG,KAAK,CAAC;AACd,SAAA;;QAGD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;;QAGjF,MAAM,UAAU,GAAa,EAAE,CAAC;;QAGhC,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACnD,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AACzD,SAAA;QACD,IAAI,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC5D,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7D,SAAA;;AAGD,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;AAC3B,QAAA,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAe,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;YACtG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtC,SAAA;AAAM,aAAA;YACL,MAAM,QAAQ,GAAe,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;YACtG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtC,SAAA;;QAGD,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACnD,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AACzD,SAAA;QACD,IAAI,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC5D,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7D,SAAA;;QAGD,MAAM,aAAa,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC;AAClH,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACvC;AAED;;;AAGE;IACM,eAAe,CAAC,OAAoB,EAAE,KAAa,EAAA;AACzD,QAAA,OAAO,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;cACnC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AACpB,iBAAA,GAAG,CAAC,CAAC,KAAa,KAAK,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;iBACrF,IAAI,CAAC,EAAE,CAAC;AACb,cAAE,MAAM,CAAC,KAAK,CAAC,CAAC;KACnB;AAED;;;AAGE;AACM,IAAA,WAAW,CAAC,KAAa,EAAE,WAAmB,EAAE,OAAqB,EAAA;QAC3E,OAAO,CAAC,UAAsB,KAC5B,OAAO,UAAU,KAAK,UAAU;cAC9B,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrF,cAAE,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;KACrE;8GA5EU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA,EAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;;;MCjDW,YAAY,CAAA;AAEjC,CAAA;AAED,MACa,mBAAoB,SAAQ,YAAY,CAAA;AACnD,IAAA,IAAI,CAAC,IAAY,EAAA;QACf,OAAO,EAAE,CAAC,CAAC,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAExD,YAAA,MAAM,MAAM,GACV,OAAO,GAAG,MAAM;AACd,kBAAE,IAAI;kBACJ,OAAO,GAAG,IAAI;sBACZ,IAAI,GAAG,MAAM;sBACb,OAAO,GAAG,GAAG;0BACX,IAAI,GAAG,IAAI;0BACX,CAAC,CAAC;AAEZ,YAAA,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;AAC1C,SAAC,CAAC,EACF,IAAI,CAAC,CAAC,CAAC,CACR,CAAC;KACL;8GArBU,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;ACDX,MAIa,gBAAgB,CAAA;;AAa3B,IAAA,IACI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IACD,IAAI,IAAI,CAAC,IAAS,EAAA;QAChB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,aAAA;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,iBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBACnC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,WAAW,CAAC,yEAAyE,IAAI,CAAA,CAAE,CAAC,CAAC;AACxG,SAAA;KACF;;AAID,IAAA,IACI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IACD,IAAI,IAAI,CAAC,IAAa,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;KAC1C;IAGD,WAAwB,CAAA,IAAiB,EACrB,EAAqB,EAC7B,SAA2B,EAC3B,OAAmB,EACX,KAAmB,EAAA;QAHnB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAmB;QAGrB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;AA3CvC;;;;;AAKE;AACF,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;QA+B3B,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC;AAOnB,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAChF,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;IAED,UAAU,CAAC,IAAS,EAAE,OAAe,EAAA;AACnC,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;AAC5B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACrB,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,SAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC9B;8GA/EU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAhB,gBAAgB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,QAAQ,EAAE,SAAS;AACpB,iBAAA,CAAA;;0BA4Cc,QAAQ;yJA7BjB,IAAI,EAAA,CAAA;sBADP,KAAK;gBAsBF,IAAI,EAAA,CAAA;sBADP,KAAK;;;ACtCR,MAKa,WAAW,CAAA;AAgBtB,IAAA,WAAA,CAAwB,IAAiB,EACvC,EAAqB,EACrB,SAA2B,EACnB,KAAmB,EAAA;QAAnB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;QAbrB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;AAEpB;;;;;AAKE;AACF,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;AAMjC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAChF,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;YAC/B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,EAAE,CAAC,YAAY,EAAE,CAAC;AACpB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,SAAS,CAAC,IAAS,EAAE,GAAG,IAAW,EAAA;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACzC,QAAA,IAAI,KAAc,CAAC;AAEnB,QAAA,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,cAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,cAAE,IAAI,CAAC,IAAI,CAAC;QAEd,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;YAC9C,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAElB,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,aAAA;AACD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAChD,iBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBACnC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,WAAW,CAAC,oEAAoE,IAAI,CAAA,CAAE,CAAC,CAAC;AACnG,SAAA;QAED,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;AACnC,SAAA;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;AACpC,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC9B;8GAtEU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAX,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA,EAAA;kHAAX,WAAW,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,UAAU;;kBACV,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,KAAK;AACZ,iBAAA,CAAA;;0BAiBc,QAAQ;;;ACjBvB,MAUa,aAAa,CAAA;AACxB;;AAEG;AACH,IAAA,OAAO,OAAO,CAAC,MAAA,GAA8B,EAAE,EAAA;QAC7C,OAAO;AACL,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE;gBACT,MAAM,CAAC,KAAK,IAAI,EAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAC;gBACtE,MAAM,CAAC,IAAI,IAAI,EAAE;gBACjB,MAAM,CAAC,SAAS,IAAI,EAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAC;AACnF,aAAA;SACF,CAAC;KACH;AAED;;AAEG;AACH,IAAA,OAAO,QAAQ,CAAC,MAAA,GAA8B,EAAE,EAAA;QAC9C,OAAO;AACL,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE;gBACT,MAAM,CAAC,KAAK,IAAI,EAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAC;gBACtE,MAAM,CAAC,IAAI,IAAI,EAAE;gBACjB,MAAM,CAAC,SAAS,IAAI,EAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAC;AACnF,aAAA;SACF,CAAC;KACH;8GA3BU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBARtB,gBAAgB;AAChB,YAAA,WAAW,aAGX,gBAAgB;YAChB,WAAW,CAAA,EAAA,CAAA,CAAA,EAAA;+GAGF,aAAa,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;wBAChB,WAAW;AACZ,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,gBAAgB;wBAChB,WAAW;AACZ,qBAAA;AACF,iBAAA,CAAA;;;ACrBD;;AAEG;;;;"}