{"version":3,"file":"generic-ui-hermes.mjs","sources":["../../build-cli/projects/gui-hermes/src/common/di/lib/key/key.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/key/not-found-key.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/key/key.register.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/provider.manager.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/dependency.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/class/class-record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/value/value-record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/factory/factory-record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/collection/collection-record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/collection/class-collection-record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/collection/factory-collection-record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/provider/collection/value-collection-record.factory.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/container/container-provider.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/record/record.manager.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/container/container-record.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/container/container-facade.ts","../../build-cli/projects/gui-hermes/src/common/di/lib/container/create-container.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/subscription/hermes.subscription.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/subscriber/hermes.subscriber.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/hermes.observable.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/subscription/hermes-empty.subscription.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/hermes.subject.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/domain-event.stream.ts","../../build-cli/projects/gui-hermes/src/common/random-string.generator.ts","../../build-cli/projects/gui-hermes/src/core/domain/message/message.ts","../../build-cli/projects/gui-hermes/src/core/api/event/domain-event.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/creator/hermes.of.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/creator/hermes.empty.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.take.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/operator-utils.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.filter.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/domain-event.store.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/command.stream.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/command.bus.ts","../../build-cli/projects/gui-hermes/src/common/optional.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/config/define.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/config/aggregate-definition.initializer.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.take-until.ts","../../build-cli/projects/gui-hermes/src/common/stream/infrastructure/rxjs/to-rxjs-observable.ts","../../build-cli/projects/gui-hermes/src/common/reactive/reactive.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/init/command-handler.initializer.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/domain-event.bus.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/init/domain-event-handler.initializer.ts","../../build-cli/projects/gui-hermes/src/core/api/hermes-tokens.ts","../../build-cli/projects/gui-hermes/src/core/api/logger/logger.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/command.logger.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/logger/command/console.command.logger.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/logger/command/noop.command.logger.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/domain-event.logger.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/logger/event/noop.event.logger.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/store/aggregate-store.register.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/logger/event/console.event.logger.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/config/aggregate-definition.token.ts","../../build-cli/projects/gui-hermes/src/core/api/event/domain-event-handlers.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/create-aggregate/create-aggregate.command-handlers-token.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/handler/command-handlers.ts","../../build-cli/projects/gui-hermes/src/core/api/runner/hermes.runner.ts","../../build-cli/projects/gui-hermes/src/core/api/hermes.module.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/command.dispatcher.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/domain-event.publisher.ts","../../build-cli/projects/gui-hermes/src/core/api/core.container.ts","../../build-cli/projects/gui-hermes/src/core/api/command/command.ts","../../build-cli/projects/gui-hermes/src/core/domain/message/message-type.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/handler/command-type.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/aggregate/aggregate-factory.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/aggregate/aggregate-event.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/aggregate/aggregate-event-type.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/aggregate/aggregate-repository.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/store/aggregate.store.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/aggregate/aggregate-root.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/hermes.id.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/aggregate/aggregate-id.ts","../../build-cli/projects/gui-hermes/src/core/api/event/domain-event-type.ts","../../build-cli/projects/gui-hermes/src/common/reactive/reactive.service.ts","../../build-cli/projects/gui-hermes/src/common/collection/key-map.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.map.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.distinct-until-changed.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/hermes.behavior-subject.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/hermes.replay-subject.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/hermes.archive-subject.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/subscriber/hermes.single-subscriber.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/single/hermes.single.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/single/hermes.single-from-observable.ts","../../build-cli/projects/gui-hermes/src/common/archive/key.archive.ts","../../build-cli/projects/gui-hermes/src/common/archive/aggregate.archive.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/handler/event-driven.repository.ts","../../build-cli/projects/gui-hermes/src/core/api/read/read-model-entity.ts","../../build-cli/projects/gui-hermes/src/core/api/read/read-model-entity-id.ts","../../build-cli/projects/gui-hermes/src/core/api/read/read-model-root.ts","../../build-cli/projects/gui-hermes/src/core/api/read/read-model-root-id.ts","../../build-cli/projects/gui-hermes/src/core/api/read/read-model-root.repository.ts","../../build-cli/projects/gui-hermes/src/core/api/read/store/read-model.store.ts","../../build-cli/projects/gui-hermes/src/core/api/event/event.repository.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/entity.ts","../../build-cli/projects/gui-hermes/src/core/api/tactical/entity.id.ts","../../build-cli/projects/gui-hermes/src/core/api/decorators.ts","../../build-cli/projects/gui-hermes/src/core/api/module/feature-module.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/creator/hermes.never.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/creator/hermes.interval.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/creator/hermes.timer.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/creator/hermes.from-event.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/observable/creator/hermes.throw-error.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.skip.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.switch-map.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.tap.ts","../../build-cli/projects/gui-hermes/src/common/stream/core/operator/hermes.to-array.ts","../../build-cli/projects/gui-hermes/src/common/stream/infrastructure/rxjs/from-rxjs-observable.ts","../../build-cli/projects/gui-hermes/src/common/archive/archive.ts","../../build-cli/projects/gui-hermes/src/common/random-id.generator.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/persist/persist-anemia.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/persist/persist-state.store.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/persist/read/persist.read-model.store.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/persist/command/persist-aggregate.store.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/in-memory/command/in-memory.aggregate.store.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/in-memory/read/in-memory.read-model.store.ts","../../build-cli/projects/gui-hermes/src/core/infrastructure/in-memory/in-memory.store.ts","../../build-cli/projects/gui-hermes/src/testing/helpers.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/create-aggregate/create-aggregate.command.ts","../../build-cli/projects/gui-hermes/src/core/api/hermes-api.ts","../../build-cli/projects/gui-hermes/src/core/api/hermes-api.helpers.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/create-aggregate/create-aggregate.command-handler-impl.ts","../../build-cli/projects/gui-hermes/src/core/domain/command/handler/command-handler-impl.ts","../../build-cli/projects/gui-hermes/src/core/domain/event/handler/domain-event-handler-impl.ts","../../build-cli/projects/gui-hermes/src/core/api/hermes.domain-initializer.ts","../../build-cli/projects/gui-hermes/src/generic-ui-hermes.ts"],"sourcesContent":["import { Token } from '../token';\n\nexport class Key<T> {\n\n\tprivate readonly stringKey: string;\n\n\tprotected constructor(\n\t\tprotected readonly token: Token<T>\n\t) {\n\t\tthis.stringKey = this.generateStringKey();\n\t}\n\n\tstatic from<T>(token: Token<T>) {\n\t\treturn new Key(token);\n\t}\n\n\ttoString(): string {\n\t\treturn this.stringKey;\n\t}\n\n\tprivate generateStringKey(): string {\n\n\t\tif (typeof this.token !== 'string') {\n\t\t\treturn this.token.toString().split(' ')[1] || '';\n\t\t} else {\n\t\t\treturn this.token;\n\t\t}\n\t}\n}\n","import { Key } from './key';\nimport { Token } from '../token';\n\nexport class NotFoundKey<T> extends Key<T> {\n\n\tconstructor(token: Token<T>) {\n\t\tsuper(token);\n\t}\n\n\tgetError(): string {\n\t\tif (typeof this.token === 'string') {\n\t\t\treturn 'Key not found for the token: ' + this.token;\n\t\t} else {\n\t\t\treturn 'Key not found for the token: ' + this.token.toString();\n\t\t}\n\t}\n\n}\n","import { Key } from './key';\nimport { Token } from '../token';\nimport { ClassProvider } from '../provider/class/class-provider';\nimport { NotFoundKey } from './not-found-key';\n\nexport class KeyRegister {\n\n\tprivate readonly records = new Map<Token<any>, Key<any>>();\n\n\tgetKey<T>(token: Token<T>): Key<T> {\n\t\tconst key = this.records.get(token);\n\n\t\tif (!key) {\n\t\t\treturn new NotFoundKey(token);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\tgetKeyAndTryRegister<T>(token: Token<T>, provider: ClassProvider): Key<T> {\n\n\t\tif (!this.has(token)) {\n\t\t\tthis.set(token, provider);\n\t\t}\n\n\t\treturn this.getKey(token);\n\t}\n\n\thas<T>(token: Token<T>): boolean {\n\t\treturn this.records.has(token);\n\t}\n\n\tset<T>(token: Token<T>, _provider: ClassProvider): void {\n\t\tthis.records.set(token, Key.from(token));\n\t}\n\n\tclear(): void {\n\t\tthis.records.clear();\n\t}\n}\n","import { Key } from '../key/key';\nimport { RecordFactory } from './record.factory';\n\nexport class ProviderManager {\n\n\tprivate readonly providers = new Map<Key<any>, RecordFactory>();\n\n\tget<T>(key: Key<T>): RecordFactory {\n\t\tconst recordFactory = this.providers.get(key);\n\n\t\tif (!recordFactory) {\n\t\t\tthrow new Error(`There is no provider for ${key.toString()}.`);\n\t\t}\n\n\t\treturn recordFactory;\n\t}\n\n\thas<T>(key: Key<T>): boolean {\n\t\treturn this.providers.has(key);\n\t}\n\n\tset<T>(key: Key<T>, recordFactory: RecordFactory): void {\n\t\tthis.providers.set(key, recordFactory);\n\t}\n\n\tclear(): void {\n\t\tthis.providers.clear();\n\t}\n\n}\n","import { ServiceToken } from '../service.token';\nimport { Token } from '../token';\n\nexport class Dependency {\n\n\tconstructor(private readonly serviceToken: ServiceToken<any>) {\n\t}\n\n\tgetToken<T>(): Token<T> {\n\n\t\tif (typeof this.serviceToken === 'object') {\n\t\t\treturn this.serviceToken.inject;\n\t\t} else {\n\t\t\treturn this.serviceToken;\n\t\t}\n\t}\n\n\tisOptional(): boolean {\n\t\tif (typeof this.serviceToken !== 'string' &&\n\t\t\ttypeof this.serviceToken === 'object' &&\n\t\t\tthis.serviceToken.optional !== undefined) {\n\t\t\treturn this.serviceToken.optional;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @deprecated\n\t */\n\tisCollection(): boolean {\n\t\tif (typeof this.serviceToken !== 'string' &&\n\t\t\ttypeof this.serviceToken === 'object' &&\n\t\t\tthis.serviceToken.collection) {\n\t\t\treturn this.serviceToken.collection;\n\t\t}\n\t\treturn false;\n\t}\n\n}\n","import { ClassProvider } from './class/class-provider';\nimport { Dependency } from './dependency';\n\nexport abstract class RecordFactory {\n\n\tprotected constructor(protected readonly provider: ClassProvider) {\n\t}\n\n\tabstract create(depsInstances: ReadonlyArray<any>): any;\n\n\tgetDeps(): ReadonlyArray<Dependency> {\n\t\treturn ((this.provider as any).services || []).map((service: any) => new Dependency(service));\n\t}\n\n}\n","import { ClassProvider } from './class-provider';\nimport { RecordFactory } from '../record.factory';\n\nexport class ClassRecordFactory extends RecordFactory {\n\n\tconstructor(provider: ClassProvider) {\n\t\tsuper(provider);\n\t}\n\n\tcreate(depsInstances: ReadonlyArray<any>): any {\n\t\treturn new (this.provider as any)(...depsInstances);\n\t}\n\n}\n","import { ValueProvider } from './value-provider';\nimport { Dependency } from '../dependency';\nimport { RecordFactory } from '../record.factory';\n\nexport class ValueRecordFactory extends RecordFactory {\n\n\tconstructor(provider: ValueProvider) {\n\t\tsuper(provider);\n\t}\n\n\toverride getDeps(): ReadonlyArray<Dependency> {\n\t\treturn [];\n\t}\n\n\tcreate(_depsInstances: ReadonlyArray<any>): any {\n\t\treturn this.provider;\n\t}\n\n}\n","import { FactoryProvider } from './factory-provider';\nimport { Dependency } from '../dependency';\nimport { RecordFactory } from '../record.factory';\n\nexport class FactoryRecordFactory extends RecordFactory {\n\n\tconstructor(provider: FactoryProvider) {\n\t\tsuper(provider);\n\t}\n\n\toverride getDeps(): ReadonlyArray<Dependency> {\n\t\treturn ((this.provider as FactoryProvider).deps || [])\n\t\t\t.map((service: any) => new Dependency(service));\n\t}\n\n\tcreate(depsInstances: ReadonlyArray<any>): any {\n\t\treturn (this.provider as FactoryProvider).create(...depsInstances);\n\t}\n\n}\n","import { Dependency } from '../dependency';\n\nexport abstract class CollectionRecordFactory {\n\n\tabstract getDeps(): Array<Array<Dependency>>;\n\n\tabstract create(setOfDeps: Array<Array<any>>): any ;\n\n\tabstract addProvider(provider: any): void;\n\n}\n","import { ClassProvider } from '../class/class-provider';\nimport { Dependency } from '../dependency';\nimport { CollectionRecordFactory } from './collection-record.factory';\n\nexport class ClassCollectionRecordFactory extends CollectionRecordFactory {\n\n\tprivate readonly providers: Array<ClassProvider> = [];\n\n\tgetDeps(): Array<Array<Dependency>> {\n\n\t\treturn this.providers\n\t\t\t\t   .map((provider: ClassProvider) => {\n\t\t\t\t\t   return ((provider as any).services || [])\n\t\t\t\t\t\t   .map((service: any) => {\n\t\t\t\t\t\t\t   return new Dependency(service);\n\t\t\t\t\t\t   });\n\t\t\t\t   });\n\t}\n\n\tcreate(setOfDeps: Array<Array<any>>): any {\n\n\t\treturn setOfDeps\n\t\t\t.map((deps: Array<any>, index) => {\n\t\t\t\treturn new (this.providers[index] as any)(...deps);\n\t\t\t});\n\t}\n\n\taddProvider(provider: ClassProvider) {\n\t\tthis.providers.push(provider);\n\t}\n\n}\n","import { ClassProvider } from '../class/class-provider';\nimport { Dependency } from '../dependency';\nimport { FactoryProvider } from '../factory/factory-provider';\nimport { CollectionRecordFactory } from './collection-record.factory';\n\nexport class FactoryCollectionRecordFactory extends CollectionRecordFactory {\n\n\tprivate readonly providers: Array<FactoryProvider> = [];\n\n\tgetDeps(): Array<Array<Dependency>> {\n\n\t\treturn this.providers\n\t\t\t\t   .map((provider: ClassProvider) => {\n\t\t\t\t\t   return ((provider as any).deps || [])\n\t\t\t\t\t\t   .map((service: any) => new Dependency(service));\n\t\t\t\t   });\n\t}\n\n\tcreate(setOfDeps: Array<Array<any>>): any {\n\n\t\treturn setOfDeps\n\t\t\t.map((deps: Array<any>, index) => {\n\t\t\t\treturn (this.providers[index] as any).create(...deps);\n\t\t\t});\n\t}\n\n\taddProvider(provider: FactoryProvider) {\n\t\tthis.providers.push(provider);\n\t}\n\n}\n","import { CollectionRecordFactory } from './collection-record.factory';\nimport { Dependency } from '../dependency';\nimport { ValueProvider } from '../value/value-provider';\n\nexport class ValueCollectionRecordFactory extends CollectionRecordFactory {\n\n\tprivate readonly providers: Array<ValueProvider> = [];\n\n\tgetDeps(): Array<Array<Dependency>> {\n\t\treturn [];\n\t}\n\n\tcreate(_setOfDeps: Array<Array<any>>): any {\n\n\t\treturn [...this.providers];\n\t}\n\n\taddProvider(provider: any): void {\n\t\tthis.providers.push(provider);\n\t}\n}\n","import { Constructor, Token } from '../token';\nimport { ClassProvider } from '../provider/class/class-provider';\nimport { ProviderManager } from '../provider/provider.manager';\nimport { ValueProvider } from '../provider/value/value-provider';\nimport { ClassRecordFactory } from '../provider/class/class-record.factory';\nimport { ValueRecordFactory } from '../provider/value/value-record.factory';\nimport { FactoryProvider } from '../provider/factory/factory-provider';\nimport { FactoryRecordFactory } from '../provider/factory/factory-record.factory';\nimport { ClassCollectionRecordFactory } from '../provider/collection/class-collection-record.factory';\nimport { FactoryCollectionRecordFactory } from '../provider/collection/factory-collection-record.factory';\nimport { ValueCollectionRecordFactory } from '../provider/collection/value-collection-record.factory';\nimport { RecordFactory } from '../provider/record.factory';\nimport { CollectionRecordFactory } from '../provider/collection/collection-record.factory';\nimport { KeyRegister } from '../key/key.register';\nimport { Key } from '../key/key';\n\nexport class ContainerProvider {\n\n\tprivate readonly providerManager = new ProviderManager();\n\n\tprivate readonly collectionProviders = new Map<Key<any>, CollectionRecordFactory>();\n\n\tconstructor(\n\t\tprivate readonly keyRegister: KeyRegister\n\t) {\n\t}\n\n\tprovide<T>(clazz: Constructor<T>): void;\n\tprovide<T>(token: Token<T>, provider: ClassProvider): void;\n\tprovide<T>(token: Token<T>, provider?: Constructor<T> | ClassProvider): void {\n\n\t\tif (provider === undefined) {\n\t\t\treturn this.provide(token, token);\n\t\t} else {\n\t\t\treturn this.provideClass(token, provider);\n\t\t}\n\t}\n\n\tprovideClass<T>(token: Token<T>, provider: ClassProvider): void {\n\n\t\treturn this.addProvider(\n\t\t\ttoken,\n\t\t\tprovider,\n\t\t\t(provider: ValueProvider) => new ClassRecordFactory(provider)\n\t\t);\n\t}\n\n\tprovideValue<T>(token: Token<T>, provider: ValueProvider): void {\n\n\t\treturn this.addProvider(\n\t\t\ttoken,\n\t\t\tprovider,\n\t\t\t(provider: ValueProvider) => new ValueRecordFactory(provider)\n\t\t);\n\t}\n\n\tprovideFactory<T>(token: Token<T>, provider: FactoryProvider): void {\n\n\t\treturn this.addProvider(\n\t\t\ttoken,\n\t\t\tprovider,\n\t\t\t(provider: FactoryProvider) => new FactoryRecordFactory(provider as FactoryProvider)\n\t\t);\n\t}\n\n\tprovideCollection<T>(token: Token<T>, provider: ClassProvider): void {\n\n\t\treturn this.addCollectionProvider(\n\t\t\ttoken,\n\t\t\tprovider,\n\t\t\t() => new ClassCollectionRecordFactory()\n\t\t);\n\t}\n\n\tprovideFactoryCollection<T>(token: Token<T>, provider: FactoryProvider): void {\n\n\t\treturn this.addCollectionProvider(\n\t\t\ttoken,\n\t\t\tprovider,\n\t\t\t() => new FactoryCollectionRecordFactory()\n\t\t);\n\t}\n\n\tprovideValueCollection<T>(token: Token<T>, provider: ValueProvider): void {\n\n\t\treturn this.addCollectionProvider(\n\t\t\ttoken,\n\t\t\tprovider,\n\t\t\t() => new ValueCollectionRecordFactory()\n\t\t);\n\t}\n\n\tclear(): void {\n\t\tthis.providerManager.clear();\n\t\tthis.collectionProviders.clear();\n\t}\n\n\tgetRecordFactory<T>(key: Key<T>): RecordFactory {\n\t\treturn this.providerManager.get(key);\n\t}\n\n\tgetCollectionRecordFactory<T>(key: Key<T>): CollectionRecordFactory {\n\t\treturn this.collectionProviders.get(key)!;\n\t}\n\n\tprivate addProvider<T>(\n\t\ttoken: Token<T>,\n\t\tprovider: any,\n\t\tprovideMethod: (provider: any) => RecordFactory\n\t): void {\n\n\t\tconst key = this.keyRegister.getKeyAndTryRegister(token, provider);\n\n\t\tthis.providerManager.set(key, provideMethod(provider));\n\t}\n\n\tprivate addCollectionProvider<T>(\n\t\ttoken: Token<T>,\n\t\tprovider: ClassProvider,\n\t\tcreateFactory: () => CollectionRecordFactory\n\t): void {\n\n\t\tconst key = this.keyRegister.getKeyAndTryRegister(token, provider);\n\n\t\tif (this.collectionProviders.has(key)) {\n\n\t\t\tconst multiFactory = this.collectionProviders.get(key);\n\n\t\t\tif (multiFactory) {\n\t\t\t\tmultiFactory.addProvider(provider);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst multiFactory = createFactory();\n\n\t\t\tmultiFactory.addProvider(provider);\n\n\t\t\tthis.collectionProviders.set(key, multiFactory);\n\t\t}\n\t}\n\n}\n","import { Key } from '../key/key';\n\nexport class RecordManager {\n\n\tprivate readonly records = new Map<Key<any>, any>();\n\n\tget<T>(key: Key<T>): T {\n\t\treturn this.records.get(key);\n\t}\n\n\thas<T>(key: Key<T>): boolean {\n\t\treturn this.records.has(key);\n\t}\n\n\tset<T>(key: Key<T>, record: T): void {\n\t\tthis.records.set(key, record);\n\t}\n\n\tclear(): void {\n\t\tthis.records.clear();\n\t}\n\n}\n","import { KeyRegister } from '../key/key.register';\nimport { ContainerProvider } from './container-provider';\nimport { Token } from '../token';\nimport { RecordManager } from '../record/record.manager';\nimport { Key } from '../key/key';\nimport { RecordFactory } from '../provider/record.factory';\nimport { Dependency } from '../provider/dependency';\nimport { NotFoundKey } from '../key/not-found-key';\n\nexport class ContainerRecord {\n\n\tprivate readonly recordManager = new RecordManager();\n\n\tprivate readonly collectionRecords = new Map<Key<any>, ReadonlyArray<any>>();\n\n\tconstructor(\n\t\tprivate readonly keyRegister: KeyRegister,\n\t\tprivate readonly containerProvider: ContainerProvider\n\t) {\n\t}\n\n\tresolve<T>(token: Token<T>): T {\n\t\treturn this.innerResolve(token)!;\n\t}\n\n\tresolveCollection<T>(token: Token<T>): ReadonlyArray<T> {\n\t\treturn this.innerResolveCollection(token)!;\n\t}\n\n\tclear(): void {\n\t\tthis.recordManager.clear();\n\t\tthis.collectionRecords.clear();\n\t}\n\n\tprivate resolveDependencies(provider: RecordFactory): ReadonlyArray<any> {\n\n\t\tconst deps = provider.getDeps();\n\n\t\treturn deps.map((dep: Dependency) => {\n\n\t\t\tif (dep.isCollection()) {\n\t\t\t\treturn this.innerResolveCollection(dep.getToken(), dep.isOptional());\n\t\t\t} else {\n\t\t\t\treturn this.resolveDependency(dep);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate resolveDependency<T>(dep: Dependency): T | null {\n\t\treturn this.innerResolve(dep.getToken(), dep.isOptional());\n\t}\n\n\tprivate innerResolve<T>(token: Token<T>, isOptional?: boolean): T | null {\n\n\t\tconst key = this.keyRegister.getKey(token);\n\n\t\tif (key instanceof NotFoundKey) {\n\n\t\t\tif (isOptional) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tthrow new Error(key.getError());\n\t\t\t}\n\t\t}\n\n\t\tif (!this.recordManager.has(key)) {\n\n\t\t\tconst recordFactory = this.containerProvider.getRecordFactory(key);\n\n\t\t\tconst depsInstances = this.resolveDependencies(recordFactory);\n\n\t\t\tconst instance = recordFactory.create(depsInstances);\n\n\t\t\tthis.recordManager.set(key, instance);\n\t\t}\n\n\t\treturn this.recordManager.get(key);\n\t}\n\n\tprivate innerResolveCollection<T>(token: Token<T>, isOptional = false): ReadonlyArray<T> | null {\n\n\t\tconst key = this.keyRegister.getKey(token);\n\n\t\tif (key instanceof NotFoundKey) {\n\n\t\t\tif (isOptional) {\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tthrow new Error(key.getError());\n\t\t\t}\n\t\t}\n\n\t\tif (!this.collectionRecords.has(key)) {\n\n\t\t\tconst multiFactory = this.containerProvider.getCollectionRecordFactory(key);\n\n\t\t\tif (multiFactory) {\n\n\t\t\t\tconst arrayOfDeps =\n\t\t\t\t\tmultiFactory.getDeps()\n\t\t\t\t\t\t\t\t.map((deps: Array<Dependency>) => {\n\n\t\t\t\t\t\t\t\t\treturn deps.map((dep: Dependency) => {\n\n\t\t\t\t\t\t\t\t\t\tif (dep.isCollection()) {\n\n\t\t\t\t\t\t\t\t\t\t\treturn this.innerResolveCollection(dep.getToken(), dep.isOptional());\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\treturn this.resolveDependency(dep);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\tconst instances = multiFactory.create(arrayOfDeps);\n\n\t\t\t\tthis.collectionRecords.set(key, instances);\n\t\t\t}\n\t\t}\n\n\t\treturn this.collectionRecords.get(key)!;\n\n\t}\n}\n","import { KeyRegister } from '../key/key.register';\nimport { ContainerProvider } from './container-provider';\nimport { Constructor, Token } from '../token';\nimport { ClassProvider } from '../provider/class/class-provider';\nimport { ValueProvider } from '../provider/value/value-provider';\nimport { FactoryProvider } from '../provider/factory/factory-provider';\nimport { Container } from './container';\nimport { ContainerRecord } from './container-record';\n\nexport class ContainerFacade implements Container {\n\n\tprivate readonly keyRegister = new KeyRegister();\n\n\tprivate readonly containerProvider = new ContainerProvider(this.keyRegister);\n\n\tprivate readonly containerRecord = new ContainerRecord(this.keyRegister, this.containerProvider);\n\n\tresolve<T>(token: Token<T>): T {\n\t\treturn this.containerRecord.resolve(token);\n\t}\n\n\tresolveCollection<T>(token: Token<T>): ReadonlyArray<T> {\n\t\treturn this.containerRecord.resolveCollection(token);\n\t}\n\n\tprovide<T>(clazz: Constructor<T>): Container;\n\tprovide<T>(token: Token<T>, provider: ClassProvider): Container;\n\tprovide<T>(token: Token<T>, provider?: Constructor<T> | ClassProvider): Container {\n\t\tthis.containerProvider.provide(token, provider!);\n\t\treturn this;\n\t}\n\n\tprovideClass<T>(token: Token<T>, provider: ClassProvider): Container {\n\t\tthis.containerProvider.provideClass(token, provider);\n\t\treturn this;\n\t}\n\n\tprovideValue<T>(token: Token<T>, provider: ValueProvider): Container {\n\t\tthis.containerProvider.provideValue(token, provider);\n\t\treturn this;\n\t}\n\n\tprovideFactory<T>(token: Token<T>, provider: FactoryProvider): Container {\n\t\tthis.containerProvider.provideFactory(token, provider);\n\t\treturn this;\n\t}\n\n\tprovideCollection<T>(token: Token<T>, provider: ClassProvider): Container {\n\t\tthis.containerProvider.provideCollection(token, provider);\n\t\treturn this;\n\t}\n\n\tprovideFactoryCollection<T>(token: Token<T>, provider: FactoryProvider): Container {\n\t\tthis.containerProvider.provideFactoryCollection(token, provider);\n\t\treturn this;\n\t}\n\n\tprovideValueCollection<T>(token: Token<T>, provider: ValueProvider): Container {\n\t\tthis.containerProvider.provideValueCollection(token, provider);\n\t\treturn this;\n\t}\n\n\tclear(): void {\n\t\tthis.keyRegister.clear();\n\t\tthis.containerProvider.clear();\n\t\tthis.containerRecord.clear();\n\t}\n\n\tclearOnlyRecords(): void {\n\t\tthis.containerRecord.clear();\n\t}\n\n}\n","import { Container } from './container';\nimport { ContainerFacade } from './container-facade';\n\nexport function createContainer(): Container {\n\treturn new ContainerFacade();\n}\n","import { HermesSubscriber } from '../observable/subscriber/hermes.subscriber';\n\nexport class HermesSubscription {\n\n\tprivate closed: boolean = false;\n\n\tconstructor(\n\t\tprivate readonly subscriber: HermesSubscriber<any>,\n\t\tisClosed?: boolean\n\t) {\n\n\t\tif (isClosed !== undefined && isClosed !== null) {\n\t\t\tthis.closed = isClosed;\n\t\t}\n\t}\n\n\tunsubscribe(): void {\n\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.closed = true;\n\t\tthis.subscriber.unsubscribe();\n\t}\n\n\tgetFinalize(): () => void {\n\t\treturn this.subscriber.getFinalize();\n\t}\n}\n","import { HermesObserver } from '../hermes.observer';\n\nexport class HermesSubscriber<T> {\n\n\tprivate observer: Partial<HermesObserver<T>>;\n\n\t// eslint-disable-next-line\n\tprivate finalize: () => void = () => {\n\t};\n\n\tprivate completed: boolean = false;\n\n\tprivate closed: boolean = false;\n\n\tconstructor(config: Partial<HermesObserver<T>>) {\n\t\tthis.observer = config;\n\t}\n\n\tnext(value: T): void {\n\n\t\tif (this.isCompleted()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.observer && this.observer.next) {\n\t\t\tthis.observer.next(value);\n\t\t}\n\t}\n\n\terror(error: any): void {\n\n\t\tif (this.completed) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.observer && this.observer.error) {\n\t\t\tthis.observer.error(error);\n\t\t}\n\t\tthis.unsubscribe();\n\t}\n\n\tcomplete(): void {\n\n\t\tif (this.completed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.completed = true;\n\t\tif (this.observer && this.observer.complete) {\n\t\t\tthis.observer.complete();\n\t\t}\n\n\t\tthis.unsubscribe();\n\t}\n\n\tunsubscribe(): void {\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.closed = true;\n\t\tthis.completed = true;\n\n\t\tthis.finalize();\n\t}\n\n\tsetFinalize(finalize: () => void): void {\n\t\tif (finalize && typeof finalize === 'function') {\n\t\t\tthis.finalize = finalize;\n\t\t} else {\n\n\t\t}\n\t}\n\n\tgetFinalize(): () => void {\n\t\treturn this.finalize;\n\t}\n\n\tprotected isCompleted(): boolean {\n\t\treturn this.completed;\n\t}\n\n\tprotected isClosed(): boolean {\n\t\treturn this.closed;\n\t}\n\n\tprotected getObserver(): Partial<HermesObserver<T>> {\n\t\treturn this.observer;\n\t}\n\n}\n","import { HermesSubscription } from '../subscription/hermes.subscription';\nimport { HermesSubscriber } from './subscriber/hermes.subscriber';\nimport { HermesObserver } from './hermes.observer';\n\n\nexport interface HermesOperatorFunction<T, R> {\n\t(source: HermesObservable<T>): HermesObservable<R>\n}\n\nexport class HermesObservable<T> {\n\n\tprotected readonly generatorFn: any;\n\n\tprivate source: HermesObservable<T>;\n\n\t// private operator: HermesObservable<T>;\n\n\t// eslint-disable-next-line\n\tprivate generatorFinalize: () => void;\n\n\tconstructor(generator?: (observer?: HermesObserver<T>) => void) {\n\t\tthis.generatorFn = generator;\n\t}\n\n\tpipe(...operations: Array<HermesOperatorFunction<any, any>>): HermesObservable<any> {\n\t\tthis.source = this;\n\n\t\tfor (const operation of operations) {\n\t\t\tthis.source = this.innerPipe(operation, this.source);\n\t\t}\n\t\treturn this.source;\n\t}\n\n\tsubscribe(\n\t\tnext?: (value: T) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscription;\n\tsubscribe(\n\t\tsubscriber: HermesSubscriber<T>\n\t): HermesSubscription;\n\tsubscribe(\n\t\tobserver: Partial<HermesObserver<T>>\n\t): HermesSubscription;\n\tsubscribe(\n\t\targ: any\n\t): HermesSubscription {\n\n\t\tlet subscriber: HermesSubscriber<T>;\n\n\t\tif (arg instanceof HermesSubscriber) {\n\t\t\tsubscriber = arg;\n\t\t} else if (arg !== null && this.isObserver(arg)) {\n\n\t\t\tconst { next, error, complete } = arg;\n\n\t\t\tsubscriber = this.createSubscriber(next, error, complete);\n\t\t} else {\n\n\t\t\tsubscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n\t\t}\n\n\t\tif (this.generatorFn) {\n\t\t\tthis.generatorFinalize = this.generatorFn(subscriber);\n\t\t\tsubscriber.setFinalize(this.generatorFinalize);\n\t\t}\n\n\t\treturn this.getSubscription(subscriber);\n\t}\n\n\tprotected createSubscriber(\n\t\tnext?: (value: T) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscriber<T> {\n\t\treturn new HermesSubscriber({\n\t\t\tnext,\n\t\t\terror,\n\t\t\tcomplete\n\t\t});\n\t}\n\n\tprotected getSubscription(subscriber: HermesSubscriber<T>): HermesSubscription {\n\t\treturn new HermesSubscription(subscriber);\n\t}\n\n\tprivate innerPipe<T, R>(operation: HermesOperatorFunction<T, R>, stream$: HermesObservable<T>): HermesObservable<R> {\n\t\treturn ((input: any) => {\n\t\t\treturn operation(input);\n\t\t})(stream$);\n\t}\n\n\tprivate isObserver(observer: any): boolean {\n\t\treturn typeof observer === 'object';\n\t}\n\n}\n","import { HermesSubscription } from './hermes.subscription';\nimport { HermesSubscriber } from '../observable/subscriber/hermes.subscriber';\n\nexport function hermesEmptySubscription(): HermesSubscription {\n\treturn new HermesSubscription(new HermesSubscriber({}), true);\n}\n","import { HermesObservable } from './hermes.observable';\nimport { HermesSubscription } from '../subscription/hermes.subscription';\nimport { HermesSubscriber } from './subscriber/hermes.subscriber';\nimport { hermesEmptySubscription } from '../subscription/hermes-empty.subscription';\n\nexport class HermesSubject<T> extends HermesObservable<T> {\n\n\t/**\n\t * After error\n\t */\n\tprivate thrownError: Error | string = null;\n\n\t/**\n\t * After complete\n\t */\n\tprivate isCompleted: boolean = false;\n\n\t/**\n\t * After unsubscribe\n\t */\n\tprivate isClosed: boolean = false;\n\n\tprivate readonly subscribers: Array<HermesSubscriber<T>> = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tnext(value: T): void {\n\n\t\tthis.verifyNotClosed();\n\n\t\tif (this.isCompleted || this.thrownError !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const subs of this.subscribers) {\n\t\t\tsubs.next(value);\n\t\t}\n\t}\n\n\terror(error: any): void {\n\n\t\tthis.verifyNotClosed();\n\n\t\tif (this.isCompleted) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.thrownError = error;\n\n\t\tfor (const subs of this.subscribers) {\n\t\t\tsubs.error(error);\n\t\t}\n\t\tthis.subscribers.length = 0;\n\t}\n\n\tcomplete(): void {\n\n\t\tthis.verifyNotClosed();\n\n\t\tif (this.isCompleted) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isCompleted = true;\n\n\t\tfor (const subs of this.subscribers) {\n\t\t\tsubs.complete();\n\t\t}\n\t\tthis.subscribers.length = 0;\n\t}\n\n\toverride subscribe(\n\t\tnext?: (value: T) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscription;\n\toverride subscribe(\n\t\tsubscriber: HermesSubscriber<T>\n\t): HermesSubscription;\n\toverride subscribe(\n\t\targ: any\n\t): HermesSubscription {\n\n\t\tthis.verifyNotClosed();\n\n\t\tlet subscriber: HermesSubscriber<T>;\n\n\t\tif (arg instanceof HermesSubscriber) {\n\t\t\tsubscriber = arg;\n\t\t} else {\n\t\t\tsubscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n\t\t}\n\n\t\tif (this.thrownError !== null) {\n\t\t\tsubscriber.error(this.thrownError);\n\t\t\treturn hermesEmptySubscription();\n\t\t} else if (this.isCompleted) {\n\t\t\tsubscriber.complete();\n\t\t\treturn hermesEmptySubscription();\n\t\t} else {\n\t\t\tthis.subscribers.push(subscriber);\n\t\t\treturn this.getSubscription(subscriber);\n\t\t}\n\t}\n\n\tunsubscribe(): void {\n\t\tthis.isCompleted = true;\n\t\tthis.isClosed = true;\n\t\tthis.subscribers.length = 0;\n\t}\n\n\ttoObservable(): HermesObservable<T> {\n\t\treturn new HermesObservable((observer) => {\n\t\t\tconst subscription = this.subscribe(\n\t\t\t\t(v) => observer.next(v),\n\t\t\t\t(error) => observer.error(error),\n\t\t\t\t() => observer.complete()\n\t\t\t);\n\n\t\t\treturn () => subscription.unsubscribe();\n\t\t});\n\t}\n\n\tprivate verifyNotClosed(): void {\n\t\tif (this.isClosed) {\n\t\t\tthrow new Error('Observable already closed');\n\t\t}\n\t}\n\n}\n","import { DomainEvent } from '../../api/event/domain-event';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { HermesSubject } from '../../../common/stream/core/observable/hermes.subject';\n\n\nexport class DomainEventStream extends HermesSubject<DomainEvent<AggregateId>> {\n\n\t// constructor(private readonly eventStore: DomainEventStore) {\n\tconstructor() {\n\t\tsuper();\n\t}\n\n}\n","export class RandomStringGenerator {\n\n\tstatic index = 0;\n\n\tstatic generate(): string {\n\t\treturn Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) + `${RandomStringGenerator.index++}`;\n\t}\n\n}\n","import { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\n\nimport { RandomStringGenerator } from '../../../common/random-string.generator';\n\nexport abstract class Message<I extends AggregateId> {\n\n\tprotected constructor(private readonly aggregateId: I,\n\t\t\t\t\t\t  protected readonly messageType: string,\n\t\t\t\t\t\t  private readonly messageId: string = RandomStringGenerator.generate()) {\n\t}\n\n\tgetMessageType(): string {\n\t\treturn this.messageType;\n\t}\n\n\tgetAggregateId(): I {\n\t\treturn this.aggregateId;\n\t}\n\n\tgetMessageId(): string {\n\t\treturn this.messageId;\n\t}\n\n\ttoString(): string {\n\t\treturn this.messageType;\n\t}\n\n\tequalsByType(message: Message<I>): boolean {\n\t\treturn this.getMessageType() === message.getMessageType();\n\t}\n\n\tequals(message: Message<I>): boolean {\n\t\treturn (this.getMessageType() === message.getMessageType()) && (this.messageId === message.messageId);\n\t}\n\n\tofMessageType(messageType: string): boolean;\n\tofMessageType(messageTypes: Array<string>): boolean;\n\tofMessageType(arg: string | Array<string>): boolean {\n\n\t\tif (Array.isArray(arg)) {\n\n\t\t\tconst found = arg.find((messageType: string) => this.isMessageType(messageType));\n\n\t\t\treturn !!found;\n\n\t\t} else {\n\t\t\treturn this.isMessageType(arg);\n\t\t}\n\t}\n\n\tprivate isMessageType(messageType: string): boolean {\n\t\treturn this.getMessageType() === messageType;\n\t}\n}\n","import { AggregateId } from '../tactical/aggregate/aggregate-id';\nimport { Message } from '../../domain/message/message';\n\n\nexport abstract class DomainEvent<I extends AggregateId = AggregateId> extends Message<I> {\n\n\tprivate readonly payload: any;\n\n\tprotected constructor(aggregateId: I,\n\t\t\t\t\t\t  payload: any,\n\t\t\t\t\t\t  messageType: string) {\n\t\tsuper(aggregateId, messageType);\n\t\tthis.payload = payload;\n\t}\n\n\tisSameType(event: DomainEvent<I>): boolean {\n\t\treturn this.constructor.name === event.constructor.name;\n\t}\n\n\tgetPayload(): any {\n\t\treturn this.payload;\n\t}\n}\n","import { HermesObservable } from '../hermes.observable';\n\nexport function hermesOf<T>(...args: Array<T>): HermesObservable<T> {\n\n\treturn new HermesObservable<T>(observer => {\n\n\t\targs.forEach(value => {\n\t\t\tobserver.next(value);\n\t\t});\n\n\t\tobserver.complete();\n\t});\n}\n","import { HermesObservable } from '../hermes.observable';\nimport { HermesObserver } from '../hermes.observer';\n\nexport function hermesEmpty<T>(): HermesObservable<T> {\n\treturn new HermesObservable<T>((observer: HermesObserver<T>) => {\n\t\tobserver.complete();\n\t});\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { HermesSubscriber } from '../observable/subscriber/hermes.subscriber';\nimport { hermesEmpty } from '../observable/creator/hermes.empty';\n\n\nexport function hermesTake<T>(valuesNumber: number): HermesOperatorFunction<T, T> {\n\n\treturn (source) => {\n\n\t\tif (valuesNumber === 0) {\n\t\t\treturn hermesEmpty();\n\t\t}\n\n\t\treturn new HermesObservable(observer => {\n\n\t\t\tlet index = 0;\n\n\t\t\tconst subscriber = new HermesSubscriber({\n\t\t\t\tnext: () => {\n\t\t\t\t},\n\t\t\t\terror: (e: any) => observer.error(e),\n\t\t\t\tcomplete: () => observer.complete()\n\t\t\t});\n\n\t\t\t(subscriber as any).observer.next = function(v: any) {\n\t\t\t\tif (index < valuesNumber) {\n\t\t\t\t\tobserver.next(v);\n\t\t\t\t\tindex++;\n\n\t\t\t\t\tif (index === valuesNumber) {\n\t\t\t\t\t\tsubscriber.complete();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst subscription = source.subscribe(\n\t\t\t\tsubscriber\n\t\t\t);\n\n\t\t\treturn subscription.getFinalize();\n\t\t});\n\t};\n}\n","import { HermesObserver } from '../observable/hermes.observer';\nimport { HermesSubscriber } from '../observable/subscriber/hermes.subscriber';\n\nexport function subscriberForOperator<T>(\n\tobserver: HermesObserver<T>,\n\tnext?: (value: T) => void,\n\tcomplete?: () => void): HermesSubscriber<T> {\n\n\tconst nextFn = next ? next : (v: T) => {\n\t\t\tobserver.next(v);\n\t\t},\n\t\tcompleteFn = complete ? complete : () => {\n\t\t\tobserver.complete();\n\t\t};\n\n\treturn new HermesSubscriber({\n\t\tnext: nextFn,\n\t\terror: (e: any) => observer.error(e),\n\t\tcomplete: completeFn\n\t});\n}\n\nexport function subscriberFromObserver<T>(observer: HermesObserver<T>): HermesSubscriber<T> {\n\treturn new HermesSubscriber({\n\t\tnext: (v: T) => observer.next(v),\n\t\terror: (e: any) => observer.error(e),\n\t\tcomplete: () => observer.complete()\n\t});\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { subscriberForOperator } from './operator-utils';\n\nexport function hermesFilter<T>(operation: (value: any) => boolean): HermesOperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new HermesObservable(observer => {\n\n\t\t\tconst subscriber = subscriberForOperator(observer, (value) => {\n\t\t\t\tif (operation(value)) {\n\t\t\t\t\tobserver.next(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn source.subscribe(subscriber).getFinalize();\n\t\t});\n\t};\n}\n","import { DomainEvent } from '../../api/event/domain-event';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { HermesSubject } from '../../../common/stream/core/observable/hermes.subject';\nimport { hermesOf } from '../../../common/stream/core/observable/creator/hermes.of';\nimport { hermesTake } from '../../../common/stream/core/operator/hermes.take';\nimport { hermesFilter } from '../../../common/stream/core/operator/hermes.filter';\nimport { HermesObservable } from '../../../common/stream/core/observable/hermes.observable';\n\nexport class DomainEventStore {\n\n\tprivate readonly domainEvents: Array<DomainEvent<AggregateId>> = [];\n\n\tprivate readonly domainEvents$: HermesSubject<DomainEvent<AggregateId>> = new HermesSubject<DomainEvent<AggregateId>>();\n\n\tnext(event: DomainEvent<AggregateId>): void {\n\t\tthis.domainEvents.push(event);\n\t\tthis.domainEvents$.next(event);\n\t}\n\n\tfindEventByType(eventType: string): DomainEvent<AggregateId> {\n\n\t\tconst events: Array<DomainEvent<AggregateId>> = this.getEvents();\n\n\t\treturn events.reverse()\n\t\t\t\t\t .find((event: DomainEvent<AggregateId>) => {\n\t\t\t\t\t\t return event.constructor.name === eventType;\n\t\t\t\t\t });\n\t}\n\n\t/**\n\t * First tries to find event in the history,\n\t * then method waits for future occurrences of the event.\n\t */\n\twaitForEvent(eventType: string): HermesObservable<DomainEvent<AggregateId>> {\n\n\t\t// find in a history\n\t\tconst event = this.findEventByType(eventType);\n\n\t\tif (event) {\n\t\t\treturn hermesOf(event);\n\t\t}\n\n\t\t// wait for future occurrence\n\t\treturn this.waitForNextEventOccurrence(eventType);\n\t}\n\n\twaitForNextEventOccurrence(eventType: string): HermesObservable<DomainEvent<AggregateId>>;\n\twaitForNextEventOccurrence(event: DomainEvent<AggregateId>): HermesObservable<DomainEvent<AggregateId>>;\n\twaitForNextEventOccurrence(arg: string | DomainEvent<AggregateId>): HermesObservable<DomainEvent<AggregateId>> {\n\n\t\tlet eventType: string;\n\n\t\tif (arg instanceof DomainEvent) {\n\t\t\teventType = arg.constructor.name;\n\t\t} else if (typeof arg === 'string') {\n\t\t\teventType = arg;\n\t\t} else {\n\t\t\treturn new HermesObservable((observer) => {\n\t\t\t\tobserver.error(new Error('Unsupported argument type.'));\n\t\t\t});\n\t\t\t// return throwError(new Error('Unsupported argument type.'));\n\t\t}\n\n\t\treturn this.domainEvents$\n\t\t\t\t   .toObservable()\n\t\t\t\t   .pipe(\n\t\t\t\t\t   hermesFilter((event) => event.constructor.name === eventType),\n\t\t\t\t\t   hermesTake(1)\n\t\t\t\t   );\n\t}\n\n\tprivate getEvents(): Array<DomainEvent<AggregateId>> {\n\t\treturn this.domainEvents;\n\t}\n\n}\n","import { Command } from '../../api/command/command';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { HermesSubject } from '../../../common/stream/core/observable/hermes.subject';\n\n\nexport class CommandStream extends HermesSubject<Command<AggregateId>> {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n}\n","import { Command } from '../../api/command/command';\nimport { AggregateRoot } from '../../api/tactical/aggregate/aggregate-root';\nimport { CreateAggregateCommandHandlerImpl } from './create-aggregate/create-aggregate.command-handler-impl';\nimport { CommandHandlerImpl } from './handler/command-handler-impl';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { CreateAggregateCommand } from './create-aggregate/create-aggregate.command';\nimport { CommandStream } from './command.stream';\nimport { HermesSubscription } from '../../../common/stream/core/subscription/hermes.subscription';\nimport { HermesSubscriber } from '../../../common/stream/core/observable/subscriber/hermes.subscriber';\nimport { HermesObservable } from '../../../common/stream/core/observable/hermes.observable';\nimport { hermesFilter } from '../../../common/stream/core/operator/hermes.filter';\n\nexport class CommandBus<C = Command<AggregateId>> extends HermesObservable<C> {\n\n\tconstructor(private readonly commandsStream: CommandStream) {\n\t\tsuper();\n\t}\n\n\tstatic readonly services = [CommandStream] as const;\n\n\toverride subscribe(\n\t\tnext?: (value: C) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscription;\n\toverride subscribe(\n\t\tsubscriber: HermesSubscriber<C>\n\t): HermesSubscription;\n\toverride subscribe(): HermesSubscription {\n\t\treturn this.commandsStream.toObservable().subscribe(arguments[0], arguments[1], arguments[2]);\n\t}\n\n\tofCommandHandler(...handlers: Array<CommandHandlerImpl<AggregateId, AggregateRoot<AggregateId>, Command<AggregateId>>>): any {\n\t\treturn (this as CommandBus<any>)\n\t\t\t.commandsStream\n\t\t\t.toObservable()\n\t\t\t.pipe(\n\t\t\t\thermesFilter((command: Command<AggregateId>) => {\n\t\t\t\t\treturn handlers.some((handler: CommandHandlerImpl<AggregateId, AggregateRoot<AggregateId>, Command<AggregateId>>) => {\n\t\t\t\t\t\treturn handler.forCommand(command);\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tofCreateAggregateHandler(\n\t\t...handlers: Array<CreateAggregateCommandHandlerImpl<any, AggregateRoot<AggregateId>, CreateAggregateCommand>>\n\t): any {\n\n\t\treturn (this as CommandBus<any>)\n\t\t\t.commandsStream\n\t\t\t.toObservable()\n\t\t\t.pipe(\n\t\t\t\thermesFilter((command: CreateAggregateCommand) => {\n\t\t\t\t\treturn handlers.some((handler: CreateAggregateCommandHandlerImpl<any, AggregateRoot<AggregateId>, CreateAggregateCommand>) => {\n\t\t\t\t\t\treturn handler.forCommand(command);\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tofNullHandler(\n\t\thandlers: Array<CommandHandlerImpl<AggregateId, AggregateRoot<AggregateId>, Command<AggregateId>>>,\n\t\taggregateCommandHandlers: Array<CreateAggregateCommandHandlerImpl<AggregateId, AggregateRoot<AggregateId>, CreateAggregateCommand>>\n\t): any {\n\n\t\treturn (this as CommandBus<any>)\n\t\t\t.commandsStream\n\t\t\t.toObservable()\n\t\t\t.pipe(\n\t\t\t\thermesFilter((command: Command<AggregateId>) => {\n\n\t\t\t\t\tif (!handlers && !aggregateCommandHandlers) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet foundHandlerForCommand = true;\n\n\t\t\t\t\tif (handlers) {\n\t\t\t\t\t\tfoundHandlerForCommand =\n\t\t\t\t\t\t\t!handlers.some((handler: CommandHandlerImpl<AggregateId, AggregateRoot<AggregateId>, Command<AggregateId>>) => {\n\t\t\t\t\t\t\t\treturn handler.forCommand(command);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aggregateCommandHandlers) {\n\t\t\t\t\t\tfoundHandlerForCommand = foundHandlerForCommand &&\n\t\t\t\t\t\t\t!aggregateCommandHandlers.some((handler: CreateAggregateCommandHandlerImpl<AggregateId, AggregateRoot<AggregateId>, any>) => {\n\t\t\t\t\t\t\t\treturn handler.forCommand(command);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn foundHandlerForCommand;\n\n\t\t\t\t})\n\t\t\t);\n\t}\n\n}\n","export class Optional<T> {\n\n\tprivate readonly value: T;\n\n\tprivate constructor(value: T) {\n\n\t\tif (Optional.isValueEmpty(value)) {\n\t\t\tthis.value = null;\n\t\t} else {\n\t\t\tthis.value = value;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tstatic empty(): Optional<any> {\n\t\treturn new Optional<any>(null);\n\t}\n\n\tstatic of<U>(value: U): Optional<U> {\n\t\treturn new Optional<U>(value);\n\t}\n\n\tprivate static isValueEmpty(value: any): boolean {\n\t\treturn typeof value === 'undefined' || value === null;\n\t}\n\n\tisEmpty(): boolean {\n\t\treturn Optional.isValueEmpty(this.value);\n\t}\n\n\tisPresent(): boolean {\n\t\treturn !this.isEmpty();\n\t}\n\n\tfilter(filterer: (value: T) => boolean): Optional<T> {\n\t\tif (this.isPresent() && filterer(this.value)) {\n\t\t\treturn this;\n\t\t}\n\t\treturn Optional.empty();\n\t}\n\n\tforEach(callback: (value: T) => any): void {\n\t\tif (this.isPresent()) {\n\t\t\tcallback(this.value);\n\t\t}\n\t}\n\n\tmap<U>(mapper: (value: T) => U): Optional<U> {\n\t\tif (this.isPresent()) {\n\t\t\treturn new Optional<U>(mapper(this.value));\n\t\t}\n\t\treturn Optional.empty();\n\t}\n\n\t/**\n\t * @deprecated\n\t */\n\tgetValueOrNullOrThrowError(): T {\n\t\treturn this.value;\n\t}\n\n\tgetOrThrow(): T {\n\t\tif (this.isEmpty()) {\n\t\t\tthrow new Error('Called getOrThrow on an empty Optional');\n\t\t}\n\t\treturn this.value;\n\t}\n\n\tgetOrElse<U extends T>(other: () => U): T {\n\t\tif (this.isPresent()) {\n\t\t\treturn this.value;\n\t\t}\n\t\treturn other();\n\t}\n\n\tifPresent(method: (value: T) => void): void {\n\t\tif (this.isPresent()) {\n\t\t\tmethod(this.value);\n\t\t}\n\t}\n\n\tifEmpty(method: () => void): void {\n\t\tif (this.isEmpty()) {\n\t\t\tmethod();\n\t\t}\n\t}\n\n\torElse<U extends T>(other: () => Optional<U>): Optional<T> {\n\t\tif (this.isPresent()) {\n\t\t\treturn this;\n\t\t}\n\t\treturn other();\n\t}\n\n}\n","import { AggregateFactory } from '../../../api/tactical/aggregate/aggregate-factory';\nimport { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { Optional } from '../../../../common/optional';\nimport { AggregateRepository } from '../../../api/tactical/aggregate/aggregate-repository';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\n\nexport class AggregateFactoryArchive<I extends AggregateId, A extends AggregateRoot<I>> {\n\n\tprivate readonly map = new Map<string, AggregateFactory<I, A>>();\n\n\tconstructor() {\n\t}\n\n\tadd(key: string, factory: AggregateFactory<I, A>): void {\n\n\t\tthis.map.set(key, factory);\n\t}\n\n\tget(key: string): Optional<AggregateFactory<I, A>> {\n\t\treturn Optional.of(this.map.get(key));\n\t}\n\n\thas(key: string): boolean {\n\t\treturn this.map.has(key);\n\t}\n}\n\nexport class AggregateRepositoryArchive<I extends AggregateId, A extends AggregateRoot<I>> {\n\n\tprivate readonly map = new Map<string, AggregateRepository<I, A>>();\n\n\tconstructor() {\n\t}\n\n\tadd(key: string, repository: AggregateRepository<I, A>): void {\n\n\t\tthis.map.set(key, repository);\n\t}\n\n\tget(key: string): Optional<AggregateRepository<I, A>> {\n\t\treturn Optional.of(this.map.get(key));\n\t}\n\n\thas(key: string): boolean {\n\t\treturn this.map.has(key);\n\t}\n}\n","import { AggregateDefinition } from './aggregate-definition';\nimport { AggregateFactoryArchive, AggregateRepositoryArchive } from './define';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { CoreContainer } from '../../../api/core.container';\nimport { AggregateFactory } from '../../../api/tactical/aggregate/aggregate-factory';\nimport { AggregateRepository } from '../../../api/tactical/aggregate/aggregate-repository';\n\nexport class AggregateDefinitionInitializer<I extends AggregateId, A extends AggregateRoot<I>> {\n\n\tprivate readonly aggregateFactoryArchive: AggregateFactoryArchive<I, A> = CoreContainer.resolve(AggregateFactoryArchive);\n\n\tprivate readonly aggregateRepositoryArchive: AggregateRepositoryArchive<I, A> = CoreContainer.resolve(AggregateRepositoryArchive);\n\n\tconstructor() {\n\t}\n\n\tregister(\n\t\tdefinedAggregate: Array<AggregateDefinition<I, A>>\n\t): void {\n\n\t\tif (definedAggregate) {\n\n\t\t\tconst set = new Set();\n\t\t\tconst filteredDefinitions: Array<AggregateDefinition<I, A>> = [];\n\n\t\t\tdefinedAggregate.filter((def: AggregateDefinition<I, A>) => {\n\t\t\t\tif (!set.has(def.key)) {\n\t\t\t\t\tset.add(def.key);\n\t\t\t\t\tfilteredDefinitions.push(def);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfilteredDefinitions.forEach((def: AggregateDefinition<I, A>) => {\n\n\t\t\t\tconst factory = CoreContainer.resolve<AggregateFactory<I, A>>(def.factory as any),\n\t\t\t\t\trepository = CoreContainer.resolve<AggregateRepository<I, A>>((def.repository as any));\n\n\t\t\t\tif (!this.aggregateFactoryArchive.has(def.key)) {\n\t\t\t\t\tthis.aggregateFactoryArchive.add(def.key, factory);\n\t\t\t\t}\n\n\t\t\t\tif (!this.aggregateRepositoryArchive.has(def.key)) {\n\t\t\t\t\tthis.aggregateRepositoryArchive.add(def.key, repository);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// console.log('Registered aggregate definition:' + filteredDefinitions.length);\n\t\t\t// console.log('Registered aggregate definition:', filteredDefinitions);\n\t\t}\n\t}\n\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { HermesSubscriber } from '../observable/subscriber/hermes.subscriber';\nimport { subscriberFromObserver } from './operator-utils';\n\n\nexport function hermesTakeUntil<T>(notifier: HermesObservable<any>): HermesOperatorFunction<T, T> {\n\n\treturn (source) => {\n\t\treturn new HermesObservable<T>(observer => {\n\n\t\t\tconst subscriber = subscriberFromObserver(observer);\n\n\t\t\tconst notifierSubscriber = new HermesSubscriber({\n\t\t\t\tnext: () => subscriber.complete()\n\t\t\t});\n\n\t\t\tnotifier.subscribe(notifierSubscriber);\n\n\t\t\tconst subscription = source.subscribe(subscriber);\n\n\t\t\treturn subscription.getFinalize();\n\t\t});\n\t};\n}\n","import { HermesObservable } from '../../core/observable/hermes.observable';\nimport { Observable } from 'rxjs';\n\nexport function toRxJsObservable<T>(source$: HermesObservable<T>): Observable<T> {\n\treturn new Observable((observer) => {\n\t\tconst subscription = source$.subscribe(\n\t\t\t(value: T) => observer.next(value),\n\t\t\t(error: any) => observer.error(error),\n\t\t\t() => observer.complete()\n\t\t);\n\t\treturn () => subscription.unsubscribe();\n\t});\n}\n","import { MonoTypeOperatorFunction } from 'rxjs';\nimport { HermesSubject } from '../stream/core/observable/hermes.subject';\nimport { hermesTakeUntil } from '../stream/core/operator/hermes.take-until';\nimport { toRxJsObservable } from '../stream/infrastructure/rxjs/to-rxjs-observable';\nimport { takeUntil } from 'rxjs/operators';\n\nexport abstract class Reactive {\n\n\tprivate readonly hermesUnsubscribe$ = new HermesSubject<void>();\n\n\tprotected constructor() {\n\t}\n\n\tonDestroy() {\n\t\tthis.hermesUnsubscribe();\n\t}\n\n\tprotected takeUntil<T>(): MonoTypeOperatorFunction<T> {\n\t\treturn takeUntil(\n\t\t\ttoRxJsObservable(this.hermesUnsubscribe$)\n\t\t);\n\t}\n\n\tprotected hermesUnsubscribe(): void {\n\t\tthis.hermesUnsubscribe$.next();\n\t\tthis.hermesUnsubscribe$.complete();\n\t}\n\n\tprotected hermesTakeUntil(): any {\n\t\treturn hermesTakeUntil(this.hermesUnsubscribe$);\n\t}\n\n\tprotected isNotStopped(): boolean {\n\t\treturn !(this.hermesUnsubscribe$ as any).isCompleted;\n\t}\n\n}\n","import { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { Reactive } from '../../../../common/reactive/reactive';\nimport { CommandHandlerImpl } from '../handler/command-handler-impl';\nimport { CommandBus } from '../command.bus';\nimport { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { Command } from '../../../api/command/command';\nimport { CreateAggregateCommandHandlerImpl } from '../create-aggregate/create-aggregate.command-handler-impl';\nimport { CoreContainer } from '../../../api/core.container';\n\n\nexport class CommandHandlerInitializer<I extends AggregateId, A extends AggregateRoot<I>, C extends Command<I>> extends Reactive {\n\n\tprivate readonly commandBus = CoreContainer.resolve<CommandBus>(CommandBus);\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tregister(\n\t\tcommandHandlers: Array<CommandHandlerImpl<I, A, C>>\n\t): void {\n\n\t\tif (commandHandlers) {\n\n\t\t\tconst set = new Set();\n\t\t\tconst filteredHandlers: Array<CommandHandlerImpl<I, A, C>> = [];\n\n\t\t\tcommandHandlers.filter((handler: CommandHandlerImpl<I, A, C>) => {\n\t\t\t\tif (!set.has((handler as any).commandHandler)) {\n\t\t\t\t\tset.add((handler as any).commandHandler);\n\t\t\t\t\tfilteredHandlers.push(handler);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfilteredHandlers.forEach((handler: CommandHandlerImpl<I, A, C>) => {\n\t\t\t\tthis.commandBus\n\t\t\t\t\t.ofCommandHandler(handler)\n\t\t\t\t\t.pipe(this.hermesTakeUntil())\n\t\t\t\t\t.subscribe((command: C) => {\n\t\t\t\t\t\thandler.handleCommand(command);\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tregisterAggregateCommandHandlers(\n\t\taggregateCommandHandlers: Array<CreateAggregateCommandHandlerImpl<I, A, C>>\n\t) {\n\n\t\tif (aggregateCommandHandlers) {\n\n\t\t\tconst set = new Set();\n\t\t\tconst filteredHandlers: Array<CreateAggregateCommandHandlerImpl<I, A, C>> = [];\n\n\t\t\taggregateCommandHandlers.filter((handler: CreateAggregateCommandHandlerImpl<I, A, C>) => {\n\t\t\t\tif (!set.has((handler as any).createAggregateCommandHandler)) {\n\t\t\t\t\tset.add((handler as any).createAggregateCommandHandler);\n\t\t\t\t\tfilteredHandlers.push(handler);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfilteredHandlers.forEach((handler: CreateAggregateCommandHandlerImpl<I, A, C>) => {\n\t\t\t\tthis.commandBus\n\t\t\t\t\t.ofCreateAggregateHandler(handler)\n\t\t\t\t\t.pipe(this.hermesTakeUntil())\n\t\t\t\t\t.subscribe((command: C) => {\n\t\t\t\t\t\thandler.handleCommand(command);\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n}\n","import { DomainEvent } from '../../api/event/domain-event';\nimport { DomainEventStream } from './domain-event.stream';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { DomainEventHandlerImpl } from './handler/domain-event-handler-impl';\nimport { HermesObservable } from '../../../common/stream/core/observable/hermes.observable';\nimport { hermesFilter } from '../../../common/stream/core/operator/hermes.filter';\nimport { HermesSubscription } from '../../../common/stream/core/subscription/hermes.subscription';\nimport { HermesSubscriber } from '../../../common/stream/core/observable/subscriber/hermes.subscriber';\n\nexport class DomainEventBus<E = DomainEvent<AggregateId>> extends HermesObservable<E> {\n\n\tconstructor(private readonly eventStream: DomainEventStream) {\n\t\tsuper();\n\t}\n\n\tstatic readonly services = [DomainEventStream] as const;\n\n\toverride subscribe(\n\t\tnext?: (value: E) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscription;\n\toverride subscribe(\n\t\tsubscriber: HermesSubscriber<E>\n\t): HermesSubscription;\n\toverride subscribe(): HermesSubscription {\n\n\t\treturn this.eventStream.toObservable().subscribe(arguments[0], arguments[1], arguments[2]);\n\t}\n\n\tofEvents(events: Array<typeof DomainEvent>): HermesObservable<any> {\n\t\treturn (this as DomainEventBus<any>)\n\t\t\t.eventStream\n\t\t\t.toObservable()\n\t\t\t.pipe(\n\t\t\t\thermesFilter((domainEvent: DomainEvent<AggregateId>) => {\n\t\t\t\t\treturn events.some((event: typeof DomainEvent) => {\n\t\t\t\t\t\tconst eventInstance = this.createEventInstance(event);\n\t\t\t\t\t\treturn eventInstance.equalsByType(domainEvent);\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tofEventHandlers(handlers: Array<DomainEventHandlerImpl<AggregateId, DomainEvent<AggregateId>>>): any {\n\t\treturn (this as DomainEventBus<any>)\n\t\t\t.eventStream\n\t\t\t.toObservable()\n\t\t\t.pipe(\n\t\t\t\thermesFilter((event: DomainEvent<AggregateId>) => {\n\t\t\t\t\treturn handlers.some((handler: DomainEventHandlerImpl<AggregateId, DomainEvent<AggregateId>>) => handler.forEvents([event]));\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tprivate createEventInstance(event: typeof DomainEvent): DomainEvent<AggregateId> {\n\t\tconst args: Array<void> = [],\n\t\t\targumentLength = event.constructor.length;\n\n\t\targs.fill(undefined, 0, argumentLength);\n\n\t\tif (args.length === 0) {\n\t\t\treturn (new (event as any)());\n\t\t} else if (args.length === 1) {\n\t\t\treturn (new (event as any)(args[0]));\n\t\t} else if (args.length === 2) {\n\t\t\treturn (new (event as any)(args[0], args[1]));\n\t\t} else if (args.length === 3) {\n\t\t\treturn (new (event as any)(args[0], args[1], args[2]));\n\t\t} else if (args.length === 4) {\n\t\t\treturn (new (event as any)(args[0], args[1], args[2], args[3]));\n\t\t} else if (args.length === 5) {\n\t\t\treturn (new (event as any)(args[0], args[1], args[2], args[3], args[4]));\n\t\t} else {\n\t\t\tthrow new Error('DomainEventBus constructor out of arguments');\n\t\t}\n\t}\n\n}\n","import { DomainEventHandlerImpl } from '../handler/domain-event-handler-impl';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { DomainEvent } from '../../../api/event/domain-event';\nimport { DomainEventBus } from '../domain-event.bus';\nimport { Reactive } from '../../../../common/reactive/reactive';\nimport { hermesTakeUntil } from '../../../../common/stream/core/operator/hermes.take-until';\nimport { HermesSubject } from '../../../../common/stream/core/observable/hermes.subject';\n\n\nexport class DomainEventHandlerInitializer<I extends AggregateId, E extends DomainEvent<I>> extends Reactive {\n\n\tprivate unsub$ = new HermesSubject<void>();\n\n\tconstructor(private readonly domainEventBus: DomainEventBus) {\n\t\tsuper();\n\t}\n\n\tstatic readonly services = [DomainEventBus] as const;\n\n\tinit(\n\t\teventHandlers: Array<DomainEventHandlerImpl<I, E>>\n\t): void {\n\n\t\tif (eventHandlers) {\n\n\t\t\tconst set = new Set();\n\t\t\tconst filteredHandlers: Array<DomainEventHandlerImpl<I, E>> = [];\n\n\t\t\teventHandlers.filter((handler: DomainEventHandlerImpl<I, E>) => {\n\t\t\t\tif (!set.has((handler as any).domainEventHandler)) {\n\t\t\t\t\tset.add((handler as any).domainEventHandler);\n\t\t\t\t\tfilteredHandlers.push(handler);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfilteredHandlers.forEach((handler: DomainEventHandlerImpl<I, E>) => {\n\t\t\t\tthis.domainEventBus\n\t\t\t\t\t.ofEventHandlers([handler])\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\thermesTakeUntil(this.unsub$),\n\t\t\t\t\t\tthis.hermesTakeUntil()\n\t\t\t\t\t)\n\t\t\t\t\t.subscribe((event: E) => {\n\t\t\t\t\t\thandler.handleEvent(event);\n\t\t\t\t\t});\n\t\t\t});\n\n\t\t\t// console.log('Registered event handlers:', filteredHandlers.length)\n\t\t\t// console.log('Registered event handlers:', filteredHandlers)\n\t\t}\n\t}\n\n\treinit(\n\t\teventHandlers: Array<DomainEventHandlerImpl<I, E>>\n\t): void {\n\t\tthis.stop();\n\t\tthis.init(eventHandlers);\n\t}\n\n\tstop(): void {\n\t\tthis.unsub$.next();\n\t\tthis.unsub$.complete();\n\t\tthis.unsub$ = new HermesSubject();\n\t}\n}\n","export const COMMAND_LOGGER_ENABLED = 'GUI - COMMAND_LOGGER_ENABLED';\nexport const EVENT_LOGGER_ENABLED = 'GUI - EVENT_LOGGER_ENABLED';\n","import { Message } from '../../domain/message/message';\n\nexport abstract class Logger<M extends Message<any>> {\n\n\tprivate domainName: string;\n\n\tabstract start(): void;\n\n\tabstract stop(): void;\n\n\tprotected abstract print(message: M): void;\n\n\tsetDomain(domainName: string): void {\n\t\tthis.domainName = domainName;\n\t}\n\n\tlog(message: M): void {\n\t\tif (this.shouldPrint(message)) {\n\t\t\tthis.print(message);\n\t\t}\n\t}\n\n\tprotected shouldPrint(message: M): boolean {\n\n\t\tif (!this.domainName) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst log: string = message.toString();\n\n\t\treturn log.includes(this.domainName);\n\t}\n}\n","import { Command } from '../../api/command/command';\nimport { Logger } from '../../api/logger/logger';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\n\nexport abstract class CommandLogger extends Logger<Command<AggregateId>> {\n}\n","import { CommandBus } from '../../../domain/command/command.bus';\nimport { Command } from '../../../api/command/command';\nimport { CommandLogger } from '../../../domain/command/command.logger';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { hermesFilter } from '../../../../common/stream/core/operator/hermes.filter';\nimport { hermesTakeUntil } from '../../../../common/stream/core/operator/hermes.take-until';\nimport { HermesSubject } from '../../../../common/stream/core/observable/hermes.subject';\nimport { CoreContainer } from '../../../api/core.container';\n\n\nexport class ConsoleCommandLogger extends CommandLogger {\n\n\tprivate enabled = false;\n\n\tprivate readonly unsubscribe$ = new HermesSubject<void>();\n\n\tprivate readonly commandBus = CoreContainer.resolve<CommandBus<Command<AggregateId>>>(CommandBus);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.commandBus\n\t\t\t.pipe(\n\t\t\t\thermesFilter(() => this.enabled),\n\t\t\t\thermesTakeUntil(this.unsubscribe$)\n\t\t\t)\n\t\t\t.subscribe((command: Command<AggregateId>) => {\n\t\t\t\tthis.log(command);\n\t\t\t});\n\t}\n\n\tonDestroy() {\n\t\tthis.unsubscribe$.next();\n\t\tthis.unsubscribe$.complete();\n\t}\n\n\tstart(): void {\n\t\tthis.enabled = true;\n\t}\n\n\tstop(): void {\n\t\tthis.enabled = false;\n\t}\n\n\tprotected print(command: Command<AggregateId>): void {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(command.toString(), command);\n\t}\n\n}\n","import { CommandLogger } from '../../../domain/command/command.logger';\nimport { Command } from '../../../api/command/command';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\n\nexport class NoopCommandLogger extends CommandLogger {\n\n\tstart(): void {\n\t}\n\n\tstop(): void {\n\t}\n\n\tprotected print(_command: Command<AggregateId>): void {\n\t}\n\n}\n","import { DomainEvent } from '../../api/event/domain-event';\nimport { Logger } from '../../api/logger/logger';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\n\nexport abstract class DomainEventLogger extends Logger<DomainEvent<AggregateId>> {\n\n\tprotected constructor() {\n\t\tsuper();\n\t}\n}\n","import { DomainEventLogger } from '../../../domain/event/domain-event.logger';\nimport { DomainEvent } from '../../../api/event/domain-event';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\nexport class NoopEventLogger extends DomainEventLogger {\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tstart(): void {\n\t}\n\n\tstop(): void {\n\t}\n\n\tprint(_event: DomainEvent<AggregateId>): void {\n\t}\n\n}\n","import { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { AggregateStore } from './aggregate.store';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\nexport class AggregateStoreRegister {\n\n\tprivate readonly stores: Array<AggregateStore<AggregateId, AggregateRoot<AggregateId>>> = [];\n\n\tregister(store: AggregateStore<AggregateId, AggregateRoot<AggregateId>>): void {\n\t\tthis.stores.push(store);\n\t}\n\n\tcaptureAggregatesSnapshot(aggregateId: AggregateId): { [key: string]: AggregateRoot<AggregateId> } {\n\n\t\tif (!aggregateId) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst aggregates = {};\n\n\t\tthis.stores.forEach((store: AggregateStore<AggregateId, AggregateRoot<AggregateId>>) => {\n\n\t\t\tconst aggregate = store.findById(aggregateId);\n\n\t\t\tif (aggregate) {\n\n\t\t\t\tconst aggregateName = aggregate.constructor.name;\n\n\t\t\t\taggregates[aggregateName] = aggregate;\n\t\t\t}\n\n\t\t});\n\n\t\treturn this.cloneAggregates(aggregates);\n\t}\n\n\tprivate cloneAggregates(aggregates: { [key: string]: AggregateRoot<AggregateId> }): { [key: string]: AggregateRoot<AggregateId> } {\n\t\t// return JSON.parse(JSON.stringify(aggregates));\n\t\treturn aggregates;\n\t}\n}\n","import { DomainEventLogger } from '../../../domain/event/domain-event.logger';\nimport { DomainEventBus } from '../../../domain/event/domain-event.bus';\nimport { DomainEvent } from '../../../api/event/domain-event';\nimport { AggregateStoreRegister } from '../../../domain/command/store/aggregate-store.register';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { hermesFilter } from '../../../../common/stream/core/operator/hermes.filter';\nimport { hermesTakeUntil } from '../../../../common/stream/core/operator/hermes.take-until';\nimport { HermesSubject } from '../../../../common/stream/core/observable/hermes.subject';\nimport { CoreContainer } from '../../../api/core.container';\n\n\nexport class ConsoleEventLogger extends DomainEventLogger {\n\n\tprivate enabled = false;\n\n\tprivate unsubscribe$ = new HermesSubject<void>();\n\n\tprivate readonly eventBus: DomainEventBus = CoreContainer.resolve(DomainEventBus);\n\n\tprivate readonly aggregateStoreRegister: AggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n\n\tconstructor() {\n\t\tsuper();\n\n\t\tthis.eventBus\n\t\t\t.pipe(\n\t\t\t\thermesFilter(() => this.enabled),\n\t\t\t\thermesTakeUntil(this.unsubscribe$)\n\t\t\t)\n\t\t\t.subscribe((domainEvent: DomainEvent<AggregateId>) => {\n\t\t\t\tthis.log(domainEvent);\n\t\t\t});\n\t}\n\n\tonDestroy() {\n\t\tthis.unsubscribe$.next();\n\t\tthis.unsubscribe$.complete();\n\t}\n\n\tstart(): void {\n\t\tthis.enabled = true;\n\t}\n\n\tstop(): void {\n\t\tthis.enabled = false;\n\t}\n\n\tprotected print(domainEvent: DomainEvent<AggregateId>): void {\n\t\tconst aggregateId = domainEvent.getAggregateId(),\n\t\t\taggregates = this.aggregateStoreRegister.captureAggregatesSnapshot(aggregateId);\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(domainEvent.toString(), domainEvent, aggregates);\n\t}\n\n}\n","export const aggregateDefinitionToken = 'Hermes - aggregateDefinitionToken';\n","export const DOMAIN_EVENT_HANDLERS = 'HERMES - DOMAIN_EVENT_HANDLERS_TOKEN';\n","/**\n * ngc for grid package for some reasons doesn't allow to use injection token\n */\nexport const CREATE_AGGREGATE_COMMAND_HANDLERS = 'HERMES - CREATE_AGGREGATE_COMMAND_HANDLERS';\n","export const COMMAND_HANDLERS = 'HERMES - COMMAND_HANDLERS_TOKEN';\n","import { AggregateDefinitionInitializer } from '../../domain/command/config/aggregate-definition.initializer';\nimport { CommandHandlerInitializer } from '../../domain/command/init/command-handler.initializer';\nimport { DomainEventHandlerInitializer } from '../../domain/event/init/domain-event-handler.initializer';\nimport { CommandBus } from '../../domain/command/command.bus';\nimport { aggregateDefinitionToken } from '../../domain/command/config/aggregate-definition.token';\nimport { AggregateDefinition } from '../../domain/command/config/aggregate-definition';\nimport { DOMAIN_EVENT_HANDLERS } from '../event/domain-event-handlers';\nimport { DomainEventHandlerImpl } from '../../domain/event/handler/domain-event-handler-impl';\nimport { CREATE_AGGREGATE_COMMAND_HANDLERS } from '../../domain/command/create-aggregate/create-aggregate.command-handlers-token';\nimport { CreateAggregateCommandHandlerImpl } from '../../domain/command/create-aggregate/create-aggregate.command-handler-impl';\nimport { COMMAND_HANDLERS } from '../../domain/command/handler/command-handlers';\nimport { CommandHandlerImpl } from '../../domain/command/handler/command-handler-impl';\nimport { AggregateId } from '../tactical/aggregate/aggregate-id';\nimport { AggregateRoot } from '../tactical/aggregate/aggregate-root';\nimport { Command } from '../command/command';\nimport { DomainEvent } from '../event/domain-event';\nimport { Reactive } from '../../../common/reactive/reactive';\n\nexport class HermesRunner<I extends AggregateId, A extends AggregateRoot<I>, C extends Command<I>, E extends DomainEvent<I>>\n\textends Reactive {\n\n\tprivate started = false;\n\n\tconstructor(\n\t\tprivate readonly aggregateDefinitionInitializer: AggregateDefinitionInitializer<I, A>,\n\t\tprivate readonly commandHandlerInitializer: CommandHandlerInitializer<I, A, C>,\n\t\tprivate readonly domainEventHandlerInitializer: DomainEventHandlerInitializer<I, E>,\n\t\tprivate readonly commandBus: CommandBus,\n\t\tprivate readonly definedAggregate: Array<AggregateDefinition<I, A>>,\n\t\tprivate readonly eventHandlers: Array<DomainEventHandlerImpl<I, E>>,\n\t\tprivate readonly aggregateCommandHandlers: Array<CreateAggregateCommandHandlerImpl<I, A, C>>,\n\t\tprivate readonly commandHandlers: Array<CommandHandlerImpl<I, A, C>>\n\t) {\n\t\tsuper();\n\n\t\tif (this.eventHandlers === null) {\n\t\t\tthis.eventHandlers = [];\n\t\t}\n\n\t\tif (this.aggregateCommandHandlers === null) {\n\t\t\tthis.aggregateCommandHandlers = [];\n\t\t}\n\n\t\tif (this.commandHandlers === null) {\n\t\t\tthis.commandHandlers = [];\n\t\t}\n\t}\n\n\tstatic readonly services = [\n\t\tAggregateDefinitionInitializer,\n\t\tCommandHandlerInitializer,\n\t\tDomainEventHandlerInitializer,\n\t\tCommandBus,\n\t\t{ inject: aggregateDefinitionToken, collection: true },\n\t\t{ inject: DOMAIN_EVENT_HANDLERS, collection: true, optional: true },\n\t\t{ inject: CREATE_AGGREGATE_COMMAND_HANDLERS, collection: true, optional: true },\n\t\t{ inject: COMMAND_HANDLERS, collection: true, optional: true }\n\t] as const;\n\n\trun(): void {\n\n\t\tif(this.started) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.checkNullCommand(this.commandHandlers, this.aggregateCommandHandlers);\n\t\tthis.checkCommandHandlerIsCollection(this.commandHandlers);\n\t\tthis.checkDomainEventHandlerIsCollection(this.eventHandlers);\n\n\t\tthis.aggregateDefinitionInitializer.register(this.definedAggregate);\n\t\tthis.commandHandlerInitializer.register(this.commandHandlers);\n\t\tthis.commandHandlerInitializer.registerAggregateCommandHandlers(this.aggregateCommandHandlers);\n\t\tthis.domainEventHandlerInitializer.init(this.eventHandlers);\n\n\t\tthis.started = true;\n\t}\n\n\tdestroy(): void {\n\t\tthis.commandHandlerInitializer.onDestroy();\n\t\tthis.domainEventHandlerInitializer.onDestroy();\n\t}\n\n\tprivate checkNullCommand(\n\t\tcommandHandlers: Array<CommandHandlerImpl<I, A, C>>,\n\t\taggregateCommandHandlers: Array<CreateAggregateCommandHandlerImpl<I, A, C>>\n\t): void {\n\n\t\tthis.commandBus\n\t\t\t.ofNullHandler(commandHandlers, aggregateCommandHandlers)\n\t\t\t.pipe(this.hermesTakeUntil())\n\t\t\t.subscribe((command: C) => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(`Command ${command.toString()} was not intercepted by any CommandHandler.`);\n\t\t\t});\n\t}\n\n\tprivate checkCommandHandlerIsCollection(commandHandlers: Array<CommandHandlerImpl<I, A, C>>): void {\n\t\tif (commandHandlers && !Array.isArray(commandHandlers)) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('You might provided commandHandler without specifying \"multi: true\".');\n\t\t}\n\t}\n\n\tprivate checkDomainEventHandlerIsCollection(eventHandlers: Array<DomainEventHandlerImpl<I, E>>): void {\n\t\tif (eventHandlers && !Array.isArray(eventHandlers)) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('You might provided eventHandler without specifying \"multi: true\".');\n\t\t}\n\t}\n}\n","/**\n * Infrastructure\n */\nimport { ConsoleCommandLogger } from '../infrastructure/logger/command/console.command.logger';\nimport { NoopCommandLogger } from '../infrastructure/logger/command/noop.command.logger';\nimport { ConsoleEventLogger } from '../infrastructure/logger/event/console.event.logger';\nimport { NoopEventLogger } from '../infrastructure/logger/event/noop.event.logger';\nimport { CoreContainer } from './core.container';\nimport { HermesRunner } from './runner/hermes.runner';\n\nexport function commandLoggerFactory(enabled: boolean, consoleCommandLogger: ConsoleCommandLogger, noopCommandLogger: NoopCommandLogger) {\n\n\tif (enabled) {\n\t\treturn consoleCommandLogger;\n\t} else {\n\t\treturn noopCommandLogger;\n\t}\n}\n\nexport function eventLoggerFactory(enabled: boolean, consoleEventLogger: ConsoleEventLogger, noopEventLogger: NoopEventLogger) {\n\n\tif (enabled) {\n\t\treturn consoleEventLogger;\n\t} else {\n\t\treturn noopEventLogger;\n\t}\n}\n\nexport function runHermes(): void {\n\tCoreContainer.resolve(HermesRunner).run();\n}\n","import { CommandStream } from './command.stream';\nimport { Command } from '../../api/command/command';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { CoreContainer } from '../../api/core.container';\n\n\nexport class CommandDispatcher {\n\n\tprivate readonly commandStream: CommandStream = CoreContainer.resolve(CommandStream);\n\n\tdispatch(command: Command<AggregateId>): void {\n\t\tthis.commandStream.next(command);\n\t}\n}\n","import { AggregateEvent } from '../../api/tactical/aggregate/aggregate-event';\n\nimport { DomainEventStream } from './domain-event.stream';\nimport { DomainEvent } from '../../api/event/domain-event';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { AggregateRoot } from '../../api/tactical/aggregate/aggregate-root';\n\n\nexport class DomainEventPublisher {\n\n\tconstructor(private readonly eventStream: DomainEventStream) {\n\t}\n\n\tstatic readonly services = [DomainEventStream] as const;\n\n\tpublish(event: DomainEvent<AggregateId>): void;\n\tpublish(events: ReadonlyArray<DomainEvent<AggregateId>>): void;\n\tpublish(args: DomainEvent<AggregateId> | ReadonlyArray<DomainEvent<AggregateId>>): void {\n\n\t\tif (Array.isArray(args)) {\n\n\t\t\tfor (const arg of args) {\n\t\t\t\tthis.publishEvent(arg);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.publishEvent(args as DomainEvent<AggregateId>);\n\t\t}\n\t}\n\n\tpublishFromAggregate(aggregate: AggregateRoot<AggregateId>): void {\n\n\t\tconst events = [...aggregate.getEvents()];\n\n\t\tevents.forEach((aggregateEvent: AggregateEvent<AggregateId>) => {\n\t\t\tthis.publish(\n\t\t\t\taggregateEvent.toDomainEvent()\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate publishEvent(event: DomainEvent<AggregateId>): void {\n\n\t\tif (!event) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(`${event} is not defined`);\n\t\t}\n\n\t\tif (!(event instanceof DomainEvent)) {\n\t\t\t// throw new Error(`${event} is not a DomainEvent`);\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(`${event} is not a DomainEvent`);\n\t\t}\n\n\t\tthis.eventStream.next(event);\n\t}\n}\n","import { DomainEventStream } from '../domain/event/domain-event.stream';\nimport { DomainEventStore } from '../domain/event/domain-event.store';\nimport { CommandBus } from '../domain/command/command.bus';\nimport { CommandStream } from '../domain/command/command.stream';\nimport { AggregateDefinitionInitializer } from '../domain/command/config/aggregate-definition.initializer';\nimport { CommandHandlerInitializer } from '../domain/command/init/command-handler.initializer';\nimport { DomainEventHandlerInitializer } from '../domain/event/init/domain-event-handler.initializer';\nimport { AggregateFactoryArchive, AggregateRepositoryArchive } from '../domain/command/config/define';\nimport { COMMAND_LOGGER_ENABLED, EVENT_LOGGER_ENABLED } from './hermes-tokens';\nimport { ConsoleCommandLogger } from '../infrastructure/logger/command/console.command.logger';\nimport { NoopCommandLogger } from '../infrastructure/logger/command/noop.command.logger';\nimport { NoopEventLogger } from '../infrastructure/logger/event/noop.event.logger';\nimport { ConsoleEventLogger } from '../infrastructure/logger/event/console.event.logger';\nimport { CommandLogger } from '../domain/command/command.logger';\nimport { commandLoggerFactory, eventLoggerFactory } from './hermes.module';\nimport { DomainEventLogger } from '../domain/event/domain-event.logger';\nimport { DomainEventBus } from '../domain/event/domain-event.bus';\nimport { AggregateStoreRegister } from '../domain/command/store/aggregate-store.register';\nimport { CommandDispatcher } from '../domain/command/command.dispatcher';\nimport { DomainEventPublisher } from '../domain/event/domain-event.publisher';\nimport { HermesRunner } from './runner/hermes.runner';\nimport { createContainer } from '../../common/di/index';\n\nexport const CoreContainer = createContainer();\n\nCoreContainer.provideValue(EVENT_LOGGER_ENABLED, true);\nCoreContainer.provideValue(COMMAND_LOGGER_ENABLED, true);\nCoreContainer.provide(ConsoleCommandLogger);\nCoreContainer.provide(NoopCommandLogger);\nCoreContainer.provide(NoopEventLogger);\nCoreContainer.provide(ConsoleEventLogger);\n\nCoreContainer.provide(DomainEventBus);\nCoreContainer.provide(AggregateStoreRegister);\nCoreContainer.provideFactory(CommandLogger, { create: commandLoggerFactory, deps: [COMMAND_LOGGER_ENABLED, ConsoleCommandLogger, NoopCommandLogger] });\n\nCoreContainer.provideFactory(DomainEventLogger, { create: eventLoggerFactory, deps: [EVENT_LOGGER_ENABLED, ConsoleEventLogger, NoopEventLogger] });\nCoreContainer.provide(AggregateFactoryArchive, AggregateFactoryArchive);\n\nCoreContainer.provide(DomainEventPublisher);\n\nCoreContainer.provide(AggregateRepositoryArchive);\nCoreContainer.provide(DomainEventStream, DomainEventStream);\nCoreContainer.provide(DomainEventStore, DomainEventStore);\nCoreContainer.provide(CommandBus, CommandBus);\nCoreContainer.provide(CommandStream);\nCoreContainer.provide(CommandDispatcher);\nCoreContainer.provide(AggregateDefinitionInitializer, AggregateDefinitionInitializer);\nCoreContainer.provide(CommandHandlerInitializer, CommandHandlerInitializer);\nCoreContainer.provide(DomainEventHandlerInitializer, DomainEventHandlerInitializer);\n\nCoreContainer.provide(HermesRunner);\n\nexport const resetCoreContainer = () => {\n\tCoreContainer.clearOnlyRecords();\n};\n","import { Message } from '../../domain/message/message';\nimport { AggregateId } from '../tactical/aggregate/aggregate-id';\n\nexport abstract class Command<I extends AggregateId> extends Message<I> {\n}\n","export const MessageType = Function;\n\n// eslint-disable-next-line no-redeclare\nexport interface MessageType<T> extends Function {\n\tnew(...args: any[]): T;\n}\n","import { MessageType } from '../../message/message-type';\n\nexport const CommandType = MessageType;\n\n// eslint-disable-next-line no-redeclare\nexport interface CommandType<T> extends MessageType<T> {\n\tnew(...args: any[]): T;\n}\n","import { AggregateRoot } from './aggregate-root';\nimport { AggregateId } from './aggregate-id';\n\nexport abstract class AggregateFactory<I extends AggregateId, A extends AggregateRoot<I>> {\n\n\tabstract create(aggregateId: I): A;\n\n}\n","import { AggregateId } from './aggregate-id';\nimport { DomainEvent } from '../../event/domain-event';\n\nexport abstract class AggregateEvent<T extends AggregateId> {\n\n\tprotected constructor(\n\t\tprivate readonly aggregateId: T,\n\t\tprivate readonly type: string) {\n\t}\n\n\tabstract toDomainEvent(): DomainEvent<T>;\n\n\tgetAggregateId(): AggregateId {\n\t\treturn this.aggregateId;\n\t}\n\n\tgetType(): string {\n\t\treturn this.type;\n\t}\n\n\tequals(event: AggregateEvent<T>): boolean {\n\t\treturn this.equalsByType(event) &&\n\t\t\tthis.getAggregateId().equals(event.getAggregateId());\n\t}\n\n\tequalsByType(event: AggregateEvent<T>): boolean {\n\t\treturn this.getType() === event.getType();\n\t}\n\n}\n","import { MessageType } from '../../../domain/message/message-type';\n\nexport const AggregateEventType = MessageType;\n\n// eslint-disable-next-line no-redeclare\nexport interface AggregateEventType<T> extends MessageType<T> {\n\tnew(...args: any[]): T;\n}\n","import { AggregateRoot } from './aggregate-root';\nimport { AggregateId } from './aggregate-id';\n\nimport { Optional } from '../../../../common/optional';\n\nexport abstract class AggregateRepository<I extends AggregateId, A extends AggregateRoot<I>> {\n\n\tabstract findById(aggregateId: I): Optional<A>;\n\n\tabstract save(aggregate: A): void;\n\n}\n","import { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\nimport { Optional } from '../../../../common/optional';\n\nexport abstract class AggregateStore<I extends AggregateId, S extends AggregateRoot<I>> {\n\n\tabstract save(aggregate: S): void ;\n\n\tabstract findById(aggregateId: I): Optional<S>;\n\n}\n","import { AggregateEvent } from './aggregate-event';\nimport { AggregateId } from './aggregate-id';\nimport { AggregateEventType } from './aggregate-event-type';\n\n\nexport abstract class AggregateRoot<I extends AggregateId> {\n\n\tprivate readonly aggregateId: I;\n\n\tprivate readonly events: Array<AggregateEvent<I>>;\n\n\tprotected constructor(aggregateId: I,\n\t\t\t\t\t\t  private readonly type: string) {\n\t\tthis.aggregateId = aggregateId;\n\t\tthis.events = [];\n\t}\n\n\tabstract createEvent(): AggregateEventType<AggregateEvent<I>>;\n\n\tgetId(): I {\n\t\treturn this.aggregateId;\n\t}\n\n\tgetType(): string {\n\t\treturn this.type;\n\t}\n\n\tgetEvents(): ReadonlyArray<AggregateEvent<I>> {\n\t\treturn this.events as ReadonlyArray<AggregateEvent<I>>;\n\t}\n\n\taddEvent(event: AggregateEvent<I>): void;\n\taddEvent(events: Array<AggregateEvent<I>>): void;\n\taddEvent(args: AggregateEvent<I> | Array<AggregateEvent<I>>): void {\n\n\t\tif (Array.isArray(args)) {\n\t\t\tfor (const event of args) {\n\t\t\t\tthis.events.push(event);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.events.push(args as AggregateEvent<I>);\n\t\t}\n\t}\n\n\tclearEvents(): void {\n\t\tthis.events.length = 0;\n\t}\n\n\tequals(aggregate: AggregateRoot<I>): boolean {\n\t\treturn aggregate.getId().toString() === this.getId().toString();\n\t}\n}\n","export abstract class HermesId<T> {\n\n\tprivate readonly uid: T;\n\n\tprotected constructor(uid: T) {\n\t\tthis.uid = uid;\n\t}\n\n\tabstract toString(): string;\n\n\tgetId(): T {\n\t\treturn this.uid;\n\t}\n\n\tequals(hermesId: HermesId<T>): boolean {\n\t\treturn this.uid === hermesId.getId();\n\t}\n}\n","import { ReadModelRootId } from '../../read/read-model-root-id';\nimport { HermesId } from '../hermes.id';\n\nexport abstract class AggregateId extends HermesId<string> {\n\n\tprotected constructor(uid: string) {\n\t\tsuper(uid);\n\t}\n\n\tabstract toReadModelRootId(): ReadModelRootId;\n\n\ttoString(): string {\n\t\treturn super.getId();\n\t}\n\n}\n","import { MessageType } from '../../domain/message/message-type';\n\nexport const DomainEventType = MessageType;\n\n// eslint-disable-next-line no-redeclare\nexport interface DomainEventType<T> extends MessageType<T> {\n\tnew(...args: any[]): T;\n}\n","import { Reactive } from './reactive';\n\nexport abstract class ReactiveService extends Reactive {\n\n\tprotected constructor() {\n\t\tsuper();\n\t}\n\n\toverride onDestroy() {\n\t\tthis.hermesUnsubscribe();\n\t}\n\n}\n","import { Key } from './key';\nimport { Optional } from '../optional';\n\nexport class KeyMap<K extends Key, T> {\n\n\tprivate readonly keys = new Map<string, K>();\n\n\tprivate readonly values = new WeakMap<K, T>();\n\n\tfind(key: K): Optional<T> {\n\n\t\tconst internalKey = this.getInternalKey(key);\n\n\t\tif (internalKey !== undefined) {\n\t\t\treturn Optional.of(this.values.get(internalKey));\n\t\t} else {\n\t\t\treturn Optional.empty();\n\t\t}\n\t}\n\n\thas(key: K): boolean {\n\n\t\tconst internalKey = this.getInternalKey(key);\n\n\t\treturn this.values.has(internalKey);\n\t}\n\n\tset(key: K, value: T): void {\n\t\tthis.keys.set(key.toString(), key);\n\t\tthis.values.set(key, value);\n\t}\n\n\tsize(): number {\n\t\treturn this.keys.size;\n\t}\n\n\tremove(key: K): void {\n\t\tif (this.hasInternalKey(key)) {\n\t\t\tthis.keys.delete(key.toString());\n\t\t\tthis.values.delete(key);\n\t\t}\n\t}\n\n\tremoveAll(): void {\n\t\tthis.keys.forEach((value) => {\n\t\t\tthis.values.delete(value);\n\t\t});\n\t\tthis.keys.clear();\n\t}\n\n\tprivate getInternalKey(key: K): K {\n\t\treturn this.keys.get(key.toString());\n\t}\n\n\tprivate hasInternalKey(key: K): boolean {\n\t\treturn this.keys.has(key.toString());\n\t}\n\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { subscriberForOperator } from './operator-utils';\nimport { HermesObserver } from '../observable/hermes.observer';\n\n\nexport function hermesMap<T, R>(convert: (value: T, index: number) => R): HermesOperatorFunction<T, R> {\n\n\treturn (source: HermesObservable<T>) => {\n\t\treturn new HermesObservable<R>((observer: HermesObserver<any>) => {\n\t\t\tlet index = 0;\n\n\t\t\tconst subscriber = subscriberForOperator(observer, (value: T) => {\n\t\t\t\tobserver.next(convert(value, index++));\n\t\t\t});\n\n\t\t\treturn source.subscribe(subscriber).getFinalize();\n\t\t});\n\t};\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { HermesObserver } from '../observable/hermes.observer';\nimport { subscriberForOperator } from './operator-utils';\n\n\nexport function hermesDistinctUntilChanged<T>(compareFn?: (one: T, two: T) => boolean): HermesOperatorFunction<T, T> {\n\n\tconst compare = compareFn ? compareFn : defaultCompareFn;\n\n\treturn (source: HermesObservable<T>) => {\n\t\treturn new HermesObservable<T>((observer: HermesObserver<any>) => {\n\n\t\t\tlet previousValue: T = null;\n\n\t\t\tconst subscriber = subscriberForOperator(observer, (value: T) => {\n\n\t\t\t\tif (previousValue === null || !compare(previousValue, value)) {\n\t\t\t\t\tpreviousValue = value;\n\t\t\t\t\tobserver.next(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn source.subscribe(subscriber).getFinalize();\n\t\t});\n\t};\n}\n\nfunction defaultCompareFn<T>(a: T, b: T): boolean {\n\treturn a === b;\n}\n","import { HermesSubject } from './hermes.subject';\nimport { HermesSubscription } from '../subscription/hermes.subscription';\nimport { HermesSubscriber } from './subscriber/hermes.subscriber';\n\nexport class HermesBehaviorSubject<T> extends HermesSubject<T> {\n\n\tprivate lastValue: T;\n\n\tconstructor(defaultValue: T) {\n\t\tsuper();\n\t\tthis.lastValue = defaultValue;\n\t}\n\n\toverride next(value: T) {\n\t\tthis.lastValue = value;\n\t\tsuper.next(value);\n\t}\n\n\toverride subscribe(\n\t\tnext?: (value: T) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscription;\n\toverride subscribe(\n\t\tsubscriber: HermesSubscriber<T>\n\t): HermesSubscription;\n\toverride subscribe(): HermesSubscription {\n\n\t\tconst subscription = super.subscribe(arguments[0], arguments[1], arguments[2]);\n\n\t\tsuper.next(this.lastValue);\n\n\t\treturn subscription;\n\t}\n}\n","import { HermesSubject } from './hermes.subject';\nimport { HermesSubscription } from '../subscription/hermes.subscription';\nimport { HermesSubscriber } from './subscriber/hermes.subscriber';\nimport { HermesOperatorFunction } from './hermes.observable';\n\nexport class HermesReplaySubject<T> extends HermesSubject<T> {\n\n\tprivate readonly values: Array<T> = [];\n\n\tconstructor(private readonly bufferSize: number = 1) {\n\t\tsuper();\n\t}\n\n\toverride pipe(...operations: Array<HermesOperatorFunction<any, any>>): HermesReplaySubject<any> {\n\t\treturn super.pipe(...operations) as HermesReplaySubject<any>;\n\t}\n\n\toverride next(value: T): void {\n\t\tthis.values.push(value);\n\t\tif (this.bufferSize < this.values.length) {\n\t\t\tthis.values.shift();\n\t\t}\n\t\tsuper.next(value);\n\t}\n\n\toverride subscribe(\n\t\tnext?: (value: T) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscription;\n\toverride subscribe(\n\t\tsubscriber: HermesSubscriber<T>\n\t): HermesSubscription;\n\toverride subscribe(): HermesSubscription {\n\n\t\tlet subscriber: HermesSubscriber<T>;\n\n\t\tif (arguments[0] instanceof HermesSubscriber) {\n\t\t\tsubscriber = arguments[0];\n\t\t} else {\n\t\t\tsubscriber = this.createSubscriber(arguments[0], arguments[1], arguments[2]);\n\t\t}\n\n\t\tconst subscription = super.subscribe(subscriber);\n\n\t\tfor (const value of this.values) {\n\t\t\tsubscriber.next(value);\n\t\t}\n\n\t\treturn subscription;\n\t}\n\n}\n","import { HermesSubject } from './hermes.subject';\nimport { HermesBehaviorSubject } from './hermes.behavior-subject';\nimport { HermesReplaySubject } from './hermes.replay-subject';\n\nexport class HermesArchiveSubject<T> extends HermesSubject<T> {\n\n\tprivate constructor() {\n\t\tsuper();\n\t}\n\n\tstatic of<T>(value?: T) {\n\t\tif (value !== undefined) {\n\t\t\treturn new HermesBehaviorSubject<T>(value);\n\t\t} else {\n\t\t\treturn new HermesReplaySubject<T>(1);\n\t\t}\n\t}\n}\n","import { HermesSubscriber } from './hermes.subscriber';\n\nexport class HermesSingleSubscriber<T> extends HermesSubscriber<T> {\n\n\toverride next(value: T): void {\n\n\t\tif (this.isCompleted()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = this.getObserver();\n\n\t\tif (observer && observer.next) {\n\t\t\tobserver.next(value);\n\t\t\tthis.complete();\n\t\t}\n\t}\n\n}\n","import { HermesObservable } from '../hermes.observable';\nimport { HermesSubscriber } from '../subscriber/hermes.subscriber';\nimport { HermesSingleSubscriber } from '../subscriber/hermes.single-subscriber';\n\n\nexport class HermesSingle<T> extends HermesObservable<T> {\n\n\tprotected override createSubscriber(\n\t\tnext?: (value: T) => void,\n\t\terror?: (error: any) => void,\n\t\tcomplete?: () => void\n\t): HermesSubscriber<T> {\n\n\t\treturn new HermesSingleSubscriber({\n\t\t\tnext,\n\t\t\terror,\n\t\t\tcomplete\n\t\t});\n\t}\n}\n","import { HermesObservable } from '../hermes.observable';\nimport { HermesSubscriber } from '../subscriber/hermes.subscriber';\nimport { HermesSingle } from './hermes.single';\n\nexport function singleFromObservable<T>(source: HermesObservable<T>): HermesSingle<T> {\n\n\treturn new HermesSingle<T>((observer) => {\n\n\t\tconst subscriber = new HermesSubscriber({\n\t\t\tnext: (value: T) => observer.next(value),\n\t\t\terror: (error: any) => observer.error(error),\n\t\t\tcomplete: () => {\n\t\t\t}\n\t\t});\n\n\t\tconst subscription = source.subscribe(\n\t\t\tsubscriber\n\t\t);\n\n\t\treturn subscription.getFinalize();\n\t});\n}\n","import { ReactiveService } from '../reactive/reactive.service';\nimport { KeyMap } from '../collection/key-map';\nimport { Optional } from '../optional';\nimport { hermesFilter } from '../stream/core/operator/hermes.filter';\nimport { hermesMap } from '../stream/core/operator/hermes.map';\nimport { hermesDistinctUntilChanged } from '../stream/core/operator/hermes.distinct-until-changed';\nimport { HermesArchiveSubject } from '../stream/core/observable/hermes.archive-subject';\nimport { HermesObservable } from '../stream/core/observable/hermes.observable';\nimport { Key } from '../collection/key';\nimport { HermesSingle } from '../stream/core/observable/single/hermes.single';\nimport { singleFromObservable } from '../stream/core/observable/single/hermes.single-from-observable';\n\n\nexport abstract class KeyArchive<K extends Key, T> extends ReactiveService {\n\n\tprivate readonly archive = new KeyMap<K, T>();\n\n\tprivate readonly archive$: HermesArchiveSubject<KeyMap<K, T>>;\n\n\tprivate defaultValue: Optional<T> = Optional.empty();\n\n\tprotected constructor(defaultValue?: T) {\n\t\tsuper();\n\n\t\tthis.archive$ = HermesArchiveSubject.of();\n\n\t\tif (defaultValue !== undefined && defaultValue !== null) {\n\t\t\tthis.defaultValue = Optional.of(defaultValue);\n\t\t}\n\t}\n\n\ton(key: K): HermesObservable<T> {\n\n\t\tthis.tryToInitDefault(key);\n\n\t\treturn this.archive$\n\t\t\t\t   .toObservable()\n\t\t\t\t   .pipe(\n\t\t\t\t\t   hermesFilter(() => this.isNotStopped()),\n\t\t\t\t\t   hermesMap((map: KeyMap<K, T>) => {\n\t\t\t\t\t\t   return map.find(key);\n\t\t\t\t\t   }),\n\t\t\t\t\t   hermesFilter((value: Optional<T>) => value.isPresent()),\n\t\t\t\t\t   hermesMap((value: Optional<T>) => value.getValueOrNullOrThrowError()),\n\t\t\t\t\t   hermesDistinctUntilChanged(this.equals),\n\t\t\t\t\t   this.hermesTakeUntil()\n\t\t\t\t   );\n\t}\n\n\tonce(key: K): HermesSingle<T> {\n\t\treturn singleFromObservable(this.on(key));\n\t}\n\n\tfind(key: K): Optional<T> {\n\n\t\tthis.tryToInitDefault(key);\n\n\t\treturn this.archive.find(key);\n\t}\n\n\tnext(key: K, value: T): void {\n\t\tthis.archive.set(key, value);\n\t\tthis.archive$.next(this.archive);\n\t}\n\n\tprotected equals(a: T, b: T): boolean {\n\t\treturn a === b;\n\t}\n\n\tprotected createDefaultValue(defaultValue: T): T {\n\t\treturn defaultValue;\n\t}\n\n\tprivate tryToInitDefault(key: K): void {\n\t\tthis.defaultValue\n\t\t\t.ifPresent((value) => {\n\n\t\t\t\tif (!this.archive.has(key)) {\n\t\t\t\t\tthis.next(key, value);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n}\n","import { AggregateId } from '../../core/api/tactical/aggregate/aggregate-id';\nimport { KeyArchive } from './key.archive';\n\n\nexport abstract class AggregateArchive<T> extends KeyArchive<AggregateId, T> {\n\n\tprotected constructor(defaultValue?: T) {\n\t\tsuper(defaultValue);\n\t}\n\n}\n","import { DomainEventHandler } from '../../../api/event/domain-event.handler';\nimport { DomainEventType } from '../../../api/event/domain-event-type';\nimport { AggregateArchive } from '../../../../common/archive/aggregate.archive';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { DomainEvent } from '../../../api/event/domain-event';\n\n\nexport abstract class EventDrivenRepository<I extends AggregateId, E extends DomainEvent<I>, V>\n\textends AggregateArchive<V> implements DomainEventHandler<I, E> {\n\n\tprotected constructor(defaultValues?: V) {\n\t\tsuper(defaultValues);\n\t}\n\n\tabstract forEvent(): DomainEventType<E>;\n\n\thandle(event: E): void {\n\t\tthis.next(event.getAggregateId(), event.getPayload());\n\t}\n}\n","import { ReadModelEntityId } from './read-model-entity-id';\n\n/**\n * @deprecated\n */\nexport abstract class ReadModelEntity<T extends ReadModelEntityId> {\n\n\tprivate readonly entityId: T;\n\n\tprotected constructor(gui: T) {\n\t\tthis.entityId = gui;\n\t}\n\n\tgetId(): T {\n\t\treturn this.entityId;\n\t}\n}\n","/**\n * @deprecated\n */\nexport class ReadModelEntityId {\n\n\tprivate readonly uid: string;\n\n\tprotected constructor(uid: string) {\n\t\tthis.uid = uid;\n\t}\n\n\ttoString(): string {\n\t\treturn this.uid;\n\t}\n\n\tgetId(): string {\n\t\treturn this.uid;\n\t}\n\n\tequals(entityId: ReadModelEntityId): boolean {\n\t\treturn this.uid === entityId.getId();\n\t}\n}\n","import { ReadModelRootId } from './read-model-root-id';\n\n/**\n * @deprecated\n */\nexport abstract class ReadModelRoot<T extends ReadModelRootId> {\n\n\tprivate readonly rootId: T;\n\n\tprotected constructor(gui: T) {\n\t\tthis.rootId = gui;\n\t}\n\n\tgetId(): T {\n\t\treturn this.rootId;\n\t}\n\n}\n","import { AggregateId } from '../tactical/aggregate/aggregate-id';\n\n/**\n * @deprecated\n */\nexport abstract class ReadModelRootId {\n\n\tprivate readonly uid: string;\n\n\tprotected constructor(uid: string) {\n\t\tthis.uid = uid;\n\t}\n\n\tabstract toAggregateId(): AggregateId;\n\n\ttoString(): string {\n\t\treturn this.uid;\n\t}\n\n\tgetId(): string {\n\t\treturn this.uid;\n\t}\n\n\tequals(entityId: ReadModelRootId): boolean {\n\t\treturn this.uid === entityId.getId();\n\t}\n\n}\n","import { DomainEvent } from '../event/domain-event';\nimport { DomainEventBus } from '../../domain/event/domain-event.bus';\n\nimport { Reactive } from '../../../common/reactive/reactive';\nimport { AggregateId } from '../tactical/aggregate/aggregate-id';\nimport { CoreContainer } from '../core.container';\n\n/**\n * @deprecated\n */\nexport abstract class ReadModelRootRepository<I extends AggregateId> extends Reactive {\n\n\tprivate readonly domainEventBus: DomainEventBus = CoreContainer.resolve(DomainEventBus);\n\n\tprotected constructor() {\n\t\tsuper();\n\t\tthis.domainEventBus\n\t\t\t.ofEvents(\n\t\t\t\tthis.forEvents()\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tthis.hermesTakeUntil()\n\t\t\t)\n\t\t\t.subscribe((event: DomainEvent<I>) => {\n\n\t\t\t\ttry {\n\t\t\t\t\tthis.subscribe(event);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprotected abstract forEvents(): Array<typeof DomainEvent>;\n\n\tprotected abstract subscribe(event: DomainEvent<I>): void;\n\n}\n","import { ReadModelRoot } from '../read-model-root';\n\nimport { Optional } from '../../../../common/optional';\nimport { ReadModelRootId } from '../read-model-root-id';\nimport { AggregateId } from '../../tactical/aggregate/aggregate-id';\n\n/**\n * @deprecated\n */\nexport abstract class ReadModelStore<I extends ReadModelRootId, R extends ReadModelRoot<I>> {\n\n\tabstract getById(readModelRootId: AggregateId): Optional<R>;\n\n}\n","import { AggregateId } from '../tactical/aggregate/aggregate-id';\nimport { DomainEvent } from './domain-event';\nimport { ReadModelRootId } from '../read/read-model-root-id';\nimport { DomainEventBus } from '../../domain/event/domain-event.bus';\nimport { ReactiveService } from '../../../common/reactive/reactive.service';\nimport { hermesFilter } from '../../../common/stream/core/operator/hermes.filter';\nimport { HermesObservable } from '../../../common/stream/core/observable/hermes.observable';\nimport { CoreContainer } from '../core.container';\n\nexport abstract class EventRepository<R extends ReadModelRootId> extends ReactiveService {\n\n\tprivate readonly domainEventBus: DomainEventBus = CoreContainer.resolve(DomainEventBus);\n\n\tprotected constructor() {\n\t\tsuper();\n\t}\n\n\tprotected onEvent(aggregateId: R, eventType: any): HermesObservable<DomainEvent<any>> {\n\n\t\treturn this.domainEventBus\n\t\t\t\t   .ofEvents([\n\t\t\t\t\t\t   eventType as any\n\t\t\t\t\t   ]\n\t\t\t\t   )\n\t\t\t\t   .pipe(\n\t\t\t\t\t   hermesFilter((event: DomainEvent<AggregateId>) => event.getAggregateId().toString() === aggregateId.toString())\n\t\t\t\t   );\n\t}\n}\n","import { EntityId } from './entity.id';\n\nexport abstract class Entity<T extends EntityId> {\n\n\tprivate readonly entityId: T;\n\n\tprotected constructor(id: T) {\n\t\tthis.entityId = id;\n\t}\n\n\tgetId(): EntityId {\n\t\treturn this.entityId;\n\t}\n\n\tequals(entity: Entity<T>): boolean {\n\t\treturn this.entityId.equals(entity.getId());\n\t}\n\n}\n","import { HermesId } from './hermes.id';\n\nexport abstract class EntityId<T = string> extends HermesId<T> {\n\n}\n","export function ValueObject(_target: Function) {\n}\n\nexport function DomainObject(_target: Function) {\n}\n\nexport function ReadModelObject(_target: Function) {\n}\n","export abstract class FeatureModule {\n}\n","import { HermesObservable } from '../hermes.observable';\n\nexport function hermesNever<T>(): HermesObservable<T> {\n\treturn new HermesObservable<T>(() => {\n\t});\n}\n","import { HermesObservable } from '../hermes.observable';\nimport { HermesObserver } from '../hermes.observer';\n\nexport function hermesInterval(interval: number): HermesObservable<number> {\n\n\tlet counter = 0;\n\n\treturn new HermesObservable<number>((observer: HermesObserver<number>) => {\n\n\t\tconst id = setInterval(() => {\n\t\t\tobserver.next(counter++);\n\t\t}, interval);\n\n\t\treturn () => {\n\t\t\tclearInterval(id);\n\t\t\tobserver.complete();\n\t\t};\n\t});\n}\n","import { HermesObservable } from '../hermes.observable';\nimport { HermesObserver } from '../hermes.observer';\n\nexport function hermesTimer(time: number): HermesObservable<number> {\n\n\treturn new HermesObservable<number>((observer: HermesObserver<number>) => {\n\n\t\tconst id = setTimeout(() => {\n\t\t\tobserver.next(0);\n\t\t}, time);\n\n\t\treturn () => {\n\t\t\tclearTimeout(id);\n\t\t\tobserver.complete();\n\t\t};\n\t});\n}\n","import { HermesObservable } from '../hermes.observable';\n\ntype EventType = string;\n\nexport function hermesFromEvent(element: HTMLElement, type: EventType): HermesObservable<any> {\n\n\treturn new HermesObservable<any>((observer) => {\n\n\t\tconst listener = (event: Event) => {\n\t\t\tobserver.next(event);\n\t\t};\n\n\t\telement.addEventListener(type, listener);\n\n\t\treturn () => {\n\t\t\telement.removeEventListener(type, listener);\n\t\t};\n\t});\n}\n","import { HermesObservable } from '../hermes.observable';\n\nexport function hermesThrowError<T>(error: any): HermesObservable<T> {\n\n\treturn new HermesObservable<T>(observer => {\n\t\tobserver.error(error);\n\t});\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { subscriberForOperator } from './operator-utils';\n\n\nexport function hermesSkip<T>(valuesNumber: number): HermesOperatorFunction<T, T> {\n\n\treturn (source) => {\n\n\t\treturn new HermesObservable(observer => {\n\n\t\t\tlet index = 0;\n\n\t\t\tconst subscriber = subscriberForOperator(observer, (value) => {\n\t\t\t\tif (index >= valuesNumber) {\n\t\t\t\t\tobserver.next(value);\n\t\t\t\t}\n\n\t\t\t\tindex++;\n\t\t\t});\n\n\t\t\treturn source.subscribe(subscriber).getFinalize();\n\t\t});\n\t};\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { HermesSubscriber } from '../observable/subscriber/hermes.subscriber';\nimport { subscriberForOperator } from './operator-utils';\nimport { HermesObserver } from '../observable/hermes.observer';\n\n\nexport function hermesSwitchMap<T, R>(operation: (value: T) => HermesObservable<R>): HermesOperatorFunction<T, R> {\n\n\treturn (source: HermesObservable<T>) => {\n\t\treturn new HermesObservable<R>((observer: HermesObserver<any>) => {\n\n\t\t\tlet isOuterCompleted = false;\n\t\t\tlet innerSubscriber: HermesSubscriber<T> | null = null;\n\n\t\t\tconst tryToComplete = function() {\n\t\t\t\tif (isOuterCompleted && !innerSubscriber) {\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst outerSubscriber = subscriberForOperator<T>(\n\t\t\t\tobserver,\n\t\t\t\t(v: T) => {\n\n\t\t\t\t\tif (innerSubscriber) {\n\t\t\t\t\t\tinnerSubscriber.unsubscribe();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst subscriber = new HermesSubscriber({\n\t\t\t\t\t\tnext: (v2: any) => observer.next(v2),\n\t\t\t\t\t\terror: (e: any) => observer.error(e),\n\t\t\t\t\t\tcomplete: () => {\n\t\t\t\t\t\t\tinnerSubscriber = null;\n\t\t\t\t\t\t\ttryToComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tinnerSubscriber = subscriber;\n\n\t\t\t\t\tconst innerSubscription = operation(v).subscribe(\n\t\t\t\t\t\tsubscriber\n\t\t\t\t\t);\n\n\t\t\t\t\treturn innerSubscription.getFinalize();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tisOuterCompleted = true;\n\t\t\t\t\ttryToComplete();\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn source.subscribe(outerSubscriber).getFinalize();\n\t\t});\n\t};\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { subscriberForOperator } from './operator-utils';\n\nexport function hermesTap<T>(operation: (value: T) => void): HermesOperatorFunction<T, T> {\n\treturn (source) => {\n\t\treturn new HermesObservable(observer => {\n\n\t\t\tconst subscriber = subscriberForOperator(observer, (value) => {\n\t\t\t\toperation(value);\n\t\t\t\tobserver.next(value);\n\t\t\t});\n\n\t\t\treturn source.subscribe(subscriber).getFinalize();\n\t\t});\n\t};\n}\n","import { HermesObservable, HermesOperatorFunction } from '../observable/hermes.observable';\nimport { subscriberForOperator } from './operator-utils';\n\n\nexport function hermesToArray<T>(): HermesOperatorFunction<T, Array<T>> {\n\n\treturn (source: HermesObservable<T>) => {\n\t\treturn new HermesObservable<Array<T>>((observer) => {\n\n\t\t\tconst values: Array<T> = [];\n\n\t\t\tconst subscriber =\n\t\t\t\tsubscriberForOperator<any>(\n\t\t\t\t\tobserver,\n\t\t\t\t\t(value: T) => {\n\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tif (values.length > 0) {\n\t\t\t\t\t\t\tobserver.next(values);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tobserver.complete();\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\treturn source.subscribe(subscriber).getFinalize();\n\t\t});\n\t};\n}\n","import { HermesObservable } from '../../core/observable/hermes.observable';\nimport { Observable } from 'rxjs';\n\nexport function fromRxJsObservable<T>(source$: Observable<T>): HermesObservable<T> {\n\treturn new HermesObservable((observer) => {\n\t\tconst subscription = source$.subscribe(\n\t\t\t(value: T) => observer.next(value),\n\t\t\t(error: any) => observer.error(error),\n\t\t\t() => observer.complete()\n\t\t);\n\t\treturn () => subscription.unsubscribe();\n\t});\n}\n","import { HermesArchiveSubject } from '../stream/core/observable/hermes.archive-subject';\nimport { HermesObservable } from '../stream/core/observable/hermes.observable';\nimport { hermesDistinctUntilChanged } from '../stream/core/operator/hermes.distinct-until-changed';\n\nexport abstract class Archive<T> {\n\n\tprivate readonly archive$: HermesArchiveSubject<T>;\n\n\tprotected constructor(value?: T) {\n\t\tthis.archive$ = HermesArchiveSubject.of(value);\n\t}\n\n\ton(): HermesObservable<T> {\n\t\treturn this.archive$\n\t\t\t\t   .toObservable()\n\t\t\t\t   .pipe(\n\t\t\t\t\t   hermesDistinctUntilChanged(this.compare)\n\t\t\t\t   );\n\t}\n\n\tnext(value: T): void {\n\t\tthis.archive$.next(value);\n\t}\n\n\tcompare(one: T, two: T): boolean {\n\t\treturn one === two;\n\t}\n}\n","export class RandomIdGenerator {\n\n\tstatic index = 0;\n\n\tstatic generate(): number {\n\t\tRandomIdGenerator.index++;\n\t\treturn RandomIdGenerator.index;\n\t}\n}\n","import { ReadModelRootId } from '../../api/read/read-model-root-id';\n\nexport abstract class PersistAnemia<I extends ReadModelRootId> {\n\n\tprivate readonly readModelRootId: I;\n\n\tprotected constructor(uid: I) {\n\t\tthis.readModelRootId = uid;\n\t}\n\n\tgetReadModelRootId(): I {\n\t\treturn this.readModelRootId;\n\t}\n\n\tgetId(): string {\n\t\treturn this.getReadModelRootId().toString();\n\t}\n\n}\n","import { PersistAnemia } from './persist-anemia';\nimport { Optional } from '../../../common/optional';\nimport { ReadModelRootId } from '../../api/read/read-model-root-id';\nimport { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\n\n\nexport abstract class PersistStateStore<I extends ReadModelRootId, A extends PersistAnemia<I>> {\n\n\tprivate readonly state: Map<string, A> = new Map();\n\n\tset(anemia: A): void {\n\t\tthis.state.set(anemia.getId(), anemia);\n\t}\n\n\tsetMany(anemias: Array<A>): void {\n\t\tanemias.forEach((anemia: A) => {\n\t\t\tthis.set(anemia);\n\t\t});\n\t}\n\n\tget(aggregateId: AggregateId): Optional<A> {\n\t\treturn Optional.of(this.state.get(aggregateId.toString()));\n\t}\n\n\tgetAll(): Array<A> {\n\t\treturn Array.from(this.state.values());\n\t}\n\n\tclear(): void {\n\t\tthis.state.clear();\n\t}\n}\n","import { ReadModelRoot } from '../../../api/read/read-model-root';\nimport { ReadModelStore } from '../../../api/read/store/read-model.store';\n\nimport { PersistAnemia } from '../persist-anemia';\nimport { PersistStateStore } from '../persist-state.store';\nimport { Optional } from '../../../../common/optional';\nimport { ReadModelRootId } from '../../../api/read/read-model-root-id';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\n\nexport abstract class PersistReadModelStore<I extends ReadModelRootId,\n\tR extends ReadModelRoot<I>,\n\tA extends PersistAnemia<I>> extends ReadModelStore<I, R> {\n\n\tprotected constructor(private readonly stateStore: PersistStateStore<I, A>) {\n\t\tsuper();\n\t}\n\n\tabstract toReadModel(anemia: A): R;\n\n\tgetById(aggregateId: AggregateId): Optional<R> {\n\t\treturn this.getValue(aggregateId);\n\t}\n\n\tgetAll(): Array<R> {\n\t\treturn this.getAllValues();\n\t}\n\n\tprivate getAllValues(): Array<R> {\n\t\treturn this.stateStore\n\t\t\t\t   .getAll()\n\t\t\t\t   .map((anemia: A) => this.toReadModel(anemia));\n\t}\n\n\tprivate getValue(aggregateId: AggregateId): Optional<R> {\n\t\tconst optAnemia = this.stateStore.get(aggregateId);\n\n\t\treturn optAnemia.map(this.toReadModel);\n\t}\n\n}\n","import { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\nimport { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { AggregateStore } from '../../../domain/command/store/aggregate.store';\nimport { AggregateStoreRegister } from '../../../domain/command/store/aggregate-store.register';\n\nimport { PersistAnemia } from '../persist-anemia';\nimport { PersistStateStore } from '../persist-state.store';\nimport { Optional } from '../../../../common/optional';\nimport { ReadModelRootId } from '../../../api/read/read-model-root-id';\nimport { CoreContainer } from '../../../api/core.container';\n\n\nexport abstract class PersistAggregateStore<I extends AggregateId, D extends AggregateRoot<I>, A extends PersistAnemia<ReadModelRootId>>\n\textends AggregateStore<I, D> {\n\n\tprivate readonly aggregateStoreRegister: AggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n\n\tprotected constructor(private readonly stateStore: PersistStateStore<any, A>) {\n\t\tsuper();\n\t\tthis.aggregateStoreRegister.register(this);\n\t}\n\n\tabstract toAnemia(aggregate: D): A;\n\n\tabstract fromAnemia(anemia: A): D;\n\n\tsave(aggregate: D): void {\n\t\tthis.saveValue(aggregate);\n\t}\n\n\tfindById(aggregateId: I): Optional<D> {\n\t\treturn this.getValue(aggregateId);\n\t}\n\n\tprivate saveValue(aggregate: D): void {\n\n\t\tconst anemia = this.toAnemia(aggregate);\n\n\t\tthis.stateStore.set(anemia);\n\t}\n\n\tprivate getValue(aggregateId: I): Optional<D> {\n\t\tconst optAnemia = this.stateStore.get(aggregateId);\n\n\t\treturn optAnemia.map(this.fromAnemia);\n\t}\n\n}\n","import { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\n\nimport { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { AggregateStore } from '../../../domain/command/store/aggregate.store';\nimport { AggregateStoreRegister } from '../../../domain/command/store/aggregate-store.register';\n\nimport { InMemoryStore } from '../in-memory.store';\n\nimport { Optional } from '../../../../common/optional';\nimport { CoreContainer } from '../../../api/core.container';\n\nexport abstract class InMemoryAggregateStore<I extends AggregateId, T extends AggregateRoot<I>> extends AggregateStore<I, T> {\n\n\tprivate readonly aggregateStoreRegister: AggregateStoreRegister = CoreContainer.resolve(AggregateStoreRegister);\n\n\tprotected constructor(private readonly inMemoryStore: InMemoryStore<I, T>) {\n\t\tsuper();\n\t\tthis.aggregateStoreRegister.register(this);\n\t}\n\n\tsave(aggregate: T): void;\n\tsave(aggregates: Array<T>): void;\n\tsave(arg: T | Array<T>): void {\n\n\t\tif (Array.isArray(arg)) {\n\t\t\targ.forEach((aggregate: T) => {\n\t\t\t\tthis.inMemoryStore.set(aggregate);\n\t\t\t});\n\t\t} else {\n\t\t\tconst aggregate = arg;\n\n\t\t\tthis.inMemoryStore.set(aggregate);\n\t\t}\n\t}\n\n\tfindById(aggregateId: I): Optional<T> {\n\n\t\tconst optAggregate = this.inMemoryStore.get(aggregateId);\n\n\t\toptAggregate.ifPresent((a) => a.clearEvents());\n\n\t\treturn optAggregate;\n\t}\n\n\tremove(aggregateId: I): void {\n\t\tthis.inMemoryStore.delete(aggregateId);\n\t}\n\n}\n","import { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\n\nimport { ReadModelRoot } from '../../../api/read/read-model-root';\n\nimport { ReadModelStore } from '../../../api/read/store/read-model.store';\n\nimport { InMemoryStore } from '../in-memory.store';\nimport { Optional } from '../../../../common/optional';\nimport { ReadModelRootId } from '../../../api/read/read-model-root-id';\n\n\nexport abstract class InMemoryReadModelStore<I extends ReadModelRootId,\n\tR extends ReadModelRoot<I>,\n\tB extends AggregateId,\n\tA extends AggregateRoot<B>> extends ReadModelStore<I, R> {\n\n\tprotected constructor(private readonly inMemoryStore: InMemoryStore<B, A>) {\n\t\tsuper();\n\t}\n\n\tabstract toReadModel(aggregate: A): R;\n\n\tgetById(aggregateId: B): Optional<R> {\n\t\treturn this.getValue(aggregateId);\n\t}\n\n\tprivate getValue(aggregateId: B): Optional<R> {\n\n\t\tconst optAggregate: Optional<A> = this.inMemoryStore.get(aggregateId);\n\n\t\treturn optAggregate.map(this.toReadModel.bind(this));\n\t}\n\n}\n","import { AggregateId } from '../../api/tactical/aggregate/aggregate-id';\nimport { AggregateRoot } from '../../api/tactical/aggregate/aggregate-root';\nimport { Optional } from '../../../common/optional';\n\nexport abstract class InMemoryStore<I extends AggregateId, A extends AggregateRoot<I>> {\n\n\tprivate readonly state: Map<string, A> = new Map();\n\n\tset(aggregate: A): void {\n\t\tthis.state.set(aggregate.getId().toString(), aggregate);\n\t}\n\n\tsetMany(aggregates: Array<A>): void {\n\t\taggregates.forEach((aggregate: A) => {\n\t\t\tthis.set(aggregate);\n\t\t});\n\t}\n\n\tget(aggregateId: I): Optional<A> {\n\t\treturn Optional.of(this.state.get(aggregateId.toString()));\n\t}\n\n\tgetAll(): Array<Optional<A>> {\n\t\treturn Array.from(this.state.values()).map(v => Optional.of(v));\n\t}\n\n\thas(aggregateId: I): boolean {\n\t\treturn this.state.has(aggregateId.toString());\n\t}\n\n\tdelete(aggregateId: I): void {\n\t\tthis.state.delete(aggregateId.toString());\n\t}\n\n\tclear(): void {\n\t\tthis.state.clear();\n\t}\n\n}\n","import { AggregateId } from '../core/api/tactical/aggregate/aggregate-id';\n\nimport { AggregateEvent } from '../core/api/tactical/aggregate/aggregate-event';\nimport { DomainEvent } from '../core/api/event/domain-event';\nimport { HermesObservable } from '../common/stream/core/observable/hermes.observable';\nimport { Optional } from '../common/optional';\nimport { DomainEventBus } from '../core/domain/event/domain-event.bus';\nimport { CoreContainer } from '../core/api/core.container';\n\ndeclare const expect: any;\ndeclare const it: any;\ndeclare const jest: any;\n\nexport function assertDomainEvents<I extends AggregateId>(actualEvents: ReadonlyArray<DomainEvent<I>>, expectedEvents: Array<DomainEvent<I>>): void {\n\n\texpect(actualEvents.length).toEqual(expectedEvents.length);\n\n\tfor (const actualEvent of actualEvents) {\n\n\t\tconst expectedEvent = expectedEvents.find((event: DomainEvent<I>) => {\n\t\t\treturn event.equalsByType(actualEvent);\n\t\t});\n\n\t\texpect(expectedEvent).toBeDefined();\n\t\texpect(actualEvent.equalsByType(expectedEvent)).toBeTruthy();\n\t\t// expect(actualEvent.aggregateId).toEqual(expectedEvent.aggregateId, 'Events aggregateId should be the same');\n\t\texpect(actualEvent.getPayload()).toEqual(expectedEvent.getPayload(), 'Events payload should be the same');\n\t}\n\n}\n\nexport function assertAggregateEvents<T extends AggregateId>(actualEvents: ReadonlyArray<AggregateEvent<T>>, expectedEvents: Array<AggregateEvent<T>>): void {\n\n\texpect(actualEvents.length).toEqual(expectedEvents.length, 'Aggregate events');\n\n\tfor (const actualEvent of actualEvents) {\n\n\t\tconst expectedEvent = expectedEvents.find((event: AggregateEvent<T>) => {\n\t\t\treturn event.equals(actualEvent);\n\t\t});\n\n\t\texpect(expectedEvent).toBeDefined();\n\t}\n}\n\nexport function testEventRepositoryIsEmptyOnStart<T>(createStream: () => HermesObservable<T>, desc: string): void {\n\n\tit('should be no ' + desc + ' events on start', () => {\n\n\t\texpect.assertions(3);\n\n\t\t// given\n\t\tconst nextFn = jest.fn(),\n\t\t\terrorFn = jest.fn(),\n\t\t\tcompleteFn = jest.fn();\n\n\t\t// when\n\t\tcreateStream()\n\t\t\t.subscribe(\n\t\t\t\t() => nextFn(),\n\t\t\t\t(err: any) => errorFn(err),\n\t\t\t\t() => completeFn()\n\t\t\t);\n\n\t\t// then\n\t\texpect(nextFn).not.toHaveBeenCalled();\n\t\texpect(errorFn).not.toHaveBeenCalled();\n\t\texpect(completeFn).not.toHaveBeenCalled();\n\t});\n}\n\nexport function onDefaultValuesWarehouseTest<T>(createStream: () => HermesObservable<T>, defaultValue: T, desc: string): void {\n\n\tit('should have default value ' + desc, () => {\n\n\t\texpect.assertions(4);\n\n\t\t// given\n\t\tconst nextFn = jest.fn(),\n\t\t\terrorFn = jest.fn(),\n\t\t\tcompleteFn = jest.fn();\n\n\t\t// when\n\t\tcreateStream()\n\t\t\t.subscribe(\n\t\t\t\t(value) => nextFn(value),\n\t\t\t\t(err: any) => errorFn(err),\n\t\t\t\t() => completeFn()\n\t\t\t);\n\n\t\t// then\n\t\texpect(nextFn).toHaveBeenCalledWith(defaultValue);\n\t\texpect(nextFn).toHaveBeenCalledTimes(1);\n\t\texpect(errorFn).not.toHaveBeenCalled();\n\t\texpect(completeFn).not.toHaveBeenCalled();\n\t});\n}\n\nexport function onceDefaultValuesWarehouseTest<T>(createStream: () => HermesObservable<T>, defaultValue: T, desc: string): void {\n\n\tit('should have default value ' + desc, () => {\n\n\t\texpect.assertions(4);\n\n\t\t// given\n\t\tconst nextFn = jest.fn(),\n\t\t\terrorFn = jest.fn(),\n\t\t\tcompleteFn = jest.fn();\n\n\t\t// when\n\t\tcreateStream()\n\t\t\t.subscribe(\n\t\t\t\t(value) => nextFn(value),\n\t\t\t\t(err: any) => errorFn(err),\n\t\t\t\t() => completeFn()\n\t\t\t);\n\n\t\t// then\n\t\texpect(nextFn).toHaveBeenCalledWith(defaultValue);\n\t\texpect(nextFn).toHaveBeenCalledTimes(1);\n\t\texpect(errorFn).not.toHaveBeenCalled();\n\t\texpect(completeFn).toHaveBeenCalledTimes(1);\n\t});\n}\n\nexport function onWarehouseEmpty<T>(createStream: () => HermesObservable<T>, desc: string): void {\n\n\tit('should be empty ' + desc, () => {\n\n\t\texpect.assertions(3);\n\n\t\t// given\n\t\tconst nextFn = jest.fn(),\n\t\t\terrorFn = jest.fn(),\n\t\t\tcompleteFn = jest.fn();\n\n\t\t// when\n\t\tcreateStream()\n\t\t\t.subscribe(\n\t\t\t\t(value) => nextFn(value),\n\t\t\t\t(err: any) => errorFn(err),\n\t\t\t\t() => completeFn()\n\t\t\t);\n\n\t\t// then\n\t\texpect(nextFn).not.toHaveBeenCalled();\n\t\texpect(errorFn).not.toHaveBeenCalled();\n\t\texpect(completeFn).not.toHaveBeenCalled();\n\t});\n}\n\nexport function findDefaultValuesWarehouseTest<T>(createValue: () => Optional<T>, defaultValue: T, desc: string) {\n\n\tit('should find default value' + desc, function() {\n\n\t\texpect.assertions(1);\n\n\t\texpect(createValue()).toEqual(Optional.of(defaultValue));\n\t});\n}\n\n\nexport function commandInterceptedByHandlerTest(dispatch: () => void, handlerType: any): void {\n\n\tit('should trigger command handler', () => {\n\n\t\texpect.assertions(1);\n\n\t\t// given\n\t\tconst handler = CoreContainer.resolve(handlerType),\n\t\t\thandlerSpy = jest.spyOn(handler, 'handle');\n\n\t\t// when\n\t\tdispatch();\n\n\t\t// then\n\t\texpect(handlerSpy).toHaveBeenCalled();\n\t});\n}\n\nexport function commandPublishEventTest(dispatch: () => void, eventType: any): void {\n\n\tit('should dispatch event', () => {\n\n\t\texpect.assertions(1);\n\n\t\t// given\n\t\tCoreContainer.resolve(DomainEventBus)\n\t\t\t\t\t .subscribe((event: any) => {\n\n\t\t\t\t\t\t // then\n\t\t\t\t\t\t if (event instanceof eventType) {\n\t\t\t\t\t\t\t expect(event instanceof eventType).toEqual(true);\n\t\t\t\t\t\t }\n\t\t\t\t\t });\n\n\t\t// when\n\t\tdispatch();\n\t});\n}\n\nexport function commandTriggersHandlerAndPublishEventTest(dispatch: () => void, handlerType: any, eventType: any): void {\n\n\tcommandInterceptedByHandlerTest(\n\t\tdispatch,\n\t\thandlerType\n\t);\n\n\tcommandPublishEventTest(\n\t\tdispatch,\n\t\teventType\n\t);\n}\n","import { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { Command } from '../../../api/command/command';\n\nexport abstract class CreateAggregateCommand extends Command<AggregateId> {\n\n\tprotected constructor(aggregateId: AggregateId,\n\t\t\t\t\t\t  type: string) {\n\t\tsuper(aggregateId, type);\n\t}\n\n}\n","import { CommandLogger } from '../domain/command/command.logger';\nimport { DomainEventLogger } from '../domain/event/domain-event.logger';\nimport { CoreContainer } from './core.container';\n\ndeclare const window: any;\n\nexport const hermesApi = 'hermesApi';\n\nexport function initHermesApi(): void {\n\n\tconst cl = CoreContainer.resolve(CommandLogger),\n\t\tdel = CoreContainer.resolve(DomainEventLogger);\n\n\tconst api = () => {\n\t\treturn {\n\t\t\tset loggers(enabled: boolean) {\n\t\t\t\tif (enabled) {\n\t\t\t\t\t// api.commandLogger.start(); TO FIX\n\t\t\t\t\t// api.eventLogger.start();\n\t\t\t\t} else {\n\t\t\t\t\t// api.commandLogger.stop(); // TO FIX\n\t\t\t\t\t// api.eventLogger.stop();\n\t\t\t\t}\n\t\t\t},\n\t\t\tset domain(domainName: string) {\n\t\t\t\tif (domainName) {\n\t\t\t\t\tcl.setDomain(domainName);\n\t\t\t\t\tdel.setDomain(domainName);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t};\n\n\twindow[hermesApi] = api();\n\n\twindow[hermesApi].loggers = false;\n}\n","import { hermesApi } from './hermes-api';\n\ndeclare const window: Window;\n\nexport function enableHermesLoggers(domainName?: string, windowObject?: Window): void {\n\n\tconst winRef = windowObject ? windowObject : window;\n\n\tif (domainName) {\n\t\twinRef[hermesApi].domain = domainName;\n\t}\n\n\twinRef[hermesApi].loggers = true;\n}\n\nexport function disableHermesLoggers(windowObject?: Window): void {\n\n\tconst winRef = windowObject ? windowObject : window;\n\n\tdelete winRef[hermesApi].domain;\n\n\twinRef[hermesApi].loggers = false;\n}\n","import { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { CreateAggregateCommandHandler } from './create-aggregate.command-handler';\nimport { AggregateFactoryArchive, AggregateRepositoryArchive } from '../config/define';\nimport { AggregateFactory } from '../../../api/tactical/aggregate/aggregate-factory';\nimport { AggregateRepository } from '../../../api/tactical/aggregate/aggregate-repository';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { CreateAggregateCommand } from './create-aggregate.command';\nimport { DomainEventPublisher } from '../../event/domain-event.publisher';\nimport { CoreContainer } from '../../../api/core.container';\n\n\nexport function createAggregateCommandHandlerFactory<I extends AggregateId, A extends AggregateRoot<I>, C extends CreateAggregateCommand>(\n\tcreateAggregateCommandHandler: CreateAggregateCommandHandler<C>,\n\taggregateName: string\n): CreateAggregateCommandHandlerImpl<I, A, C> {\n\n\treturn new CreateAggregateCommandHandlerImpl<I, A, C>(\n\t\tcreateAggregateCommandHandler,\n\t\taggregateName\n\t);\n}\n\nexport class CreateAggregateCommandHandlerImpl<I extends AggregateId, A extends AggregateRoot<I>, C extends CreateAggregateCommand> {\n\n\tprivate readonly aggregateFactoryArchive: AggregateFactoryArchive<I, A> = CoreContainer.resolve(AggregateFactoryArchive);\n\n\tprivate readonly aggregateRepositoryArchive: AggregateRepositoryArchive<I, A> = CoreContainer.resolve(AggregateRepositoryArchive);\n\n\tprivate readonly domainEventPublisher: DomainEventPublisher = CoreContainer.resolve(DomainEventPublisher);\n\n\tprivate readonly commandType: string;\n\n\tconstructor(private readonly createAggregateCommandHandler: CreateAggregateCommandHandler<C>,\n\t\t\t\tprivate readonly aggregateType: string) {\n\t\tthis.commandType = this.createCommandInstance().getMessageType();\n\t}\n\n\thandleCommand(command: C) {\n\t\tconst aggregateId = command.getAggregateId() as I;\n\n\t\tconst optFactory = this.aggregateFactoryArchive.get(this.aggregateType);\n\n\t\toptFactory.ifPresent((factory: AggregateFactory<I, A>) => {\n\n\t\t\tconst aggregate = factory.create(aggregateId);\n\n\t\t\tconst type = aggregate.getType(),\n\t\t\t\tcreateCommandConstructor = aggregate.createEvent();\n\n\t\t\tconst createCommand = new createCommandConstructor(aggregateId, type);\n\n\t\t\taggregate.addEvent(createCommand);\n\n\t\t\tconst optRepository = this.aggregateRepositoryArchive.get(this.aggregateType);\n\n\t\t\toptRepository.ifPresent((repo: AggregateRepository<I, A>) => {\n\n\t\t\t\trepo.save(aggregate);\n\n\t\t\t\tthis.domainEventPublisher.publishFromAggregate(aggregate);\n\t\t\t});\n\t\t});\n\n\t}\n\n\tforCommand(command: C): boolean {\n\t\treturn this.commandType === command.getMessageType();\n\t}\n\n\tprivate createCommandInstance(): C {\n\t\tconst args: Array<void> = [],\n\t\t\targumentLength = this.createAggregateCommandHandler.forCommand().constructor.length;\n\n\t\targs.fill(undefined, 0, argumentLength);\n\n\t\tif (args.length === 0) {\n\t\t\treturn (new (this.createAggregateCommandHandler.forCommand() as any)());\n\t\t} else if (args.length === 1) {\n\t\t\treturn (new (this.createAggregateCommandHandler.forCommand() as any)(args[0]));\n\t\t} else if (args.length === 2) {\n\t\t\treturn (new (this.createAggregateCommandHandler.forCommand() as any)(args[0], args[1]));\n\t\t} else if (args.length === 3) {\n\t\t\treturn (new (this.createAggregateCommandHandler.forCommand() as any)(args[0], args[1], args[2]));\n\t\t} else if (args.length === 4) {\n\t\t\treturn (new (this.createAggregateCommandHandler.forCommand() as any)(args[0], args[1], args[2], args[3]));\n\t\t} else if (args.length === 5) {\n\t\t\treturn (new (this.createAggregateCommandHandler.forCommand() as any)(args[0], args[1], args[2], args[3], args[4]));\n\t\t} else {\n\t\t\tthrow new Error('CreateAggregateCommandHandlerImpl constructor out of arguments');\n\t\t}\n\t}\n\n}\n","import { AggregateRoot } from '../../../api/tactical/aggregate/aggregate-root';\nimport { Command } from '../../../api/command/command';\nimport { AggregateRepositoryArchive } from '../config/define';\nimport { AggregateRepository } from '../../../api/tactical/aggregate/aggregate-repository';\nimport { CommandHandler } from './command.handler';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { CoreContainer } from '../../../api/core.container';\nimport { DomainEventPublisher } from '../../event/domain-event.publisher';\n\n\nexport function commandHandlerFactory<I extends AggregateId, A extends AggregateRoot<I>, C extends Command<I>>(\n\tcommandHandler: CommandHandler<A, C>,\n\taggregateName: string\n): CommandHandlerImpl<I, A, C> {\n\treturn new CommandHandlerImpl<I, A, C>(commandHandler, aggregateName);\n}\n\nexport class CommandHandlerImpl<I extends AggregateId, A extends AggregateRoot<I>, C extends Command<I>> {\n\n\tprivate readonly aggregateRepositoryArchive: AggregateRepositoryArchive<I, A> = CoreContainer.resolve(AggregateRepositoryArchive);\n\n\tprivate readonly domainEventPublisher: DomainEventPublisher = CoreContainer.resolve(DomainEventPublisher);\n\n\tprivate readonly commandType: string;\n\n\tconstructor(private readonly commandHandler: CommandHandler<A, C>,\n\t\t\t\tprivate readonly aggregateType: string) {\n\t\tthis.commandType = this.createCommandInstance().getMessageType();\n\t}\n\n\tpublishDomainEvents(aggregate: A, command: C): void {\n\t\tif (this.commandHandler.publish) {\n\t\t\tthis.commandHandler.publish(aggregate, command);\n\t\t} else {\n\t\t\tthis.domainEventPublisher.publishFromAggregate(aggregate);\n\t\t}\n\t}\n\n\thandleCommand(command: C): void {\n\n\t\tconst aggregateId = command.getAggregateId() as I;\n\n\t\tconst optRepository = this.aggregateRepositoryArchive.get(this.aggregateType);\n\n\t\toptRepository.ifPresent((repo: AggregateRepository<I, A>) => {\n\n\t\t\tconst optAggregate = repo.findById(aggregateId);\n\n\t\t\toptAggregate.ifPresent((aggregate: A) => {\n\n\t\t\t\tthis.commandHandler.handle(aggregate, command);\n\n\t\t\t\tthis.publishDomainEvents(aggregate, command);\n\t\t\t});\n\t\t});\n\t}\n\n\tforCommand(command: C): boolean {\n\t\treturn this.commandType === command.getMessageType();\n\t}\n\n\tprivate createCommandInstance(): C {\n\t\tconst args: Array<void> = [],\n\t\t\targumentLength = this.commandHandler.forCommand().constructor.length;\n\n\t\targs.fill(undefined, 0, argumentLength);\n\n\t\tif (args.length === 0) {\n\t\t\treturn (new (this.commandHandler.forCommand() as any)());\n\t\t} else if (args.length === 1) {\n\t\t\treturn (new (this.commandHandler.forCommand() as any)(args[0]));\n\t\t} else if (args.length === 2) {\n\t\t\treturn (new (this.commandHandler.forCommand() as any)(args[0], args[1]));\n\t\t} else if (args.length === 3) {\n\t\t\treturn (new (this.commandHandler.forCommand() as any)(args[0], args[1], args[2]));\n\t\t} else if (args.length === 4) {\n\t\t\treturn (new (this.commandHandler.forCommand() as any)(args[0], args[1], args[2], args[3]));\n\t\t} else if (args.length === 5) {\n\t\t\treturn (new (this.commandHandler.forCommand() as any)(args[0], args[1], args[2], args[3], args[4]));\n\t\t} else {\n\t\t\tthrow new Error('CommandHandlerImpl constructor out of arguments');\n\t\t}\n\t}\n\n}\n","import { DomainEventHandler } from '../../../api/event/domain-event.handler';\nimport { AggregateId } from '../../../api/tactical/aggregate/aggregate-id';\nimport { DomainEvent } from '../../../api/event/domain-event';\nimport { MultiDomainEventHandler } from '../../../api/event/multi-domain-event.handler';\nimport { DomainEventType } from '../../../api/event/domain-event-type';\nimport { CoreContainer } from '../../../api/core.container';\n\nexport function domainEventHandlerFactoryAsFactory<I extends AggregateId, E extends DomainEvent<I>>(\n\tdomainEventHandlerType: DomainEventHandler<I, E>\n) {\n\treturn CoreContainer.resolve(domainEventHandlerType as any);\n}\n\nexport function domainEventHandlerFactory<I extends AggregateId, E extends DomainEvent<I>>(\n\tdomainEventHandler: DomainEventHandler<I, E>\n): DomainEventHandlerImpl<I, E> {\n\treturn new DomainEventHandlerImpl<I, E>(domainEventHandler, [domainEventHandler.forEvent()]);\n}\n\n\nexport function multiDomainEventHandlerFactory<I extends AggregateId, E extends DomainEvent<I>>(\n\tdomainEventHandler: MultiDomainEventHandler<I, E>\n): DomainEventHandlerImpl<I, E> {\n\treturn new DomainEventHandlerImpl<I, E>(domainEventHandler, domainEventHandler.forEvents());\n}\n\n\nexport class DomainEventHandlerImpl<I extends AggregateId, E extends DomainEvent<I>> {\n\n\tprivate readonly eventTypes: Array<string>;\n\n\tconstructor(private readonly domainEventHandler: DomainEventHandler<I, E> | MultiDomainEventHandler<I, E>,\n\t\t\t\tprivate readonly events: Array<DomainEventType<E>>) {\n\t\tthis.eventTypes = this.createDomainEventTypes();\n\t}\n\n\thandleEvent(event: E): void {\n\t\tthis.domainEventHandler.handle(event);\n\t}\n\n\tforEvents(events: Array<E>): boolean {\n\t\treturn events.some((event: E) => {\n\t\t\treturn this.eventTypes.some((type: string) => {\n\t\t\t\treturn type === event.getMessageType();\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate createDomainEventTypes(): Array<string> {\n\n\t\tconst types = [];\n\n\t\tfor (const event of this.events) {\n\t\t\tconst instance = this.createDomainEventInstance(event);\n\t\t\ttypes.push(instance.getMessageType());\n\t\t}\n\n\t\treturn types;\n\t}\n\n\tprivate createDomainEventInstance(eventType: DomainEventType<E>): E {\n\t\tconst args: Array<void> = [],\n\t\t\targumentLength = eventType.constructor.length;\n\n\t\targs.fill(undefined, 0, argumentLength);\n\n\t\tif (args.length === 0) {\n\t\t\treturn (new (eventType as any)());\n\t\t} else if (args.length === 1) {\n\t\t\treturn (new (eventType as any)(args[0]));\n\t\t} else if (args.length === 2) {\n\t\t\treturn (new (eventType as any)(args[0], args[1]));\n\t\t} else if (args.length === 3) {\n\t\t\treturn (new (eventType as any)(args[0], args[1], args[2]));\n\t\t} else if (args.length === 4) {\n\t\t\treturn (new (eventType as any)(args[0], args[1], args[2], args[3]));\n\t\t} else if (args.length === 5) {\n\t\t\treturn (new (eventType as any)(args[0], args[1], args[2], args[3], args[4]));\n\t\t} else {\n\t\t\tthrow new Error('DomainEventHandler constructor out of arguments');\n\t\t}\n\t}\n\n\n}\n","import { AggregateId } from './tactical/aggregate/aggregate-id';\nimport { AggregateRoot } from './tactical/aggregate/aggregate-root';\nimport { Command } from './command/command';\nimport { CommandHandler } from '../domain/command/handler/command.handler';\n\nimport {\n\tAggregateFactory, AggregateRepository,\n\tContainer,\n\tCoreContainer,\n\tCreateAggregateCommandHandler,\n\tDomainEvent,\n\tDomainEventHandler,\n\tMultiDomainEventHandler\n} from '../../index';\nimport { aggregateDefinitionToken } from '../domain/command/config/aggregate-definition.token';\nimport { CREATE_AGGREGATE_COMMAND_HANDLERS } from '../domain/command/create-aggregate/create-aggregate.command-handlers-token';\nimport { createAggregateCommandHandlerFactory } from '../domain/command/create-aggregate/create-aggregate.command-handler-impl';\nimport { COMMAND_HANDLERS } from '../domain/command/handler/command-handlers';\nimport { commandHandlerFactory } from '../domain/command/handler/command-handler-impl';\nimport { DOMAIN_EVENT_HANDLERS } from './event/domain-event-handlers';\nimport { domainEventHandlerFactory, multiDomainEventHandlerFactory } from '../domain/event/handler/domain-event-handler-impl';\n\n\nexport interface Type<T> extends Function {\n\tnew(...args: any[]): T;\n}\n\nexport interface ApiProviders {\n\n\tregisterProviders(container: Container): void;\n\n}\n\nexport type AggregateDefinition<I extends AggregateId, A extends AggregateRoot<I>, C extends Command<I>> = {\n\taggregateKey: string,\n\tcreateCommandHandler: Type<CreateAggregateCommandHandler<C>>,\n\tfactory: Type<AggregateFactory<I, A>>,\n\trepository: Type<AggregateRepository<I, A>>\n};\n\nexport interface DomainProviders {\n\n\tdefineAggregate<I extends AggregateId, A extends AggregateRoot<I>, C extends Command<I>>(): AggregateDefinition<I, A, C> | null;\n\n\tregisterKey(container: Container): string;\n\n\tregisterProviders(container: Container): void;\n\n\tregisterCommandHandlers<I extends AggregateId, A extends AggregateRoot<I>, C extends Command<I>>(): Array<Type<CommandHandler<A, C>>>;\n\n\tregisterDomainEventHandler<I extends AggregateId, E extends DomainEvent<I>>(): Array<Type<DomainEventHandler<I, E>>>;\n\n\tregisterMultiDomainEventHandler<I extends AggregateId, E extends DomainEvent<I>>(): Array<Type<MultiDomainEventHandler<I, E>>>;\n\n}\n\nexport class DomainInitializer {\n\n\tprivate readonly container: Container = CoreContainer;\n\n\tprivate initialized = false;\n\n\tconstructor(private readonly api: ApiProviders,\n\t\t\t\tprivate readonly domain: DomainProviders) {\n\t}\n\n\tinit(): void {\n\n\t\tif (this.initialized) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tthis.defineAggregate();\n\n\t\tthis.registerApiProviders();\n\t\tthis.registerDomainProviders();\n\n\t\tthis.registerCommandHandlers();\n\t\tthis.registerEventHandlers();\n\t\tthis.registerMultiEventHandlers();\n\n\t\tthis.initialized = true;\n\t}\n\n\tprivate defineAggregate(): void {\n\t\tconst definition = this.domain.defineAggregate();\n\n\t\tif (definition) {\n\t\t\tthis.container.provide(definition.factory);\n\t\t\tthis.container.provide(definition.repository);\n\t\t\tthis.container.provideValue(definition.aggregateKey, definition.aggregateKey);\n\t\t\tthis.container.provideValueCollection(\n\t\t\t\taggregateDefinitionToken,\n\t\t\t\t{\n\t\t\t\t\tkey: definition.aggregateKey,\n\t\t\t\t\tfactory: definition.factory,\n\t\t\t\t\trepository: definition.repository\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.container.provide(definition.createCommandHandler);\n\t\t\tthis.container.provideFactoryCollection(\n\t\t\t\tCREATE_AGGREGATE_COMMAND_HANDLERS,\n\t\t\t\t{\n\t\t\t\t\tcreate: createAggregateCommandHandlerFactory,\n\t\t\t\t\tdeps: [\n\t\t\t\t\t\tdefinition.createCommandHandler,\n\t\t\t\t\t\tdefinition.aggregateKey\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate registerApiProviders() {\n\t\tthis.api.registerProviders(this.container);\n\t}\n\n\tprivate registerDomainProviders() {\n\t\tthis.domain.registerProviders(this.container);\n\t}\n\n\tprivate registerCommandHandlers() {\n\t\tthis.domain\n\t\t\t.registerCommandHandlers()\n\t\t\t.forEach((ch) => {\n\t\t\t\tthis.container.provide(ch);\n\t\t\t\tthis.container.provideFactoryCollection(\n\t\t\t\t\tCOMMAND_HANDLERS,\n\t\t\t\t\t{\n\t\t\t\t\t\tcreate: commandHandlerFactory,\n\t\t\t\t\t\tdeps: [\n\t\t\t\t\t\t\tch,\n\t\t\t\t\t\t\tthis.domain.registerKey(this.container)\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t}\n\n\tprivate registerEventHandlers() {\n\t\tthis.domain\n\t\t\t.registerDomainEventHandler()\n\t\t\t.forEach((eh) => {\n\t\t\t\tthis.container.provide(eh);\n\t\t\t\tthis.container.provideFactoryCollection(\n\t\t\t\t\tDOMAIN_EVENT_HANDLERS,\n\t\t\t\t\t{\n\t\t\t\t\t\tcreate: domainEventHandlerFactory,\n\t\t\t\t\t\tdeps: [\n\t\t\t\t\t\t\teh\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t}\n\n\tprivate registerMultiEventHandlers() {\n\t\tthis.domain\n\t\t\t.registerMultiDomainEventHandler()\n\t\t\t.forEach((eh) => {\n\t\t\t\tthis.container.provide(eh);\n\t\t\t\tthis.container.provideFactoryCollection(\n\t\t\t\t\tDOMAIN_EVENT_HANDLERS,\n\t\t\t\t\t{\n\t\t\t\t\t\tcreate: multiDomainEventHandlerFactory,\n\t\t\t\t\t\tdeps: [\n\t\t\t\t\t\t\teh\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t});\n\t}\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAEa,GAAG,CAAA;AAKK,IAAA,KAAA,CAAA;AAHH,IAAA,SAAS,CAAS;AAEnC,IAAA,WAAA,CACoB,KAAe,EAAA;QAAf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAU;AAElC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1C;IAED,OAAO,IAAI,CAAI,KAAe,EAAA;AAC7B,QAAA,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;KACtB;IAED,QAAQ,GAAA;QACP,OAAO,IAAI,CAAC,SAAS,CAAC;KACtB;IAEO,iBAAiB,GAAA;AAExB,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACjD,SAAA;AAAM,aAAA;YACN,OAAO,IAAI,CAAC,KAAK,CAAC;AAClB,SAAA;KACD;AACD;;ACzBK,MAAO,WAAe,SAAQ,GAAM,CAAA;AAEzC,IAAA,WAAA,CAAY,KAAe,EAAA;QAC1B,KAAK,CAAC,KAAK,CAAC,CAAC;KACb;IAED,QAAQ,GAAA;AACP,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AACnC,YAAA,OAAO,+BAA+B,GAAG,IAAI,CAAC,KAAK,CAAC;AACpD,SAAA;AAAM,aAAA;YACN,OAAO,+BAA+B,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC/D,SAAA;KACD;AAED;;MCZY,WAAW,CAAA;AAEN,IAAA,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;AAE3D,IAAA,MAAM,CAAI,KAAe,EAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,CAAC,GAAG,EAAE;AACT,YAAA,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACX;IAED,oBAAoB,CAAI,KAAe,EAAE,QAAuB,EAAA;AAE/D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC1B;AAED,IAAA,GAAG,CAAI,KAAe,EAAA;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,GAAG,CAAI,KAAe,EAAE,SAAwB,EAAA;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACzC;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KACrB;AACD;;MCpCY,eAAe,CAAA;AAEV,IAAA,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEhE,IAAA,GAAG,CAAI,GAAW,EAAA;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,CAA4B,yBAAA,EAAA,GAAG,CAAC,QAAQ,EAAE,CAAG,CAAA,CAAA,CAAC,CAAC;AAC/D,SAAA;AAED,QAAA,OAAO,aAAa,CAAC;KACrB;AAED,IAAA,GAAG,CAAI,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC/B;IAED,GAAG,CAAI,GAAW,EAAE,aAA4B,EAAA;QAC/C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;KACvC;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACvB;AAED;;MC1BY,UAAU,CAAA;AAEO,IAAA,YAAA,CAAA;AAA7B,IAAA,WAAA,CAA6B,YAA+B,EAAA;QAA/B,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAmB;KAC3D;IAED,QAAQ,GAAA;AAEP,QAAA,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAChC,SAAA;AAAM,aAAA;YACN,OAAO,IAAI,CAAC,YAAY,CAAC;AACzB,SAAA;KACD;IAED,UAAU,GAAA;AACT,QAAA,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;AACxC,YAAA,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC1C,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACb;AAED;;AAEG;IACH,YAAY,GAAA;AACX,QAAA,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;AACxC,YAAA,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACb;AAED;;MCnCqB,aAAa,CAAA;AAEO,IAAA,QAAA,CAAA;AAAzC,IAAA,WAAA,CAAyC,QAAuB,EAAA;QAAvB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAe;KAC/D;IAID,OAAO,GAAA;QACN,OAAO,CAAE,IAAI,CAAC,QAAgB,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,OAAY,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;KAC9F;AAED;;ACXK,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AAEpD,IAAA,WAAA,CAAY,QAAuB,EAAA;QAClC,KAAK,CAAC,QAAQ,CAAC,CAAC;KAChB;AAED,IAAA,MAAM,CAAC,aAAiC,EAAA;QACvC,OAAO,IAAK,IAAI,CAAC,QAAgB,CAAC,GAAG,aAAa,CAAC,CAAC;KACpD;AAED;;ACTK,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AAEpD,IAAA,WAAA,CAAY,QAAuB,EAAA;QAClC,KAAK,CAAC,QAAQ,CAAC,CAAC;KAChB;IAEQ,OAAO,GAAA;AACf,QAAA,OAAO,EAAE,CAAC;KACV;AAED,IAAA,MAAM,CAAC,cAAkC,EAAA;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC;KACrB;AAED;;ACdK,MAAO,oBAAqB,SAAQ,aAAa,CAAA;AAEtD,IAAA,WAAA,CAAY,QAAyB,EAAA;QACpC,KAAK,CAAC,QAAQ,CAAC,CAAC;KAChB;IAEQ,OAAO,GAAA;QACf,OAAO,CAAE,IAAI,CAAC,QAA4B,CAAC,IAAI,IAAI,EAAE;AACnD,aAAA,GAAG,CAAC,CAAC,OAAY,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;KACjD;AAED,IAAA,MAAM,CAAC,aAAiC,EAAA;QACvC,OAAQ,IAAI,CAAC,QAA4B,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC;KACnE;AAED;;MCjBqB,uBAAuB,CAAA;AAQ5C;;ACNK,MAAO,4BAA6B,SAAQ,uBAAuB,CAAA;IAEvD,SAAS,GAAyB,EAAE,CAAC;IAEtD,OAAO,GAAA;QAEN,OAAO,IAAI,CAAC,SAAS;AACf,aAAA,GAAG,CAAC,CAAC,QAAuB,KAAI;AAChC,YAAA,OAAO,CAAE,QAAgB,CAAC,QAAQ,IAAI,EAAE;AACtC,iBAAA,GAAG,CAAC,CAAC,OAAY,KAAI;AACrB,gBAAA,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAChC,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACR;AAED,IAAA,MAAM,CAAC,SAA4B,EAAA;AAElC,QAAA,OAAO,SAAS;AACd,aAAA,GAAG,CAAC,CAAC,IAAgB,EAAE,KAAK,KAAI;YAChC,OAAO,IAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,GAAG,IAAI,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,QAAuB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9B;AAED;;AC1BK,MAAO,8BAA+B,SAAQ,uBAAuB,CAAA;IAEzD,SAAS,GAA2B,EAAE,CAAC;IAExD,OAAO,GAAA;QAEN,OAAO,IAAI,CAAC,SAAS;AACf,aAAA,GAAG,CAAC,CAAC,QAAuB,KAAI;AAChC,YAAA,OAAO,CAAE,QAAgB,CAAC,IAAI,IAAI,EAAE;AAClC,iBAAA,GAAG,CAAC,CAAC,OAAY,KAAK,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;KACR;AAED,IAAA,MAAM,CAAC,SAA4B,EAAA;AAElC,QAAA,OAAO,SAAS;AACd,aAAA,GAAG,CAAC,CAAC,IAAgB,EAAE,KAAK,KAAI;AAChC,YAAA,OAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,QAAyB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9B;AAED;;AC1BK,MAAO,4BAA6B,SAAQ,uBAAuB,CAAA;IAEvD,SAAS,GAAyB,EAAE,CAAC;IAEtD,OAAO,GAAA;AACN,QAAA,OAAO,EAAE,CAAC;KACV;AAED,IAAA,MAAM,CAAC,UAA6B,EAAA;AAEnC,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,QAAa,EAAA;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9B;AACD;;MCJY,iBAAiB,CAAA;AAOX,IAAA,WAAA,CAAA;AALD,IAAA,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAExC,IAAA,mBAAmB,GAAG,IAAI,GAAG,EAAqC,CAAC;AAEpF,IAAA,WAAA,CACkB,WAAwB,EAAA;QAAxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;KAEzC;IAID,OAAO,CAAI,KAAe,EAAE,QAAyC,EAAA;QAEpE,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA;YACN,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1C,SAAA;KACD;IAED,YAAY,CAAI,KAAe,EAAE,QAAuB,EAAA;AAEvD,QAAA,OAAO,IAAI,CAAC,WAAW,CACtB,KAAK,EACL,QAAQ,EACR,CAAC,QAAuB,KAAK,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAC7D,CAAC;KACF;IAED,YAAY,CAAI,KAAe,EAAE,QAAuB,EAAA;AAEvD,QAAA,OAAO,IAAI,CAAC,WAAW,CACtB,KAAK,EACL,QAAQ,EACR,CAAC,QAAuB,KAAK,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAC7D,CAAC;KACF;IAED,cAAc,CAAI,KAAe,EAAE,QAAyB,EAAA;AAE3D,QAAA,OAAO,IAAI,CAAC,WAAW,CACtB,KAAK,EACL,QAAQ,EACR,CAAC,QAAyB,KAAK,IAAI,oBAAoB,CAAC,QAA2B,CAAC,CACpF,CAAC;KACF;IAED,iBAAiB,CAAI,KAAe,EAAE,QAAuB,EAAA;AAE5D,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAChC,KAAK,EACL,QAAQ,EACR,MAAM,IAAI,4BAA4B,EAAE,CACxC,CAAC;KACF;IAED,wBAAwB,CAAI,KAAe,EAAE,QAAyB,EAAA;AAErE,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAChC,KAAK,EACL,QAAQ,EACR,MAAM,IAAI,8BAA8B,EAAE,CAC1C,CAAC;KACF;IAED,sBAAsB,CAAI,KAAe,EAAE,QAAuB,EAAA;AAEjE,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAChC,KAAK,EACL,QAAQ,EACR,MAAM,IAAI,4BAA4B,EAAE,CACxC,CAAC;KACF;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;KACjC;AAED,IAAA,gBAAgB,CAAI,GAAW,EAAA;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACrC;AAED,IAAA,0BAA0B,CAAI,GAAW,EAAA;QACxC,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;KAC1C;AAEO,IAAA,WAAW,CAClB,KAAe,EACf,QAAa,EACb,aAA+C,EAAA;AAG/C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEnE,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;KACvD;AAEO,IAAA,qBAAqB,CAC5B,KAAe,EACf,QAAuB,EACvB,aAA4C,EAAA;AAG5C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEnE,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvD,YAAA,IAAI,YAAY,EAAE;AACjB,gBAAA,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnC,aAAA;AAED,SAAA;AAAM,aAAA;AAEN,YAAA,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC;AAErC,YAAA,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEnC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AAChD,SAAA;KACD;AAED;;MC5IY,aAAa,CAAA;AAER,IAAA,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEpD,IAAA,GAAG,CAAI,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC7B;AAED,IAAA,GAAG,CAAI,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC7B;IAED,GAAG,CAAI,GAAW,EAAE,MAAS,EAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KAC9B;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KACrB;AAED;;MCbY,eAAe,CAAA;AAOT,IAAA,WAAA,CAAA;AACA,IAAA,iBAAA,CAAA;AAND,IAAA,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;AAEpC,IAAA,iBAAiB,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE7E,WACkB,CAAA,WAAwB,EACxB,iBAAoC,EAAA;QADpC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;KAErD;AAED,IAAA,OAAO,CAAI,KAAe,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAE,CAAC;KACjC;AAED,IAAA,iBAAiB,CAAI,KAAe,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAE,CAAC;KAC3C;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;KAC/B;AAEO,IAAA,mBAAmB,CAAC,QAAuB,EAAA;AAElD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;AAEhC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAe,KAAI;AAEnC,YAAA,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE;AACvB,gBAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;AACrE,aAAA;AAAM,iBAAA;AACN,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACnC,aAAA;AACF,SAAC,CAAC,CAAC;KACH;AAEO,IAAA,iBAAiB,CAAI,GAAe,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;KAC3D;IAEO,YAAY,CAAI,KAAe,EAAE,UAAoB,EAAA;QAE5D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,GAAG,YAAY,WAAW,EAAE;AAE/B,YAAA,IAAI,UAAU,EAAE;AACf,gBAAA,OAAO,IAAI,CAAC;AACZ,aAAA;AAAM,iBAAA;gBACN,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,aAAA;AACD,SAAA;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAEnE,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;YAE9D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAErD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACtC,SAAA;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACnC;AAEO,IAAA,sBAAsB,CAAI,KAAe,EAAE,UAAU,GAAG,KAAK,EAAA;QAEpE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,GAAG,YAAY,WAAW,EAAE;AAE/B,YAAA,IAAI,UAAU,EAAE;AACf,gBAAA,OAAO,IAAI,CAAC;AACZ,aAAA;AAAM,iBAAA;gBACN,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,aAAA;AACD,SAAA;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAErC,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;AAE5E,YAAA,IAAI,YAAY,EAAE;AAEjB,gBAAA,MAAM,WAAW,GAChB,YAAY,CAAC,OAAO,EAAE;AAClB,qBAAA,GAAG,CAAC,CAAC,IAAuB,KAAI;AAEhC,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAe,KAAI;AAEnC,wBAAA,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE;AAEvB,4BAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;AACrE,yBAAA;AAAM,6BAAA;AACN,4BAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACnC,yBAAA;AACF,qBAAC,CAAC,CAAC;AACJ,iBAAC,CAAC,CAAC;gBAEP,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAEnD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC3C,aAAA;AACD,SAAA;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;KAExC;AACD;;MCjHY,eAAe,CAAA;AAEV,IAAA,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;IAEhC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAE5D,IAAA,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAEjG,IAAA,OAAO,CAAI,KAAe,EAAA;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC3C;AAED,IAAA,iBAAiB,CAAI,KAAe,EAAA;QACnC,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KACrD;IAID,OAAO,CAAI,KAAe,EAAE,QAAyC,EAAA;QACpE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAS,CAAC,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC;KACZ;IAED,YAAY,CAAI,KAAe,EAAE,QAAuB,EAAA;QACvD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,QAAA,OAAO,IAAI,CAAC;KACZ;IAED,YAAY,CAAI,KAAe,EAAE,QAAuB,EAAA;QACvD,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,QAAA,OAAO,IAAI,CAAC;KACZ;IAED,cAAc,CAAI,KAAe,EAAE,QAAyB,EAAA;QAC3D,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACvD,QAAA,OAAO,IAAI,CAAC;KACZ;IAED,iBAAiB,CAAI,KAAe,EAAE,QAAuB,EAAA;QAC5D,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1D,QAAA,OAAO,IAAI,CAAC;KACZ;IAED,wBAAwB,CAAI,KAAe,EAAE,QAAyB,EAAA;QACrE,IAAI,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACjE,QAAA,OAAO,IAAI,CAAC;KACZ;IAED,sBAAsB,CAAI,KAAe,EAAE,QAAuB,EAAA;QACjE,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/D,QAAA,OAAO,IAAI,CAAC;KACZ;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;KAC7B;IAED,gBAAgB,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;KAC7B;AAED;;SCrEe,eAAe,GAAA;IAC9B,OAAO,IAAI,eAAe,EAAE,CAAC;AAC9B;;MCHa,kBAAkB,CAAA;AAKZ,IAAA,UAAA,CAAA;IAHV,MAAM,GAAY,KAAK,CAAC;IAEhC,WACkB,CAAA,UAAiC,EAClD,QAAkB,EAAA;QADD,IAAU,CAAA,UAAA,GAAV,UAAU,CAAuB;AAIlD,QAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE;AAChD,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AACvB,SAAA;KACD;IAED,WAAW,GAAA;QAEV,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;AACP,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KAC9B;IAED,WAAW,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KACrC;AACD;;MC3BY,gBAAgB,CAAA;AAEpB,IAAA,QAAQ,CAA6B;;IAGrC,QAAQ,GAAe,MAAK;AACpC,KAAC,CAAC;IAEM,SAAS,GAAY,KAAK,CAAC;IAE3B,MAAM,GAAY,KAAK,CAAC;AAEhC,IAAA,WAAA,CAAY,MAAkC,EAAA;AAC7C,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;KACvB;AAED,IAAA,IAAI,CAAC,KAAQ,EAAA;AAEZ,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,OAAO;AACP,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACxC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA;KACD;AAED,IAAA,KAAK,CAAC,KAAU,EAAA;QAEf,IAAI,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;AACP,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3B,SAAA;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;KACnB;IAED,QAAQ,GAAA;QAEP,IAAI,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;AACP,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC5C,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,SAAA;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;KACnB;IAED,WAAW,GAAA;QACV,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;AACP,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,QAAQ,EAAE,CAAC;KAChB;AAED,IAAA,WAAW,CAAC,QAAoB,EAAA;AAC/B,QAAA,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAC/C,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,SAAA;AAAM,aAAA;AAEN,SAAA;KACD;IAED,WAAW,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;KACrB;IAES,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC;KACtB;IAES,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;KACnB;IAES,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACrB;AAED;;MCjFY,gBAAgB,CAAA;AAET,IAAA,WAAW,CAAM;AAE5B,IAAA,MAAM,CAAsB;;;AAK5B,IAAA,iBAAiB,CAAa;AAEtC,IAAA,WAAA,CAAY,SAAkD,EAAA;AAC7D,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;KAC7B;IAED,IAAI,CAAC,GAAG,UAAmD,EAAA;AAC1D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAEnB,QAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACrD,SAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;KACnB;AAaD,IAAA,SAAS,CACR,GAAQ,EAAA;AAGR,QAAA,IAAI,UAA+B,CAAC;QAEpC,IAAI,GAAG,YAAY,gBAAgB,EAAE;YACpC,UAAU,GAAG,GAAG,CAAC;AACjB,SAAA;aAAM,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAEhD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;YAEtC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC1D,SAAA;AAAM,aAAA;YAEN,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACtD,YAAA,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC/C,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;KACxC;AAES,IAAA,gBAAgB,CACzB,IAAyB,EACzB,KAA4B,EAC5B,QAAqB,EAAA;QAErB,OAAO,IAAI,gBAAgB,CAAC;YAC3B,IAAI;YACJ,KAAK;YACL,QAAQ;AACR,SAAA,CAAC,CAAC;KACH;AAES,IAAA,eAAe,CAAC,UAA+B,EAAA;AACxD,QAAA,OAAO,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;KAC1C;IAEO,SAAS,CAAO,SAAuC,EAAE,OAA4B,EAAA;AAC5F,QAAA,OAAO,CAAC,CAAC,KAAU,KAAI;AACtB,YAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AACzB,SAAC,EAAE,OAAO,CAAC,CAAC;KACZ;AAEO,IAAA,UAAU,CAAC,QAAa,EAAA;AAC/B,QAAA,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC;KACpC;AAED;;SC7Fe,uBAAuB,GAAA;IACtC,OAAO,IAAI,kBAAkB,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/D;;ACAM,MAAO,aAAiB,SAAQ,gBAAmB,CAAA;AAExD;;AAEG;IACK,WAAW,GAAmB,IAAI,CAAC;AAE3C;;AAEG;IACK,WAAW,GAAY,KAAK,CAAC;AAErC;;AAEG;IACK,QAAQ,GAAY,KAAK,CAAC;IAEjB,WAAW,GAA+B,EAAE,CAAC;AAE9D,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;AAED,IAAA,IAAI,CAAC,KAAQ,EAAA;QAEZ,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YAClD,OAAO;AACP,SAAA;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjB,SAAA;KACD;AAED,IAAA,KAAK,CAAC,KAAU,EAAA;QAEf,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;AACP,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAEzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClB,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5B;IAED,QAAQ,GAAA;QAEP,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;AACP,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAExB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;YACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,SAAA;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5B;AAUQ,IAAA,SAAS,CACjB,GAAQ,EAAA;QAGR,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB,QAAA,IAAI,UAA+B,CAAC;QAEpC,IAAI,GAAG,YAAY,gBAAgB,EAAE;YACpC,UAAU,GAAG,GAAG,CAAC;AACjB,SAAA;AAAM,aAAA;YACN,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC9B,YAAA,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,OAAO,uBAAuB,EAAE,CAAC;AACjC,SAAA;aAAM,IAAI,IAAI,CAAC,WAAW,EAAE;YAC5B,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,uBAAuB,EAAE,CAAC;AACjC,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACxC,SAAA;KACD;IAED,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5B;IAED,YAAY,GAAA;AACX,QAAA,OAAO,IAAI,gBAAgB,CAAC,CAAC,QAAQ,KAAI;AACxC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAClC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EACvB,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAChC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CACzB,CAAC;AAEF,YAAA,OAAO,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;AACzC,SAAC,CAAC,CAAC;KACH;IAEO,eAAe,GAAA;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC7C,SAAA;KACD;AAED;;AC9HK,MAAO,iBAAkB,SAAQ,aAAuC,CAAA;;AAG7E,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;AAED;;MCZY,qBAAqB,CAAA;AAEjC,IAAA,OAAO,KAAK,GAAG,CAAC,CAAC;AAEjB,IAAA,OAAO,QAAQ,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAG,EAAA,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC;KACtI;;;MCFoB,OAAO,CAAA;AAEW,IAAA,WAAA,CAAA;AACb,IAAA,WAAA,CAAA;AACF,IAAA,SAAA,CAAA;IAFxB,WAAuC,CAAA,WAAc,EAC3B,WAAmB,EACrB,YAAoB,qBAAqB,CAAC,QAAQ,EAAE,EAAA;QAFrC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAG;QAC3B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAQ;QACrB,IAAS,CAAA,SAAA,GAAT,SAAS,CAA2C;KAC3E;IAED,cAAc,GAAA;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;KACxB;IAED,cAAc,GAAA;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;KACxB;IAED,YAAY,GAAA;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;KACtB;IAED,QAAQ,GAAA;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;KACxB;AAED,IAAA,YAAY,CAAC,OAAmB,EAAA;QAC/B,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;KAC1D;AAED,IAAA,MAAM,CAAC,OAAmB,EAAA;QACzB,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,OAAO,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;KACtG;AAID,IAAA,aAAa,CAAC,GAA2B,EAAA;AAExC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAEvB,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,WAAmB,KAAK,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;YAEjF,OAAO,CAAC,CAAC,KAAK,CAAC;AAEf,SAAA;AAAM,aAAA;AACN,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAA;KACD;AAEO,IAAA,aAAa,CAAC,WAAmB,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,WAAW,CAAC;KAC7C;AACD;;ACjDK,MAAgB,WAAiD,SAAQ,OAAU,CAAA;AAEvE,IAAA,OAAO,CAAM;AAE9B,IAAA,WAAA,CAAsB,WAAc,EAC7B,OAAY,EACZ,WAAmB,EAAA;AACzB,QAAA,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACvB;AAED,IAAA,UAAU,CAAC,KAAqB,EAAA;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;KACxD;IAED,UAAU,GAAA;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;KACpB;AACD;;ACpBe,SAAA,QAAQ,CAAI,GAAG,IAAc,EAAA;AAE5C,IAAA,OAAO,IAAI,gBAAgB,CAAI,QAAQ,IAAG;AAEzC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAG;AACpB,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtB,SAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,KAAC,CAAC,CAAC;AACJ;;SCTgB,WAAW,GAAA;AAC1B,IAAA,OAAO,IAAI,gBAAgB,CAAI,CAAC,QAA2B,KAAI;QAC9D,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,KAAC,CAAC,CAAC;AACJ;;ACFM,SAAU,UAAU,CAAI,YAAoB,EAAA;IAEjD,OAAO,CAAC,MAAM,KAAI;QAEjB,IAAI,YAAY,KAAK,CAAC,EAAE;YACvB,OAAO,WAAW,EAAE,CAAC;AACrB,SAAA;AAED,QAAA,OAAO,IAAI,gBAAgB,CAAC,QAAQ,IAAG;YAEtC,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd,YAAA,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC;gBACvC,IAAI,EAAE,MAAK;iBACV;gBACD,KAAK,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,gBAAA,QAAQ,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE;AACnC,aAAA,CAAC,CAAC;AAEF,YAAA,UAAkB,CAAC,QAAQ,CAAC,IAAI,GAAG,UAAS,CAAM,EAAA;gBAClD,IAAI,KAAK,GAAG,YAAY,EAAE;AACzB,oBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,oBAAA,KAAK,EAAE,CAAC;oBAER,IAAI,KAAK,KAAK,YAAY,EAAE;wBAC3B,UAAU,CAAC,QAAQ,EAAE,CAAC;AACtB,qBAAA;AACD,iBAAA;AACF,aAAC,CAAC;YAEF,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CACpC,UAAU,CACV,CAAC;AAEF,YAAA,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC;AACnC,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;SCvCgB,qBAAqB,CACpC,QAA2B,EAC3B,IAAyB,EACzB,QAAqB,EAAA;AAErB,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAI,KAAI;AACpC,QAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,KAAC,EACD,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAK;QACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,KAAC,CAAC;IAEH,OAAO,IAAI,gBAAgB,CAAC;AAC3B,QAAA,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,QAAA,QAAQ,EAAE,UAAU;AACpB,KAAA,CAAC,CAAC;AACJ,CAAC;AAEK,SAAU,sBAAsB,CAAI,QAA2B,EAAA;IACpE,OAAO,IAAI,gBAAgB,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,KAAK,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,QAAA,QAAQ,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE;AACnC,KAAA,CAAC,CAAC;AACJ;;ACzBM,SAAU,YAAY,CAAI,SAAkC,EAAA;IACjE,OAAO,CAAC,MAAM,KAAI;AACjB,QAAA,OAAO,IAAI,gBAAgB,CAAC,QAAQ,IAAG;YAEtC,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;AAC5D,gBAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AACrB,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,iBAAA;AACF,aAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;MCRa,gBAAgB,CAAA;IAEX,YAAY,GAAoC,EAAE,CAAC;AAEnD,IAAA,aAAa,GAA4C,IAAI,aAAa,EAA4B,CAAC;AAExH,IAAA,IAAI,CAAC,KAA+B,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;AAED,IAAA,eAAe,CAAC,SAAiB,EAAA;AAEhC,QAAA,MAAM,MAAM,GAAoC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjE,OAAO,MAAM,CAAC,OAAO,EAAE;AAClB,aAAA,IAAI,CAAC,CAAC,KAA+B,KAAI;AACzC,YAAA,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC;AAC7C,SAAC,CAAC,CAAC;KACP;AAED;;;AAGG;AACH,IAAA,YAAY,CAAC,SAAiB,EAAA;;QAG7B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AAE9C,QAAA,IAAI,KAAK,EAAE;AACV,YAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;;AAGD,QAAA,OAAO,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;KAClD;AAID,IAAA,0BAA0B,CAAC,GAAsC,EAAA;AAEhE,QAAA,IAAI,SAAiB,CAAC;QAEtB,IAAI,GAAG,YAAY,WAAW,EAAE;AAC/B,YAAA,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC;AACjC,SAAA;AAAM,aAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACnC,SAAS,GAAG,GAAG,CAAC;AAChB,SAAA;AAAM,aAAA;AACN,YAAA,OAAO,IAAI,gBAAgB,CAAC,CAAC,QAAQ,KAAI;gBACxC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;AACzD,aAAC,CAAC,CAAC;;AAEH,SAAA;QAED,OAAO,IAAI,CAAC,aAAa;AACnB,aAAA,YAAY,EAAE;aACd,IAAI,CACJ,YAAY,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,EAC7D,UAAU,CAAC,CAAC,CAAC,CACb,CAAC;KACP;IAEO,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;KACzB;AAED;;ACtEK,MAAO,aAAc,SAAQ,aAAmC,CAAA;AAErE,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;AACD;;ACEK,MAAO,UAAqC,SAAQ,gBAAmB,CAAA;AAE/C,IAAA,cAAA,CAAA;AAA7B,IAAA,WAAA,CAA6B,cAA6B,EAAA;AACzD,QAAA,KAAK,EAAE,CAAC;QADoB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;KAEzD;AAED,IAAA,OAAgB,QAAQ,GAAG,CAAC,aAAa,CAAU,CAAC;IAU3C,SAAS,GAAA;QACjB,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9F;IAED,gBAAgB,CAAC,GAAG,QAAkG,EAAA;AACrH,QAAA,OAAQ,IAAwB;aAC9B,cAAc;AACd,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CACJ,YAAY,CAAC,CAAC,OAA6B,KAAI;AAC9C,YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAA0F,KAAI;AACnH,gBAAA,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACpC,aAAC,CAAC,CAAC;SACH,CAAC,CACF,CAAC;KACH;IAED,wBAAwB,CACvB,GAAG,QAA2G,EAAA;AAG9G,QAAA,OAAQ,IAAwB;aAC9B,cAAc;AACd,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CACJ,YAAY,CAAC,CAAC,OAA+B,KAAI;AAChD,YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAmG,KAAI;AAC5H,gBAAA,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACpC,aAAC,CAAC,CAAC;SACH,CAAC,CACF,CAAC;KACH;IAED,aAAa,CACZ,QAAkG,EAClG,wBAAmI,EAAA;AAGnI,QAAA,OAAQ,IAAwB;aAC9B,cAAc;AACd,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CACJ,YAAY,CAAC,CAAC,OAA6B,KAAI;AAE9C,YAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,wBAAwB,EAAE;AAC3C,gBAAA,OAAO,IAAI,CAAC;AACZ,aAAA;YAED,IAAI,sBAAsB,GAAG,IAAI,CAAC;AAElC,YAAA,IAAI,QAAQ,EAAE;gBACb,sBAAsB;AACrB,oBAAA,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAA0F,KAAI;AAC7G,wBAAA,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACpC,qBAAC,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,IAAI,wBAAwB,EAAE;AAC7B,gBAAA,sBAAsB,GAAG,sBAAsB;AAC9C,oBAAA,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,OAAwF,KAAI;AAC3H,wBAAA,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACpC,qBAAC,CAAC,CAAC;AACJ,aAAA;AAED,YAAA,OAAO,sBAAsB,CAAC;SAE9B,CAAC,CACF,CAAC;KACH;;;MChGW,QAAQ,CAAA;AAEH,IAAA,KAAK,CAAI;AAE1B,IAAA,WAAA,CAAoB,KAAQ,EAAA;AAE3B,QAAA,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACZ;AAED,IAAA,OAAO,KAAK,GAAA;AACX,QAAA,OAAO,IAAI,QAAQ,CAAM,IAAI,CAAC,CAAC;KAC/B;IAED,OAAO,EAAE,CAAI,KAAQ,EAAA;AACpB,QAAA,OAAO,IAAI,QAAQ,CAAI,KAAK,CAAC,CAAC;KAC9B;IAEO,OAAO,YAAY,CAAC,KAAU,EAAA;QACrC,OAAO,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC;KACtD;IAED,OAAO,GAAA;QACN,OAAO,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzC;IAED,SAAS,GAAA;AACR,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KACvB;AAED,IAAA,MAAM,CAAC,QAA+B,EAAA;QACrC,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI,CAAC;AACZ,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC;KACxB;AAED,IAAA,OAAO,CAAC,QAA2B,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,SAAA;KACD;AAED,IAAA,GAAG,CAAI,MAAuB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,OAAO,IAAI,QAAQ,CAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC;KACxB;AAED;;AAEG;IACH,0BAA0B,GAAA;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC;KAClB;IAED,UAAU,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC1D,SAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;KAClB;AAED,IAAA,SAAS,CAAc,KAAc,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC;AAClB,SAAA;QACD,OAAO,KAAK,EAAE,CAAC;KACf;AAED,IAAA,SAAS,CAAC,MAA0B,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnB,SAAA;KACD;AAED,IAAA,OAAO,CAAC,MAAkB,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,YAAA,MAAM,EAAE,CAAC;AACT,SAAA;KACD;AAED,IAAA,MAAM,CAAc,KAAwB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACZ,SAAA;QACD,OAAO,KAAK,EAAE,CAAC;KACf;AAED;;MCxFY,uBAAuB,CAAA;AAElB,IAAA,GAAG,GAAG,IAAI,GAAG,EAAkC,CAAC;AAEjE,IAAA,WAAA,GAAA;KACC;IAED,GAAG,CAAC,GAAW,EAAE,OAA+B,EAAA;QAE/C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KAC3B;AAED,IAAA,GAAG,CAAC,GAAW,EAAA;AACd,QAAA,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACtC;AAED,IAAA,GAAG,CAAC,GAAW,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;AACD,CAAA;MAEY,0BAA0B,CAAA;AAErB,IAAA,GAAG,GAAG,IAAI,GAAG,EAAqC,CAAC;AAEpE,IAAA,WAAA,GAAA;KACC;IAED,GAAG,CAAC,GAAW,EAAE,UAAqC,EAAA;QAErD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;KAC9B;AAED,IAAA,GAAG,CAAC,GAAW,EAAA;AACd,QAAA,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KACtC;AAED,IAAA,GAAG,CAAC,GAAW,EAAA;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACzB;AACD;;MCvCY,8BAA8B,CAAA;AAEzB,IAAA,uBAAuB,GAAkC,aAAa,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAExG,IAAA,0BAA0B,GAAqC,aAAa,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAElI,IAAA,WAAA,GAAA;KACC;AAED,IAAA,QAAQ,CACP,gBAAkD,EAAA;AAGlD,QAAA,IAAI,gBAAgB,EAAE;AAErB,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,mBAAmB,GAAqC,EAAE,CAAC;AAEjE,YAAA,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAA8B,KAAI;gBAC1D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACtB,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,oBAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,iBAAA;AACF,aAAC,CAAC,CAAC;AAEH,YAAA,mBAAmB,CAAC,OAAO,CAAC,CAAC,GAA8B,KAAI;gBAE9D,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAyB,GAAG,CAAC,OAAc,CAAC,EAChF,UAAU,GAAG,aAAa,CAAC,OAAO,CAA6B,GAAG,CAAC,UAAkB,CAAC,CAAC;gBAExF,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAC/C,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnD,iBAAA;gBAED,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBAClD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACzD,iBAAA;AACF,aAAC,CAAC,CAAC;;;AAIH,SAAA;KACD;AAED;;AC/CK,SAAU,eAAe,CAAI,QAA+B,EAAA;IAEjE,OAAO,CAAC,MAAM,KAAI;AACjB,QAAA,OAAO,IAAI,gBAAgB,CAAI,QAAQ,IAAG;AAEzC,YAAA,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAEpD,YAAA,MAAM,kBAAkB,GAAG,IAAI,gBAAgB,CAAC;AAC/C,gBAAA,IAAI,EAAE,MAAM,UAAU,CAAC,QAAQ,EAAE;AACjC,aAAA,CAAC,CAAC;AAEH,YAAA,QAAQ,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YAEvC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAElD,YAAA,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC;AACnC,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;ACpBM,SAAU,gBAAgB,CAAI,OAA4B,EAAA;AAC/D,IAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AAClC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CACrC,CAAC,KAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAClC,CAAC,KAAU,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EACrC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CACzB,CAAC;AACF,QAAA,OAAO,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;AACzC,KAAC,CAAC,CAAC;AACJ;;MCNsB,QAAQ,CAAA;AAEZ,IAAA,kBAAkB,GAAG,IAAI,aAAa,EAAQ,CAAC;AAEhE,IAAA,WAAA,GAAA;KACC;IAED,SAAS,GAAA;QACR,IAAI,CAAC,iBAAiB,EAAE,CAAC;KACzB;IAES,SAAS,GAAA;QAClB,OAAO,SAAS,CACf,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CACzC,CAAC;KACF;IAES,iBAAiB,GAAA;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;KACnC;IAES,eAAe,GAAA;AACxB,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KAChD;IAES,YAAY,GAAA;AACrB,QAAA,OAAO,CAAE,IAAI,CAAC,kBAA0B,CAAC,WAAW,CAAC;KACrD;AAED;;AC1BK,MAAO,yBAAmG,SAAQ,QAAQ,CAAA;AAE9G,IAAA,UAAU,GAAG,aAAa,CAAC,OAAO,CAAa,UAAU,CAAC,CAAC;AAE5E,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;AAED,IAAA,QAAQ,CACP,eAAmD,EAAA;AAGnD,QAAA,IAAI,eAAe,EAAE;AAEpB,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,gBAAgB,GAAuC,EAAE,CAAC;AAEhE,YAAA,eAAe,CAAC,MAAM,CAAC,CAAC,OAAoC,KAAI;gBAC/D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,OAAe,CAAC,cAAc,CAAC,EAAE;AAC9C,oBAAA,GAAG,CAAC,GAAG,CAAE,OAAe,CAAC,cAAc,CAAC,CAAC;AACzC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,iBAAA;AACF,aAAC,CAAC,CAAC;AAEH,YAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAoC,KAAI;AACjE,gBAAA,IAAI,CAAC,UAAU;qBACb,gBAAgB,CAAC,OAAO,CAAC;AACzB,qBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5B,qBAAA,SAAS,CAAC,CAAC,OAAU,KAAI;AACzB,oBAAA,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACH,SAAA;KACD;AAED,IAAA,gCAAgC,CAC/B,wBAA2E,EAAA;AAG3E,QAAA,IAAI,wBAAwB,EAAE;AAE7B,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,gBAAgB,GAAsD,EAAE,CAAC;AAE/E,YAAA,wBAAwB,CAAC,MAAM,CAAC,CAAC,OAAmD,KAAI;gBACvF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,OAAe,CAAC,6BAA6B,CAAC,EAAE;AAC7D,oBAAA,GAAG,CAAC,GAAG,CAAE,OAAe,CAAC,6BAA6B,CAAC,CAAC;AACxD,oBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,iBAAA;AACF,aAAC,CAAC,CAAC;AAEH,YAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAmD,KAAI;AAChF,gBAAA,IAAI,CAAC,UAAU;qBACb,wBAAwB,CAAC,OAAO,CAAC;AACjC,qBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5B,qBAAA,SAAS,CAAC,CAAC,OAAU,KAAI;AACzB,oBAAA,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACH,SAAA;KACD;AAED;;AC/DK,MAAO,cAA6C,SAAQ,gBAAmB,CAAA;AAEvD,IAAA,WAAA,CAAA;AAA7B,IAAA,WAAA,CAA6B,WAA8B,EAAA;AAC1D,QAAA,KAAK,EAAE,CAAC;QADoB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;KAE1D;AAED,IAAA,OAAgB,QAAQ,GAAG,CAAC,iBAAiB,CAAU,CAAC;IAU/C,SAAS,GAAA;QAEjB,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3F;AAED,IAAA,QAAQ,CAAC,MAAiC,EAAA;AACzC,QAAA,OAAQ,IAA4B;aAClC,WAAW;AACX,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CACJ,YAAY,CAAC,CAAC,WAAqC,KAAI;AACtD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAyB,KAAI;gBAChD,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACtD,gBAAA,OAAO,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAChD,aAAC,CAAC,CAAC;SACH,CAAC,CACF,CAAC;KACH;AAED,IAAA,eAAe,CAAC,QAA8E,EAAA;AAC7F,QAAA,OAAQ,IAA4B;aAClC,WAAW;AACX,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CACJ,YAAY,CAAC,CAAC,KAA+B,KAAI;AAChD,YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAsE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC7H,CAAC,CACF,CAAC;KACH;AAEO,IAAA,mBAAmB,CAAC,KAAyB,EAAA;QACpD,MAAM,IAAI,GAAgB,EAAE,EAC3B,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,QAAQ,IAAK,KAAa,EAAE,EAAE;AAC9B,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,IAAK,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACrC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,IAAK,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC9C,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,IAAK,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACvD,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,IAAK,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,IAAK,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACzE,SAAA;AAAM,aAAA;AACN,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;AAC/D,SAAA;KACD;;;ACnEI,MAAO,6BAA+E,SAAQ,QAAQ,CAAA;AAI9E,IAAA,cAAA,CAAA;AAFrB,IAAA,MAAM,GAAG,IAAI,aAAa,EAAQ,CAAC;AAE3C,IAAA,WAAA,CAA6B,cAA8B,EAAA;AAC1D,QAAA,KAAK,EAAE,CAAC;QADoB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KAE1D;AAED,IAAA,OAAgB,QAAQ,GAAG,CAAC,cAAc,CAAU,CAAC;AAErD,IAAA,IAAI,CACH,aAAkD,EAAA;AAGlD,QAAA,IAAI,aAAa,EAAE;AAElB,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,gBAAgB,GAAwC,EAAE,CAAC;AAEjE,YAAA,aAAa,CAAC,MAAM,CAAC,CAAC,OAAqC,KAAI;gBAC9D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,OAAe,CAAC,kBAAkB,CAAC,EAAE;AAClD,oBAAA,GAAG,CAAC,GAAG,CAAE,OAAe,CAAC,kBAAkB,CAAC,CAAC;AAC7C,oBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,iBAAA;AACF,aAAC,CAAC,CAAC;AAEH,YAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAqC,KAAI;AAClE,gBAAA,IAAI,CAAC,cAAc;AACjB,qBAAA,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1B,qBAAA,IAAI,CACJ,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5B,IAAI,CAAC,eAAe,EAAE,CACtB;AACA,qBAAA,SAAS,CAAC,CAAC,KAAQ,KAAI;AACvB,oBAAA,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;;;AAIH,SAAA;KACD;AAED,IAAA,MAAM,CACL,aAAkD,EAAA;QAElD,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACzB;IAED,IAAI,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;KAClC;;;AC/DK,MAAM,sBAAsB,GAAG,+BAA+B;AAC9D,MAAM,oBAAoB,GAAG;;MCCd,MAAM,CAAA;AAEnB,IAAA,UAAU,CAAS;AAQ3B,IAAA,SAAS,CAAC,UAAkB,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;KAC7B;AAED,IAAA,GAAG,CAAC,OAAU,EAAA;AACb,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACpB,SAAA;KACD;AAES,IAAA,WAAW,CAAC,OAAU,EAAA;AAE/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACZ,SAAA;AAED,QAAA,MAAM,GAAG,GAAW,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEvC,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACrC;AACD;;AC5BK,MAAgB,aAAc,SAAQ,MAA4B,CAAA;AACvE;;ACKK,MAAO,oBAAqB,SAAQ,aAAa,CAAA;IAE9C,OAAO,GAAG,KAAK,CAAC;AAEP,IAAA,YAAY,GAAG,IAAI,aAAa,EAAQ,CAAC;AAEzC,IAAA,UAAU,GAAG,aAAa,CAAC,OAAO,CAAmC,UAAU,CAAC,CAAC;AAElG,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;AAER,QAAA,IAAI,CAAC,UAAU;AACb,aAAA,IAAI,CACJ,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAChC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAClC;AACA,aAAA,SAAS,CAAC,CAAC,OAA6B,KAAI;AAC5C,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnB,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC7B;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACpB;IAED,IAAI,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACrB;AAES,IAAA,KAAK,CAAC,OAA6B,EAAA;;QAE5C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;KACzC;AAED;;AC5CK,MAAO,iBAAkB,SAAQ,aAAa,CAAA;IAEnD,KAAK,GAAA;KACJ;IAED,IAAI,GAAA;KACH;AAES,IAAA,KAAK,CAAC,QAA8B,EAAA;KAC7C;AAED;;ACZK,MAAgB,iBAAkB,SAAQ,MAAgC,CAAA;AAE/E,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;AACD;;ACLK,MAAO,eAAgB,SAAQ,iBAAiB,CAAA;AAErD,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;IAED,KAAK,GAAA;KACJ;IAED,IAAI,GAAA;KACH;AAED,IAAA,KAAK,CAAC,MAAgC,EAAA;KACrC;AAED;;MCfY,sBAAsB,CAAA;IAEjB,MAAM,GAAmE,EAAE,CAAC;AAE7F,IAAA,QAAQ,CAAC,KAA8D,EAAA;AACtE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACxB;AAED,IAAA,yBAAyB,CAAC,WAAwB,EAAA;QAEjD,IAAI,CAAC,WAAW,EAAE;AACjB,YAAA,OAAO,EAAE,CAAC;AACV,SAAA;QAED,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAA8D,KAAI;YAEtF,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE9C,YAAA,IAAI,SAAS,EAAE;AAEd,gBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;AAEjD,gBAAA,UAAU,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;AACtC,aAAA;AAEF,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;KACxC;AAEO,IAAA,eAAe,CAAC,UAAyD,EAAA;;AAEhF,QAAA,OAAO,UAAU,CAAC;KAClB;AACD;;AC7BK,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;IAEhD,OAAO,GAAG,KAAK,CAAC;AAEhB,IAAA,YAAY,GAAG,IAAI,aAAa,EAAQ,CAAC;AAEhC,IAAA,QAAQ,GAAmB,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAEjE,IAAA,sBAAsB,GAA2B,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAEhH,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;AAER,QAAA,IAAI,CAAC,QAAQ;AACX,aAAA,IAAI,CACJ,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAChC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAClC;AACA,aAAA,SAAS,CAAC,CAAC,WAAqC,KAAI;AACpD,YAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC7B;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACpB;IAED,IAAI,GAAA;AACH,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACrB;AAES,IAAA,KAAK,CAAC,WAAqC,EAAA;AACpD,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,EAC/C,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;;AAGjF,QAAA,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;KAC7D;AAED;;ACvDM,MAAM,wBAAwB,GAAG,mCAAmC;;ACApE,MAAM,qBAAqB,GAAG,sCAAsC;;ACA3E;;AAEG;AACI,MAAM,iCAAiC,GAAG,4CAA4C;;ACHtF,MAAM,gBAAgB,GAAG,iCAAiC;;ACkB3D,MAAO,YACZ,SAAQ,QAAQ,CAAA;AAKE,IAAA,8BAAA,CAAA;AACA,IAAA,yBAAA,CAAA;AACA,IAAA,6BAAA,CAAA;AACA,IAAA,UAAA,CAAA;AACA,IAAA,gBAAA,CAAA;AACA,IAAA,aAAA,CAAA;AACA,IAAA,wBAAA,CAAA;AACA,IAAA,eAAA,CAAA;IAVV,OAAO,GAAG,KAAK,CAAC;AAExB,IAAA,WAAA,CACkB,8BAAoE,EACpE,yBAA6D,EAC7D,6BAAkE,EAClE,UAAsB,EACtB,gBAAkD,EAClD,aAAkD,EAClD,wBAA2E,EAC3E,eAAmD,EAAA;AAEpE,QAAA,KAAK,EAAE,CAAC;QATS,IAA8B,CAAA,8BAAA,GAA9B,8BAA8B,CAAsC;QACpE,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB,CAAoC;QAC7D,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B,CAAqC;QAClE,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkC;QAClD,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqC;QAClD,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAAmD;QAC3E,IAAe,CAAA,eAAA,GAAf,eAAe,CAAoC;AAIpE,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;AAChC,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,IAAI,EAAE;AAC3C,YAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,SAAA;KACD;IAED,OAAgB,QAAQ,GAAG;QAC1B,8BAA8B;QAC9B,yBAAyB;QACzB,6BAA6B;QAC7B,UAAU;AACV,QAAA,EAAE,MAAM,EAAE,wBAAwB,EAAE,UAAU,EAAE,IAAI,EAAE;QACtD,EAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnE,EAAE,MAAM,EAAE,iCAAiC,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/E,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;KACrD,CAAC;IAEX,GAAG,GAAA;QAEF,IAAG,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;AACP,SAAA;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE7D,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,IAAI,CAAC,yBAAyB,CAAC,gCAAgC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC/F,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAE5D,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;KACpB;IAED,OAAO,GAAA;AACN,QAAA,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,6BAA6B,CAAC,SAAS,EAAE,CAAC;KAC/C;IAEO,gBAAgB,CACvB,eAAmD,EACnD,wBAA2E,EAAA;AAG3E,QAAA,IAAI,CAAC,UAAU;AACb,aAAA,aAAa,CAAC,eAAe,EAAE,wBAAwB,CAAC;AACxD,aAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5B,aAAA,SAAS,CAAC,CAAC,OAAU,KAAI;;YAEzB,OAAO,CAAC,KAAK,CAAC,CAAW,QAAA,EAAA,OAAO,CAAC,QAAQ,EAAE,CAA6C,2CAAA,CAAA,CAAC,CAAC;AAC3F,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,+BAA+B,CAAC,eAAmD,EAAA;QAC1F,IAAI,eAAe,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;;AAEvD,YAAA,OAAO,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;AACpF,SAAA;KACD;AAEO,IAAA,mCAAmC,CAAC,aAAkD,EAAA;QAC7F,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;;AAEnD,YAAA,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;AAClF,SAAA;KACD;;;SClGc,oBAAoB,CAAC,OAAgB,EAAE,oBAA0C,EAAE,iBAAoC,EAAA;AAEtI,IAAA,IAAI,OAAO,EAAE;AACZ,QAAA,OAAO,oBAAoB,CAAC;AAC5B,KAAA;AAAM,SAAA;AACN,QAAA,OAAO,iBAAiB,CAAC;AACzB,KAAA;AACF,CAAC;SAEe,kBAAkB,CAAC,OAAgB,EAAE,kBAAsC,EAAE,eAAgC,EAAA;AAE5H,IAAA,IAAI,OAAO,EAAE;AACZ,QAAA,OAAO,kBAAkB,CAAC;AAC1B,KAAA;AAAM,SAAA;AACN,QAAA,OAAO,eAAe,CAAC;AACvB,KAAA;AACF,CAAC;SAEe,SAAS,GAAA;IACxB,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC;AAC3C;;MCxBa,iBAAiB,CAAA;AAEZ,IAAA,aAAa,GAAkB,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAErF,IAAA,QAAQ,CAAC,OAA6B,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACjC;AACD;;MCLY,oBAAoB,CAAA;AAEH,IAAA,WAAA,CAAA;AAA7B,IAAA,WAAA,CAA6B,WAA8B,EAAA;QAA9B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAmB;KAC1D;AAED,IAAA,OAAgB,QAAQ,GAAG,CAAC,iBAAiB,CAAU,CAAC;AAIxD,IAAA,OAAO,CAAC,IAAwE,EAAA;AAE/E,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAExB,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACvB,aAAA;AACD,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,YAAY,CAAC,IAAgC,CAAC,CAAC;AACpD,SAAA;KACD;AAED,IAAA,oBAAoB,CAAC,SAAqC,EAAA;QAEzD,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;AAE1C,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,cAA2C,KAAI;YAC9D,IAAI,CAAC,OAAO,CACX,cAAc,CAAC,aAAa,EAAE,CAC9B,CAAC;AACH,SAAC,CAAC,CAAC;KACH;AAEO,IAAA,YAAY,CAAC,KAA+B,EAAA;QAEnD,IAAI,CAAC,KAAK,EAAE;;AAEX,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA,eAAA,CAAiB,CAAC,CAAC;AACzC,SAAA;AAED,QAAA,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC,EAAE;;;AAIpC,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA,qBAAA,CAAuB,CAAC,CAAC;AAC/C,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;;;AChCW,MAAA,aAAa,GAAG,eAAe,GAAG;AAE/C,aAAa,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AACvD,aAAa,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;AACzD,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC5C,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACzC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACvC,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE1C,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACtC,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAC9C,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAEvJ,aAAa,CAAC,cAAc,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;AACnJ,aAAa,CAAC,OAAO,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;AAExE,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE5C,aAAa,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAClD,aAAa,CAAC,OAAO,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;AAC5D,aAAa,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAC1D,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC9C,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACrC,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACzC,aAAa,CAAC,OAAO,CAAC,8BAA8B,EAAE,8BAA8B,CAAC,CAAC;AACtF,aAAa,CAAC,OAAO,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;AAC5E,aAAa,CAAC,OAAO,CAAC,6BAA6B,EAAE,6BAA6B,CAAC,CAAC;AAEpF,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAE7B,MAAM,kBAAkB,GAAG,MAAK;IACtC,aAAa,CAAC,gBAAgB,EAAE,CAAC;AAClC;;ACpDM,MAAgB,OAA+B,SAAQ,OAAU,CAAA;AACtE;;ACJM,MAAM,WAAW,GAAG,QAAQ;;ACE5B,MAAM,WAAW,GAAG;;MCCL,gBAAgB,CAAA;AAIrC;;MCJqB,cAAc,CAAA;AAGjB,IAAA,WAAA,CAAA;AACA,IAAA,IAAA,CAAA;IAFlB,WACkB,CAAA,WAAc,EACd,IAAY,EAAA;QADZ,IAAW,CAAA,WAAA,GAAX,WAAW,CAAG;QACd,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAC7B;IAID,cAAc,GAAA;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;KACxB;IAED,OAAO,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;KACjB;AAED,IAAA,MAAM,CAAC,KAAwB,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;KACtD;AAED,IAAA,YAAY,CAAC,KAAwB,EAAA;QACpC,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;KAC1C;AAED;;AC3BM,MAAM,kBAAkB,GAAG;;MCGZ,mBAAmB,CAAA;AAMxC;;MCNqB,cAAc,CAAA;AAMnC;;MCNqB,aAAa,CAAA;AAOV,IAAA,IAAA,CAAA;AALP,IAAA,WAAW,CAAI;AAEf,IAAA,MAAM,CAA2B;IAElD,WAAsB,CAAA,WAAc,EACZ,IAAY,EAAA;QAAZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AACnC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KACjB;IAID,KAAK,GAAA;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC;KACxB;IAED,OAAO,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;KACjB;IAED,SAAS,GAAA;QACR,OAAO,IAAI,CAAC,MAA0C,CAAC;KACvD;AAID,IAAA,QAAQ,CAAC,IAAkD,EAAA;AAE1D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,aAAA;AACD,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAyB,CAAC,CAAC;AAC5C,SAAA;KACD;IAED,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;KACvB;AAED,IAAA,MAAM,CAAC,SAA2B,EAAA;AACjC,QAAA,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;KAChE;AACD;;MCnDqB,QAAQ,CAAA;AAEZ,IAAA,GAAG,CAAI;AAExB,IAAA,WAAA,CAAsB,GAAM,EAAA;AAC3B,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;KACf;IAID,KAAK,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;KAChB;AAED,IAAA,MAAM,CAAC,QAAqB,EAAA;QAC3B,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;KACrC;AACD;;ACdK,MAAgB,WAAY,SAAQ,QAAgB,CAAA;AAEzD,IAAA,WAAA,CAAsB,GAAW,EAAA;QAChC,KAAK,CAAC,GAAG,CAAC,CAAC;KACX;IAID,QAAQ,GAAA;AACP,QAAA,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;KACrB;AAED;;ACbM,MAAM,eAAe,GAAG;;ACAzB,MAAgB,eAAgB,SAAQ,QAAQ,CAAA;AAErD,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;IAEQ,SAAS,GAAA;QACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KACzB;AAED;;MCTY,MAAM,CAAA;AAED,IAAA,IAAI,GAAG,IAAI,GAAG,EAAa,CAAC;AAE5B,IAAA,MAAM,GAAG,IAAI,OAAO,EAAQ,CAAC;AAE9C,IAAA,IAAI,CAAC,GAAM,EAAA;QAEV,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,WAAW,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AACjD,SAAA;AAAM,aAAA;AACN,YAAA,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC;AACxB,SAAA;KACD;AAED,IAAA,GAAG,CAAC,GAAM,EAAA;QAET,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAE7C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KACpC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAC5B;IAED,IAAI,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KACtB;AAED,IAAA,MAAM,CAAC,GAAM,EAAA;AACZ,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxB,SAAA;KACD;IAED,SAAS,GAAA;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KAClB;AAEO,IAAA,cAAc,CAAC,GAAM,EAAA;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;KACrC;AAEO,IAAA,cAAc,CAAC,GAAM,EAAA;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;KACrC;AAED;;ACrDK,SAAU,SAAS,CAAO,OAAuC,EAAA;IAEtE,OAAO,CAAC,MAA2B,KAAI;AACtC,QAAA,OAAO,IAAI,gBAAgB,CAAI,CAAC,QAA6B,KAAI;YAChE,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAQ,KAAI;gBAC/D,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC,aAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;ACbM,SAAU,0BAA0B,CAAI,SAAuC,EAAA;IAEpF,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC;IAEzD,OAAO,CAAC,MAA2B,KAAI;AACtC,QAAA,OAAO,IAAI,gBAAgB,CAAI,CAAC,QAA6B,KAAI;YAEhE,IAAI,aAAa,GAAM,IAAI,CAAC;YAE5B,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAQ,KAAI;gBAE/D,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;oBAC7D,aAAa,GAAG,KAAK,CAAC;AACtB,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,iBAAA;AACF,aAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAI,CAAI,EAAE,CAAI,EAAA;IACtC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChB;;ACzBM,MAAO,qBAAyB,SAAQ,aAAgB,CAAA;AAErD,IAAA,SAAS,CAAI;AAErB,IAAA,WAAA,CAAY,YAAe,EAAA;AAC1B,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;KAC9B;AAEQ,IAAA,IAAI,CAAC,KAAQ,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClB;IAUQ,SAAS,GAAA;QAEjB,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/E,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAE3B,QAAA,OAAO,YAAY,CAAC;KACpB;AACD;;AC7BK,MAAO,mBAAuB,SAAQ,aAAgB,CAAA;AAI9B,IAAA,UAAA,CAAA;IAFZ,MAAM,GAAa,EAAE,CAAC;AAEvC,IAAA,WAAA,CAA6B,aAAqB,CAAC,EAAA;AAClD,QAAA,KAAK,EAAE,CAAC;QADoB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAElD;IAEQ,IAAI,CAAC,GAAG,UAAmD,EAAA;AACnE,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAA6B,CAAC;KAC7D;AAEQ,IAAA,IAAI,CAAC,KAAQ,EAAA;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACzC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACpB,SAAA;AACD,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClB;IAUQ,SAAS,GAAA;AAEjB,QAAA,IAAI,UAA+B,CAAC;AAEpC,QAAA,IAAI,SAAS,CAAC,CAAC,CAAC,YAAY,gBAAgB,EAAE;AAC7C,YAAA,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AAAM,aAAA;YACN,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,SAAA;QAED,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAEjD,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAChC,YAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;AAED,QAAA,OAAO,YAAY,CAAC;KACpB;AAED;;AChDK,MAAO,oBAAwB,SAAQ,aAAgB,CAAA;AAE5D,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;IAED,OAAO,EAAE,CAAI,KAAS,EAAA;QACrB,IAAI,KAAK,KAAK,SAAS,EAAE;AACxB,YAAA,OAAO,IAAI,qBAAqB,CAAI,KAAK,CAAC,CAAC;AAC3C,SAAA;AAAM,aAAA;AACN,YAAA,OAAO,IAAI,mBAAmB,CAAI,CAAC,CAAC,CAAC;AACrC,SAAA;KACD;AACD;;ACfK,MAAO,sBAA0B,SAAQ,gBAAmB,CAAA;AAExD,IAAA,IAAI,CAAC,KAAQ,EAAA;AAErB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACvB,OAAO;AACP,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAEpC,QAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;AAC9B,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,SAAA;KACD;AAED;;ACbK,MAAO,YAAgB,SAAQ,gBAAmB,CAAA;AAEpC,IAAA,gBAAgB,CAClC,IAAyB,EACzB,KAA4B,EAC5B,QAAqB,EAAA;QAGrB,OAAO,IAAI,sBAAsB,CAAC;YACjC,IAAI;YACJ,KAAK;YACL,QAAQ;AACR,SAAA,CAAC,CAAC;KACH;AACD;;ACfK,SAAU,oBAAoB,CAAI,MAA2B,EAAA;AAElE,IAAA,OAAO,IAAI,YAAY,CAAI,CAAC,QAAQ,KAAI;AAEvC,QAAA,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC;YACvC,IAAI,EAAE,CAAC,KAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACxC,KAAK,EAAE,CAAC,KAAU,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5C,QAAQ,EAAE,MAAK;aACd;AACD,SAAA,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CACpC,UAAU,CACV,CAAC;AAEF,QAAA,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC;AACnC,KAAC,CAAC,CAAC;AACJ;;ACRM,MAAgB,UAA6B,SAAQ,eAAe,CAAA;AAExD,IAAA,OAAO,GAAG,IAAI,MAAM,EAAQ,CAAC;AAE7B,IAAA,QAAQ,CAAqC;AAEtD,IAAA,YAAY,GAAgB,QAAQ,CAAC,KAAK,EAAE,CAAC;AAErD,IAAA,WAAA,CAAsB,YAAgB,EAAA;AACrC,QAAA,KAAK,EAAE,CAAC;AAER,QAAA,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,EAAE,EAAE,CAAC;AAE1C,QAAA,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,EAAE;YACxD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAC9C,SAAA;KACD;AAED,IAAA,EAAE,CAAC,GAAM,EAAA;AAER,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC,QAAQ;AACd,aAAA,YAAY,EAAE;AACd,aAAA,IAAI,CACJ,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,EACvC,SAAS,CAAC,CAAC,GAAiB,KAAI;AAC/B,YAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB,SAAC,CAAC,EACF,YAAY,CAAC,CAAC,KAAkB,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC,EACvD,SAAS,CAAC,CAAC,KAAkB,KAAK,KAAK,CAAC,0BAA0B,EAAE,CAAC,EACrE,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EACvC,IAAI,CAAC,eAAe,EAAE,CACtB,CAAC;KACP;AAED,IAAA,IAAI,CAAC,GAAM,EAAA;QACV,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1C;AAED,IAAA,IAAI,CAAC,GAAM,EAAA;AAEV,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;IAED,IAAI,CAAC,GAAM,EAAE,KAAQ,EAAA;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACjC;IAES,MAAM,CAAC,CAAI,EAAE,CAAI,EAAA;QAC1B,OAAO,CAAC,KAAK,CAAC,CAAC;KACf;AAES,IAAA,kBAAkB,CAAC,YAAe,EAAA;AAC3C,QAAA,OAAO,YAAY,CAAC;KACpB;AAEO,IAAA,gBAAgB,CAAC,GAAM,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY;AACf,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YAEpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtB,aAAA;AACF,SAAC,CAAC,CAAC;KACJ;AAED;;AC/EK,MAAgB,gBAAoB,SAAQ,UAA0B,CAAA;AAE3E,IAAA,WAAA,CAAsB,YAAgB,EAAA;QACrC,KAAK,CAAC,YAAY,CAAC,CAAC;KACpB;AAED;;ACHK,MAAgB,qBACrB,SAAQ,gBAAmB,CAAA;AAE3B,IAAA,WAAA,CAAsB,aAAiB,EAAA;QACtC,KAAK,CAAC,aAAa,CAAC,CAAC;KACrB;AAID,IAAA,MAAM,CAAC,KAAQ,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;KACtD;AACD;;ACjBD;;AAEG;MACmB,eAAe,CAAA;AAEnB,IAAA,QAAQ,CAAI;AAE7B,IAAA,WAAA,CAAsB,GAAM,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;KACpB;IAED,KAAK,GAAA;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC;KACrB;AACD;;AChBD;;AAEG;MACU,iBAAiB,CAAA;AAEZ,IAAA,GAAG,CAAS;AAE7B,IAAA,WAAA,CAAsB,GAAW,EAAA;AAChC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;KACf;IAED,QAAQ,GAAA;QACP,OAAO,IAAI,CAAC,GAAG,CAAC;KAChB;IAED,KAAK,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;KAChB;AAED,IAAA,MAAM,CAAC,QAA2B,EAAA;QACjC,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;KACrC;AACD;;ACpBD;;AAEG;MACmB,aAAa,CAAA;AAEjB,IAAA,MAAM,CAAI;AAE3B,IAAA,WAAA,CAAsB,GAAM,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;KAClB;IAED,KAAK,GAAA;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC;KACnB;AAED;;ACfD;;AAEG;MACmB,eAAe,CAAA;AAEnB,IAAA,GAAG,CAAS;AAE7B,IAAA,WAAA,CAAsB,GAAW,EAAA;AAChC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;KACf;IAID,QAAQ,GAAA;QACP,OAAO,IAAI,CAAC,GAAG,CAAC;KAChB;IAED,KAAK,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;KAChB;AAED,IAAA,MAAM,CAAC,QAAyB,EAAA;QAC/B,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;KACrC;AAED;;ACpBD;;AAEG;AACG,MAAgB,uBAA+C,SAAQ,QAAQ,CAAA;AAEnE,IAAA,cAAc,GAAmB,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAExF,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,cAAc;AACjB,aAAA,QAAQ,CACR,IAAI,CAAC,SAAS,EAAE,CAChB;AACA,aAAA,IAAI,CACJ,IAAI,CAAC,eAAe,EAAE,CACtB;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;YAEpC,IAAI;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtB,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;;AAEX,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjB,aAAA;AACF,SAAC,CAAC,CAAC;KACJ;AAMD;;AChCD;;AAEG;MACmB,cAAc,CAAA;AAInC;;ACJK,MAAgB,eAA2C,SAAQ,eAAe,CAAA;AAEtE,IAAA,cAAc,GAAmB,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAExF,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,EAAE,CAAC;KACR;IAES,OAAO,CAAC,WAAc,EAAE,SAAc,EAAA;QAE/C,OAAO,IAAI,CAAC,cAAc;AACpB,aAAA,QAAQ,CAAC;YACR,SAAgB;SAChB,CACD;aACA,IAAI,CACJ,YAAY,CAAC,CAAC,KAA+B,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC,CAC/G,CAAC;KACP;AACD;;MC1BqB,MAAM,CAAA;AAEV,IAAA,QAAQ,CAAI;AAE7B,IAAA,WAAA,CAAsB,EAAK,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACnB;IAED,KAAK,GAAA;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC;KACrB;AAED,IAAA,MAAM,CAAC,MAAiB,EAAA;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;KAC5C;AAED;;AChBK,MAAgB,QAAqB,SAAQ,QAAW,CAAA;AAE7D;;ACJK,SAAU,WAAW,CAAC,OAAiB,EAAA;AAC7C,CAAC;AAEK,SAAU,YAAY,CAAC,OAAiB,EAAA;AAC9C,CAAC;AAEK,SAAU,eAAe,CAAC,OAAiB,EAAA;AACjD;;MCPsB,aAAa,CAAA;AAClC;;SCCe,WAAW,GAAA;AAC1B,IAAA,OAAO,IAAI,gBAAgB,CAAI,MAAK;AACpC,KAAC,CAAC,CAAC;AACJ;;ACFM,SAAU,cAAc,CAAC,QAAgB,EAAA;IAE9C,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,IAAA,OAAO,IAAI,gBAAgB,CAAS,CAAC,QAAgC,KAAI;AAExE,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,MAAK;AAC3B,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SACzB,EAAE,QAAQ,CAAC,CAAC;AAEb,QAAA,OAAO,MAAK;YACX,aAAa,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,SAAC,CAAC;AACH,KAAC,CAAC,CAAC;AACJ;;ACfM,SAAU,WAAW,CAAC,IAAY,EAAA;AAEvC,IAAA,OAAO,IAAI,gBAAgB,CAAS,CAAC,QAAgC,KAAI;AAExE,QAAA,MAAM,EAAE,GAAG,UAAU,CAAC,MAAK;AAC1B,YAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB,EAAE,IAAI,CAAC,CAAC;AAET,QAAA,OAAO,MAAK;YACX,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,SAAC,CAAC;AACH,KAAC,CAAC,CAAC;AACJ;;ACZgB,SAAA,eAAe,CAAC,OAAoB,EAAE,IAAe,EAAA;AAEpE,IAAA,OAAO,IAAI,gBAAgB,CAAM,CAAC,QAAQ,KAAI;AAE7C,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAY,KAAI;AACjC,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtB,SAAC,CAAC;AAEF,QAAA,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAEzC,QAAA,OAAO,MAAK;AACX,YAAA,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7C,SAAC,CAAC;AACH,KAAC,CAAC,CAAC;AACJ;;AChBM,SAAU,gBAAgB,CAAI,KAAU,EAAA;AAE7C,IAAA,OAAO,IAAI,gBAAgB,CAAI,QAAQ,IAAG;AACzC,QAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC,CAAC;AACJ;;ACHM,SAAU,UAAU,CAAI,YAAoB,EAAA;IAEjD,OAAO,CAAC,MAAM,KAAI;AAEjB,QAAA,OAAO,IAAI,gBAAgB,CAAC,QAAQ,IAAG;YAEtC,IAAI,KAAK,GAAG,CAAC,CAAC;YAEd,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;gBAC5D,IAAI,KAAK,IAAI,YAAY,EAAE;AAC1B,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,iBAAA;AAED,gBAAA,KAAK,EAAE,CAAC;AACT,aAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;ACjBM,SAAU,eAAe,CAAO,SAA4C,EAAA;IAEjF,OAAO,CAAC,MAA2B,KAAI;AACtC,QAAA,OAAO,IAAI,gBAAgB,CAAI,CAAC,QAA6B,KAAI;YAEhE,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,eAAe,GAA+B,IAAI,CAAC;AAEvD,YAAA,MAAM,aAAa,GAAG,YAAA;AACrB,gBAAA,IAAI,gBAAgB,IAAI,CAAC,eAAe,EAAE;oBACzC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACpB,iBAAA;AACF,aAAC,CAAC;YAEF,MAAM,eAAe,GAAG,qBAAqB,CAC5C,QAAQ,EACR,CAAC,CAAI,KAAI;AAER,gBAAA,IAAI,eAAe,EAAE;oBACpB,eAAe,CAAC,WAAW,EAAE,CAAC;AAC9B,iBAAA;AAED,gBAAA,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC;oBACvC,IAAI,EAAE,CAAC,EAAO,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,KAAK,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBACpC,QAAQ,EAAE,MAAK;wBACd,eAAe,GAAG,IAAI,CAAC;AACvB,wBAAA,aAAa,EAAE,CAAC;qBAChB;AACD,iBAAA,CAAC,CAAC;gBAEH,eAAe,GAAG,UAAU,CAAC;gBAE7B,MAAM,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAC/C,UAAU,CACV,CAAC;AAEF,gBAAA,OAAO,iBAAiB,CAAC,WAAW,EAAE,CAAC;aACvC,EACD,MAAK;gBACJ,gBAAgB,GAAG,IAAI,CAAC;AACxB,gBAAA,aAAa,EAAE,CAAC;AACjB,aAAC,CACD,CAAC;YAEF,OAAO,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;AACxD,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;ACnDM,SAAU,SAAS,CAAI,SAA6B,EAAA;IACzD,OAAO,CAAC,MAAM,KAAI;AACjB,QAAA,OAAO,IAAI,gBAAgB,CAAC,QAAQ,IAAG;YAEtC,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAI;gBAC5D,SAAS,CAAC,KAAK,CAAC,CAAC;AACjB,gBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtB,aAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;SCXgB,aAAa,GAAA;IAE5B,OAAO,CAAC,MAA2B,KAAI;AACtC,QAAA,OAAO,IAAI,gBAAgB,CAAW,CAAC,QAAQ,KAAI;YAElD,MAAM,MAAM,GAAa,EAAE,CAAC;YAE5B,MAAM,UAAU,GACf,qBAAqB,CACpB,QAAQ,EACR,CAAC,KAAQ,KAAI;AACZ,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACnB,EACD,MAAK;AACJ,gBAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,oBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,iBAAA;gBACD,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,aAAC,CACD,CAAC;YAEH,OAAO,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,SAAC,CAAC,CAAC;AACJ,KAAC,CAAC;AACH;;ACzBM,SAAU,kBAAkB,CAAI,OAAsB,EAAA;AAC3D,IAAA,OAAO,IAAI,gBAAgB,CAAC,CAAC,QAAQ,KAAI;AACxC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CACrC,CAAC,KAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAClC,CAAC,KAAU,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EACrC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CACzB,CAAC;AACF,QAAA,OAAO,MAAM,YAAY,CAAC,WAAW,EAAE,CAAC;AACzC,KAAC,CAAC,CAAC;AACJ;;MCRsB,OAAO,CAAA;AAEX,IAAA,QAAQ,CAA0B;AAEnD,IAAA,WAAA,CAAsB,KAAS,EAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;KAC/C;IAED,EAAE,GAAA;QACD,OAAO,IAAI,CAAC,QAAQ;AACd,aAAA,YAAY,EAAE;aACd,IAAI,CACJ,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CACxC,CAAC;KACP;AAED,IAAA,IAAI,CAAC,KAAQ,EAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC1B;IAED,OAAO,CAAC,GAAM,EAAE,GAAM,EAAA;QACrB,OAAO,GAAG,KAAK,GAAG,CAAC;KACnB;AACD;;MC3BY,iBAAiB,CAAA;AAE7B,IAAA,OAAO,KAAK,GAAG,CAAC,CAAC;AAEjB,IAAA,OAAO,QAAQ,GAAA;QACd,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC,KAAK,CAAC;KAC/B;;;MCLoB,aAAa,CAAA;AAEjB,IAAA,eAAe,CAAI;AAEpC,IAAA,WAAA,CAAsB,GAAM,EAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;KAC3B;IAED,kBAAkB,GAAA;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC5B;IAED,KAAK,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,CAAC;KAC5C;AAED;;MCZqB,iBAAiB,CAAA;AAErB,IAAA,KAAK,GAAmB,IAAI,GAAG,EAAE,CAAC;AAEnD,IAAA,GAAG,CAAC,MAAS,EAAA;AACZ,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;KACvC;AAED,IAAA,OAAO,CAAC,OAAiB,EAAA;AACxB,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAS,KAAI;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAClB,SAAC,CAAC,CAAC;KACH;AAED,IAAA,GAAG,CAAC,WAAwB,EAAA;AAC3B,QAAA,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM,GAAA;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KACvC;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KACnB;AACD;;ACrBK,MAAgB,qBAEO,SAAQ,cAAoB,CAAA;AAEjB,IAAA,UAAA,CAAA;AAAvC,IAAA,WAAA,CAAuC,UAAmC,EAAA;AACzE,QAAA,KAAK,EAAE,CAAC;QAD8B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;KAEzE;AAID,IAAA,OAAO,CAAC,WAAwB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAClC;IAED,MAAM,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC3B;IAEO,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,UAAU;AAChB,aAAA,MAAM,EAAE;AACR,aAAA,GAAG,CAAC,CAAC,MAAS,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;KACnD;AAEO,IAAA,QAAQ,CAAC,WAAwB,EAAA;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEnD,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACvC;AAED;;AC3BK,MAAgB,qBACrB,SAAQ,cAAoB,CAAA;AAIW,IAAA,UAAA,CAAA;AAFtB,IAAA,sBAAsB,GAA2B,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAEhH,IAAA,WAAA,CAAuC,UAAqC,EAAA;AAC3E,QAAA,KAAK,EAAE,CAAC;QAD8B,IAAU,CAAA,UAAA,GAAV,UAAU,CAA2B;AAE3E,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3C;AAMD,IAAA,IAAI,CAAC,SAAY,EAAA;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAC1B;AAED,IAAA,QAAQ,CAAC,WAAc,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAClC;AAEO,IAAA,SAAS,CAAC,SAAY,EAAA;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAExC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAC5B;AAEO,IAAA,QAAQ,CAAC,WAAc,EAAA;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAEnD,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACtC;AAED;;ACrCK,MAAgB,sBAA0E,SAAQ,cAAoB,CAAA;AAIpF,IAAA,aAAA,CAAA;AAFtB,IAAA,sBAAsB,GAA2B,aAAa,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAEhH,IAAA,WAAA,CAAuC,aAAkC,EAAA;AACxE,QAAA,KAAK,EAAE,CAAC;QAD8B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqB;AAExE,QAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3C;AAID,IAAA,IAAI,CAAC,GAAiB,EAAA;AAErB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,GAAG,CAAC,OAAO,CAAC,CAAC,SAAY,KAAI;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACnC,aAAC,CAAC,CAAC;AACH,SAAA;AAAM,aAAA;YACN,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAClC,SAAA;KACD;AAED,IAAA,QAAQ,CAAC,WAAc,EAAA;QAEtB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAEzD,QAAA,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAE/C,QAAA,OAAO,YAAY,CAAC;KACpB;AAED,IAAA,MAAM,CAAC,WAAc,EAAA;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;KACvC;AAED;;ACpCK,MAAgB,sBAGO,SAAQ,cAAoB,CAAA;AAEjB,IAAA,aAAA,CAAA;AAAvC,IAAA,WAAA,CAAuC,aAAkC,EAAA;AACxE,QAAA,KAAK,EAAE,CAAC;QAD8B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqB;KAExE;AAID,IAAA,OAAO,CAAC,WAAc,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAClC;AAEO,IAAA,QAAQ,CAAC,WAAc,EAAA;QAE9B,MAAM,YAAY,GAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAEtE,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACrD;AAED;;MC9BqB,aAAa,CAAA;AAEjB,IAAA,KAAK,GAAmB,IAAI,GAAG,EAAE,CAAC;AAEnD,IAAA,GAAG,CAAC,SAAY,EAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;KACxD;AAED,IAAA,OAAO,CAAC,UAAoB,EAAA;AAC3B,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAY,KAAI;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACrB,SAAC,CAAC,CAAC;KACH;AAED,IAAA,GAAG,CAAC,WAAc,EAAA;AACjB,QAAA,OAAO,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM,GAAA;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAChE;AAED,IAAA,GAAG,CAAC,WAAc,EAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC9C;AAED,IAAA,MAAM,CAAC,WAAc,EAAA;QACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC1C;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KACnB;AAED;;ACzBe,SAAA,kBAAkB,CAAwB,YAA2C,EAAE,cAAqC,EAAA;AAE3I,IAAA,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAE3D,IAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;QAEvC,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,KAAqB,KAAI;AACnE,YAAA,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;;AAE7D,QAAA,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,mCAAmC,CAAC,CAAC;AAC1G,KAAA;AAEF,CAAC;AAEe,SAAA,qBAAqB,CAAwB,YAA8C,EAAE,cAAwC,EAAA;AAEpJ,IAAA,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAE/E,IAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;QAEvC,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,KAAwB,KAAI;AACtE,YAAA,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,KAAA;AACF,CAAC;AAEe,SAAA,iCAAiC,CAAI,YAAuC,EAAE,IAAY,EAAA;IAEzG,EAAE,CAAC,eAAe,GAAG,IAAI,GAAG,kBAAkB,EAAE,MAAK;AAEpD,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;QAGrB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,EACvB,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,EACnB,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;;AAGxB,QAAA,YAAY,EAAE;aACZ,SAAS,CACT,MAAM,MAAM,EAAE,EACd,CAAC,GAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1B,MAAM,UAAU,EAAE,CAClB,CAAC;;QAGH,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC3C,KAAC,CAAC,CAAC;AACJ,CAAC;SAEe,4BAA4B,CAAI,YAAuC,EAAE,YAAe,EAAE,IAAY,EAAA;AAErH,IAAA,EAAE,CAAC,4BAA4B,GAAG,IAAI,EAAE,MAAK;AAE5C,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;QAGrB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,EACvB,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,EACnB,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;;AAGxB,QAAA,YAAY,EAAE;aACZ,SAAS,CACT,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EACxB,CAAC,GAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1B,MAAM,UAAU,EAAE,CAClB,CAAC;;QAGH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC3C,KAAC,CAAC,CAAC;AACJ,CAAC;SAEe,8BAA8B,CAAI,YAAuC,EAAE,YAAe,EAAE,IAAY,EAAA;AAEvH,IAAA,EAAE,CAAC,4BAA4B,GAAG,IAAI,EAAE,MAAK;AAE5C,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;QAGrB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,EACvB,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,EACnB,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;;AAGxB,QAAA,YAAY,EAAE;aACZ,SAAS,CACT,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EACxB,CAAC,GAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1B,MAAM,UAAU,EAAE,CAClB,CAAC;;QAGH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC7C,KAAC,CAAC,CAAC;AACJ,CAAC;AAEe,SAAA,gBAAgB,CAAI,YAAuC,EAAE,IAAY,EAAA;AAExF,IAAA,EAAE,CAAC,kBAAkB,GAAG,IAAI,EAAE,MAAK;AAElC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;QAGrB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,EACvB,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,EACnB,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;;AAGxB,QAAA,YAAY,EAAE;aACZ,SAAS,CACT,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EACxB,CAAC,GAAQ,KAAK,OAAO,CAAC,GAAG,CAAC,EAC1B,MAAM,UAAU,EAAE,CAClB,CAAC;;QAGH,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC3C,KAAC,CAAC,CAAC;AACJ,CAAC;SAEe,8BAA8B,CAAI,WAA8B,EAAE,YAAe,EAAE,IAAY,EAAA;AAE9G,IAAA,EAAE,CAAC,2BAA2B,GAAG,IAAI,EAAE,YAAA;AAEtC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAErB,QAAA,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1D,KAAC,CAAC,CAAC;AACJ,CAAC;AAGe,SAAA,+BAA+B,CAAC,QAAoB,EAAE,WAAgB,EAAA;AAErF,IAAA,EAAE,CAAC,gCAAgC,EAAE,MAAK;AAEzC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;AAGrB,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,EACjD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;;AAG5C,QAAA,QAAQ,EAAE,CAAC;;AAGX,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;AACvC,KAAC,CAAC,CAAC;AACJ,CAAC;AAEe,SAAA,uBAAuB,CAAC,QAAoB,EAAE,SAAc,EAAA;AAE3E,IAAA,EAAE,CAAC,uBAAuB,EAAE,MAAK;AAEhC,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;AAGrB,QAAA,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC;AAChC,aAAA,SAAS,CAAC,CAAC,KAAU,KAAI;;YAGzB,IAAI,KAAK,YAAY,SAAS,EAAE;gBAC/B,MAAM,CAAC,KAAK,YAAY,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjD,aAAA;AACF,SAAC,CAAC,CAAC;;AAGP,QAAA,QAAQ,EAAE,CAAC;AACZ,KAAC,CAAC,CAAC;AACJ,CAAC;SAEe,yCAAyC,CAAC,QAAoB,EAAE,WAAgB,EAAE,SAAc,EAAA;AAE/G,IAAA,+BAA+B,CAC9B,QAAQ,EACR,WAAW,CACX,CAAC;AAEF,IAAA,uBAAuB,CACtB,QAAQ,EACR,SAAS,CACT,CAAC;AACH;;ACjNM,MAAgB,sBAAuB,SAAQ,OAAoB,CAAA;IAExE,WAAsB,CAAA,WAAwB,EACvC,IAAY,EAAA;AAClB,QAAA,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KACzB;AAED;;ACJM,MAAM,SAAS,GAAG,WAAW,CAAC;SAErB,aAAa,GAAA;AAE5B,IAAA,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,EAC9C,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAK;QAChB,OAAO;YACN,IAAI,OAAO,CAAC,OAAgB,EAAA;AAC3B,gBAAA,IAAI,OAAO,EAAE;;;AAGZ,iBAAA;AAAM,qBAAA;;;AAGN,iBAAA;aACD;YACD,IAAI,MAAM,CAAC,UAAkB,EAAA;AAC5B,gBAAA,IAAI,UAAU,EAAE;AACf,oBAAA,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACzB,oBAAA,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC1B,iBAAA;aACD;SACD,CAAC;AACH,KAAC,CAAC;AAEF,IAAA,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC;AAE1B,IAAA,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AACnC;;AChCgB,SAAA,mBAAmB,CAAC,UAAmB,EAAE,YAAqB,EAAA;IAE7E,MAAM,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;AAEpD,IAAA,IAAI,UAAU,EAAE;AACf,QAAA,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;AACtC,KAAA;AAED,IAAA,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;AAClC,CAAC;AAEK,SAAU,oBAAoB,CAAC,YAAqB,EAAA;IAEzD,MAAM,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,CAAC;AAEpD,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;AAEhC,IAAA,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;AACnC;;ACXgB,SAAA,oCAAoC,CACnD,6BAA+D,EAC/D,aAAqB,EAAA;AAGrB,IAAA,OAAO,IAAI,iCAAiC,CAC3C,6BAA6B,EAC7B,aAAa,CACb,CAAC;AACH,CAAC;MAEY,iCAAiC,CAAA;AAUhB,IAAA,6BAAA,CAAA;AACT,IAAA,aAAA,CAAA;AATH,IAAA,uBAAuB,GAAkC,aAAa,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAExG,IAAA,0BAA0B,GAAqC,aAAa,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAEjH,IAAA,oBAAoB,GAAyB,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEzF,IAAA,WAAW,CAAS;IAErC,WAA6B,CAAA,6BAA+D,EACxE,aAAqB,EAAA;QADZ,IAA6B,CAAA,6BAAA,GAA7B,6BAA6B,CAAkC;QACxE,IAAa,CAAA,aAAA,GAAb,aAAa,CAAQ;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,cAAc,EAAE,CAAC;KACjE;AAED,IAAA,aAAa,CAAC,OAAU,EAAA;AACvB,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAO,CAAC;AAElD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAExE,QAAA,UAAU,CAAC,SAAS,CAAC,CAAC,OAA+B,KAAI;YAExD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAE9C,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,EAC/B,wBAAwB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YAEpD,MAAM,aAAa,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAEtE,YAAA,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAElC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAE9E,YAAA,aAAa,CAAC,SAAS,CAAC,CAAC,IAA+B,KAAI;AAE3D,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAErB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC3D,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KAEH;AAED,IAAA,UAAU,CAAC,OAAU,EAAA;QACpB,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;KACrD;IAEO,qBAAqB,GAAA;AAC5B,QAAA,MAAM,IAAI,GAAgB,EAAE,EAC3B,cAAc,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;QAErF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,QAAQ,KAAK,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAU,GAAE,EAAE;AACxE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,KAAK,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/E,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,KAAK,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACxF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,KAAK,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACjG,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,KAAK,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC1G,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,KAAK,IAAI,CAAC,6BAA6B,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACnH,SAAA;AAAM,aAAA;AACN,YAAA,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;AAClF,SAAA;KACD;AAED;;AClFe,SAAA,qBAAqB,CACpC,cAAoC,EACpC,aAAqB,EAAA;AAErB,IAAA,OAAO,IAAI,kBAAkB,CAAU,cAAc,EAAE,aAAa,CAAC,CAAC;AACvE,CAAC;MAEY,kBAAkB,CAAA;AAQD,IAAA,cAAA,CAAA;AACT,IAAA,aAAA,CAAA;AAPH,IAAA,0BAA0B,GAAqC,aAAa,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAEjH,IAAA,oBAAoB,GAAyB,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEzF,IAAA,WAAW,CAAS;IAErC,WAA6B,CAAA,cAAoC,EAC7C,aAAqB,EAAA;QADZ,IAAc,CAAA,cAAA,GAAd,cAAc,CAAsB;QAC7C,IAAa,CAAA,aAAA,GAAb,aAAa,CAAQ;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,cAAc,EAAE,CAAC;KACjE;IAED,mBAAmB,CAAC,SAAY,EAAE,OAAU,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChD,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC1D,SAAA;KACD;AAED,IAAA,aAAa,CAAC,OAAU,EAAA;AAEvB,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAO,CAAC;AAElD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAE9E,QAAA,aAAa,CAAC,SAAS,CAAC,CAAC,IAA+B,KAAI;YAE3D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAEhD,YAAA,YAAY,CAAC,SAAS,CAAC,CAAC,SAAY,KAAI;gBAEvC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAE/C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9C,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KACH;AAED,IAAA,UAAU,CAAC,OAAU,EAAA;QACpB,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;KACrD;IAEO,qBAAqB,GAAA;AAC5B,QAAA,MAAM,IAAI,GAAgB,EAAE,EAC3B,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;QAEtE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAU,GAAE,EAAE;AACzD,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACzE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAClF,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3F,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,EAAU,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACpG,SAAA;AAAM,aAAA;AACN,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACnE,SAAA;KACD;AAED;;AC7EK,SAAU,kCAAkC,CACjD,sBAAgD,EAAA;AAEhD,IAAA,OAAO,aAAa,CAAC,OAAO,CAAC,sBAA6B,CAAC,CAAC;AAC7D,CAAC;AAEK,SAAU,yBAAyB,CACxC,kBAA4C,EAAA;AAE5C,IAAA,OAAO,IAAI,sBAAsB,CAAO,kBAAkB,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC9F,CAAC;AAGK,SAAU,8BAA8B,CAC7C,kBAAiD,EAAA;IAEjD,OAAO,IAAI,sBAAsB,CAAO,kBAAkB,EAAE,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC;AAC7F,CAAC;MAGY,sBAAsB,CAAA;AAIL,IAAA,kBAAA,CAAA;AACT,IAAA,MAAA,CAAA;AAHH,IAAA,UAAU,CAAgB;IAE3C,WAA6B,CAAA,kBAA4E,EACrF,MAAiC,EAAA;QADxB,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAA0D;QACrF,IAAM,CAAA,MAAA,GAAN,MAAM,CAA2B;AACpD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAChD;AAED,IAAA,WAAW,CAAC,KAAQ,EAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACtC;AAED,IAAA,SAAS,CAAC,MAAgB,EAAA;AACzB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAQ,KAAI;YAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAY,KAAI;AAC5C,gBAAA,OAAO,IAAI,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC;AACxC,aAAC,CAAC,CAAC;AACJ,SAAC,CAAC,CAAC;KACH;IAEO,sBAAsB,GAAA;QAE7B,MAAM,KAAK,GAAG,EAAE,CAAC;AAEjB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;AACtC,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACb;AAEO,IAAA,yBAAyB,CAAC,SAA6B,EAAA;QAC9D,MAAM,IAAI,GAAgB,EAAE,EAC3B,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,QAAQ,IAAK,SAAiB,EAAE,EAAE;AAClC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,IAAK,SAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACzC,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,IAAK,SAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAClD,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,IAAK,SAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3D,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,QAAQ,IAAK,SAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACpE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,QAAQ,IAAK,SAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7E,SAAA;AAAM,aAAA;AACN,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACnE,SAAA;KACD;AAGD;;MC5BY,iBAAiB,CAAA;AAMA,IAAA,GAAA,CAAA;AACT,IAAA,MAAA,CAAA;IALH,SAAS,GAAc,aAAa,CAAC;IAE9C,WAAW,GAAG,KAAK,CAAC;IAE5B,WAA6B,CAAA,GAAiB,EAC1B,MAAuB,EAAA;QADd,IAAG,CAAA,GAAA,GAAH,GAAG,CAAc;QAC1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAiB;KAC1C;IAED,IAAI,GAAA;QAEH,IAAI,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;AACP,SAAA;QAGD,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAElC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACxB;IAEO,eAAe,GAAA;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;AAEjD,QAAA,IAAI,UAAU,EAAE;YACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;AAC9E,YAAA,IAAI,CAAC,SAAS,CAAC,sBAAsB,CACpC,wBAAwB,EACxB;gBACC,GAAG,EAAE,UAAU,CAAC,YAAY;gBAC5B,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;AACjC,aAAA,CACD,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,SAAS,CAAC,wBAAwB,CACtC,iCAAiC,EACjC;AACC,gBAAA,MAAM,EAAE,oCAAoC;AAC5C,gBAAA,IAAI,EAAE;AACL,oBAAA,UAAU,CAAC,oBAAoB;AAC/B,oBAAA,UAAU,CAAC,YAAY;AACvB,iBAAA;AACD,aAAA,CACD,CAAC;AACF,SAAA;KACD;IAEO,oBAAoB,GAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC3C;IAEO,uBAAuB,GAAA;QAC9B,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC9C;IAEO,uBAAuB,GAAA;AAC9B,QAAA,IAAI,CAAC,MAAM;AACT,aAAA,uBAAuB,EAAE;AACzB,aAAA,OAAO,CAAC,CAAC,EAAE,KAAI;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,wBAAwB,CACtC,gBAAgB,EAChB;AACC,gBAAA,MAAM,EAAE,qBAAqB;AAC7B,gBAAA,IAAI,EAAE;oBACL,EAAE;oBACF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC,iBAAA;AACD,aAAA,CACD,CAAC;AACH,SAAC,CAAC,CAAC;KACJ;IAEO,qBAAqB,GAAA;AAC5B,QAAA,IAAI,CAAC,MAAM;AACT,aAAA,0BAA0B,EAAE;AAC5B,aAAA,OAAO,CAAC,CAAC,EAAE,KAAI;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,wBAAwB,CACtC,qBAAqB,EACrB;AACC,gBAAA,MAAM,EAAE,yBAAyB;AACjC,gBAAA,IAAI,EAAE;oBACL,EAAE;AACF,iBAAA;AACD,aAAA,CACD,CAAC;AACH,SAAC,CAAC,CAAC;KACJ;IAEO,0BAA0B,GAAA;AACjC,QAAA,IAAI,CAAC,MAAM;AACT,aAAA,+BAA+B,EAAE;AACjC,aAAA,OAAO,CAAC,CAAC,EAAE,KAAI;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,wBAAwB,CACtC,qBAAqB,EACrB;AACC,gBAAA,MAAM,EAAE,8BAA8B;AACtC,gBAAA,IAAI,EAAE;oBACL,EAAE;AACF,iBAAA;AACD,aAAA,CACD,CAAC;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;AC/KD;;AAEG;;;;"}